summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-06-03 19:40:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-06-03 19:40:01 +0000
commitbecad3403eb84c071c449e9db976a5f665a513fa (patch)
tree999519957a81a9f400d1f00ae36de1df796708c4
parenta67ab230b241ba43f005b8d180af54bb6918608d (diff)
parent5193237c4ae931ce8b769c1c2ed445b070ab34b0 (diff)
Merge "[flexiglass] Integrates scrim state." into main
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractor.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt217
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java32
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java46
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java46
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java230
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt3
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/BiometricUnlockInteractorKosmos.kt27
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/ScrimStartableKosmos.kt52
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,
+ )
+}