diff options
author | John Spurlock <jspurlock@google.com> | 2014-07-22 12:18:09 -0400 |
---|---|---|
committer | John Spurlock <jspurlock@google.com> | 2014-07-22 12:24:37 -0400 |
commit | 657c62c31ecdade22f67f13102c2fb19765cbe13 (patch) | |
tree | d0dd3d8be78125aa35e497c71129e871268e0ac7 /packages/SystemUI/src/com/android | |
parent | 70441467f4dc232cd8e6142f0afc117787dc979b (diff) | |
download | frameworks_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')
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 |