diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java | 21 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java | 114 |
2 files changed, 123 insertions, 12 deletions
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 9cece762c7e5..e4edfa4a2bfe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -76,6 +76,7 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.scene.shared.model.Scenes; import com.android.systemui.scrim.ScrimView; import com.android.systemui.shade.ShadeViewController; +import com.android.systemui.shade.shared.flag.DualShade; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -87,6 +88,7 @@ import com.android.systemui.util.wakelock.WakeLock; import com.android.systemui.wallpapers.data.repository.WallpaperRepository; import kotlinx.coroutines.CoroutineDispatcher; +import kotlinx.coroutines.ExperimentalCoroutinesApi; import java.io.PrintWriter; import java.lang.annotation.Retention; @@ -101,6 +103,7 @@ import javax.inject.Inject; * security method gets shown). */ @SysUISingleton +@ExperimentalCoroutinesApi public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable, CoreStartable { @@ -999,7 +1002,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (!mScreenOffAnimationController.shouldExpandNotifications() && !mAnimatingPanelExpansionOnUnlock && !occluding) { - if (mTransparentScrimBackground) { + if (mTransparentScrimBackground || DualShade.isEnabled()) { mBehindAlpha = 0; mNotificationsAlpha = 0; } else if (mClipsQsScrim) { @@ -1051,7 +1054,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump behindAlpha = 0f; } mInFrontAlpha = mState.getFrontAlpha(); - if (mClipsQsScrim) { + if (DualShade.isEnabled() && mState == ScrimState.SHADE_LOCKED) { + mBehindAlpha = 0; + mNotificationsTint = Color.TRANSPARENT; + mNotificationsAlpha = 0; + mBehindTint = Color.TRANSPARENT; + } else if (mClipsQsScrim) { mNotificationsAlpha = behindAlpha; mNotificationsTint = behindTint; mBehindAlpha = 1; @@ -1105,8 +1113,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } private Pair<Integer, Float> calculateBackStateForState(ScrimState state) { - // Either darken of make the scrim transparent when you - // pull down the shade + // Either darken or make the scrim transparent when pulling down the shade. float interpolatedFract = getInterpolatedFraction(); float stateBehind = mClipsQsScrim ? state.getNotifAlpha() : state.getBehindAlpha(); @@ -1201,11 +1208,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump return true; } - if (mState == ScrimState.PULSING) { - return true; - } - - return false; + return mState == ScrimState.PULSING; } /** 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 4590071f0a2d..73e3bf4af31e 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 @@ -49,6 +49,8 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Color; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; import android.testing.TestableLooper; import android.testing.ViewUtils; import android.util.MathUtils; @@ -65,6 +67,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.ShadeInterpolation; import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants; import com.android.systemui.dock.DockManager; +import com.android.systemui.flags.EnableSceneContainer; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; @@ -75,7 +78,9 @@ import com.android.systemui.keyguard.shared.model.TransitionStep; import com.android.systemui.keyguard.ui.viewmodel.AlternateBouncerToGoneTransitionViewModel; import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel; import com.android.systemui.kosmos.KosmosJavaAdapter; +import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.scrim.ScrimView; +import com.android.systemui.shade.shared.flag.DualShade; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; import com.android.systemui.shade.transition.LinearLargeScreenShadeInterpolator; import com.android.systemui.statusbar.policy.FakeConfigurationController; @@ -309,7 +314,11 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false); mTestScope.getTestScheduler().runCurrent(); - mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); + if (SceneContainerFlag.isEnabled()) { + mScrimController.transitionTo(ScrimState.KEYGUARD); + } else { + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); + } finishAnimationsImmediately(); } @@ -358,6 +367,47 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test + @EnableSceneContainer + @DisableFlags(DualShade.FLAG_NAME) + public void transitionToShadeLocked_sceneContainer_dualShadeOff() { + mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.setQsPosition(1f, 0); + finishAnimationsImmediately(); + + assertScrimAlpha(Map.of( + mNotificationsScrim, OPAQUE, + mScrimInFront, TRANSPARENT, + mScrimBehind, OPAQUE + )); + + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, true + )); + } + + @Test + @EnableSceneContainer + @EnableFlags(DualShade.FLAG_NAME) + public void transitionToShadeLocked_sceneContainer_dualShadeOn() { + mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.setQsPosition(1f, 0); + finishAnimationsImmediately(); + + assertScrimAlpha(Map.of( + mNotificationsScrim, TRANSPARENT, + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT + )); + + assertScrimTinted(Map.of( + mScrimInFront, false, + mNotificationsScrim, false, + mScrimBehind, false + )); + } + + @Test public void transitionToShadeLocked_clippingQs() { mScrimController.setClipsQsScrim(true); mScrimController.legacyTransitionTo(SHADE_LOCKED); @@ -997,6 +1047,64 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test + @EnableSceneContainer + @DisableFlags(DualShade.FLAG_NAME) + public void transitionToUnlocked_sceneContainer_dualShadeOff() { + mScrimController.setRawPanelExpansionFraction(0f); + mScrimController.transitionTo(ScrimState.UNLOCKED); + finishAnimationsImmediately(); + + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, TRANSPARENT, + mScrimBehind, TRANSPARENT + )); + + mScrimController.setRawPanelExpansionFraction(0.5f); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, SEMI_TRANSPARENT, + mScrimBehind, SEMI_TRANSPARENT + )); + + mScrimController.setRawPanelExpansionFraction(1f); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, OPAQUE, + mScrimBehind, OPAQUE + )); + } + + @Test + @EnableSceneContainer + @EnableFlags(DualShade.FLAG_NAME) + public void transitionToUnlocked_sceneContainer_dualShadeOn() { + mScrimController.setRawPanelExpansionFraction(0f); + mScrimController.transitionTo(ScrimState.UNLOCKED); + finishAnimationsImmediately(); + + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, TRANSPARENT, + mScrimBehind, TRANSPARENT + )); + + mScrimController.setRawPanelExpansionFraction(0.5f); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, TRANSPARENT, + mScrimBehind, TRANSPARENT + )); + + mScrimController.setRawPanelExpansionFraction(1f); + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mNotificationsScrim, TRANSPARENT, + mScrimBehind, TRANSPARENT + )); + } + + @Test public void transitionToUnlocked_nonClippedQs_followsLargeScreensInterpolator() { mScrimController.setClipsQsScrim(false); mScrimController.setRawPanelExpansionFraction(0f); @@ -2086,7 +2194,7 @@ public class ScrimControllerTest extends SysuiTestCase { } private void assertScrimTinted(Map<ScrimView, Boolean> scrimToTint) { - scrimToTint.forEach((scrim, hasTint) -> assertScrimTint(scrim, hasTint)); + scrimToTint.forEach(this::assertScrimTint); } private void assertScrimTint(ScrimView scrim, boolean hasTint) { @@ -2123,7 +2231,7 @@ public class ScrimControllerTest extends SysuiTestCase { if (!scrimToAlpha.containsKey(mNotificationsScrim)) { assertScrimAlpha(mNotificationsScrim, TRANSPARENT); } - scrimToAlpha.forEach((scrimView, alpha) -> assertScrimAlpha(scrimView, alpha)); + scrimToAlpha.forEach(this::assertScrimAlpha); // When clipping, QS scrim should not affect combined visibility. if (mScrimController.getClipQsScrim() && scrimToAlpha.get(mScrimBehind) == OPAQUE) { |