Fix scrim turning opaque during occlusion animation.
Bug: 250542279 Test: atest ScrimController Test: launch camera and observe scrim does not go opaque Change-Id: Ic62b7358be0c823eb541d2f87e2cb18dc4a9b5ec
This commit is contained in:
@@ -53,6 +53,7 @@ import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.scrim.ScrimView;
|
||||
import com.android.systemui.shade.NotificationPanelViewController;
|
||||
import com.android.systemui.statusbar.notification.stack.ViewState;
|
||||
@@ -204,6 +205,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
private final ScreenOffAnimationController mScreenOffAnimationController;
|
||||
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
||||
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private KeyguardViewMediator mKeyguardViewMediator;
|
||||
|
||||
private GradientColors mColors;
|
||||
private boolean mNeedsDrawableColorUpdate;
|
||||
@@ -273,7 +275,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
@Main Executor mainExecutor,
|
||||
ScreenOffAnimationController screenOffAnimationController,
|
||||
KeyguardUnlockAnimationController keyguardUnlockAnimationController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
KeyguardViewMediator keyguardViewMediator) {
|
||||
mScrimStateListener = lightBarController::setScrimState;
|
||||
mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
|
||||
|
||||
@@ -312,6 +315,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
}
|
||||
});
|
||||
mColors = new GradientColors();
|
||||
|
||||
mKeyguardViewMediator = keyguardViewMediator;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -807,6 +812,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
|
||||
mBehindTint,
|
||||
interpolatedFraction);
|
||||
}
|
||||
|
||||
// If we're unlocked but still playing the occlude animation, remain at the keyguard
|
||||
// alpha temporarily.
|
||||
if (mKeyguardViewMediator.isOccludeAnimationPlaying()
|
||||
|| mState.mLaunchingAffordanceWithPreview) {
|
||||
mNotificationsAlpha = KEYGUARD_SCRIM_ALPHA;
|
||||
}
|
||||
} else if (mState == ScrimState.AUTH_SCRIMMED_SHADE) {
|
||||
float behindFraction = getInterpolatedFraction();
|
||||
behindFraction = (float) Math.pow(behindFraction, 0.8f);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static com.android.systemui.statusbar.phone.ScrimController.KEYGUARD_SCRIM_ALPHA;
|
||||
import static com.android.systemui.statusbar.phone.ScrimController.OPAQUE;
|
||||
import static com.android.systemui.statusbar.phone.ScrimController.SEMI_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT;
|
||||
@@ -58,6 +59,7 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.scrim.ScrimView;
|
||||
import com.android.systemui.statusbar.policy.FakeConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
@@ -117,6 +119,7 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
// TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The
|
||||
// event-dispatch-on-registration pattern caused some of these unit tests to fail.)
|
||||
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
@Mock private KeyguardViewMediator mKeyguardViewMediator;
|
||||
|
||||
private static class AnimatorListener implements Animator.AnimatorListener {
|
||||
private int mNumStarts;
|
||||
@@ -230,7 +233,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
|
||||
mScreenOffAnimationController,
|
||||
mKeyguardUnlockAnimationController,
|
||||
mStatusBarKeyguardViewManager);
|
||||
mStatusBarKeyguardViewManager,
|
||||
mKeyguardViewMediator);
|
||||
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
||||
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
|
||||
mScrimController.setAnimatorListener(mAnimatorListener);
|
||||
@@ -239,6 +243,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mScrimController.setWallpaperSupportsAmbientMode(false);
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
mScrimController.setLaunchingAffordanceWithPreview(false);
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -852,7 +858,8 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
|
||||
mScreenOffAnimationController,
|
||||
mKeyguardUnlockAnimationController,
|
||||
mStatusBarKeyguardViewManager);
|
||||
mStatusBarKeyguardViewManager,
|
||||
mKeyguardViewMediator);
|
||||
mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
|
||||
mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront);
|
||||
mScrimController.setAnimatorListener(mAnimatorListener);
|
||||
@@ -1592,6 +1599,30 @@ public class ScrimControllerTest extends SysuiTestCase {
|
||||
assertScrimAlpha(mScrimBehind, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keyguardAlpha_whenUnlockedForOcclusion_ifPlayingOcclusionAnimation() {
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
|
||||
when(mKeyguardViewMediator.isOccludeAnimationPlaying()).thenReturn(true);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
assertScrimAlpha(mNotificationsScrim, (int) (KEYGUARD_SCRIM_ALPHA * 255f));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void keyguardAlpha_whenUnlockedForLaunch_ifLaunchingAffordance() {
|
||||
mScrimController.transitionTo(ScrimState.KEYGUARD);
|
||||
when(mKeyguardViewMediator.isOccludeAnimationPlaying()).thenReturn(true);
|
||||
mScrimController.setLaunchingAffordanceWithPreview(true);
|
||||
|
||||
mScrimController.transitionTo(ScrimState.UNLOCKED);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
assertScrimAlpha(mNotificationsScrim, (int) (KEYGUARD_SCRIM_ALPHA * 255f));
|
||||
}
|
||||
|
||||
private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
|
||||
mScrimController.setRawPanelExpansionFraction(expansion);
|
||||
finishAnimationsImmediately();
|
||||
|
||||
Reference in New Issue
Block a user