Merge "Fix location status bar icon" into oc-dev
am: d2b368a68d
Change-Id: Ibe7699d1ad05a5c261620838a270faf99ba66697
This commit is contained in:
@@ -22,7 +22,6 @@ import android.provider.Settings;
|
|||||||
import android.service.quicksettings.Tile;
|
import android.service.quicksettings.Tile;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||||
import com.android.systemui.Dependency;
|
import com.android.systemui.Dependency;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -32,7 +31,7 @@ import com.android.systemui.plugins.qs.QSTile.BooleanState;
|
|||||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
||||||
import com.android.systemui.statusbar.policy.LocationController;
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController.LocationSettingsChangeCallback;
|
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
|
||||||
|
|
||||||
/** Quick settings tile: Location **/
|
/** Quick settings tile: Location **/
|
||||||
public class LocationTile extends QSTileImpl<BooleanState> {
|
public class LocationTile extends QSTileImpl<BooleanState> {
|
||||||
@@ -132,7 +131,7 @@ public class LocationTile extends QSTileImpl<BooleanState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class Callback implements LocationSettingsChangeCallback,
|
private final class Callback implements LocationChangeCallback,
|
||||||
KeyguardMonitor.Callback {
|
KeyguardMonitor.Callback {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationSettingsChanged(boolean enabled) {
|
public void onLocationSettingsChanged(boolean enabled) {
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public class DemoStatusIcons extends LinearLayout implements DemoMode {
|
|||||||
}
|
}
|
||||||
String location = args.getString("location");
|
String location = args.getString("location");
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
int iconId = location.equals("show") ? LocationControllerImpl.LOCATION_STATUS_ICON_ID
|
int iconId = location.equals("show") ? PhoneStatusBarPolicy.LOCATION_STATUS_ICON_ID
|
||||||
: 0;
|
: 0;
|
||||||
updateSlot("location", null, iconId);
|
updateSlot("location", null, iconId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
|||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
||||||
import com.android.systemui.statusbar.policy.HotspotController;
|
import com.android.systemui.statusbar.policy.HotspotController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
||||||
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
|
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
|
||||||
import com.android.systemui.statusbar.policy.NextAlarmController;
|
import com.android.systemui.statusbar.policy.NextAlarmController;
|
||||||
import com.android.systemui.statusbar.policy.RotationLockController;
|
import com.android.systemui.statusbar.policy.RotationLockController;
|
||||||
import com.android.systemui.statusbar.policy.RotationLockController.RotationLockControllerCallback;
|
import com.android.systemui.statusbar.policy.RotationLockController.RotationLockControllerCallback;
|
||||||
@@ -86,11 +88,13 @@ import com.android.systemui.util.NotificationChannels;
|
|||||||
* strictly doesn't need to.
|
* strictly doesn't need to.
|
||||||
*/
|
*/
|
||||||
public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
||||||
RotationLockControllerCallback, Listener,
|
RotationLockControllerCallback, Listener, LocationChangeCallback,
|
||||||
ZenModeController.Callback, DeviceProvisionedListener, KeyguardMonitor.Callback {
|
ZenModeController.Callback, DeviceProvisionedListener, KeyguardMonitor.Callback {
|
||||||
private static final String TAG = "PhoneStatusBarPolicy";
|
private static final String TAG = "PhoneStatusBarPolicy";
|
||||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
|
|
||||||
|
public static final int LOCATION_STATUS_ICON_ID = R.drawable.stat_sys_location;
|
||||||
|
|
||||||
private final String mSlotCast;
|
private final String mSlotCast;
|
||||||
private final String mSlotHotspot;
|
private final String mSlotHotspot;
|
||||||
private final String mSlotBluetooth;
|
private final String mSlotBluetooth;
|
||||||
@@ -102,6 +106,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
private final String mSlotRotate;
|
private final String mSlotRotate;
|
||||||
private final String mSlotHeadset;
|
private final String mSlotHeadset;
|
||||||
private final String mSlotDataSaver;
|
private final String mSlotDataSaver;
|
||||||
|
private final String mSlotLocation;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Handler mHandler = new Handler();
|
private final Handler mHandler = new Handler();
|
||||||
@@ -117,6 +122,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
private final ZenModeController mZenController;
|
private final ZenModeController mZenController;
|
||||||
private final DeviceProvisionedController mProvisionedController;
|
private final DeviceProvisionedController mProvisionedController;
|
||||||
private final KeyguardMonitor mKeyguardMonitor;
|
private final KeyguardMonitor mKeyguardMonitor;
|
||||||
|
private final LocationController mLocationController;
|
||||||
private final ArraySet<Pair<String, Integer>> mCurrentNotifs = new ArraySet<>();
|
private final ArraySet<Pair<String, Integer>> mCurrentNotifs = new ArraySet<>();
|
||||||
|
|
||||||
// Assume it's all good unless we hear otherwise. We don't always seem
|
// Assume it's all good unless we hear otherwise. We don't always seem
|
||||||
@@ -147,6 +153,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
mZenController = Dependency.get(ZenModeController.class);
|
mZenController = Dependency.get(ZenModeController.class);
|
||||||
mProvisionedController = Dependency.get(DeviceProvisionedController.class);
|
mProvisionedController = Dependency.get(DeviceProvisionedController.class);
|
||||||
mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
|
mKeyguardMonitor = Dependency.get(KeyguardMonitor.class);
|
||||||
|
mLocationController = Dependency.get(LocationController.class);
|
||||||
|
|
||||||
mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast);
|
mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast);
|
||||||
mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot);
|
mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot);
|
||||||
@@ -160,7 +167,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
mSlotRotate = context.getString(com.android.internal.R.string.status_bar_rotate);
|
mSlotRotate = context.getString(com.android.internal.R.string.status_bar_rotate);
|
||||||
mSlotHeadset = context.getString(com.android.internal.R.string.status_bar_headset);
|
mSlotHeadset = context.getString(com.android.internal.R.string.status_bar_headset);
|
||||||
mSlotDataSaver = context.getString(com.android.internal.R.string.status_bar_data_saver);
|
mSlotDataSaver = context.getString(com.android.internal.R.string.status_bar_data_saver);
|
||||||
|
mSlotLocation = context.getString(com.android.internal.R.string.status_bar_location);
|
||||||
|
|
||||||
// listen for broadcasts
|
// listen for broadcasts
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
@@ -229,6 +236,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
mNextAlarm.addCallback(mNextAlarmCallback);
|
mNextAlarm.addCallback(mNextAlarmCallback);
|
||||||
mDataSaver.addCallback(this);
|
mDataSaver.addCallback(this);
|
||||||
mKeyguardMonitor.addCallback(this);
|
mKeyguardMonitor.addCallback(this);
|
||||||
|
mLocationController.addCallback(this);
|
||||||
|
|
||||||
SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this);
|
SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this);
|
||||||
SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskListener);
|
SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskListener);
|
||||||
@@ -252,6 +260,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
mNextAlarm.removeCallback(mNextAlarmCallback);
|
mNextAlarm.removeCallback(mNextAlarmCallback);
|
||||||
mDataSaver.removeCallback(this);
|
mDataSaver.removeCallback(this);
|
||||||
mKeyguardMonitor.removeCallback(this);
|
mKeyguardMonitor.removeCallback(this);
|
||||||
|
mLocationController.removeCallback(this);
|
||||||
SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallbacks(this);
|
SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallbacks(this);
|
||||||
mContext.unregisterReceiver(mIntentReceiver);
|
mContext.unregisterReceiver(mIntentReceiver);
|
||||||
|
|
||||||
@@ -265,6 +274,21 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks,
|
|||||||
updateVolumeZen();
|
updateVolumeZen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationActiveChanged(boolean active) {
|
||||||
|
updateLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Updates the status view based on the current state of location requests.
|
||||||
|
private void updateLocation() {
|
||||||
|
if (mLocationController.isLocationActive()) {
|
||||||
|
mIconController.setIcon(mSlotLocation, LOCATION_STATUS_ICON_ID,
|
||||||
|
mContext.getString(R.string.accessibility_location_active));
|
||||||
|
} else {
|
||||||
|
mIconController.removeIcon(mSlotLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateAlarm() {
|
private void updateAlarm() {
|
||||||
final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT);
|
final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT);
|
||||||
final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0;
|
final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0;
|
||||||
|
|||||||
@@ -16,22 +16,29 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.policy;
|
package com.android.systemui.statusbar.policy;
|
||||||
|
|
||||||
import com.android.systemui.statusbar.policy.LocationController.LocationSettingsChangeCallback;
|
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
|
||||||
|
|
||||||
public interface LocationController extends CallbackController<LocationSettingsChangeCallback> {
|
public interface LocationController extends CallbackController<LocationChangeCallback> {
|
||||||
|
boolean isLocationActive();
|
||||||
boolean isLocationEnabled();
|
boolean isLocationEnabled();
|
||||||
boolean setLocationEnabled(boolean enabled);
|
boolean setLocationEnabled(boolean enabled);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A callback for change in location settings (the user has enabled/disabled location).
|
* A callback for change in location settings (the user has enabled/disabled location).
|
||||||
*/
|
*/
|
||||||
public interface LocationSettingsChangeCallback {
|
public interface LocationChangeCallback {
|
||||||
|
/**
|
||||||
|
* Called whenever location's state changes.
|
||||||
|
* @param active
|
||||||
|
*/
|
||||||
|
default void onLocationActiveChanged(boolean active) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called whenever location settings change.
|
* Called whenever location settings change.
|
||||||
*
|
*
|
||||||
* @param locationEnabled A value of true indicates that at least one type of location
|
* @param locationEnabled A value of true indicates that at least one type of location
|
||||||
* is enabled in settings.
|
* is enabled in settings.
|
||||||
*/
|
*/
|
||||||
void onLocationSettingsChanged(boolean locationEnabled);
|
default void onLocationSettingsChanged(boolean locationEnabled) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ import java.util.List;
|
|||||||
* A controller to manage changes of location related states and update the views accordingly.
|
* A controller to manage changes of location related states and update the views accordingly.
|
||||||
*/
|
*/
|
||||||
public class LocationControllerImpl extends BroadcastReceiver implements LocationController {
|
public class LocationControllerImpl extends BroadcastReceiver implements LocationController {
|
||||||
// The name of the placeholder corresponding to the location request status icon.
|
|
||||||
// This string corresponds to config_statusBarIcons in core/res/res/values/config.xml.
|
|
||||||
public static final int LOCATION_STATUS_ICON_ID = R.drawable.stat_sys_location;
|
|
||||||
|
|
||||||
private static final int[] mHighPowerRequestAppOpArray
|
private static final int[] mHighPowerRequestAppOpArray
|
||||||
= new int[] {AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION};
|
= new int[] {AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION};
|
||||||
@@ -55,14 +52,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
|
|
||||||
private boolean mAreActiveLocationRequests;
|
private boolean mAreActiveLocationRequests;
|
||||||
|
|
||||||
private ArrayList<LocationSettingsChangeCallback> mSettingsChangeCallbacks =
|
private ArrayList<LocationChangeCallback> mSettingsChangeCallbacks =
|
||||||
new ArrayList<LocationSettingsChangeCallback>();
|
new ArrayList<LocationChangeCallback>();
|
||||||
private final H mHandler = new H();
|
private final H mHandler = new H();
|
||||||
public final String mSlotLocation;
|
|
||||||
|
|
||||||
public LocationControllerImpl(Context context, Looper bgLooper) {
|
public LocationControllerImpl(Context context, Looper bgLooper) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSlotLocation = mContext.getString(com.android.internal.R.string.status_bar_location);
|
|
||||||
|
|
||||||
// Register to listen for changes in location settings.
|
// Register to listen for changes in location settings.
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
@@ -76,18 +71,17 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
|
|
||||||
// Examine the current location state and initialize the status view.
|
// Examine the current location state and initialize the status view.
|
||||||
updateActiveLocationRequests();
|
updateActiveLocationRequests();
|
||||||
refreshViews();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a callback to listen for changes in location settings.
|
* Add a callback to listen for changes in location settings.
|
||||||
*/
|
*/
|
||||||
public void addCallback(LocationSettingsChangeCallback cb) {
|
public void addCallback(LocationChangeCallback cb) {
|
||||||
mSettingsChangeCallbacks.add(cb);
|
mSettingsChangeCallbacks.add(cb);
|
||||||
mHandler.sendEmptyMessage(H.MSG_LOCATION_SETTINGS_CHANGED);
|
mHandler.sendEmptyMessage(H.MSG_LOCATION_SETTINGS_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeCallback(LocationSettingsChangeCallback cb) {
|
public void removeCallback(LocationChangeCallback cb) {
|
||||||
mSettingsChangeCallbacks.remove(cb);
|
mSettingsChangeCallbacks.remove(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +124,11 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
return mode != Settings.Secure.LOCATION_MODE_OFF;
|
return mode != Settings.Secure.LOCATION_MODE_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocationActive() {
|
||||||
|
return mAreActiveLocationRequests;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the current user is restricted from using location.
|
* Returns true if the current user is restricted from using location.
|
||||||
*/
|
*/
|
||||||
@@ -170,22 +169,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates the status view based on the current state of location requests.
|
|
||||||
private void refreshViews() {
|
|
||||||
if (mAreActiveLocationRequests) {
|
|
||||||
mStatusBarManager.setIcon(mSlotLocation, LOCATION_STATUS_ICON_ID,
|
|
||||||
0, mContext.getString(R.string.accessibility_location_active));
|
|
||||||
} else {
|
|
||||||
mStatusBarManager.removeIcon(mSlotLocation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads the active location requests and updates the status view if necessary.
|
// Reads the active location requests and updates the status view if necessary.
|
||||||
private void updateActiveLocationRequests() {
|
private void updateActiveLocationRequests() {
|
||||||
boolean hadActiveLocationRequests = mAreActiveLocationRequests;
|
boolean hadActiveLocationRequests = mAreActiveLocationRequests;
|
||||||
mAreActiveLocationRequests = areActiveHighPowerLocationRequests();
|
mAreActiveLocationRequests = areActiveHighPowerLocationRequests();
|
||||||
if (mAreActiveLocationRequests != hadActiveLocationRequests) {
|
if (mAreActiveLocationRequests != hadActiveLocationRequests) {
|
||||||
refreshViews();
|
mHandler.sendEmptyMessage(H.MSG_LOCATION_ACTIVE_CHANGED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +190,7 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
|
|
||||||
private final class H extends Handler {
|
private final class H extends Handler {
|
||||||
private static final int MSG_LOCATION_SETTINGS_CHANGED = 1;
|
private static final int MSG_LOCATION_SETTINGS_CHANGED = 1;
|
||||||
|
private static final int MSG_LOCATION_ACTIVE_CHANGED = 2;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
@@ -208,12 +198,21 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio
|
|||||||
case MSG_LOCATION_SETTINGS_CHANGED:
|
case MSG_LOCATION_SETTINGS_CHANGED:
|
||||||
locationSettingsChanged();
|
locationSettingsChanged();
|
||||||
break;
|
break;
|
||||||
|
case MSG_LOCATION_ACTIVE_CHANGED:
|
||||||
|
locationActiveChanged();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void locationActiveChanged() {
|
||||||
|
for (LocationChangeCallback cb : mSettingsChangeCallbacks) {
|
||||||
|
cb.onLocationActiveChanged(mAreActiveLocationRequests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void locationSettingsChanged() {
|
private void locationSettingsChanged() {
|
||||||
boolean isEnabled = isLocationEnabled();
|
boolean isEnabled = isLocationEnabled();
|
||||||
for (LocationSettingsChangeCallback cb : mSettingsChangeCallbacks) {
|
for (LocationChangeCallback cb : mSettingsChangeCallbacks) {
|
||||||
cb.onLocationSettingsChanged(isEnabled);
|
cb.onLocationSettingsChanged(isEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,19 @@ package com.android.systemui.utils.leaks;
|
|||||||
import android.testing.LeakCheck;
|
import android.testing.LeakCheck;
|
||||||
|
|
||||||
import com.android.systemui.statusbar.policy.LocationController;
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController.LocationSettingsChangeCallback;
|
import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback;
|
||||||
|
|
||||||
public class FakeLocationController extends BaseLeakChecker<LocationSettingsChangeCallback>
|
public class FakeLocationController extends BaseLeakChecker<LocationChangeCallback>
|
||||||
implements LocationController {
|
implements LocationController {
|
||||||
public FakeLocationController(LeakCheck test) {
|
public FakeLocationController(LeakCheck test) {
|
||||||
super(test, "location");
|
super(test, "location");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocationActive() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLocationEnabled() {
|
public boolean isLocationEnabled() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user