diff options
author | Adrian Roos <roosa@google.com> | 2014-07-14 22:53:54 +0200 |
---|---|---|
committer | Adrian Roos <roosa@google.com> | 2014-07-15 15:43:31 +0200 |
commit | 1ef80fe5905a19cf92f073163c187a96287335e4 (patch) | |
tree | 822525402096d76e87d3d739754ff7e1e9d8f2ce /packages/SystemUI/src/com/android/systemui/qs | |
parent | 5f1652c285e3842242909090956ab532fa3d801c (diff) | |
download | frameworks_base-1ef80fe5905a19cf92f073163c187a96287335e4.zip frameworks_base-1ef80fe5905a19cf92f073163c187a96287335e4.tar.gz frameworks_base-1ef80fe5905a19cf92f073163c187a96287335e4.tar.bz2 |
Make user switcher appear inside the QS panel
Bug: 15545213
Change-Id: I0f15214a7474ae5303c3af0b7ef6f6a11be572b8
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QSPanel.java | 83 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetail.java | 78 |
2 files changed, 137 insertions, 24 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 72474b8..5f09cbd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -34,6 +34,7 @@ import com.android.systemui.R; import com.android.systemui.qs.QSTile.DetailAdapter; import com.android.systemui.settings.BrightnessController; import com.android.systemui.settings.ToggleSlider; +import com.android.systemui.statusbar.phone.QSTileHost; import java.util.ArrayList; @@ -61,9 +62,10 @@ public class QSPanel extends ViewGroup { private boolean mExpanded; private boolean mListening; - private TileRecord mDetailRecord; + private Record mDetailRecord; private Callback mCallback; private BrightnessController mBrightnessController; + private QSTileHost mHost; public QSPanel(Context context) { this(context, null); @@ -89,12 +91,24 @@ public class QSPanel extends ViewGroup { mBrightnessController = new BrightnessController(getContext(), (ImageView) findViewById(R.id.brightness_icon), (ToggleSlider) findViewById(R.id.brightness_slider)); + + mDetailDoneButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + showDetail(false, mDetailRecord); + } + }); } public void setCallback(Callback callback) { mCallback = callback; } + public void setHost(QSTileHost host) { + mHost = host; + } + + public void updateResources() { final Resources res = mContext.getResources(); final int columns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns)); @@ -143,7 +157,13 @@ public class QSPanel extends ViewGroup { } } - private void showDetail(boolean show, TileRecord r) { + public void showDetailAdapter(boolean show, DetailAdapter adapter) { + Record r = new Record(); + r.detailAdapter = adapter; + showDetail(show, r); + } + + private void showDetail(boolean show, Record r) { mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0, r).sendToTarget(); } @@ -203,40 +223,52 @@ public class QSPanel extends ViewGroup { addView(r.tileView); } - private void handleShowDetail(TileRecord r, boolean show) { - if (r == null) return; - AnimatorListener listener = null; + private void handleShowDetail(Record r, boolean show) { + if (r instanceof TileRecord) { + handleShowDetailTile((TileRecord) r, show); + } else { + handleShowDetailImpl(r, show, getWidth() /* x */, 0/* y */); + } + } + + private void handleShowDetailTile(TileRecord r, boolean show) { + if ((mDetailRecord != null) == show) return; + if (show) { - if (mDetailRecord != null) return; // already showing something in detail r.detailAdapter = r.tile.getDetailAdapter(); if (r.detailAdapter == null) return; - mDetailRecord = r; - r.detailView = r.detailAdapter.createDetailView(mContext, r.detailView, mDetailContent); + } + int x = r.tileView.getLeft() + r.tileView.getWidth() / 2; + int y = r.tileView.getTop() + r.tileView.getHeight() / 2; + handleShowDetailImpl(r, show, x, y); + } + + private void handleShowDetailImpl(Record r, boolean show, int x, int y) { + if ((mDetailRecord != null) == show) return; // already in right state + DetailAdapter detailAdapter = null; + AnimatorListener listener = null; + if (show) { + detailAdapter = r.detailAdapter; + r.detailView = detailAdapter.createDetailView(mContext, r.detailView, mDetailContent); if (r.detailView == null) throw new IllegalStateException("Must return detail view"); - mDetailDoneButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - showDetail(false, mDetailRecord); - } - }); - final Intent settingsIntent = r.detailAdapter.getSettingsIntent(); + + final Intent settingsIntent = detailAdapter.getSettingsIntent(); mDetailSettingsButton.setVisibility(settingsIntent != null ? VISIBLE : GONE); mDetailSettingsButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - mDetailRecord.tile.mHost.startSettingsActivity(settingsIntent); + mHost.startSettingsActivity(settingsIntent); } }); + mDetailContent.removeAllViews(); mDetail.bringToFront(); mDetailContent.addView(r.detailView); + mDetailRecord = r; } else { - if (mDetailRecord == null) return; listener = mTeardownDetailWhenDone; } - fireShowingDetail(show ? r.detailAdapter : null); - int x = r.tileView.getLeft() + r.tileView.getWidth() / 2; - int y = r.tileView.getTop() + r.tileView.getHeight() / 2; + fireShowingDetail(show ? detailAdapter : null); mClipper.animateCircularClip(x, y, show, listener); } @@ -339,18 +371,21 @@ public class QSPanel extends ViewGroup { @Override public void handleMessage(Message msg) { if (msg.what == SHOW_DETAIL) { - handleShowDetail((TileRecord)msg.obj, msg.arg1 != 0); + handleShowDetail((Record)msg.obj, msg.arg1 != 0); } else if (msg.what == SET_TILE_VISIBILITY) { handleSetTileVisibility((View)msg.obj, msg.arg1 != 0); } } } - private static final class TileRecord { - QSTile<?> tile; - QSTileView tileView; + private static class Record { View detailView; DetailAdapter detailAdapter; + } + + private static final class TileRecord extends Record { + QSTile<?> tile; + QSTileView tileView; int row; int col; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetail.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetail.java new file mode 100644 index 0000000..a9a2724 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetail.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.qs.tiles; + +import com.android.systemui.R; +import com.android.systemui.qs.QSTile; + +import android.content.Context; +import android.content.Intent; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +/** + * Quick settings detail view for user switching. + */ +public class UserDetail extends FrameLayout { + + static final Intent USER_SETTINGS_INTENT = new Intent("android.settings.USER_SETTINGS"); + + public UserDetail(Context context) { + this(context, null); + } + + public UserDetail(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public UserDetail(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public UserDetail(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public static QSTile.DetailAdapter USER_DETAIL_ADAPTER = new QSTile.DetailAdapter() { + @Override + public int getTitle() { + return R.string.quick_settings_user_title; + } + + @Override + public Boolean getToggleState() { + return null; + } + + @Override + public View createDetailView(Context context, View convertView, ViewGroup parent) { + return LayoutInflater.from(context).inflate(R.layout.qs_user_detail, parent, false); + } + + @Override + public Intent getSettingsIntent() { + return USER_SETTINGS_INTENT; + } + + @Override + public void setToggleState(boolean state) { + } + }; +} |