diff options
| author | 2024-06-03 19:40:01 +0000 | |
|---|---|---|
| committer | 2024-06-03 19:40:01 +0000 | |
| commit | becad3403eb84c071c449e9db976a5f665a513fa (patch) | |
| tree | 999519957a81a9f400d1f00ae36de1df796708c4 | |
| parent | a67ab230b241ba43f005b8d180af54bb6918608d (diff) | |
| parent | 5193237c4ae931ce8b769c1c2ed445b070ab34b0 (diff) | |
Merge "[flexiglass] Integrates scrim state." into main
15 files changed, 530 insertions, 156 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt index a2bbcadbf8c7..f15896ba8dcf 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt @@ -183,7 +183,7 @@ interface KeyguardRepository { val statusBarState: StateFlow<StatusBarState> /** Observable for biometric unlock state which includes the mode and unlock source */ - val biometricUnlockState: Flow<BiometricUnlockModel> + val biometricUnlockState: StateFlow<BiometricUnlockModel> fun setBiometricUnlockState( unlockMode: BiometricUnlockMode, @@ -307,17 +307,20 @@ constructor( private val _dismissAction: MutableStateFlow<DismissAction> = MutableStateFlow(DismissAction.None) override val dismissAction = _dismissAction.asStateFlow() + override fun setDismissAction(dismissAction: DismissAction) { _dismissAction.value = dismissAction } private val _keyguardDone: MutableSharedFlow<KeyguardDone> = MutableSharedFlow() override val keyguardDone = _keyguardDone.asSharedFlow() + override suspend fun setKeyguardDone(keyguardDoneType: KeyguardDone) { _keyguardDone.emit(keyguardDoneType) } override val keyguardDoneAnimationsFinished: MutableSharedFlow<Unit> = MutableSharedFlow() + override fun keyguardDoneAnimationsFinished() { keyguardDoneAnimationsFinished.tryEmit(Unit) } @@ -490,6 +493,7 @@ constructor( override fun onStartDream() { trySendWithFailureLogging(true, TAG, "updated isDreamingWithOverlay") } + override fun onWakeUp() { trySendWithFailureLogging(false, TAG, "updated isDreamingWithOverlay") } @@ -618,7 +622,8 @@ constructor( private val _biometricUnlockState: MutableStateFlow<BiometricUnlockModel> = MutableStateFlow(BiometricUnlockModel(BiometricUnlockMode.NONE, null)) - override val biometricUnlockState = _biometricUnlockState.asStateFlow() + override val biometricUnlockState: StateFlow<BiometricUnlockModel> = + _biometricUnlockState.asStateFlow() override fun setBiometricUnlockState( unlockMode: BiometricUnlockMode, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractor.kt index 576fafdc903e..ebc348388b40 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractor.kt @@ -3,6 +3,7 @@ package com.android.systemui.keyguard.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.keyguard.shared.model.BiometricUnlockMode +import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.BiometricUnlockSource import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_DISMISS_BOUNCER import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_NONE @@ -15,6 +16,7 @@ import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_ import com.android.systemui.statusbar.phone.BiometricUnlockController.WakeAndUnlockMode import javax.inject.Inject import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.StateFlow @ExperimentalCoroutinesApi @SysUISingleton @@ -24,6 +26,8 @@ constructor( private val keyguardRepository: KeyguardRepository, ) { + val unlockState: StateFlow<BiometricUnlockModel> = keyguardRepository.biometricUnlockState + fun setBiometricUnlockState( @WakeAndUnlockMode unlockStateInt: Int, biometricUnlockSource: BiometricUnlockSource?, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt index b142b4469e40..73835a3c1c96 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt @@ -181,6 +181,8 @@ constructor( /** Doze transition information. */ val dozeTransitionModel: Flow<DozeTransitionModel> = repository.dozeTransitionModel + val isPulsing: Flow<Boolean> = dozeTransitionModel.map { it.to == DozeStateModel.DOZE_PULSING } + /** * Whether the system is dreaming. [isDreaming] will be always be true when [isDozing] is true, * but not vice-versa. diff --git a/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt index 8169dec9ede6..7a9d09ad815a 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt @@ -20,6 +20,7 @@ import com.android.systemui.CoreStartable import com.android.systemui.notifications.ui.composable.NotificationsShadeSessionModule import com.android.systemui.scene.domain.interactor.WindowRootViewVisibilityInteractor import com.android.systemui.scene.domain.startable.SceneContainerStartable +import com.android.systemui.scene.domain.startable.ScrimStartable import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.shared.flag.DualShade @@ -50,6 +51,11 @@ interface KeyguardlessSceneContainerFrameworkModule { @Binds @IntoMap + @ClassKey(ScrimStartable::class) + fun scrimStartable(impl: ScrimStartable): CoreStartable + + @Binds + @IntoMap @ClassKey(WindowRootViewVisibilityInteractor::class) fun bindWindowRootViewVisibilityInteractor( impl: WindowRootViewVisibilityInteractor diff --git a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt index 9bd2694f7e82..7e6dfb8762cd 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt @@ -21,6 +21,7 @@ import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlagsModule import com.android.systemui.notifications.ui.composable.NotificationsShadeSessionModule import com.android.systemui.scene.domain.interactor.WindowRootViewVisibilityInteractor import com.android.systemui.scene.domain.startable.SceneContainerStartable +import com.android.systemui.scene.domain.startable.ScrimStartable import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.shared.flag.DualShade @@ -56,6 +57,11 @@ interface SceneContainerFrameworkModule { @Binds @IntoMap + @ClassKey(ScrimStartable::class) + fun scrimStartable(impl: ScrimStartable): CoreStartable + + @Binds + @IntoMap @ClassKey(WindowRootViewVisibilityInteractor::class) fun bindWindowRootViewVisibilityInteractor( impl: WindowRootViewVisibilityInteractor diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt new file mode 100644 index 000000000000..373916ae8e16 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:OptIn(ExperimentalCoroutinesApi::class) + +package com.android.systemui.scene.domain.startable + +import com.android.compose.animation.scene.ObservableTransitionState +import com.android.compose.animation.scene.SceneKey +import com.android.systemui.CoreStartable +import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor +import com.android.systemui.keyguard.domain.interactor.BiometricUnlockInteractor +import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor +import com.android.systemui.keyguard.shared.model.BiometricUnlockMode +import com.android.systemui.keyguard.shared.model.BiometricUnlockModel +import com.android.systemui.scene.domain.interactor.SceneContainerOcclusionInteractor +import com.android.systemui.scene.domain.interactor.SceneInteractor +import com.android.systemui.scene.shared.flag.SceneContainerFlag +import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.settings.brightness.domain.interactor.BrightnessMirrorShowingInteractor +import com.android.systemui.shade.domain.interactor.ShadeInteractor +import com.android.systemui.statusbar.phone.DozeServiceHost +import com.android.systemui.statusbar.phone.ScrimController +import com.android.systemui.statusbar.phone.ScrimState +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.launch + +@SysUISingleton +class ScrimStartable +@Inject +constructor( + @Application private val applicationScope: CoroutineScope, + private val scrimController: ScrimController, + private val sceneInteractor: SceneInteractor, + private val deviceEntryInteractor: DeviceEntryInteractor, + private val keyguardInteractor: KeyguardInteractor, + private val occlusionInteractor: SceneContainerOcclusionInteractor, + private val biometricUnlockInteractor: BiometricUnlockInteractor, + private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager, + private val alternateBouncerInteractor: AlternateBouncerInteractor, + private val shadeInteractor: ShadeInteractor, + private val brightnessMirrorShowingInteractor: BrightnessMirrorShowingInteractor, + private val dozeServiceHost: DozeServiceHost, +) : CoreStartable { + + override fun start() { + if (!SceneContainerFlag.isEnabled) { + return + } + + hydrateScrimState() + } + + private fun hydrateScrimState() { + applicationScope.launch { + combine( + deviceEntryInteractor.isDeviceEntered, + occlusionInteractor.invisibleDueToOcclusion, + sceneInteractor.currentScene, + sceneInteractor.transitionState, + keyguardInteractor.isDozing, + keyguardInteractor.isDreaming, + biometricUnlockInteractor.unlockState, + shadeInteractor.isAnyExpanded, + brightnessMirrorShowingInteractor.isShowing, + keyguardInteractor.isPulsing, + ) { flowValues -> + val isDeviceEntered = flowValues[0] as Boolean + val isOccluded = flowValues[1] as Boolean + val currentScene = flowValues[2] as SceneKey + val transitionState = flowValues[3] as ObservableTransitionState + val isDozing = flowValues[4] as Boolean + val isDreaming = flowValues[5] as Boolean + val biometricUnlockState = flowValues[6] as BiometricUnlockModel + val isAnyShadeExpanded = flowValues[7] as Boolean + val isBrightnessMirrorVisible = flowValues[8] as Boolean + val isPulsing = flowValues[9] as Boolean + + // This is true when the lockscreen scene is either the current scene or + // somewhere in the navigation back stack of scenes. + val isOnKeyguard = !isDeviceEntered + val isCurrentSceneBouncer = currentScene == Scenes.Bouncer + // This is true when moving away from one of the keyguard scenes to the gone + // scene. It happens only when unlocking or when dismissing a dismissible + // lockscreen. + val isTransitioningAwayFromKeyguard = + transitionState is ObservableTransitionState.Transition && + transitionState.fromScene.isKeyguard() && + transitionState.toScene == Scenes.Gone + + // This is true when any of the shade scenes is the current scene. + val isCurrentSceneShade = currentScene.isShade() + // This is true when moving into one of the shade scenes when a non-shade scene. + val isTransitioningToShade = + transitionState is ObservableTransitionState.Transition && + !transitionState.fromScene.isShade() && + transitionState.toScene.isShade() + + // This is true after completing a transition to communal. + val isIdleOnCommunal = transitionState.isIdle(Scenes.Communal) + + // This is true during the process of an unlock of the device. + // TODO(b/330587738): add support for remote unlock animations. If such an + // animation is underway, unlocking should be true. + val unlocking = + isOnKeyguard && + (biometricUnlockState.mode == BiometricUnlockMode.WAKE_AND_UNLOCK || + isTransitioningAwayFromKeyguard) + + if (alternateBouncerInteractor.isVisibleState()) { + // This will cancel the keyguardFadingAway animation if it is running. We + // need to do this as otherwise it can remain pending and leave keyguard in + // a weird state. + onKeyguardFadedAway(isTransitioningAwayFromKeyguard) + if (!isTransitioningToShade || (isOccluded && !isAnyShadeExpanded)) { + // Safeguard which prevents the scrim from being stuck in the wrong + // state + Model(scrimState = ScrimState.KEYGUARD, unlocking = unlocking) + } else { + // Assume scrim state for shade is already correct and do nothing + null + } + } else if (isCurrentSceneBouncer && !unlocking) { + // Bouncer needs the front scrim when it's on top of an activity, tapping on + // a notification, editing QS or being dismissed by + // FLAG_DISMISS_KEYGUARD_ACTIVITY. + Model( + scrimState = + if (statusBarKeyguardViewManager.primaryBouncerNeedsScrimming()) { + ScrimState.BOUNCER_SCRIMMED + } else { + ScrimState.BOUNCER + }, + unlocking = false, + ) + } else if (isBrightnessMirrorVisible) { + Model(scrimState = ScrimState.BRIGHTNESS_MIRROR, unlocking = unlocking) + } else if (isCurrentSceneShade && !isDeviceEntered) { + Model(scrimState = ScrimState.SHADE_LOCKED, unlocking = unlocking) + } else if (isPulsing) { + Model(scrimState = ScrimState.PULSING, unlocking = unlocking) + } else if (dozeServiceHost.hasPendingScreenOffCallback()) { + Model(scrimState = ScrimState.OFF, unlocking = unlocking) + } else if (isDozing && !unlocking) { + // This will cancel the keyguardFadingAway animation if it is running. We + // need to do this as otherwise it can remain pending and leave keyguard in + // a weird state. + onKeyguardFadedAway(isTransitioningAwayFromKeyguard) + Model(scrimState = ScrimState.AOD, unlocking = false) + } else if (isIdleOnCommunal) { + if (isOnKeyguard && isDreaming && !unlocking) { + Model( + scrimState = ScrimState.GLANCEABLE_HUB_OVER_DREAM, + unlocking = false + ) + } else { + Model(scrimState = ScrimState.GLANCEABLE_HUB, unlocking = unlocking) + } + } else if (isOnKeyguard && !unlocking && !isOccluded) { + Model(scrimState = ScrimState.KEYGUARD, unlocking = false) + } else if (isOnKeyguard && !unlocking && isDreaming) { + Model(scrimState = ScrimState.DREAMING, unlocking = false) + } else { + Model(scrimState = ScrimState.UNLOCKED, unlocking = unlocking) + } + } + .filterNotNull() + .collect { model -> + scrimController.setExpansionAffectsAlpha(!model.unlocking) + scrimController.transitionTo(model.scrimState) + } + } + } + + private fun onKeyguardFadedAway(isKeyguardGoingAway: Boolean) { + if (isKeyguardGoingAway) { + statusBarKeyguardViewManager.onKeyguardFadedAway() + } + } + + private fun SceneKey.isKeyguard(): Boolean { + return this == Scenes.Lockscreen || this == Scenes.Bouncer + } + + private fun SceneKey.isShade(): Boolean { + return this == Scenes.Shade || + this == Scenes.QuickSettings || + this == Scenes.NotificationsShade || + this == Scenes.QuickSettingsShade + } + + private data class Model( + val scrimState: ScrimState, + val unlocking: Boolean, + ) +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 78a803618c8b..7567f36302b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -2800,6 +2800,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { @Override @VisibleForTesting public void updateScrimController() { + if (SceneContainerFlag.isEnabled()) { + return; + } + Trace.beginSection("CentralSurfaces#updateScrimController"); boolean unlocking = mKeyguardStateController.isShowing() && ( @@ -2822,15 +2826,15 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { // Assume scrim state for shade is already correct and do nothing } else { // Safeguard which prevents the scrim from being stuck in the wrong state - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); } } else { if ((!mKeyguardStateController.isOccluded() || mShadeSurface.isPanelExpanded()) && (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED || mTransitionToFullShadeProgress > 0f)) { - mScrimController.transitionTo(ScrimState.AUTH_SCRIMMED_SHADE); + mScrimController.legacyTransitionTo(ScrimState.AUTH_SCRIMMED_SHADE); } else { - mScrimController.transitionTo(ScrimState.AUTH_SCRIMMED); + mScrimController.legacyTransitionTo(ScrimState.AUTH_SCRIMMED); } } // This will cancel the keyguardFadingAway animation if it is running. We need to do @@ -2842,40 +2846,40 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { // FLAG_DISMISS_KEYGUARD_ACTIVITY. ScrimState state = mStatusBarKeyguardViewManager.primaryBouncerNeedsScrimming() ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER; - mScrimController.transitionTo(state); + mScrimController.legacyTransitionTo(state); } else if (mBrightnessMirrorVisible) { - mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); + mScrimController.legacyTransitionTo(ScrimState.BRIGHTNESS_MIRROR); } else if (mState == StatusBarState.SHADE_LOCKED) { - mScrimController.transitionTo(ScrimState.SHADE_LOCKED); + mScrimController.legacyTransitionTo(ScrimState.SHADE_LOCKED); } else if (mDozeServiceHost.isPulsing()) { - mScrimController.transitionTo(ScrimState.PULSING, + mScrimController.legacyTransitionTo(ScrimState.PULSING, mDozeScrimController.getScrimCallback()); } else if (mDozeServiceHost.hasPendingScreenOffCallback()) { - mScrimController.transitionTo(ScrimState.OFF, new ScrimController.Callback() { + mScrimController.legacyTransitionTo(ScrimState.OFF, new ScrimController.Callback() { @Override public void onFinished() { mDozeServiceHost.executePendingScreenOffCallback(); } }); } else if (mDozing && !unlocking) { - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); // This will cancel the keyguardFadingAway animation if it is running. We need to do // this as otherwise it can remain pending and leave keyguard in a weird state. mUnlockScrimCallback.onCancelled(); } else if (mIsIdleOnCommunal) { if (dreaming) { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); } else { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); } } else if (mKeyguardStateController.isShowing() && !mKeyguardStateController.isOccluded() && !unlocking) { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); } else if (dreaming) { - mScrimController.transitionTo(ScrimState.DREAMING); + mScrimController.legacyTransitionTo(ScrimState.DREAMING); } else { - mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); } updateLightRevealScrimVisibility(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java index 77f37063809c..ab097e8a1086 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java @@ -448,7 +448,7 @@ public final class DozeServiceHost implements DozeHost { /** * When the dozing host is waiting for scrims to fade out to change the display state. */ - boolean hasPendingScreenOffCallback() { + public boolean hasPendingScreenOffCallback() { return mPendingScreenOffCallback != null; } 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 fe001b35e958..9cece762c7e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -72,6 +72,7 @@ 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.res.R; +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; @@ -319,8 +320,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump mScrimBehind.setViewAlpha(mBehindAlpha); }; + @VisibleForTesting Consumer<TransitionStep> mBouncerToGoneTransition; + private boolean mViewsAttached; + @Inject public ScrimController( LightBarController lightBarController, @@ -432,6 +436,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump state.prepare(state); } + hydrateStateInternally(behindScrim); + + mViewsAttached = true; + } + + private void hydrateStateInternally(ScrimView behindScrim) { + if (SceneContainerFlag.isEnabled()) { + return; + } + // Directly control transition to UNLOCKED scrim state from PRIMARY_BOUNCER, and make sure // to report back that keyguard has faded away. This fixes cases where the scrim state was // rapidly switching on unlock, due to shifts in state in CentralSurfacesImpl @@ -443,7 +457,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (state == TransitionState.STARTED) { setExpansionAffectsAlpha(false); - transitionTo(ScrimState.UNLOCKED); + legacyTransitionTo(ScrimState.UNLOCKED); } if (state == TransitionState.FINISHED || state == TransitionState.CANCELED) { @@ -508,10 +522,36 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } public void transitionTo(ScrimState state) { - transitionTo(state, null); + if (SceneContainerFlag.isUnexpectedlyInLegacyMode() || !mViewsAttached) { + return; + } + + internalTransitionTo(state, null); + } + + /** + * Transitions to the given {@link ScrimState}. + * + * @deprecated Legacy codepath only. Do not call directly. + */ + @Deprecated + public void legacyTransitionTo(ScrimState state) { + SceneContainerFlag.assertInLegacyMode(); + internalTransitionTo(state, null); + } + + /** + * Transitions to the given {@link ScrimState}. + * + * @deprecated Legacy codepath only. Do not call directly. + */ + @Deprecated + public void legacyTransitionTo(ScrimState state, Callback callback) { + SceneContainerFlag.assertInLegacyMode(); + internalTransitionTo(state, callback); } - public void transitionTo(ScrimState state, Callback callback) { + private void internalTransitionTo(ScrimState state, Callback callback) { if (mIsBouncerToGoneTransitionRunning) { Log.i(TAG, "Skipping transition to: " + state + " while mIsBouncerToGoneTransitionRunning"); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index cb9790b2495a..7ea85a199406 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -133,6 +133,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.res.R; import com.android.systemui.scene.domain.interactor.WindowRootViewVisibilityInteractor; +import com.android.systemui.scene.domain.startable.ScrimStartable; import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.brightness.BrightnessSliderController; @@ -254,7 +255,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @Mock private IDreamManager mDreamManager; @Mock private LightRevealScrimViewModel mLightRevealScrimViewModel; @Mock private LightRevealScrim mLightRevealScrim; - @Mock private ScrimController mScrimController; @Mock private DozeScrimController mDozeScrimController; @Mock private Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy; @Mock private BiometricUnlockController mBiometricUnlockController; @@ -355,6 +355,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { private final BrightnessMirrorShowingInteractor mBrightnessMirrorShowingInteractor = mKosmos.getBrightnessMirrorShowingInteractor(); + private ScrimController mScrimController; @Before public void setup() throws Exception { @@ -472,6 +473,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { when(mUserTracker.getUserHandle()).thenReturn( UserHandle.of(ActivityManager.getCurrentUser())); + mScrimController = mKosmos.getScrimController(); + createCentralSurfaces(); } @@ -733,7 +736,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @Test public void testFingerprintNotification_UpdatesScrims() { mCentralSurfaces.notifyBiometricAuthModeChanged(); - verify(mScrimController).transitionTo(any(), any()); + verify(mScrimController).legacyTransitionTo(any(), any()); } @Test @@ -742,7 +745,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { when(mBiometricUnlockController.getMode()) .thenReturn(BiometricUnlockController.MODE_WAKE_AND_UNLOCK); mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.UNLOCKED), any()); } @Test @@ -753,7 +756,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { // Starting a pulse should change the scrim controller to the pulsing state when(mCameraLauncher.isLaunchingAffordance()).thenReturn(true); mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.UNLOCKED), any()); } @Test @@ -789,7 +792,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { // Starting a pulse should change the scrim controller to the pulsing state when(mCameraLauncher.isLaunchingAffordance()).thenReturn(false); mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.KEYGUARD)); } @Test @@ -817,12 +820,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase { // Starting a pulse should change the scrim controller to the pulsing state when(mDozeServiceHost.isPulsing()).thenReturn(true); mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.PULSING), any()); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.PULSING), any()); // Ending a pulse should take it back to keyguard state when(mDozeServiceHost.isPulsing()).thenReturn(false); mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.KEYGUARD)); } @Test @@ -833,7 +836,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); - verify(mScrimController, times(2)).transitionTo(eq(ScrimState.AOD)); + verify(mScrimController, times(2)).legacyTransitionTo(eq(ScrimState.AOD)); verify(mStatusBarKeyguardViewManager).onKeyguardFadedAway(); } @@ -845,7 +848,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.AUTH_SCRIMMED_SHADE)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.AUTH_SCRIMMED_SHADE)); verify(mStatusBarKeyguardViewManager).onKeyguardFadedAway(); } @@ -861,7 +864,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.AUTH_SCRIMMED)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.AUTH_SCRIMMED)); } @Test @@ -877,7 +880,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); // Tests the safeguard to reset the scrimstate - verify(mScrimController, never()).transitionTo(any()); + verify(mScrimController, never()).legacyTransitionTo(any()); } @Test @@ -893,7 +896,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); // Tests the safeguard to reset the scrimstate - verify(mScrimController, never()).transitionTo(eq(ScrimState.KEYGUARD)); + verify(mScrimController, never()).legacyTransitionTo(eq(ScrimState.KEYGUARD)); } @Test @@ -908,7 +911,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mCentralSurfaces.updateScrimController(); - verify(mScrimController).transitionTo(eq(ScrimState.AUTH_SCRIMMED_SHADE)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.AUTH_SCRIMMED_SHADE)); } @Test @@ -920,7 +923,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); // ScrimState also transitions. - verify(mScrimController).transitionTo(ScrimState.GLANCEABLE_HUB); + verify(mScrimController).legacyTransitionTo(ScrimState.GLANCEABLE_HUB); // Transition away from the glanceable hub. mKosmos.getCommunalRepository() @@ -929,7 +932,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); // ScrimState goes back to UNLOCKED. - verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any()); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.UNLOCKED), any()); } @Test @@ -945,7 +948,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); // ScrimState also transitions. - verify(mScrimController).transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + verify(mScrimController).legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); // Transition away from the glanceable hub. mKosmos.getCommunalRepository() @@ -954,7 +957,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); // ScrimState goes back to UNLOCKED. - verify(mScrimController).transitionTo(eq(ScrimState.DREAMING)); + verify(mScrimController).legacyTransitionTo(eq(ScrimState.DREAMING)); } @Test @@ -1164,6 +1167,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @EnableSceneContainer public void brightnesShowingChanged_flagEnabled_ScrimControllerNotified() { mCentralSurfaces.registerCallbacks(); + final ScrimStartable scrimStartable = mKosmos.getScrimStartable(); + scrimStartable.start(); mBrightnessMirrorShowingInteractor.setMirrorShowing(true); mTestScope.getTestScheduler().runCurrent(); @@ -1173,7 +1178,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); ArgumentCaptor<ScrimState> captor = ArgumentCaptor.forClass(ScrimState.class); // The default is to call the one with the callback argument - verify(mScrimController, atLeastOnce()).transitionTo(captor.capture(), any()); + verify(mScrimController, atLeastOnce()).transitionTo(captor.capture()); assertThat(captor.getValue()).isNotEqualTo(ScrimState.BRIGHTNESS_MIRROR); } @@ -1184,8 +1189,9 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mBrightnessMirrorShowingInteractor.setMirrorShowing(true); mTestScope.getTestScheduler().runCurrent(); - verify(mScrimController, never()).transitionTo(ScrimState.BRIGHTNESS_MIRROR); - verify(mScrimController, never()).transitionTo(eq(ScrimState.BRIGHTNESS_MIRROR), any()); + verify(mScrimController, never()).legacyTransitionTo(ScrimState.BRIGHTNESS_MIRROR); + verify(mScrimController, never()) + .legacyTransitionTo(eq(ScrimState.BRIGHTNESS_MIRROR), any()); } @Test 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 416a869bf2f0..4590071f0a2d 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 @@ -309,7 +309,7 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); } @@ -327,7 +327,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToKeyguard() { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -342,7 +342,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToShadeLocked() { - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setQsPosition(1f, 0); finishAnimationsImmediately(); @@ -360,7 +360,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToShadeLocked_clippingQs() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setQsPosition(1f, 0); finishAnimationsImmediately(); @@ -377,7 +377,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToOff() { - mScrimController.transitionTo(ScrimState.OFF); + mScrimController.legacyTransitionTo(ScrimState.OFF); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -394,7 +394,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToAod_withRegularWallpaper() { - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -414,7 +414,7 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -423,7 +423,7 @@ public class ScrimControllerTest extends SysuiTestCase { assertEquals(0f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f); // Pulsing notification should conserve AOD wallpaper. - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -438,7 +438,7 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -457,7 +457,7 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); mScrimController.setHasBackdrop(true); finishAnimationsImmediately(); @@ -476,7 +476,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToAod_withFrontAlphaUpdates() { // Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state. - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setAodFrontScrimAlpha(0.5f); finishAnimationsImmediately(); @@ -485,7 +485,7 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimBehind, SEMI_TRANSPARENT)); // ... but that it does take effect once we enter the AOD state. - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, SEMI_TRANSPARENT, @@ -501,8 +501,8 @@ public class ScrimControllerTest extends SysuiTestCase { // ... and make sure we recall the previous front scrim alpha even if we transition away // for a bit. - mScrimController.transitionTo(ScrimState.UNLOCKED); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, OPAQUE, @@ -512,8 +512,8 @@ public class ScrimControllerTest extends SysuiTestCase { // ... and alpha updates should be completely ignored if always_on is off. // Passing it forward would mess up the wake-up transition. mAlwaysOnEnabled = false; - mScrimController.transitionTo(ScrimState.UNLOCKED); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); mScrimController.setAodFrontScrimAlpha(0.3f); assertEquals(ScrimState.AOD.getFrontAlpha(), mScrimInFront.getViewAlpha(), 0.001f); @@ -523,7 +523,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToAod_afterDocked_ignoresAlwaysOnAndUpdatesFrontAlpha() { // Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state. - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setAodFrontScrimAlpha(0.5f); finishAnimationsImmediately(); @@ -533,7 +533,7 @@ public class ScrimControllerTest extends SysuiTestCase { // ... and doesn't take effect when disabled always_on mAlwaysOnEnabled = false; - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, OPAQUE, @@ -542,9 +542,9 @@ public class ScrimControllerTest extends SysuiTestCase { // ... but will take effect after docked when(mDockManager.isDocked()).thenReturn(true); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setAodFrontScrimAlpha(0.5f); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -572,14 +572,14 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, mScrimBehind, TRANSPARENT)); assertEquals(1f, mScrimController.getState().getMaxLightRevealScrimAlpha(), 0f); - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); finishAnimationsImmediately(); // Front scrim should be transparent, but tinted // Back scrim should be semi-transparent so the user can see the wallpaper @@ -617,7 +617,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToKeyguardBouncer() { - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); finishAnimationsImmediately(); // Front scrim should be transparent // Back scrim should be visible and tinted to the surface color @@ -638,7 +638,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void lockscreenToHubTransition_setsBehindScrimAlpha() { // Start on lockscreen. - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); // Behind scrim starts at default alpha. @@ -684,7 +684,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void hubToLockscreenTransition_setsViewAlpha() { // Start on glanceable hub. - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); finishAnimationsImmediately(); // Behind scrim starts at 0 alpha. @@ -731,7 +731,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToHub() { mScrimController.setRawPanelExpansionFraction(0f); mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN); - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); finishAnimationsImmediately(); // All scrims transparent on the hub. @@ -743,7 +743,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void openBouncerOnHub() { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); // Open the bouncer. mScrimController.setRawPanelExpansionFraction(0f); @@ -760,7 +760,7 @@ public class ScrimControllerTest extends SysuiTestCase { // Bouncer is closed. mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN); - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); finishAnimationsImmediately(); // All scrims are transparent. @@ -772,7 +772,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void openShadeOnHub() { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB); // Open the shade. mScrimController.setQsPosition(1f, 0); @@ -802,7 +802,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToHubOverDream() { mScrimController.setRawPanelExpansionFraction(0f); mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN); - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); finishAnimationsImmediately(); // All scrims transparent on the hub. @@ -814,7 +814,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void openBouncerOnHubOverDream() { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); // Open the bouncer. mScrimController.setRawPanelExpansionFraction(0f); @@ -831,7 +831,7 @@ public class ScrimControllerTest extends SysuiTestCase { // Bouncer is closed. mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN); - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); finishAnimationsImmediately(); // All scrims are transparent. @@ -843,7 +843,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void openShadeOnHubOverDream() { - mScrimController.transitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); + mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM); // Open the shade. mScrimController.setQsPosition(1f, 0); @@ -880,7 +880,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void onThemeChangeWhileClipQsScrim_bouncerBehindTint_remainsBlack() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); finishAnimationsImmediately(); assertEquals(BOUNCER.getBehindTint(), Color.BLACK); @@ -892,7 +892,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToKeyguardBouncer_clippingQs() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); finishAnimationsImmediately(); // Front scrim should be transparent // Back scrim should be clipping QS @@ -912,7 +912,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); mScrimController.setClipsQsScrim(false); @@ -934,7 +934,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() { mScrimController.setClipsQsScrim(false); - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); mScrimController.setClipsQsScrim(true); @@ -955,7 +955,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToBouncer() { - mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); + mScrimController.legacyTransitionTo(ScrimState.BOUNCER_SCRIMMED); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, OPAQUE, @@ -970,7 +970,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToUnlocked_clippedQs() { mScrimController.setClipsQsScrim(true); mScrimController.setRawPanelExpansionFraction(0f); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); assertScrimTinted(Map.of( @@ -1000,7 +1000,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToUnlocked_nonClippedQs_followsLargeScreensInterpolator() { mScrimController.setClipsQsScrim(false); mScrimController.setRawPanelExpansionFraction(0f); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); assertScrimTinted(Map.of( @@ -1037,15 +1037,15 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void scrimStateCallback() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); assertEquals(mScrimState, ScrimState.UNLOCKED); - mScrimController.transitionTo(BOUNCER); + mScrimController.legacyTransitionTo(BOUNCER); finishAnimationsImmediately(); assertEquals(mScrimState, BOUNCER); - mScrimController.transitionTo(ScrimState.BOUNCER_SCRIMMED); + mScrimController.legacyTransitionTo(ScrimState.BOUNCER_SCRIMMED); finishAnimationsImmediately(); assertEquals(mScrimState, ScrimState.BOUNCER_SCRIMMED); } @@ -1054,7 +1054,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void panelExpansion() { mScrimController.setRawPanelExpansionFraction(0f); mScrimController.setRawPanelExpansionFraction(0.5f); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); reset(mScrimBehind); @@ -1114,7 +1114,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void panelExpansionAffectsAlpha() { mScrimController.setRawPanelExpansionFraction(0f); mScrimController.setRawPanelExpansionFraction(0.5f); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); final float scrimAlpha = mScrimBehind.getViewAlpha(); @@ -1135,10 +1135,10 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToUnlockedFromOff() { // Simulate unlock with fingerprint without AOD - mScrimController.transitionTo(ScrimState.OFF); + mScrimController.legacyTransitionTo(ScrimState.OFF); mScrimController.setRawPanelExpansionFraction(0f); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); @@ -1157,10 +1157,10 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void transitionToUnlockedFromAod() { // Simulate unlock with fingerprint - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); mScrimController.setRawPanelExpansionFraction(0f); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); @@ -1179,9 +1179,9 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void scrimBlanksBeforeLeavingAod() { // Simulate unlock with fingerprint - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.UNLOCKED, + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, new ScrimController.Callback() { @Override public void onDisplayBlanked() { @@ -1203,9 +1203,9 @@ public class ScrimControllerTest extends SysuiTestCase { public void scrimBlankCallbackWhenUnlockingFromPulse() { boolean[] blanked = {false}; // Simulate unlock with fingerprint - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.UNLOCKED, + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, new ScrimController.Callback() { @Override public void onDisplayBlanked() { @@ -1251,16 +1251,16 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.setHasBackdrop(false); mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(false); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); // WHEN Simulate unlock with fingerprint - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); // WHEN transitioning to UNLOCKED, onDisplayCallbackBlanked callback called to continue // the transition but the scrim was not actually blanked - mScrimController.transitionTo(ScrimState.UNLOCKED, + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, new ScrimController.Callback() { @Override public void onDisplayBlanked() { @@ -1279,7 +1279,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void testScrimCallback() { int[] callOrder = {0, 0, 0}; int[] currentCall = {0}; - mScrimController.transitionTo(ScrimState.AOD, new ScrimController.Callback() { + mScrimController.legacyTransitionTo(ScrimState.AOD, new ScrimController.Callback() { @Override public void onStart() { callOrder[0] = ++currentCall[0]; @@ -1310,19 +1310,19 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testScrimCallbackCancelled() { boolean[] cancelledCalled = {false}; - mScrimController.transitionTo(ScrimState.AOD, new ScrimController.Callback() { + mScrimController.legacyTransitionTo(ScrimState.AOD, new ScrimController.Callback() { @Override public void onCancelled() { cancelledCalled[0] = true; } }); - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); Assert.assertTrue("onCancelled should have been called", cancelledCalled[0]); } @Test public void testHoldsWakeLock_whenAOD() { - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); verify(mWakeLock).acquire(anyString()); verify(mWakeLock, never()).release(anyString()); finishAnimationsImmediately(); @@ -1331,24 +1331,24 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testDoesNotHoldWakeLock_whenUnlocking() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); verifyZeroInteractions(mWakeLock); } @Test public void testCallbackInvokedOnSameStateTransition() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); ScrimController.Callback callback = mock(ScrimController.Callback.class); - mScrimController.transitionTo(ScrimState.UNLOCKED, callback); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED, callback); verify(callback).onFinished(); } @Test public void testHoldsAodWallpaperAnimationLock() { // Pre-conditions - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); reset(mWakeLock); @@ -1362,7 +1362,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testHoldsPulsingWallpaperAnimationLock() { // Pre-conditions - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); finishAnimationsImmediately(); reset(mWakeLock); @@ -1378,9 +1378,9 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); verify(mAlarmManager).setExact(anyInt(), anyLong(), any(), any(), any()); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); verify(mAlarmManager).cancel(any(AlarmManager.OnAlarmListener.class)); } @@ -1391,22 +1391,22 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); verify(mAlarmManager).setExact(anyInt(), anyLong(), any(), any(), any()); } @Test public void testConservesExpansionOpacityAfterTransition() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setRawPanelExpansionFraction(0.5f); finishAnimationsImmediately(); final float expandedAlpha = mScrimBehind.getViewAlpha(); - mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); + mScrimController.legacyTransitionTo(ScrimState.BRIGHTNESS_MIRROR); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); finishAnimationsImmediately(); assertEquals("Scrim expansion opacity wasn't conserved when transitioning back", @@ -1415,12 +1415,12 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testCancelsOldAnimationBeforeBlanking() { - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); // Consume whatever value we had before mAnimatorListener.reset(); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); Assert.assertTrue("Animators not canceled", mAnimatorListener.getNumCancels() != 0); } @@ -1439,13 +1439,13 @@ public class ScrimControllerTest extends SysuiTestCase { mTestScope.getTestScheduler().runCurrent(); mScrimController.setKeyguardOccluded(true); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, mScrimBehind, OPAQUE)); - mScrimController.transitionTo(ScrimState.PULSING); + mScrimController.legacyTransitionTo(ScrimState.PULSING); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, @@ -1457,7 +1457,7 @@ public class ScrimControllerTest extends SysuiTestCase { mWallpaperRepository.getWallpaperSupportsAmbientMode().setValue(true); mTestScope.getTestScheduler().runCurrent(); - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, @@ -1478,7 +1478,7 @@ public class ScrimControllerTest extends SysuiTestCase { if (state == ScrimState.UNINITIALIZED) { continue; } - mScrimController.transitionTo(state); + mScrimController.legacyTransitionTo(state); finishAnimationsImmediately(); assertEquals("Should be clickable unless AOD or PULSING, was: " + state, mScrimBehind.getViewAlpha() != 0 && !eatsTouches.contains(state), @@ -1520,7 +1520,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testScrimsOpaque_whenShadeFullyExpanded() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setRawPanelExpansionFraction(1); // notifications scrim alpha change require calling setQsPosition mScrimController.setQsPosition(0, 300); @@ -1536,7 +1536,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void testAuthScrim_setClipQSScrimTrue_notifScrimOpaque_whenShadeFullyExpanded() { // GIVEN device has an activity showing ('UNLOCKED' state can occur on the lock screen // with the camera app occluding the keyguard) - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setClipsQsScrim(true); mScrimController.setRawPanelExpansionFraction(1); // notifications scrim alpha change require calling setQsPosition @@ -1544,7 +1544,7 @@ public class ScrimControllerTest extends SysuiTestCase { finishAnimationsImmediately(); // WHEN the user triggers the auth bouncer - mScrimController.transitionTo(ScrimState.AUTH_SCRIMMED_SHADE); + mScrimController.legacyTransitionTo(ScrimState.AUTH_SCRIMMED_SHADE); finishAnimationsImmediately(); assertEquals("Behind scrim should be opaque", @@ -1564,7 +1564,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void testAuthScrim_setClipQSScrimFalse_notifScrimOpaque_whenShadeFullyExpanded() { // GIVEN device has an activity showing ('UNLOCKED' state can occur on the lock screen // with the camera app occluding the keyguard) - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setClipsQsScrim(false); mScrimController.setRawPanelExpansionFraction(1); // notifications scrim alpha change require calling setQsPosition @@ -1572,7 +1572,7 @@ public class ScrimControllerTest extends SysuiTestCase { finishAnimationsImmediately(); // WHEN the user triggers the auth bouncer - mScrimController.transitionTo(ScrimState.AUTH_SCRIMMED_SHADE); + mScrimController.legacyTransitionTo(ScrimState.AUTH_SCRIMMED_SHADE); finishAnimationsImmediately(); assertEquals("Behind scrim should be opaque", @@ -1590,11 +1590,11 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testAuthScrimKeyguard() { // GIVEN device is on the keyguard - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); // WHEN the user triggers the auth bouncer - mScrimController.transitionTo(ScrimState.AUTH_SCRIMMED); + mScrimController.legacyTransitionTo(ScrimState.AUTH_SCRIMMED); finishAnimationsImmediately(); // THEN the front scrim is updated and the KEYGUARD scrims are the same as the @@ -1608,7 +1608,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testScrimsVisible_whenShadeVisible() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setRawPanelExpansionFraction(0.3f); // notifications scrim alpha change require calling setQsPosition mScrimController.setQsPosition(0, 300); @@ -1643,7 +1643,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testScrimsVisible_whenShadeVisible_clippingQs() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setRawPanelExpansionFraction(0.3f); // notifications scrim alpha change require calling setQsPosition mScrimController.setQsPosition(0.5f, 300); @@ -1657,7 +1657,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testScrimsVisible_whenShadeVisibleOnLockscreen() { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setQsPosition(0.25f, 300); assertScrimAlpha(Map.of( @@ -1668,7 +1668,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testNotificationScrimTransparent_whenOnLockscreen() { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); // even if shade is not pulled down, panel has expansion of 1 on the lockscreen mScrimController.setRawPanelExpansionFraction(1); mScrimController.setQsPosition(0f, /*qs panel bottom*/ 0); @@ -1681,7 +1681,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() { mScrimController.setRawPanelExpansionFraction(1); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -1695,7 +1695,7 @@ public class ScrimControllerTest extends SysuiTestCase { // clipping doesn't change tested logic but allows to assert scrims more in line with // their expected large screen behaviour mScrimController.setClipsQsScrim(false); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setQsPosition(1f, 100 /* value doesn't matter */); assertTintAfterExpansion(mScrimBehind, SHADE_LOCKED.getBehindTint(), /* expansion= */ 1f); @@ -1709,7 +1709,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(true); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); float expansion = 0.8f; float expectedAlpha = @@ -1725,7 +1725,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); float expansion = 0.8f; float expectedAlpha = ShadeInterpolation.getNotificationScrimAlpha(expansion); @@ -1740,7 +1740,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); assertAlphaAfterExpansion( mNotificationsScrim, ScrimState.KEYGUARD.getNotifAlpha(), /* expansion */ 0f); @@ -1760,7 +1760,7 @@ public class ScrimControllerTest extends SysuiTestCase { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(true); mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); float expansion = 0.8f; float alpha = 1 - BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(expansion); @@ -1780,7 +1780,7 @@ public class ScrimControllerTest extends SysuiTestCase { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false); mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); float expansion = 0.8f; float alpha = 1 - ShadeInterpolation.getNotificationScrimAlpha(expansion); @@ -1800,7 +1800,7 @@ public class ScrimControllerTest extends SysuiTestCase { when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false); mScrimController.setClipsQsScrim(false); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); assertThat(mScrimBehind.getTint()) .isEqualTo(ScrimState.KEYGUARD.getBehindTint()); @@ -1810,7 +1810,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void testNotificationTransparency_followsTransitionToFullShade() { mScrimController.setClipsQsScrim(true); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setRawPanelExpansionFraction(1.0f); finishAnimationsImmediately(); @@ -1821,7 +1821,7 @@ public class ScrimControllerTest extends SysuiTestCase { )); float shadeLockedAlpha = mNotificationsScrim.getViewAlpha(); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setRawPanelExpansionFraction(1.0f); finishAnimationsImmediately(); float keyguardAlpha = mNotificationsScrim.getViewAlpha(); @@ -1849,10 +1849,10 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationTransparency_followsNotificationScrimProgress() { - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setRawPanelExpansionFraction(1.0f); finishAnimationsImmediately(); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); mScrimController.setRawPanelExpansionFraction(1.0f); finishAnimationsImmediately(); @@ -1866,7 +1866,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_qsNotClipped_alphaMatchesNotificationExpansionProgress() { mScrimController.setClipsQsScrim(false); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); // RawPanelExpansion and QsExpansion are usually used for the notification alpha // calculation. // Here we set them to non-zero values explicitly to make sure that in not clipped mode, @@ -1927,7 +1927,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationBoundsTopGetsPassedToKeyguard() { - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); mScrimController.setQsPosition(1f, 0); finishAnimationsImmediately(); @@ -1938,7 +1938,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationBoundsTopDoesNotGetPassedToKeyguardWhenNotifScrimIsNotVisible() { mScrimController.setKeyguardOccluded(true); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); mScrimController.setNotificationsBounds(0f, 100f, 0f, 0f); @@ -1949,7 +1949,7 @@ public class ScrimControllerTest extends SysuiTestCase { public void transitionToDreaming() { mScrimController.setRawPanelExpansionFraction(0f); mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN); - mScrimController.transitionTo(ScrimState.DREAMING); + mScrimController.legacyTransitionTo(ScrimState.DREAMING); finishAnimationsImmediately(); assertScrimAlpha(Map.of( @@ -1975,7 +1975,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void setUnOccludingAnimationKeyguard() { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); assertThat(mNotificationsScrim.getViewAlpha()) .isWithin(0.01f).of(ScrimState.KEYGUARD.getNotifAlpha()); @@ -1990,14 +1990,14 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testHidesScrimFlickerInActivity() { mScrimController.setKeyguardOccluded(true); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, mScrimBehind, TRANSPARENT, mNotificationsScrim, TRANSPARENT)); - mScrimController.transitionTo(SHADE_LOCKED); + mScrimController.legacyTransitionTo(SHADE_LOCKED); finishAnimationsImmediately(); assertScrimAlpha(Map.of( mScrimInFront, TRANSPARENT, @@ -2008,7 +2008,7 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void notificationAlpha_inKeyguardState_bouncerNotActive_clipsQsScrimFalse() { mScrimController.setClipsQsScrim(false); - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); float expansion = 0.8f; assertAlphaAfterExpansion(mNotificationsScrim, 0f, expansion); @@ -2016,14 +2016,14 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void aodStateSetsFrontScrimToNotBlend() { - mScrimController.transitionTo(ScrimState.AOD); + mScrimController.legacyTransitionTo(ScrimState.AOD); assertFalse("Front scrim should not blend with main color", mScrimInFront.shouldBlendWithMainColor()); } @Test public void applyState_unlocked_bouncerShowing() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.setBouncerHiddenFraction(0.99f); mScrimController.setRawPanelExpansionFraction(0f); finishAnimationsImmediately(); @@ -2032,13 +2032,13 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void ignoreTransitionRequestWhileKeyguardTransitionRunning() { - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.mBouncerToGoneTransition.accept( new TransitionStep(KeyguardState.PRIMARY_BOUNCER, KeyguardState.GONE, 0f, TransitionState.RUNNING, "ScrimControllerTest")); // This request should not happen - mScrimController.transitionTo(ScrimState.BOUNCER); + mScrimController.legacyTransitionTo(ScrimState.BOUNCER); assertThat(mScrimController.getState()).isEqualTo(ScrimState.UNLOCKED); } @@ -2055,16 +2055,16 @@ public class ScrimControllerTest extends SysuiTestCase { @Test public void testDoNotAnimateChangeIfOccludeAnimationPlaying() { mScrimController.setOccludeAnimationPlaying(true); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); assertFalse(ScrimState.UNLOCKED.mAnimateChange); } @Test public void testNotifScrimAlpha_1f_afterUnlockFinishedAndExpanded() { - mScrimController.transitionTo(ScrimState.KEYGUARD); + mScrimController.legacyTransitionTo(ScrimState.KEYGUARD); when(mKeyguardUnlockAnimationController.isPlayingCannedUnlockAnimation()).thenReturn(true); - mScrimController.transitionTo(ScrimState.UNLOCKED); + mScrimController.legacyTransitionTo(ScrimState.UNLOCKED); mScrimController.onUnlockAnimationFinished(); assertAlphaAfterExpansion(mNotificationsScrim, 1f, 1f); } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt index 1a45c4298691..22b8c8dbdfbd 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt @@ -104,7 +104,8 @@ class FakeKeyguardRepository @Inject constructor() : KeyguardRepository { private val _biometricUnlockState = MutableStateFlow(BiometricUnlockModel(BiometricUnlockMode.NONE, null)) - override val biometricUnlockState: Flow<BiometricUnlockModel> = _biometricUnlockState + override val biometricUnlockState: StateFlow<BiometricUnlockModel> = + _biometricUnlockState.asStateFlow() private val _fingerprintSensorLocation = MutableStateFlow<Point?>(null) override val fingerprintSensorLocation: Flow<Point?> = _fingerprintSensorLocation diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractorKosmos.kt new file mode 100644 index 000000000000..7a3f925fccb6 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractorKosmos.kt @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.keyguard.domain.interactor + +import com.android.systemui.keyguard.data.repository.keyguardRepository +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture + +val Kosmos.biometricUnlockInteractor by Fixture { + BiometricUnlockInteractor( + keyguardRepository = keyguardRepository, + ) +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt index 0b28e3f0a083..6d2d04a70538 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt @@ -50,6 +50,7 @@ import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.scene.domain.startable.scrimStartable import com.android.systemui.scene.sceneContainerConfig import com.android.systemui.scene.shared.model.sceneDataSource import com.android.systemui.settings.brightness.domain.interactor.brightnessMirrorShowingInteractor @@ -59,6 +60,7 @@ import com.android.systemui.shade.shadeController import com.android.systemui.statusbar.chips.ui.viewmodel.ongoingActivityChipsViewModel import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor +import com.android.systemui.statusbar.phone.scrimController import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.statusbar.policy.data.repository.fakeDeviceProvisioningRepository import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor @@ -130,4 +132,6 @@ class KosmosJavaAdapter() { val shadeInteractor by lazy { kosmos.shadeInteractor } val ongoingActivityChipsViewModel by lazy { kosmos.ongoingActivityChipsViewModel } + val scrimController by lazy { kosmos.scrimController } + val scrimStartable by lazy { kosmos.scrimStartable } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/ScrimStartableKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/ScrimStartableKosmos.kt new file mode 100644 index 000000000000..87b6addd7ab1 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/ScrimStartableKosmos.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:OptIn(ExperimentalCoroutinesApi::class) + +package com.android.systemui.scene.domain.startable + +import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor +import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor +import com.android.systemui.keyguard.domain.interactor.biometricUnlockInteractor +import com.android.systemui.keyguard.domain.interactor.keyguardInteractor +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor +import com.android.systemui.scene.domain.interactor.sceneInteractor +import com.android.systemui.settings.brightness.domain.interactor.brightnessMirrorShowingInteractor +import com.android.systemui.shade.domain.interactor.shadeInteractor +import com.android.systemui.statusbar.phone.dozeServiceHost +import com.android.systemui.statusbar.phone.scrimController +import com.android.systemui.statusbar.phone.statusBarKeyguardViewManager +import kotlinx.coroutines.ExperimentalCoroutinesApi + +val Kosmos.scrimStartable by Fixture { + ScrimStartable( + applicationScope = applicationCoroutineScope, + scrimController = scrimController, + sceneInteractor = sceneInteractor, + deviceEntryInteractor = deviceEntryInteractor, + keyguardInteractor = keyguardInteractor, + occlusionInteractor = sceneContainerOcclusionInteractor, + biometricUnlockInteractor = biometricUnlockInteractor, + statusBarKeyguardViewManager = statusBarKeyguardViewManager, + alternateBouncerInteractor = alternateBouncerInteractor, + shadeInteractor = shadeInteractor, + brightnessMirrorShowingInteractor = brightnessMirrorShowingInteractor, + dozeServiceHost = dozeServiceHost, + ) +} |