Fixes two bright flashes of the notification scrim am: ddefd45358
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15638985 Change-Id: I060fb5da3120960bb3ce96543517128ac8b83b95
This commit is contained in:
@@ -111,6 +111,20 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
*/
|
*/
|
||||||
private boolean mTransitioningToFullShade;
|
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 = {
|
@IntDef(prefix = {"VISIBILITY_"}, value = {
|
||||||
TRANSPARENT,
|
TRANSPARENT,
|
||||||
SEMI_TRANSPARENT,
|
SEMI_TRANSPARENT,
|
||||||
@@ -436,6 +450,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
|
|
||||||
public void onExpandingFinished() {
|
public void onExpandingFinished() {
|
||||||
mTracking = false;
|
mTracking = false;
|
||||||
|
setUnocclusionAnimationRunning(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -679,6 +694,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
|||||||
if (mKeyguardOccluded) {
|
if (mKeyguardOccluded) {
|
||||||
mNotificationsAlpha = 0;
|
mNotificationsAlpha = 0;
|
||||||
}
|
}
|
||||||
|
if (mUnOcclusionAnimationRunning && mState == ScrimState.KEYGUARD) {
|
||||||
|
// We're unoccluding the keyguard and don't want to have a bright flash.
|
||||||
|
mNotificationsAlpha = 0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertAlphasValid();
|
assertAlphasValid();
|
||||||
|
|||||||
@@ -3093,6 +3093,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
public void animateKeyguardUnoccluding() {
|
public void animateKeyguardUnoccluding() {
|
||||||
mNotificationPanelViewController.setExpandedFraction(0f);
|
mNotificationPanelViewController.setExpandedFraction(0f);
|
||||||
mCommandQueueCallbacks.animateExpandNotificationsPanel();
|
mCommandQueueCallbacks.animateExpandNotificationsPanel();
|
||||||
|
mScrimController.setUnocclusionAnimationRunning(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3756,10 +3757,8 @@ public class StatusBar extends SystemUI implements
|
|||||||
ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming()
|
ScrimState state = mStatusBarKeyguardViewManager.bouncerNeedsScrimming()
|
||||||
? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
|
? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER;
|
||||||
mScrimController.transitionTo(state);
|
mScrimController.transitionTo(state);
|
||||||
} else if (isInLaunchTransition()
|
} else if (launchingAffordanceWithPreview) {
|
||||||
|| mLaunchCameraWhenFinishedWaking
|
// We want to avoid animating when launching with a preview.
|
||||||
|| launchingAffordanceWithPreview) {
|
|
||||||
// TODO(b/170133395) Investigate whether Emergency Gesture flag should be included here.
|
|
||||||
mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
|
mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback);
|
||||||
} else if (mBrightnessMirrorVisible) {
|
} else if (mBrightnessMirrorVisible) {
|
||||||
mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
|
mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
|
||||||
|
|||||||
@@ -1138,6 +1138,19 @@ public class ScrimControllerTest extends SysuiTestCase {
|
|||||||
assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.47f, /* expansion */ 0.2f);
|
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
|
@Test
|
||||||
public void testNotificationTransparency_inKeyguardState() {
|
public void testNotificationTransparency_inKeyguardState() {
|
||||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||||
|
|||||||
@@ -774,6 +774,30 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any());
|
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
|
@Test
|
||||||
public void testSetOccluded_propagatesToScrimController() {
|
public void testSetOccluded_propagatesToScrimController() {
|
||||||
mStatusBar.setOccluded(true);
|
mStatusBar.setOccluded(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user