From 90f81b417a93e5e52bfc54cc85e70ecad94df47c Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 4 Mar 2020 14:43:18 -0500 Subject: [PATCH 1/5] Remove KeyguardStateController.Callback from LockIcon. It is not used. Bug: 150393918 Test: atest SystemUITests && manual Change-Id: I002d1be1f9d40d8e800629866854c3d095ad910d --- .../src/com/android/systemui/statusbar/phone/LockIcon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index c29ec9eeaf56f..0e8add3d8ef23 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -61,7 +61,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, + NotificationWakeUpCoordinator.WakeUpListener, ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener { private static final int STATE_LOCKED = 0; From 51c5245be272fb9a6183c345a408daec7726a523 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 4 Mar 2020 14:55:12 -0500 Subject: [PATCH 2/5] Move WakeUpListener from LockIcon to Controller. Replaces inheritance to delegation within the controller. Bug: 150393918 Test: atest SystemUITests Change-Id: Ic39995edd3f511898f5d77dadbe15fe9c1f01251 --- .../systemui/statusbar/phone/LockIcon.java | 15 +----------- .../phone/LockscreenLockIconController.java | 24 ++++++++++++++++++- .../phone/LockscreenIconControllerTest.java | 8 ++++++- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 0e8add3d8ef23..3e612e574573f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -61,7 +61,6 @@ import javax.inject.Named; * Manages the different states and animations of the unlock icon. */ public class LockIcon extends KeyguardAffordanceView implements - NotificationWakeUpCoordinator.WakeUpListener, ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener { private static final int STATE_LOCKED = 0; @@ -192,7 +191,6 @@ public class LockIcon extends KeyguardAffordanceView implements super.onAttachedToWindow(); mKeyguardStateController.addCallback(mKeyguardMonitorCallback); mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback); - mWakeUpCoordinator.addListener(this); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); if (mDockManager != null) { mDockManager.addListener(mDockEventListener); @@ -205,7 +203,6 @@ public class LockIcon extends KeyguardAffordanceView implements super.onDetachedFromWindow(); mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback); mKeyguardStateController.removeCallback(mKeyguardMonitorCallback); - mWakeUpCoordinator.removeListener(this); if (mDockManager != null) { mDockManager.removeListener(mDockEventListener); } @@ -306,7 +303,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 +421,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()) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java index 698a430c389ec..4cf8607f3186f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java @@ -28,6 +28,8 @@ import com.android.systemui.R; 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; @@ -47,6 +49,8 @@ public class LockscreenLockIconController { private final KeyguardIndicationController mKeyguardIndicationController; private final StatusBarStateController mStatusBarStateController; private final ConfigurationController mConfigurationController; + private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; + private final KeyguardBypassController mKeyguardBypassController; private LockIcon mLockIcon; private View.OnAttachStateChangeListener mOnAttachStateChangeListener = @@ -55,6 +59,7 @@ public class LockscreenLockIconController { public void onViewAttachedToWindow(View v) { mStatusBarStateController.addCallback(mSBStateListener); mConfigurationController.addCallback(mConfigurationListener); + mNotificationWakeUpCoordinator.addListener(mWakeUpListener); mConfigurationListener.onThemeChanged(); } @@ -63,6 +68,7 @@ public class LockscreenLockIconController { public void onViewDetachedFromWindow(View v) { mStatusBarStateController.removeCallback(mSBStateListener); mConfigurationController.removeCallback(mConfigurationListener); + mNotificationWakeUpCoordinator.removeListener(mWakeUpListener); } }; @@ -115,6 +121,18 @@ 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(); + } + } + } + }; + @Inject public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger, KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -123,7 +141,9 @@ public class LockscreenLockIconController { AccessibilityController accessibilityController, KeyguardIndicationController keyguardIndicationController, StatusBarStateController statusBarStateController, - ConfigurationController configurationController) { + ConfigurationController configurationController, + NotificationWakeUpCoordinator notificationWakeUpCoordinator, + KeyguardBypassController keyguardBypassController) { mLockscreenGestureLogger = lockscreenGestureLogger; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; @@ -132,6 +152,8 @@ public class LockscreenLockIconController { mKeyguardIndicationController = keyguardIndicationController; mStatusBarStateController = statusBarStateController; mConfigurationController = configurationController; + mNotificationWakeUpCoordinator = notificationWakeUpCoordinator; + mKeyguardBypassController = keyguardBypassController; mKeyguardIndicationController.setLockIconController(this); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java index 05f10e376f619..be8d1821faa44 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java @@ -31,6 +31,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; 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 +64,10 @@ public class LockscreenIconControllerTest extends SysuiTestCase { private StatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; + @Mock + private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; + @Mock + private KeyguardBypassController mKeyguardBypassController; @Before public void setUp() { @@ -71,7 +76,8 @@ public class LockscreenIconControllerTest extends SysuiTestCase { mLockIconController = new LockscreenLockIconController( mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils, mShadeController, mAccessibilityController, mKeyguardIndicationController, - mStatusBarStateController, mConfigurationController); + mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator, + mKeyguardBypassController); mLockIconController.attach(mLockIcon); } From 78fec5102b4092e2288c648ae42726e65e1a6759 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 4 Mar 2020 15:13:44 -0500 Subject: [PATCH 3/5] Remove OnHeadsUpChangedListener from LockIcon. It is not used. Bug: 150393918 Test: atest SystemUITests && manual Change-Id: Ia3208ecf428a6d7c1fa32220bbef220700da790f --- .../src/com/android/systemui/statusbar/phone/LockIcon.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 3e612e574573f..8367c2266095d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -49,7 +49,6 @@ 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,7 +60,7 @@ import javax.inject.Named; * Manages the different states and animations of the unlock icon. */ public class LockIcon extends KeyguardAffordanceView implements - ViewTreeObserver.OnPreDrawListener, OnHeadsUpChangedListener { + ViewTreeObserver.OnPreDrawListener { private static final int STATE_LOCKED = 0; private static final int STATE_LOCK_OPEN = 1; From 8fe38b59bc14f568761ad9d66cbfe0c4c1f84e2b Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Wed, 4 Mar 2020 18:06:53 -0500 Subject: [PATCH 4/5] Move KeyguardUpdateMonitorCallback from LockIcon to Controller. Bug: 150393918 Test: atest SystemUITests Change-Id: I50fb9fa1447ba358750c58c77728e75c7f1aa87f --- .../systemui/statusbar/phone/LockIcon.java | 33 +++---------------- .../phone/LockscreenLockIconController.java | 29 ++++++++++++++++ 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 8367c2266095d..468f98b8a19b8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -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; @@ -38,7 +37,6 @@ 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; @@ -141,31 +139,6 @@ public class LockIcon extends KeyguardAffordanceView implements } }; - 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, AccessibilityController accessibilityController, @@ -189,7 +162,6 @@ public class LockIcon extends KeyguardAffordanceView implements protected void onAttachedToWindow() { super.onAttachedToWindow(); mKeyguardStateController.addCallback(mKeyguardMonitorCallback); - mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); if (mDockManager != null) { mDockManager.addListener(mDockEventListener); @@ -200,7 +172,6 @@ public class LockIcon extends KeyguardAffordanceView implements @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback); mKeyguardStateController.removeCallback(mKeyguardMonitorCallback); if (mDockManager != null) { mDockManager.removeListener(mDockEventListener); @@ -440,6 +411,10 @@ public class LockIcon extends KeyguardAffordanceView implements updateDarkTint(); } + void setSimLocked(boolean simLocked) { + mSimLocked = simLocked; + } + @Retention(RetentionPolicy.SOURCE) @IntDef({ERROR, UNLOCK, LOCK, SCANNING}) @interface LockAnimIndex {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java index 4cf8607f3186f..8dc6012f7c896 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java @@ -18,12 +18,14 @@ 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 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.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; @@ -60,6 +62,7 @@ public class LockscreenLockIconController { mStatusBarStateController.addCallback(mSBStateListener); mConfigurationController.addCallback(mConfigurationListener); mNotificationWakeUpCoordinator.addListener(mWakeUpListener); + mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback); mConfigurationListener.onThemeChanged(); } @@ -69,6 +72,7 @@ public class LockscreenLockIconController { mStatusBarStateController.removeCallback(mSBStateListener); mConfigurationController.removeCallback(mConfigurationListener); mNotificationWakeUpCoordinator.removeListener(mWakeUpListener); + mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback); } }; @@ -133,6 +137,31 @@ public class LockscreenLockIconController { } }; + 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(); + } + }; + @Inject public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger, KeyguardUpdateMonitor keyguardUpdateMonitor, From 1bf337f01a7275b9fe55b3fb2b932384b6fd76ba Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Thu, 5 Mar 2020 13:57:43 -0500 Subject: [PATCH 5/5] Move DockEventListener from LockIcon to Controller Bug: 150393918 Test: atest SystemUITests && manual Change-Id: I431ca2951d4fb2ca38601a3dbd8ea157d6a81a73 --- .../systemui/statusbar/phone/LockIcon.java | 32 +++++-------------- .../phone/LockscreenLockIconController.java | 19 ++++++++++- .../phone/LockscreenIconControllerTest.java | 6 +++- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index 468f98b8a19b8..cf9d43eeff73d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -33,14 +33,11 @@ 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.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; @@ -66,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; @@ -126,18 +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(); - } - } - }; @Inject public LockIcon(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, @@ -145,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; @@ -154,7 +137,6 @@ public class LockIcon extends KeyguardAffordanceView implements mBypassController = bypassController; mWakeUpCoordinator = wakeUpCoordinator; mKeyguardStateController = keyguardStateController; - mDockManager = dockManager; mHeadsUpManager = headsUpManager; } @@ -163,9 +145,6 @@ public class LockIcon extends KeyguardAffordanceView implements super.onAttachedToWindow(); mKeyguardStateController.addCallback(mKeyguardMonitorCallback); mSimLocked = mKeyguardUpdateMonitor.isSimPinSecure(); - if (mDockManager != null) { - mDockManager.addListener(mDockEventListener); - } update(); } @@ -173,9 +152,6 @@ public class LockIcon extends KeyguardAffordanceView implements protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mKeyguardStateController.removeCallback(mKeyguardMonitorCallback); - if (mDockManager != null) { - mDockManager.removeListener(mDockEventListener); - } } /** @@ -415,6 +391,14 @@ public class LockIcon extends KeyguardAffordanceView implements 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 {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java index 8dc6012f7c896..2b1a8a472d9e0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenLockIconController.java @@ -22,11 +22,14 @@ 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; @@ -36,6 +39,8 @@ 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; @@ -53,6 +58,7 @@ public class LockscreenLockIconController { private final ConfigurationController mConfigurationController; private final NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; private final KeyguardBypassController mKeyguardBypassController; + private final Optional mDockManager; private LockIcon mLockIcon; private View.OnAttachStateChangeListener mOnAttachStateChangeListener = @@ -64,6 +70,8 @@ public class LockscreenLockIconController { mNotificationWakeUpCoordinator.addListener(mWakeUpListener); mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback); + mDockManager.ifPresent(dockManager -> dockManager.addListener(mDockEventListener)); + mConfigurationListener.onThemeChanged(); } @@ -73,6 +81,9 @@ public class LockscreenLockIconController { mConfigurationController.removeCallback(mConfigurationListener); mNotificationWakeUpCoordinator.removeListener(mWakeUpListener); mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback); + + + mDockManager.ifPresent(dockManager -> dockManager.removeListener(mDockEventListener)); } }; @@ -162,6 +173,10 @@ public class LockscreenLockIconController { } }; + private final DockManager.DockEventListener mDockEventListener = + event -> mLockIcon.setDocked(event == DockManager.STATE_DOCKED + || event == DockManager.STATE_DOCKED_HIDE); + @Inject public LockscreenLockIconController(LockscreenGestureLogger lockscreenGestureLogger, KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -172,7 +187,8 @@ public class LockscreenLockIconController { StatusBarStateController statusBarStateController, ConfigurationController configurationController, NotificationWakeUpCoordinator notificationWakeUpCoordinator, - KeyguardBypassController keyguardBypassController) { + KeyguardBypassController keyguardBypassController, + @Nullable DockManager dockManager) { mLockscreenGestureLogger = lockscreenGestureLogger; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; @@ -183,6 +199,7 @@ public class LockscreenLockIconController { mConfigurationController = configurationController; mNotificationWakeUpCoordinator = notificationWakeUpCoordinator; mKeyguardBypassController = keyguardBypassController; + mDockManager = dockManager == null ? Optional.empty() : Optional.of(dockManager); mKeyguardIndicationController.setLockIconController(this); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java index be8d1821faa44..487885ac244e6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LockscreenIconControllerTest.java @@ -29,6 +29,7 @@ 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; @@ -68,6 +69,9 @@ public class LockscreenIconControllerTest extends SysuiTestCase { private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator; @Mock private KeyguardBypassController mKeyguardBypassController; + @Mock + private DockManager mDockManager; + @Before public void setUp() { @@ -77,7 +81,7 @@ public class LockscreenIconControllerTest extends SysuiTestCase { mLockscreenGestureLogger, mKeyguardUpdateMonitor, mLockPatternUtils, mShadeController, mAccessibilityController, mKeyguardIndicationController, mStatusBarStateController, mConfigurationController, mNotificationWakeUpCoordinator, - mKeyguardBypassController); + mKeyguardBypassController, mDockManager); mLockIconController.attach(mLockIcon); }