summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/qs
diff options
context:
space:
mode:
authorAdrian Roos <roosa@google.com>2014-07-14 22:53:54 +0200
committerAdrian Roos <roosa@google.com>2014-07-15 15:43:31 +0200
commit1ef80fe5905a19cf92f073163c187a96287335e4 (patch)
tree822525402096d76e87d3d739754ff7e1e9d8f2ce /packages/SystemUI/src/com/android/systemui/qs
parent5f1652c285e3842242909090956ab532fa3d801c (diff)
downloadframeworks_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.java83
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetail.java78
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) {
+ }
+ };
+}