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

Commit 657c62c3 authored by John Spurlock's avatar John Spurlock
Browse files

QS: Hide Location, Cast tiles when showing secure keyguard.

Bug:15725186
Bug:15725223
Change-Id: I7c23d8c764f5712ee31d248f4d8fc6d35d0add97
parent 70441467
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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 {
+13 −2
Original line number Diff line number Diff line
@@ -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 {
+14 −2
Original line number Diff line number Diff line
@@ -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();
        }
    };
}
+7 −2
Original line number Diff line number Diff line
@@ -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() {
+9 −9
Original line number Diff line number Diff line
@@ -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() {
Loading