From 067136c6164c68a6d5d9fadfd17bf2e590be3fdf Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Tue, 27 Mar 2018 18:03:25 -0700 Subject: [PATCH] Fix scrim animation when unlocking with fp Notification panel expansion was overriding the animation. The expansion needs to be ignored during "wake and unlock" states. Test: visual Test: atest packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java Change-Id: I781aece52c845f3fee9149c109ad598c7b555751 Fixes: 76018235 --- .../statusbar/phone/FingerprintUnlockController.java | 7 +++++++ .../android/systemui/statusbar/phone/ScrimController.java | 4 +++- .../com/android/systemui/statusbar/phone/ScrimState.java | 1 - .../com/android/systemui/statusbar/phone/StatusBar.java | 5 ++--- .../systemui/statusbar/phone/ScrimControllerTest.java | 5 ++++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java index a2b1013167dee..6576eb7dda9b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/FingerprintUnlockController.java @@ -399,4 +399,11 @@ public class FingerprintUnlockController extends KeyguardUpdateMonitorCallback { pw.print(" mMode="); pw.println(mMode); pw.print(" mWakeLock="); pw.println(mWakeLock); } + + public boolean isWakeAndUnlock() { + return mMode == MODE_UNLOCK + || mMode == MODE_WAKE_AND_UNLOCK + || mMode == MODE_WAKE_AND_UNLOCK_PULSING + || mMode == MODE_WAKE_AND_UNLOCK_FROM_DREAM; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 7aabc56c0ff38..4e12936ff47ab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -347,7 +347,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo if (mExpansionFraction != fraction) { mExpansionFraction = fraction; - if (!(mState == ScrimState.UNLOCKED || mState == ScrimState.KEYGUARD)) { + final boolean keyguardOrUnlocked = mState == ScrimState.UNLOCKED + || mState == ScrimState.KEYGUARD; + if (!keyguardOrUnlocked || !mExpansionAffectsAlpha) { return; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index 5b734ebf5d1ac..f4b6c38c4f6e0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -156,7 +156,6 @@ public enum ScrimState { mCurrentBehindTint = Color.BLACK; mBlankScreen = true; } else { - // Scrims should still be black at the end of the transition. mCurrentInFrontTint = Color.TRANSPARENT; mCurrentBehindTint = Color.TRANSPARENT; mBlankScreen = false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index ddb67dfa8f333..e9eb8a6468577 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -4655,9 +4655,8 @@ public class StatusBar extends SystemUI implements DemoMode, final boolean wakeAndUnlocking = mFingerprintUnlockController.getMode() == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK; - // Do not animate the scrim expansion when it's triggered by the fingerprint sensor. - mScrimController.setExpansionAffectsAlpha(mFingerprintUnlockController.getMode() - != FingerprintUnlockController.MODE_UNLOCK); + // Do not animate the scrim expansion when triggered by the fingerprint sensor. + mScrimController.setExpansionAffectsAlpha(!mFingerprintUnlockController.isWakeAndUnlock()); if (mBouncerShowing) { // Bouncer needs the front scrim when it's on top of an activity, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 7743c6b443a54..a88f31a4e8454 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @@ -73,7 +74,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Before public void setup() { mLightBarController = mock(LightBarController.class); - mScrimBehind = new ScrimView(getContext()); + mScrimBehind = spy(new ScrimView(getContext())); mScrimInFront = new ScrimView(getContext()); mWakeLock = mock(WakeLock.class); mAlarmManager = mock(AlarmManager.class); @@ -210,8 +211,10 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.finishAnimationsImmediately(); final float scrimAlpha = mScrimBehind.getViewAlpha(); + reset(mScrimBehind); mScrimController.setExpansionAffectsAlpha(false); mScrimController.setPanelExpansion(0.8f); + verifyZeroInteractions(mScrimBehind); Assert.assertEquals("Scrim opacity shouldn't change when setExpansionAffectsAlpha " + "is false", scrimAlpha, mScrimBehind.getViewAlpha(), 0.01f);