am 3b1186ca: am f0f5e78b: am e017f0d5: QS: Hide Location, Cast tiles when showing secure keyguard.

* commit '3b1186cad292e776e914f98a58fd8af5013dc773':
  QS: Hide Location, Cast tiles when showing secure keyguard.
This commit is contained in:
John Spurlock
2014-07-22 17:08:51 +00:00
committed by Android Git Automerger
6 changed files with 102 additions and 17 deletions

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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();
}
};
}

View File

@@ -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);
@@ -3205,6 +3208,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
checkBarModes();
updateCarrierLabelVisibility(false);
updateMediaMetaData(false);
mKeyguardMonitor.notifyKeyguardState(mStatusBarKeyguardViewManager.isShowing(),
mStatusBarKeyguardViewManager.isSecure());
}
private void updateDozingState() {

View File

@@ -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() {

View File

@@ -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();
}
}