Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +19 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump */ private boolean mTransitioningToFullShade; /** * Is there currently an unocclusion animation running. Used to avoid bright flickers * of the notification scrim. */ private boolean mUnOcclusionAnimationRunning; /** * Set whether an unocclusion animation is currently running on the notification panel. Used * to avoid bright flickers of the notification scrim. */ public void setUnocclusionAnimationRunning(boolean unocclusionAnimationRunning) { mUnOcclusionAnimationRunning = unocclusionAnimationRunning; } @IntDef(prefix = {"VISIBILITY_"}, value = { TRANSPARENT, SEMI_TRANSPARENT, Loading Loading @@ -466,6 +480,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump public void onExpandingFinished() { mTracking = false; setUnocclusionAnimationRunning(false); } @VisibleForTesting Loading Loading @@ -694,6 +709,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump mNotificationsTint = mState.getNotifTint(); mBehindTint = behindTint; } if (mUnOcclusionAnimationRunning && mState == ScrimState.KEYGUARD) { // We're unoccluding the keyguard and don't want to have a bright flash. mNotificationsAlpha = 0f; } } if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) { throw new IllegalStateException("Scrim opacity is NaN for state: " + mState Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +3 −4 Original line number Diff line number Diff line Loading @@ -3579,6 +3579,7 @@ public class StatusBar extends SystemUI implements DemoMode, public void animateKeyguardUnoccluding() { mNotificationPanelViewController.setExpandedFraction(0f); animateExpandNotificationsPanel(); mScrimController.setUnocclusionAnimationRunning(true); } /** Loading Loading @@ -4465,10 +4466,8 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming() ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER; mScrimController.transitionTo(state); } else if (isInLaunchTransition() || mLaunchCameraWhenFinishedWaking || launchingAffordanceWithPreview) { // TODO(b/170133395) Investigate whether Emergency Gesture flag should be included here. } else if (launchingAffordanceWithPreview) { // We want to avoid animating when launching with a preview. mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); } else if (mBrightnessMirrorVisible) { mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -1137,6 +1137,19 @@ public class ScrimControllerTest extends SysuiTestCase { assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.47f, /* expansion */ 0.2f); } @Test public void testNotificationTransparency_unnocclusion() { mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.setUnocclusionAnimationRunning(true); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 0.0f); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 1.0f); // Verify normal behavior after mScrimController.setUnocclusionAnimationRunning(false); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.4f); } @Test public void testNotificationTransparency_inKeyguardState() { mScrimController.transitionTo(ScrimState.KEYGUARD); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -811,6 +811,30 @@ public class StatusBarTest extends SysuiTestCase { verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); } @Test public void testTransitionLaunch_goesToUnlocked() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); mStatusBar.showKeyguardImpl(); // Starting a pulse should change the scrim controller to the pulsing state when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true); when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(true); mStatusBar.updateScrimController(); verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); } @Test public void testTransitionLaunch_noPreview_doesntGoUnlocked() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); mStatusBar.showKeyguardImpl(); // Starting a pulse should change the scrim controller to the pulsing state when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true); when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(false); mStatusBar.updateScrimController(); verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD)); } @Test public void testSetOccluded_propagatesToScrimController() { mStatusBar.setOccluded(true); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +19 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump */ private boolean mTransitioningToFullShade; /** * Is there currently an unocclusion animation running. Used to avoid bright flickers * of the notification scrim. */ private boolean mUnOcclusionAnimationRunning; /** * Set whether an unocclusion animation is currently running on the notification panel. Used * to avoid bright flickers of the notification scrim. */ public void setUnocclusionAnimationRunning(boolean unocclusionAnimationRunning) { mUnOcclusionAnimationRunning = unocclusionAnimationRunning; } @IntDef(prefix = {"VISIBILITY_"}, value = { TRANSPARENT, SEMI_TRANSPARENT, Loading Loading @@ -466,6 +480,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump public void onExpandingFinished() { mTracking = false; setUnocclusionAnimationRunning(false); } @VisibleForTesting Loading Loading @@ -694,6 +709,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump mNotificationsTint = mState.getNotifTint(); mBehindTint = behindTint; } if (mUnOcclusionAnimationRunning && mState == ScrimState.KEYGUARD) { // We're unoccluding the keyguard and don't want to have a bright flash. mNotificationsAlpha = 0f; } } if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) { throw new IllegalStateException("Scrim opacity is NaN for state: " + mState Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +3 −4 Original line number Diff line number Diff line Loading @@ -3579,6 +3579,7 @@ public class StatusBar extends SystemUI implements DemoMode, public void animateKeyguardUnoccluding() { mNotificationPanelViewController.setExpandedFraction(0f); animateExpandNotificationsPanel(); mScrimController.setUnocclusionAnimationRunning(true); } /** Loading Loading @@ -4465,10 +4466,8 @@ public class StatusBar extends SystemUI implements DemoMode, ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming() ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER; mScrimController.transitionTo(state); } else if (isInLaunchTransition() || mLaunchCameraWhenFinishedWaking || launchingAffordanceWithPreview) { // TODO(b/170133395) Investigate whether Emergency Gesture flag should be included here. } else if (launchingAffordanceWithPreview) { // We want to avoid animating when launching with a preview. mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); } else if (mBrightnessMirrorVisible) { mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -1137,6 +1137,19 @@ public class ScrimControllerTest extends SysuiTestCase { assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.47f, /* expansion */ 0.2f); } @Test public void testNotificationTransparency_unnocclusion() { mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.setUnocclusionAnimationRunning(true); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 0.0f); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 1.0f); // Verify normal behavior after mScrimController.setUnocclusionAnimationRunning(false); assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.2f, /* expansion */ 0.4f); } @Test public void testNotificationTransparency_inKeyguardState() { mScrimController.transitionTo(ScrimState.KEYGUARD); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -811,6 +811,30 @@ public class StatusBarTest extends SysuiTestCase { verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); } @Test public void testTransitionLaunch_goesToUnlocked() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); mStatusBar.showKeyguardImpl(); // Starting a pulse should change the scrim controller to the pulsing state when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true); when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(true); mStatusBar.updateScrimController(); verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); } @Test public void testTransitionLaunch_noPreview_doesntGoUnlocked() { mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); mStatusBar.showKeyguardImpl(); // Starting a pulse should change the scrim controller to the pulsing state when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true); when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(false); mStatusBar.updateScrimController(); verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD)); } @Test public void testSetOccluded_propagatesToScrimController() { mStatusBar.setOccluded(true); Loading