diff options
| author | 2019-07-31 20:00:26 -0700 | |
|---|---|---|
| committer | 2019-08-01 13:24:26 -0700 | |
| commit | 10a572979c3f728e2b6a26eaef6b023243f565cb (patch) | |
| tree | f3c3b51d707f771e826a17edc88c85b269e9ecb1 | |
| parent | 5454a0dd15c9493f2d8a3af8c66ddd856da7b5a3 (diff) | |
Avoid strange animation when dynamic privacy changes
The dynamic privacy state would briefly switch during
unlocking, leading to the view appearing even though
it was already visible.
Fixes: 138620551
Test: enable dynamic privacy, unlock with face, then unlock by dragging down, observe no weird animation
Change-Id: I3cc0945af0b83ee18cd173545a099af45b442e56
2 files changed, 15 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java index 1250a8caa8bf..d9328fa3affd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java @@ -25,6 +25,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.UnlockMethodCache; +import com.android.systemui.statusbar.policy.KeyguardMonitor; import javax.inject.Inject; import javax.inject.Singleton; @@ -38,6 +39,7 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho private final UnlockMethodCache mUnlockMethodCache; private final NotificationLockscreenUserManager mLockscreenUserManager; private final StatusBarStateController mStateController; + private final KeyguardMonitor mKeyguardMonitor; private ArraySet<Listener> mListeners = new ArraySet<>(); private boolean mLastDynamicUnlocked; @@ -46,19 +48,23 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho @Inject DynamicPrivacyController(Context context, + KeyguardMonitor keyguardMonitor, NotificationLockscreenUserManager notificationLockscreenUserManager, StatusBarStateController stateController) { - this(notificationLockscreenUserManager, UnlockMethodCache.getInstance(context), + this(notificationLockscreenUserManager, keyguardMonitor, + UnlockMethodCache.getInstance(context), stateController); } @VisibleForTesting DynamicPrivacyController(NotificationLockscreenUserManager notificationLockscreenUserManager, + KeyguardMonitor keyguardMonitor, UnlockMethodCache unlockMethodCache, StatusBarStateController stateController) { mLockscreenUserManager = notificationLockscreenUserManager; mStateController = stateController; mUnlockMethodCache = unlockMethodCache; + mKeyguardMonitor = keyguardMonitor; mUnlockMethodCache.addListener(this); mLastDynamicUnlocked = isDynamicallyUnlocked(); } @@ -86,7 +92,9 @@ public class DynamicPrivacyController implements UnlockMethodCache.OnUnlockMetho } public boolean isDynamicallyUnlocked() { - return mUnlockMethodCache.canSkipBouncer() && isDynamicPrivacyEnabled(); + return (mUnlockMethodCache.canSkipBouncer() || mKeyguardMonitor.isKeyguardGoingAway() + || mKeyguardMonitor.isKeyguardFadingAway()) + && isDynamicPrivacyEnabled(); } public void addListener(Listener listener) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java index 5a056ac17b0a..d804b6f5c5ee 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java @@ -34,6 +34,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.UnlockMethodCache; +import com.android.systemui.statusbar.policy.KeyguardMonitor; import org.junit.Assert; import org.junit.Before; @@ -53,12 +54,15 @@ public class DynamicPrivacyControllerTest extends SysuiTestCase { = mock(NotificationLockscreenUserManager.class); private DynamicPrivacyController.Listener mListener = mock(DynamicPrivacyController.Listener.class); + private KeyguardMonitor mKeyguardMonitor = mock(KeyguardMonitor.class); @Before public void setUp() throws Exception { when(mCache.canSkipBouncer()).thenReturn(false); + when(mKeyguardMonitor.isShowing()).thenReturn(true); mDynamicPrivacyController = new DynamicPrivacyController( - mLockScreenUserManager, mCache, mock(StatusBarStateController.class)); + mLockScreenUserManager, mKeyguardMonitor, mCache, + mock(StatusBarStateController.class)); mDynamicPrivacyController.setStatusBarKeyguardViewManager( mock(StatusBarKeyguardViewManager.class)); mDynamicPrivacyController.addListener(mListener); |