Loading packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java +2 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.provider.Settings; import android.service.quicksettings.Tile; import android.widget.Switch; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.R; Loading @@ -32,7 +31,7 @@ import com.android.systemui.plugins.qs.QSTile.BooleanState; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.KeyguardMonitor; 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 **/ public class LocationTile extends QSTileImpl<BooleanState> { Loading Loading @@ -132,7 +131,7 @@ public class LocationTile extends QSTileImpl<BooleanState> { } } private final class Callback implements LocationSettingsChangeCallback, private final class Callback implements LocationChangeCallback, KeyguardMonitor.Callback { @Override public void onLocationSettingsChanged(boolean enabled) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ public class DemoStatusIcons extends LinearLayout implements DemoMode { } String location = args.getString("location"); if (location != null) { int iconId = location.equals("show") ? LocationControllerImpl.LOCATION_STATUS_ICON_ID int iconId = location.equals("show") ? PhoneStatusBarPolicy.LOCATION_STATUS_ICON_ID : 0; updateSlot("location", null, iconId); } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +26 −2 Original line number Diff line number Diff line Loading @@ -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.HotspotController; 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.RotationLockController; import com.android.systemui.statusbar.policy.RotationLockController.RotationLockControllerCallback; Loading @@ -86,11 +88,13 @@ import com.android.systemui.util.NotificationChannels; * strictly doesn't need to. */ public class PhoneStatusBarPolicy implements Callback, Callbacks, RotationLockControllerCallback, Listener, RotationLockControllerCallback, Listener, LocationChangeCallback, ZenModeController.Callback, DeviceProvisionedListener, KeyguardMonitor.Callback { private static final String TAG = "PhoneStatusBarPolicy"; 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 mSlotHotspot; private final String mSlotBluetooth; Loading @@ -102,6 +106,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private final String mSlotRotate; private final String mSlotHeadset; private final String mSlotDataSaver; private final String mSlotLocation; private final Context mContext; private final Handler mHandler = new Handler(); Loading @@ -117,6 +122,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private final ZenModeController mZenController; private final DeviceProvisionedController mProvisionedController; private final KeyguardMonitor mKeyguardMonitor; private final LocationController mLocationController; private final ArraySet<Pair<String, Integer>> mCurrentNotifs = new ArraySet<>(); // Assume it's all good unless we hear otherwise. We don't always seem Loading Loading @@ -147,6 +153,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mZenController = Dependency.get(ZenModeController.class); mProvisionedController = Dependency.get(DeviceProvisionedController.class); mKeyguardMonitor = Dependency.get(KeyguardMonitor.class); mLocationController = Dependency.get(LocationController.class); mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot); Loading @@ -160,7 +167,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mSlotRotate = context.getString(com.android.internal.R.string.status_bar_rotate); mSlotHeadset = context.getString(com.android.internal.R.string.status_bar_headset); 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 IntentFilter filter = new IntentFilter(); Loading Loading @@ -229,6 +236,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mNextAlarm.addCallback(mNextAlarmCallback); mDataSaver.addCallback(this); mKeyguardMonitor.addCallback(this); mLocationController.addCallback(this); SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this); SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskListener); Loading @@ -252,6 +260,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mNextAlarm.removeCallback(mNextAlarmCallback); mDataSaver.removeCallback(this); mKeyguardMonitor.removeCallback(this); mLocationController.removeCallback(this); SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallbacks(this); mContext.unregisterReceiver(mIntentReceiver); Loading @@ -265,6 +274,21 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, 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() { final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT); final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0; Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java +11 −4 Original line number Diff line number Diff line Loading @@ -16,22 +16,29 @@ 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 setLocationEnabled(boolean enabled); /** * 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. * * @param locationEnabled A value of true indicates that at least one type of location * is enabled in settings. */ void onLocationSettingsChanged(boolean locationEnabled); default void onLocationSettingsChanged(boolean locationEnabled) {} } } packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java +21 −22 Original line number Diff line number Diff line Loading @@ -41,9 +41,6 @@ import java.util.List; * A controller to manage changes of location related states and update the views accordingly. */ 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 = new int[] {AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION}; Loading @@ -55,14 +52,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio private boolean mAreActiveLocationRequests; private ArrayList<LocationSettingsChangeCallback> mSettingsChangeCallbacks = new ArrayList<LocationSettingsChangeCallback>(); private ArrayList<LocationChangeCallback> mSettingsChangeCallbacks = new ArrayList<LocationChangeCallback>(); private final H mHandler = new H(); public final String mSlotLocation; public LocationControllerImpl(Context context, Looper bgLooper) { mContext = context; mSlotLocation = mContext.getString(com.android.internal.R.string.status_bar_location); // Register to listen for changes in location settings. IntentFilter filter = new IntentFilter(); Loading @@ -76,18 +71,17 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio // Examine the current location state and initialize the status view. updateActiveLocationRequests(); refreshViews(); } /** * Add a callback to listen for changes in location settings. */ public void addCallback(LocationSettingsChangeCallback cb) { public void addCallback(LocationChangeCallback cb) { mSettingsChangeCallbacks.add(cb); mHandler.sendEmptyMessage(H.MSG_LOCATION_SETTINGS_CHANGED); } public void removeCallback(LocationSettingsChangeCallback cb) { public void removeCallback(LocationChangeCallback cb) { mSettingsChangeCallbacks.remove(cb); } Loading Loading @@ -130,6 +124,11 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio return mode != Settings.Secure.LOCATION_MODE_OFF; } @Override public boolean isLocationActive() { return mAreActiveLocationRequests; } /** * Returns true if the current user is restricted from using location. */ Loading Loading @@ -170,22 +169,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio 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. private void updateActiveLocationRequests() { boolean hadActiveLocationRequests = mAreActiveLocationRequests; mAreActiveLocationRequests = areActiveHighPowerLocationRequests(); if (mAreActiveLocationRequests != hadActiveLocationRequests) { refreshViews(); mHandler.sendEmptyMessage(H.MSG_LOCATION_ACTIVE_CHANGED); } } Loading @@ -201,6 +190,7 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio private final class H extends Handler { private static final int MSG_LOCATION_SETTINGS_CHANGED = 1; private static final int MSG_LOCATION_ACTIVE_CHANGED = 2; @Override public void handleMessage(Message msg) { Loading @@ -208,12 +198,21 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio case MSG_LOCATION_SETTINGS_CHANGED: locationSettingsChanged(); break; case MSG_LOCATION_ACTIVE_CHANGED: locationActiveChanged(); break; } } private void locationActiveChanged() { for (LocationChangeCallback cb : mSettingsChangeCallbacks) { cb.onLocationActiveChanged(mAreActiveLocationRequests); } } private void locationSettingsChanged() { boolean isEnabled = isLocationEnabled(); for (LocationSettingsChangeCallback cb : mSettingsChangeCallbacks) { for (LocationChangeCallback cb : mSettingsChangeCallbacks) { cb.onLocationSettingsChanged(isEnabled); } } Loading Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java +2 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.provider.Settings; import android.service.quicksettings.Tile; import android.widget.Switch; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.R; Loading @@ -32,7 +31,7 @@ import com.android.systemui.plugins.qs.QSTile.BooleanState; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.KeyguardMonitor; 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 **/ public class LocationTile extends QSTileImpl<BooleanState> { Loading Loading @@ -132,7 +131,7 @@ public class LocationTile extends QSTileImpl<BooleanState> { } } private final class Callback implements LocationSettingsChangeCallback, private final class Callback implements LocationChangeCallback, KeyguardMonitor.Callback { @Override public void onLocationSettingsChanged(boolean enabled) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +1 −1 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ public class DemoStatusIcons extends LinearLayout implements DemoMode { } String location = args.getString("location"); if (location != null) { int iconId = location.equals("show") ? LocationControllerImpl.LOCATION_STATUS_ICON_ID int iconId = location.equals("show") ? PhoneStatusBarPolicy.LOCATION_STATUS_ICON_ID : 0; updateSlot("location", null, iconId); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +26 −2 Original line number Diff line number Diff line Loading @@ -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.HotspotController; 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.RotationLockController; import com.android.systemui.statusbar.policy.RotationLockController.RotationLockControllerCallback; Loading @@ -86,11 +88,13 @@ import com.android.systemui.util.NotificationChannels; * strictly doesn't need to. */ public class PhoneStatusBarPolicy implements Callback, Callbacks, RotationLockControllerCallback, Listener, RotationLockControllerCallback, Listener, LocationChangeCallback, ZenModeController.Callback, DeviceProvisionedListener, KeyguardMonitor.Callback { private static final String TAG = "PhoneStatusBarPolicy"; 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 mSlotHotspot; private final String mSlotBluetooth; Loading @@ -102,6 +106,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private final String mSlotRotate; private final String mSlotHeadset; private final String mSlotDataSaver; private final String mSlotLocation; private final Context mContext; private final Handler mHandler = new Handler(); Loading @@ -117,6 +122,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, private final ZenModeController mZenController; private final DeviceProvisionedController mProvisionedController; private final KeyguardMonitor mKeyguardMonitor; private final LocationController mLocationController; private final ArraySet<Pair<String, Integer>> mCurrentNotifs = new ArraySet<>(); // Assume it's all good unless we hear otherwise. We don't always seem Loading Loading @@ -147,6 +153,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mZenController = Dependency.get(ZenModeController.class); mProvisionedController = Dependency.get(DeviceProvisionedController.class); mKeyguardMonitor = Dependency.get(KeyguardMonitor.class); mLocationController = Dependency.get(LocationController.class); mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot); Loading @@ -160,7 +167,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mSlotRotate = context.getString(com.android.internal.R.string.status_bar_rotate); mSlotHeadset = context.getString(com.android.internal.R.string.status_bar_headset); 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 IntentFilter filter = new IntentFilter(); Loading Loading @@ -229,6 +236,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mNextAlarm.addCallback(mNextAlarmCallback); mDataSaver.addCallback(this); mKeyguardMonitor.addCallback(this); mLocationController.addCallback(this); SysUiServiceProvider.getComponent(mContext, CommandQueue.class).addCallbacks(this); SystemServicesProxy.getInstance(mContext).registerTaskStackListener(mTaskListener); Loading @@ -252,6 +260,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mNextAlarm.removeCallback(mNextAlarmCallback); mDataSaver.removeCallback(this); mKeyguardMonitor.removeCallback(this); mLocationController.removeCallback(this); SysUiServiceProvider.getComponent(mContext, CommandQueue.class).removeCallbacks(this); mContext.unregisterReceiver(mIntentReceiver); Loading @@ -265,6 +274,21 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, 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() { final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT); final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0; Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java +11 −4 Original line number Diff line number Diff line Loading @@ -16,22 +16,29 @@ 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 setLocationEnabled(boolean enabled); /** * 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. * * @param locationEnabled A value of true indicates that at least one type of location * is enabled in settings. */ void onLocationSettingsChanged(boolean locationEnabled); default void onLocationSettingsChanged(boolean locationEnabled) {} } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java +21 −22 Original line number Diff line number Diff line Loading @@ -41,9 +41,6 @@ import java.util.List; * A controller to manage changes of location related states and update the views accordingly. */ 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 = new int[] {AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION}; Loading @@ -55,14 +52,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio private boolean mAreActiveLocationRequests; private ArrayList<LocationSettingsChangeCallback> mSettingsChangeCallbacks = new ArrayList<LocationSettingsChangeCallback>(); private ArrayList<LocationChangeCallback> mSettingsChangeCallbacks = new ArrayList<LocationChangeCallback>(); private final H mHandler = new H(); public final String mSlotLocation; public LocationControllerImpl(Context context, Looper bgLooper) { mContext = context; mSlotLocation = mContext.getString(com.android.internal.R.string.status_bar_location); // Register to listen for changes in location settings. IntentFilter filter = new IntentFilter(); Loading @@ -76,18 +71,17 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio // Examine the current location state and initialize the status view. updateActiveLocationRequests(); refreshViews(); } /** * Add a callback to listen for changes in location settings. */ public void addCallback(LocationSettingsChangeCallback cb) { public void addCallback(LocationChangeCallback cb) { mSettingsChangeCallbacks.add(cb); mHandler.sendEmptyMessage(H.MSG_LOCATION_SETTINGS_CHANGED); } public void removeCallback(LocationSettingsChangeCallback cb) { public void removeCallback(LocationChangeCallback cb) { mSettingsChangeCallbacks.remove(cb); } Loading Loading @@ -130,6 +124,11 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio return mode != Settings.Secure.LOCATION_MODE_OFF; } @Override public boolean isLocationActive() { return mAreActiveLocationRequests; } /** * Returns true if the current user is restricted from using location. */ Loading Loading @@ -170,22 +169,12 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio 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. private void updateActiveLocationRequests() { boolean hadActiveLocationRequests = mAreActiveLocationRequests; mAreActiveLocationRequests = areActiveHighPowerLocationRequests(); if (mAreActiveLocationRequests != hadActiveLocationRequests) { refreshViews(); mHandler.sendEmptyMessage(H.MSG_LOCATION_ACTIVE_CHANGED); } } Loading @@ -201,6 +190,7 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio private final class H extends Handler { private static final int MSG_LOCATION_SETTINGS_CHANGED = 1; private static final int MSG_LOCATION_ACTIVE_CHANGED = 2; @Override public void handleMessage(Message msg) { Loading @@ -208,12 +198,21 @@ public class LocationControllerImpl extends BroadcastReceiver implements Locatio case MSG_LOCATION_SETTINGS_CHANGED: locationSettingsChanged(); break; case MSG_LOCATION_ACTIVE_CHANGED: locationActiveChanged(); break; } } private void locationActiveChanged() { for (LocationChangeCallback cb : mSettingsChangeCallbacks) { cb.onLocationActiveChanged(mAreActiveLocationRequests); } } private void locationSettingsChanged() { boolean isEnabled = isLocationEnabled(); for (LocationSettingsChangeCallback cb : mSettingsChangeCallbacks) { for (LocationChangeCallback cb : mSettingsChangeCallbacks) { cb.onLocationSettingsChanged(isEnabled); } } Loading