Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e30503f4 authored by Jason Monk's avatar Jason Monk Committed by android-build-merger
Browse files

Merge "Fix location status bar icon" into oc-dev am: d2b368a6

am: 2e55245f

Change-Id: I2dabf81060d98a2dcbec6487900c7148fc4daa07
parents c7c66e7f 2e55245f
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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> {
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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);
            }
+26 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();
@@ -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
@@ -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);
@@ -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();
@@ -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);
@@ -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);

@@ -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;
+11 −4
Original line number Diff line number Diff line
@@ -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) {}
    }
}
+21 −22
Original line number Diff line number Diff line
@@ -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};
@@ -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();
@@ -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);
    }

@@ -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.
     */
@@ -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);
        }
    }

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