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

Commit 831ddd86 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge changes from topic "b150393918-lock-icon-controller" into rvc-dev

* changes:
  Move DockEventListener from LockIcon to Controller
  Move KeyguardUpdateMonitorCallback from LockIcon to Controller.
  Remove OnHeadsUpChangedListener from LockIcon.
  Move WakeUpListener from LockIcon to Controller.
  Remove KeyguardStateController.Callback from LockIcon.
parents 4c0513d8 1bf337f0
Loading
Loading
Loading
Loading
+14 −69
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.graphics.Color;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.hardware.biometrics.BiometricSourceType;
import android.os.Trace;
import android.provider.Settings;
import android.text.TextUtils;
@@ -34,22 +33,17 @@ import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityNodeInfo;

import androidx.annotation.Nullable;

import com.android.internal.graphics.ColorUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.phone.ScrimController.ScrimVisibility;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -61,8 +55,7 @@ import javax.inject.Named;
 * Manages the different states and animations of the unlock icon.
 */
public class LockIcon extends KeyguardAffordanceView implements
        KeyguardStateController.Callback, NotificationWakeUpCoordinator.WakeUpListener,
        ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener {
        ViewTreeObserver.OnPreDrawListener {

    private static final int STATE_LOCKED = 0;
    private static final int STATE_LOCK_OPEN = 1;
@@ -70,7 +63,6 @@ public class LockIcon extends KeyguardAffordanceView implements
    private static final int STATE_BIOMETRICS_ERROR = 3;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final AccessibilityController mAccessibilityController;
    private final DockManager mDockManager;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardBypassController mBypassController;
    private final NotificationWakeUpCoordinator mWakeUpCoordinator;
@@ -130,43 +122,6 @@ public class LockIcon extends KeyguardAffordanceView implements
                    update();
                }
            };
    private final DockManager.DockEventListener mDockEventListener =
            new DockManager.DockEventListener() {
                @Override
                public void onEvent(int event) {
                    boolean docked = event == DockManager.STATE_DOCKED
                            || event == DockManager.STATE_DOCKED_HIDE;
                    if (docked != mDocked) {
                        mDocked = docked;
                        update();
                    }
        }
    };

    private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
                public void onSimStateChanged(int subId, int slotId, int simState) {
                    mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
                    update();
                }

                @Override
                public void onKeyguardVisibilityChanged(boolean showing) {
                    update();
                }

                @Override
                public void onBiometricRunningStateChanged(boolean running,
                        BiometricSourceType biometricSourceType) {
                    update();
                }

                @Override
                public void onStrongAuthStateChanged(int userId) {
                    update();
                }
    };

    @Inject
    public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -174,7 +129,6 @@ public class LockIcon extends KeyguardAffordanceView implements
            KeyguardBypassController bypassController,
            NotificationWakeUpCoordinator wakeUpCoordinator,
            KeyguardStateController keyguardStateController,
            @Nullable DockManager dockManager,
            HeadsUpManagerPhone headsUpManager) {
        super(context, attrs);
        mContext = context;
@@ -183,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements
        mBypassController = bypassController;
        mWakeUpCoordinator = wakeUpCoordinator;
        mKeyguardStateController = keyguardStateController;
        mDockManager = dockManager;
        mHeadsUpManager = headsUpManager;
    }

@@ -191,24 +144,14 @@ public class LockIcon extends KeyguardAffordanceView implements
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        mKeyguardStateController.addCallback(mKeyguardMonitorCallback);
        mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
        mWakeUpCoordinator.addListener(this);
        mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure();
        if (mDockManager != null) {
            mDockManager.addListener(mDockEventListener);
        }
        update();
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
        mKeyguardStateController.removeCallback(mKeyguardMonitorCallback);
        mWakeUpCoordinator.removeListener(this);
        if (mDockManager != null) {
            mDockManager.removeListener(mDockEventListener);
        }
    }

    /**
@@ -306,7 +249,7 @@ public class LockIcon extends KeyguardAffordanceView implements
     * Update the icon visibility
     * @return true if the visibility changed
     */
    private boolean updateIconVisibility() {
    boolean updateIconVisibility() {
        boolean onAodNotPulsingOrDocked = mDozing && (!mPulsing || mDocked);
        boolean invisible = onAodNotPulsingOrDocked || mWakeAndUnlockRunning
                || mShowingLaunchAffordance;
@@ -424,16 +367,6 @@ public class LockIcon extends KeyguardAffordanceView implements
        return -1;
    }

    @Override
    public void onFullyHiddenChanged(boolean isFullyHidden) {
        if (mBypassController.getBypassEnabled()) {
            boolean changed = updateIconVisibility();
            if (changed) {
                update();
            }
        }
    }

    public void setBouncerShowingScrimmed(boolean bouncerShowing) {
        mBouncerShowingScrimmed = bouncerShowing;
        if (mBypassController.getBypassEnabled()) {
@@ -454,6 +387,18 @@ public class LockIcon extends KeyguardAffordanceView implements
        updateDarkTint();
    }

    void setSimLocked(boolean simLocked) {
        mSimLocked = simLocked;
    }

    /** Set if the device is docked. */
    public void setDocked(boolean docked) {
        if (mDocked != docked) {
            mDocked = docked;
            update();
        }
    }

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({ERROR, UNLOCK, LOCK, SCANNING})
    @interface LockAnimIndex {}
+69 −1
Original line number Diff line number Diff line
@@ -18,20 +18,29 @@ package com.android.systemui.statusbar.phone;

import android.content.res.TypedArray;
import android.graphics.Color;
import android.hardware.biometrics.BiometricSourceType;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;

import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator.WakeUpListener;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;

import java.util.Optional;

import javax.inject.Inject;
import javax.inject.Singleton;

@@ -47,6 +56,9 @@ public class LockscreenLockIconController {
    private final KeyguardIndicationController mKeyguardIndicationController;
    private final StatusBarStateController mStatusBarStateController;
    private final ConfigurationController mConfigurationController;
    private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
    private final KeyguardBypassController mKeyguardBypassController;
    private final Optional<DockManager> mDockManager;
    private LockIcon mLockIcon;

    private View.OnAttachStateChangeListener mOnAttachStateChangeListener =
@@ -55,6 +67,10 @@ public class LockscreenLockIconController {
        public void onViewAttachedToWindow(View v) {
            mStatusBarStateController.addCallback(mSBStateListener);
            mConfigurationController.addCallback(mConfigurationListener);
            mNotificationWakeUpCoordinator.addListener(mWakeUpListener);
            mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);

            mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener));

            mConfigurationListener.onThemeChanged();
        }
@@ -63,6 +79,11 @@ public class LockscreenLockIconController {
        public void onViewDetachedFromWindow(View v) {
            mStatusBarStateController.removeCallback(mSBStateListener);
            mConfigurationController.removeCallback(mConfigurationListener);
            mNotificationWakeUpCoordinator.removeListener(mWakeUpListener);
            mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);


            mDockManager.ifPresent(dockManager -> dockManager.removeListener(mDockEventListener));
        }
    };

@@ -115,6 +136,47 @@ public class LockscreenLockIconController {
        }
    };

    private final WakeUpListener mWakeUpListener = new WakeUpListener() {
        @Override
        public void onFullyHiddenChanged(boolean isFullyHidden) {
            if (mKeyguardBypassController.getBypassEnabled()) {
                boolean changed = mLockIcon.updateIconVisibility();
                if (changed) {
                    mLockIcon.update();
                }
            }
        }
    };

    private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
                @Override
                public void onSimStateChanged(int subId, int slotId, int simState) {
                    mLockIcon.setSimLocked(mKeyguardUpdateMonitor.isSimPinSecure());
                    mLockIcon.update();
                }

                @Override
                public void onKeyguardVisibilityChanged(boolean showing) {
                    mLockIcon.update();
                }

                @Override
                public void onBiometricRunningStateChanged(boolean running,
                        BiometricSourceType biometricSourceType) {
                    mLockIcon.update();
                }

                @Override
                public void onStrongAuthStateChanged(int userId) {
                    mLockIcon.update();
                }
            };

    private final DockManager.DockEventListener mDockEventListener =
            event -> mLockIcon.setDocked(event == DockManager.STATE_DOCKED
                    || event == DockManager.STATE_DOCKED_HIDE);

    @Inject
    public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -123,7 +185,10 @@ public class LockscreenLockIconController {
            AccessibilityController accessibilityController,
            KeyguardIndicationController keyguardIndicationController,
            StatusBarStateController statusBarStateController,
            ConfigurationController configurationController) {
            ConfigurationController configurationController,
            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
            KeyguardBypassController keyguardBypassController,
            @Nullable DockManager dockManager) {
        mLockscreenGestureLogger = lockscreenGestureLogger;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mLockPatternUtils = lockPatternUtils;
@@ -132,6 +197,9 @@ public class LockscreenLockIconController {
        mKeyguardIndicationController = keyguardIndicationController;
        mStatusBarStateController = statusBarStateController;
        mConfigurationController = configurationController;
        mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
        mKeyguardBypassController = keyguardBypassController;
        mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager);

        mKeyguardIndicationController.setLockIconController(this);
    }
+11 −1
Original line number Diff line number Diff line
@@ -29,8 +29,10 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.policy.AccessibilityController;
import com.android.systemui.statusbar.policy.ConfigurationController;

@@ -63,6 +65,13 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
    private StatusBarStateController mStatusBarStateController;
    @Mock
    private ConfigurationController mConfigurationController;
    @Mock
    private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
    @Mock
    private KeyguardBypassController mKeyguardBypassController;
    @Mock
    private DockManager mDockManager;


    @Before
    public void setUp() {
@@ -71,7 +80,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase {
        mLockIconController = new LockscreenLockIconController(
                mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils,
                mShadeController, mAccessibilityController, mKeyguardIndicationController,
                mStatusBarStateController, mConfigurationController);
                mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator,
                mKeyguardBypassController, mDockManager);

        mLockIconController.attach(mLockIcon);
    }