summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2014-07-22 12:18:09 -0400
committerJohn Spurlock <jspurlock@google.com>2014-07-22 12:24:37 -0400
commit657c62c31ecdade22f67f13102c2fb19765cbe13 (patch)
treed0dd3d8be78125aa35e497c71129e871268e0ac7 /packages/SystemUI/src/com/android
parent70441467f4dc232cd8e6142f0afc117787dc979b (diff)
downloadframeworks_base-657c62c31ecdade22f67f13102c2fb19765cbe13.zip
frameworks_base-657c62c31ecdade22f67f13102c2fb19765cbe13.tar.gz
frameworks_base-657c62c31ecdade22f67f13102c2fb19765cbe13.tar.bz2
QS: Hide Location, Cast tiles when showing secure keyguard.
Bug:15725186 Bug:15725223 Change-Id: I7c23d8c764f5712ee31d248f4d8fc6d35d0add97
Diffstat (limited to 'packages/SystemUI/src/com/android')
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSTile.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java56
6 files changed, 102 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index fc08cf4..d70da2a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -30,6 +30,7 @@ import com.android.systemui.qs.QSTile.State;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.FlashlightController;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.Listenable;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
@@ -244,16 +245,16 @@ public abstract class QSTile<TState extends State> implements Listenable {
void collapsePanels();
Looper getLooper();
Context getContext();
+ List<QSTile<?>> getTiles();
BluetoothController getBluetoothController();
LocationController getLocationController();
RotationLockController getRotationLockController();
- List<QSTile<?>> getTiles();
NetworkController getNetworkController();
ZenModeController getZenModeController();
TetheringController getTetheringController();
CastController getCastController();
- VolumeComponent getVolumeComponent();
FlashlightController getFlashlightController();
+ KeyguardMonitor getKeyguardMonitor();
}
public static class State {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index ab952c6..531ac31 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -30,6 +30,7 @@ import com.android.systemui.qs.QSDetailItems.Item;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import java.util.LinkedHashMap;
import java.util.Set;
@@ -41,11 +42,14 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
private final CastController mController;
private final CastDetailAdapter mDetailAdapter;
+ private final KeyguardMonitor mKeyguard;
+ private final Callback mCallback = new Callback();
public CastTile(Host host) {
super(host);
mController = host.getCastController();
mDetailAdapter = new CastDetailAdapter();
+ mKeyguard = host.getKeyguardMonitor();
}
@Override
@@ -64,9 +68,11 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
if (DEBUG) Log.d(TAG, "setListening " + listening);
if (listening) {
mController.addCallback(mCallback);
+ mKeyguard.addCallback(mCallback);
} else {
mController.setDiscovering(false);
mController.removeCallback(mCallback);
+ mKeyguard.removeCallback(mCallback);
}
}
@@ -84,7 +90,7 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
- state.visible = true;
+ state.visible = !(mKeyguard.isSecure() && mKeyguard.isShowing());
state.label = mContext.getString(R.string.quick_settings_cast_title);
state.value = false;
final Set<CastDevice> devices = mController.getCastDevices();
@@ -109,11 +115,16 @@ public class CastTile extends QSTile<QSTile.BooleanState> {
: mContext.getString(R.string.quick_settings_cast_device_default_name);
}
- private final CastController.Callback mCallback = new CastController.Callback() {
+ private final class Callback implements CastController.Callback, KeyguardMonitor.Callback {
@Override
public void onCastDevicesChanged() {
refreshState();
}
+
+ @Override
+ public void onKeyguardChanged() {
+ refreshState();
+ }
};
private final class CastDetailAdapter implements DetailAdapter, QSDetailItems.Callback {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 04f1eb5..c4dd643 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.LocationController.LocationSettingsChangeCallback;
@@ -25,10 +26,13 @@ import com.android.systemui.statusbar.policy.LocationController.LocationSettings
public class LocationTile extends QSTile<QSTile.BooleanState> {
private final LocationController mController;
+ private final KeyguardMonitor mKeyguard;
+ private final Callback mCallback = new Callback();
public LocationTile(Host host) {
super(host);
mController = host.getLocationController();
+ mKeyguard = host.getKeyguardMonitor();
}
@Override
@@ -40,8 +44,10 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
public void setListening(boolean listening) {
if (listening) {
mController.addSettingsChangedCallback(mCallback);
+ mKeyguard.addCallback(mCallback);
} else {
mController.removeSettingsChangedCallback(mCallback);
+ mKeyguard.removeCallback(mCallback);
}
}
@@ -59,7 +65,7 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
final boolean locationEnabled = mController.isLocationEnabled();
- state.visible = true;
+ state.visible = !(mKeyguard.isSecure() && mKeyguard.isShowing());
state.value = locationEnabled;
if (locationEnabled) {
state.iconId = R.drawable.ic_qs_location_on;
@@ -76,10 +82,16 @@ public class LocationTile extends QSTile<QSTile.BooleanState> {
}
}
- private final LocationSettingsChangeCallback mCallback = new LocationSettingsChangeCallback() {
+ private final class Callback implements LocationSettingsChangeCallback,
+ KeyguardMonitor.Callback {
@Override
public void onLocationSettingsChanged(boolean enabled) {
refreshState();
}
+
+ @Override
+ public void onKeyguardChanged() {
+ refreshState();
+ }
};
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 86bb202..2f96e3e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -130,6 +130,7 @@ import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
import com.android.systemui.statusbar.policy.CastControllerImpl;
import com.android.systemui.statusbar.policy.FlashlightController;
import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.LocationControllerImpl;
@@ -212,6 +213,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
KeyguardUserSwitcher mKeyguardUserSwitcher;
FlashlightController mFlashlightController;
UserSwitcherController mUserSwitcherController;
+ KeyguardMonitor mKeyguardMonitor;
int mNaturalBarHeight = -1;
int mIconSize = -1;
@@ -749,6 +751,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mFlashlightController = new FlashlightController(mContext);
mUserSwitcherController = new UserSwitcherController(mContext);
+ mKeyguardMonitor = new KeyguardMonitor();
// Set up the quick settings tile panel
mQSPanel = (QSPanel) mStatusBarWindow.findViewById(R.id.quick_settings_panel);
@@ -756,8 +759,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
final QSTileHost qsh = new QSTileHost(mContext, this,
mBluetoothController, mLocationController, mRotationLockController,
mNetworkController, mZenModeController, null /*tethering*/,
- mCastController, mVolumeComponent, mFlashlightController,
- mUserSwitcherController);
+ mCastController, mFlashlightController,
+ mUserSwitcherController, mKeyguardMonitor);
mQSPanel.setHost(qsh);
for (QSTile<?> tile : qsh.getTiles()) {
mQSPanel.addTile(tile);
@@ -3207,6 +3210,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
checkBarModes();
updateCarrierLabelVisibility(false);
updateMediaMetaData(false);
+ mKeyguardMonitor.notifyKeyguardState(mStatusBarKeyguardViewManager.isShowing(),
+ mStatusBarKeyguardViewManager.isSecure());
}
private void updateDozingState() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
index b74aab7..378b531 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
@@ -36,13 +36,13 @@ import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.FlashlightController;
+import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.RotationLockController;
import com.android.systemui.statusbar.policy.TetheringController;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.ZenModeController;
-import com.android.systemui.volume.VolumeComponent;
import java.util.ArrayList;
import java.util.List;
@@ -61,17 +61,17 @@ public class QSTileHost implements QSTile.Host {
private final CastController mCast;
private final Looper mLooper;
private final CurrentUserTracker mUserTracker;
- private final VolumeComponent mVolume;
private final ArrayList<QSTile<?>> mTiles = new ArrayList<QSTile<?>>();
private final FlashlightController mFlashlight;
private final UserSwitcherController mUserSwitcherController;
+ private final KeyguardMonitor mKeyguard;
public QSTileHost(Context context, PhoneStatusBar statusBar,
BluetoothController bluetooth, LocationController location,
RotationLockController rotation, NetworkController network,
ZenModeController zen, TetheringController tethering,
- CastController cast, VolumeComponent volume, FlashlightController flashlight,
- UserSwitcherController userSwitcher) {
+ CastController cast, FlashlightController flashlight,
+ UserSwitcherController userSwitcher, KeyguardMonitor keyguard) {
mContext = context;
mStatusBar = statusBar;
mBluetooth = bluetooth;
@@ -81,9 +81,9 @@ public class QSTileHost implements QSTile.Host {
mZen = zen;
mTethering = tethering;
mCast = cast;
- mVolume = volume;
mFlashlight = flashlight;
mUserSwitcherController = userSwitcher;
+ mKeyguard = keyguard;
final HandlerThread ht = new HandlerThread(QSTileHost.class.getSimpleName());
ht.start();
@@ -177,13 +177,13 @@ public class QSTileHost implements QSTile.Host {
}
@Override
- public VolumeComponent getVolumeComponent() {
- return mVolume;
+ public FlashlightController getFlashlightController() {
+ return mFlashlight;
}
@Override
- public FlashlightController getFlashlightController() {
- return mFlashlight;
+ public KeyguardMonitor getKeyguardMonitor() {
+ return mKeyguard;
}
public UserSwitcherController getUserSwitcherController() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java
new file mode 100644
index 0000000..0b3575f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardMonitor.java
@@ -0,0 +1,56 @@
+/*
+ * 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.statusbar.policy;
+
+import java.util.ArrayList;
+
+public final class KeyguardMonitor {
+
+ private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>();
+
+ private boolean mShowing;
+ private boolean mSecure;
+
+ public void addCallback(Callback callback) {
+ mCallbacks.add(callback);
+ }
+
+ public void removeCallback(Callback callback) {
+ mCallbacks.remove(callback);
+ }
+
+ public boolean isShowing() {
+ return mShowing;
+ }
+
+ public boolean isSecure() {
+ return mSecure;
+ }
+
+ public void notifyKeyguardState(boolean showing, boolean secure) {
+ if (mShowing == showing && mSecure == secure) return;
+ mShowing = showing;
+ mSecure = secure;
+ for (Callback callback : mCallbacks) {
+ callback.onKeyguardChanged();
+ }
+ }
+
+ public interface Callback {
+ void onKeyguardChanged();
+ }
+} \ No newline at end of file