diff options
| author | 2024-06-10 15:23:43 +0000 | |
|---|---|---|
| committer | 2024-06-10 15:23:43 +0000 | |
| commit | 2bb9fb57517625174c594a8d0800f067f2ac79bd (patch) | |
| tree | ecb36d210c380d807115c2ff207b3b903b9a844f | |
| parent | 931f8091f3540cc2261a5c455db6813162078170 (diff) | |
| parent | f0898b11abdc44555366dd04be9cebe5b24db30a (diff) | |
Merge changes Iff931ed3,I4271d2c7,I9fda746f into main
* changes:
Transform and consolidate transitionStepsToState callers
Transform and consolidate transitionStepsFromState callers
Consolidate dozeAmountTransition into transitionValue(AOD)
18 files changed, 85 insertions, 157 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt index ab551256cfc3..29a6e56891af 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt @@ -235,6 +235,7 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : job.cancel() } + @Test fun fadeFromDialogSuggestedAlpha() = testScope.runTest { @@ -511,9 +512,10 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : testScope.runTest { // GIVEN view is attached mController.onViewAttached() + val job = mController.listenForLockscreenAodTransitions(this) + runCurrent() Mockito.reset(mView) - val job = mController.listenForLockscreenAodTransitions(this) // WHEN aod to lockscreen transition is cancelled transitionRepository.sendTransitionStep( TransitionStep( @@ -537,7 +539,7 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : // THEN doze amount is updated to zero verify(mView) - .onDozeAmountChanged(eq(0f), eq(0f), eq(UdfpsKeyguardViewLegacy.ANIMATION_NONE)) + .onDozeAmountChanged(eq(0f), eq(0f), eq(ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN)) job.cancel() } @@ -546,9 +548,10 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : testScope.runTest { // GIVEN view is attached mController.onViewAttached() + val job = mController.listenForLockscreenAodTransitions(this) + runCurrent() Mockito.reset(mView) - val job = mController.listenForLockscreenAodTransitions(this) // WHEN lockscreen to aod transition is cancelled transitionRepository.sendTransitionStep( TransitionStep( diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt index 5756bca49cb2..0f061de5226c 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt @@ -125,68 +125,6 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() { } @Test - fun dozeAmountTransitionTest_AodToFromLockscreen() = - testScope.runTest { - val dozeAmountSteps by collectValues(underTest.dozeAmountTransition) - - val steps = mutableListOf<TransitionStep>() - - steps.add(TransitionStep(AOD, LOCKSCREEN, 0f, STARTED)) - steps.add(TransitionStep(AOD, LOCKSCREEN, 0.5f, RUNNING)) - steps.add(TransitionStep(AOD, LOCKSCREEN, 1f, FINISHED)) - steps.add(TransitionStep(LOCKSCREEN, AOD, 0f, STARTED)) - steps.add(TransitionStep(LOCKSCREEN, AOD, 0.8f, RUNNING)) - steps.add(TransitionStep(LOCKSCREEN, AOD, 0.9f, RUNNING)) - steps.add(TransitionStep(LOCKSCREEN, AOD, 1f, FINISHED)) - - steps.forEach { - repository.sendTransitionStep(it) - runCurrent() - } - - assertThat(dozeAmountSteps.subList(0, 3)) - .isEqualTo( - listOf( - steps[0].copy(value = 1f - steps[0].value), - steps[1].copy(value = 1f - steps[1].value), - steps[2].copy(value = 1f - steps[2].value), - ) - ) - assertThat(dozeAmountSteps.subList(3, 7)).isEqualTo(steps.subList(3, 7)) - } - - @Test - fun dozeAmountTransitionTest_AodToFromGone() = - testScope.runTest { - val dozeAmountSteps by collectValues(underTest.dozeAmountTransition) - - val steps = mutableListOf<TransitionStep>() - - steps.add(TransitionStep(AOD, GONE, 0f, STARTED)) - steps.add(TransitionStep(AOD, GONE, 0.3f, RUNNING)) - steps.add(TransitionStep(AOD, GONE, 1f, FINISHED)) - steps.add(TransitionStep(GONE, AOD, 0f, STARTED)) - steps.add(TransitionStep(GONE, AOD, 0.1f, RUNNING)) - steps.add(TransitionStep(GONE, AOD, 0.3f, RUNNING)) - steps.add(TransitionStep(GONE, AOD, 1f, FINISHED)) - - steps.forEach { - repository.sendTransitionStep(it) - runCurrent() - } - - assertThat(dozeAmountSteps.subList(0, 3)) - .isEqualTo( - listOf( - steps[0].copy(value = 1f - steps[0].value), - steps[1].copy(value = 1f - steps[1].value), - steps[2].copy(value = 1f - steps[2].value), - ) - ) - assertThat(dozeAmountSteps.subList(3, 7)).isEqualTo(steps.subList(3, 7)) - } - - @Test fun finishedKeyguardStateTests() = testScope.runTest { val finishedSteps by collectValues(underTest.finishedKeyguardState) diff --git a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt index 86c807bf9d07..5dcf1618ed6b 100644 --- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt +++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt @@ -178,6 +178,7 @@ constructor( smallClockOnAttachStateChangeListener = object : OnAttachStateChangeListener { var pastVisibility: Int? = null + override fun onViewAttachedToWindow(view: View) { clock.events.onTimeFormatChanged(DateFormat.is24HourFormat(context)) // Match the asing for view.parent's layout classes. @@ -213,6 +214,7 @@ constructor( override fun onViewAttachedToWindow(p0: View) { clock.events.onTimeFormatChanged(DateFormat.is24HourFormat(context)) } + override fun onViewDetachedFromWindow(p0: View) {} } clock.largeClock.view.addOnAttachStateChangeListener(largeClockOnAttachStateChangeListener) @@ -284,8 +286,10 @@ constructor( var smallRegionSampler: RegionSampler? = null private set + var largeRegionSampler: RegionSampler? = null private set + var smallTimeListener: TimeListener? = null var largeTimeListener: TimeListener? = null val shouldTimeListenerRun: Boolean @@ -560,7 +564,7 @@ constructor( internal fun listenForAnyStateToAodTransition(scope: CoroutineScope): Job { return scope.launch { keyguardTransitionInteractor - .transitionStepsToState(AOD) + .transition(Edge.create(to = AOD)) .filter { it.transitionState == TransitionState.STARTED } .filter { it.from != LOCKSCREEN } .collect { handleDoze(1f) } @@ -571,7 +575,7 @@ constructor( internal fun listenForAnyStateToLockscreenTransition(scope: CoroutineScope): Job { return scope.launch { keyguardTransitionInteractor - .transitionStepsToState(LOCKSCREEN) + .transition(Edge.create(to = LOCKSCREEN)) .filter { it.transitionState == TransitionState.STARTED } .filter { it.from != AOD } .collect { handleDoze(0f) } @@ -586,7 +590,7 @@ constructor( internal fun listenForAnyStateToDozingTransition(scope: CoroutineScope): Job { return scope.launch { keyguardTransitionInteractor - .transitionStepsToState(DOZING) + .transition(Edge.create(to = DOZING)) .filter { it.transitionState == TransitionState.FINISHED } .collect { handleDoze(1f) } } diff --git a/packages/SystemUI/src/com/android/keyguard/LegacyLockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LegacyLockIconViewController.java index a9fd34015e73..03b13fe47c10 100644 --- a/packages/SystemUI/src/com/android/keyguard/LegacyLockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LegacyLockIconViewController.java @@ -70,7 +70,7 @@ import com.android.systemui.keyguard.KeyguardBottomAreaRefactor; import com.android.systemui.keyguard.MigrateClocksToBlueprint; import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; -import com.android.systemui.keyguard.shared.model.TransitionStep; +import com.android.systemui.keyguard.shared.model.KeyguardState; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.res.R; @@ -167,9 +167,9 @@ public class LegacyLockIconViewController implements Dumpable, LockIconViewContr private LockIconView mView; @VisibleForTesting - final Consumer<TransitionStep> mDozeTransitionCallback = (TransitionStep step) -> { - mInterpolatedDarkAmount = step.getValue(); - mView.setDozeAmount(step.getValue()); + final Consumer<Float> mDozeTransitionCallback = (Float value) -> { + mInterpolatedDarkAmount = value; + mView.setDozeAmount(value); updateBurnInOffsets(); }; @@ -265,7 +265,7 @@ public class LegacyLockIconViewController implements Dumpable, LockIconViewContr mView.setAccessibilityDelegate(mAccessibilityDelegate); if (mFeatureFlags.isEnabled(DOZING_MIGRATION_1)) { - collectFlow(mView, mTransitionInteractor.getDozeAmountTransition(), + collectFlow(mView, mTransitionInteractor.transitionValue(KeyguardState.AOD), mDozeTransitionCallback); collectFlow(mView, mKeyguardInteractor.isDozing(), mIsDozingCallback); } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt index 298b87d05f39..c3d9240c40a1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt @@ -39,7 +39,6 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER -import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.res.R @@ -59,7 +58,6 @@ import java.io.PrintWriter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job -import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch /** Class that coordinates non-HBM animations during keyguard authentication. */ @@ -307,27 +305,12 @@ open class UdfpsKeyguardViewControllerLegacy( @VisibleForTesting suspend fun listenForLockscreenAodTransitions(scope: CoroutineScope): Job { return scope.launch { - transitionInteractor.dozeAmountTransition.collect { transitionStep -> - if ( - transitionStep.from == AOD && - transitionStep.transitionState == TransitionState.CANCELED - ) { - if (transitionInteractor.startedKeyguardTransitionStep.first().to != AOD) { - // If the next started transition isn't transitioning back to AOD, force - // doze amount to be 0f (as if the transition to the lockscreen completed). - view.onDozeAmountChanged( - 0f, - 0f, - UdfpsKeyguardViewLegacy.ANIMATION_NONE, - ) - } - } else { - view.onDozeAmountChanged( - transitionStep.value, - transitionStep.value, - UdfpsKeyguardViewLegacy.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN, - ) - } + transitionInteractor.transitionValue(AOD).collect { + view.onDozeAmountChanged( + it, + it, + UdfpsKeyguardViewLegacy.ANIMATION_BETWEEN_AOD_AND_LOCKSCREEN, + ) } } } diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalDreamStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalDreamStartable.kt index 8993a3be058b..d7f1be35d791 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/CommunalDreamStartable.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalDreamStartable.kt @@ -62,10 +62,10 @@ constructor( if (restartDreamOnUnocclude()) { keyguardTransitionInteractor.startedKeyguardTransitionStep .sample(keyguardInteractor.isDreaming, ::Pair) - .filter { - it.first.from == KeyguardState.OCCLUDED && - it.first.to == KeyguardState.DREAMING && - !it.second + .filter { (step, isDreaming) -> + step.from == KeyguardState.OCCLUDED && + step.to == KeyguardState.DREAMING && + !isDreaming } .onEach { dreamManager.startDream() } .launchIn(bgScope) diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt index fdb40fb01d79..3e513f829831 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt @@ -46,6 +46,7 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor +import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.Logger @@ -164,7 +165,7 @@ constructor( /** Whether to start dreaming when returning from occluded */ val dreamFromOccluded: Flow<Boolean> = keyguardTransitionInteractor - .transitionStepsToState(KeyguardState.OCCLUDED) + .transition(Edge.create(to = KeyguardState.OCCLUDED)) .map { it.from == KeyguardState.DREAMING } .stateIn(scope = applicationScope, SharingStarted.Eagerly, false) diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModel.kt index 9114aabae2e9..7a20ebcd2624 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModel.kt @@ -21,12 +21,14 @@ import com.android.systemui.communal.domain.interactor.CommunalInteractor import com.android.systemui.communal.util.CommunalColors import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor +import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.ui.viewmodel.DreamingToGlanceableHubTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToDreamingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToLockscreenTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGlanceableHubTransitionViewModel +import com.android.systemui.scene.shared.model.Scenes import javax.inject.Inject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow @@ -53,7 +55,7 @@ constructor( // Show UMO on glanceable hub immediately on transition into glanceable hub private val showUmoFromOccludedToGlanceableHub: Flow<Boolean> = keyguardTransitionInteractor - .transitionStepsFromState(KeyguardState.OCCLUDED) + .transition(Edge.create(from = KeyguardState.OCCLUDED)) .filter { it.to == KeyguardState.GLANCEABLE_HUB && (it.transitionState == TransitionState.STARTED || @@ -63,7 +65,10 @@ constructor( private val showUmoFromGlanceableHubToOccluded: Flow<Boolean> = keyguardTransitionInteractor - .transitionStepsFromState(KeyguardState.GLANCEABLE_HUB) + .transition( + edge = Edge.create(from = Scenes.Communal), + edgeWithoutSceneContainer = Edge.create(from = KeyguardState.GLANCEABLE_HUB) + ) .filter { it.to == KeyguardState.OCCLUDED && (it.transitionState == TransitionState.FINISHED || @@ -91,11 +96,12 @@ constructor( val showCommunalFromOccluded: Flow<Boolean> = communalInteractor.showCommunalFromOccluded val transitionFromOccludedEnded = - keyguardTransitionInteractor.transitionStepsFromState(KeyguardState.OCCLUDED).filter { step - -> - step.transitionState == TransitionState.FINISHED || - step.transitionState == TransitionState.CANCELED - } + keyguardTransitionInteractor + .transition(Edge.create(from = KeyguardState.OCCLUDED)) + .filter { step -> + step.transitionState == TransitionState.FINISHED || + step.transitionState == TransitionState.CANCELED + } val recentsBackgroundColor: Flow<Color?> = combine(showCommunalFromOccluded, communalColors.backgroundColor) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt index 756c6c20e58d..118ea16bff40 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt @@ -24,10 +24,10 @@ import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.KeyguardWmStateRefactor import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository +import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag -import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import com.android.wm.shell.animation.Interpolators import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds @@ -46,6 +46,7 @@ import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch +import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine @ExperimentalCoroutinesApi @SysUISingleton @@ -83,7 +84,7 @@ constructor( val surfaceBehindVisibility: Flow<Boolean?> = combine( transitionInteractor.startedKeyguardTransitionStep, - transitionInteractor.transitionStepsFromState(KeyguardState.ALTERNATE_BOUNCER) + transitionInteractor.transition(Edge.create(from = KeyguardState.ALTERNATE_BOUNCER)) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { return@combine null diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt index 8cf4b53618b4..aaf935f179b7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt @@ -25,10 +25,12 @@ import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlags import com.android.systemui.keyguard.KeyguardWmStateRefactor import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository +import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag +import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.Utils.Companion.sample import com.android.systemui.util.kotlin.sample @@ -81,7 +83,10 @@ constructor( val surfaceBehindVisibility: Flow<Boolean?> = combine( transitionInteractor.startedKeyguardTransitionStep, - transitionInteractor.transitionStepsFromState(KeyguardState.PRIMARY_BOUNCER) + transitionInteractor.transition( + edge = Edge.create(from = Scenes.Bouncer), + edgeWithoutSceneContainer = Edge.create(from = KeyguardState.PRIMARY_BOUNCER) + ) ) { startedStep, fromBouncerStep -> if (startedStep.to != KeyguardState.GONE) { return@combine null diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt index 2c12945bb0cd..d360f0d13816 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt @@ -250,23 +250,6 @@ constructor( return getTransitionValueFlow(state) } - /** - * AOD<->* transition information, mapped to dozeAmount range of AOD (1f) <-> - * * (0f). - */ - @SuppressLint("SharedFlowCreation") - val dozeAmountTransition: Flow<TransitionStep> = - repository.transitions - .filter { step -> step.from == AOD || step.to == AOD } - .map { step -> - if (step.from == AOD) { - step.copy(value = 1 - step.value) - } else { - step - } - } - .shareIn(scope, SharingStarted.Eagerly, replay = 1) - /** The last [TransitionStep] with a [TransitionState] of STARTED */ val startedKeyguardTransitionStep: Flow<TransitionStep> = repository.transitions.filter { step -> step.transitionState == TransitionState.STARTED } @@ -430,14 +413,6 @@ constructor( /** Whether we've currently STARTED a transition and haven't yet FINISHED it. */ val isInTransitionToAnyState = isInTransitionWhere({ true }, { true }) - fun transitionStepsFromState(fromState: KeyguardState): Flow<TransitionStep> { - return transition(Edge.create(from = fromState, to = null)) - } - - fun transitionStepsToState(toState: KeyguardState): Flow<TransitionStep> { - return transition(Edge.create(from = null, to = toState)) - } - /** * Called to start a transition that will ultimately dismiss the keyguard from the current * state. @@ -573,10 +548,6 @@ constructor( return currentKeyguardState.replayCache.last() } - fun getStartedState(): KeyguardState { - return startedKeyguardState.replayCache.last() - } - fun getStartedFromState(): KeyguardState { return startedKeyguardFromState.replayCache.last() } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt index c1e8d2214282..1306b2690c05 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt @@ -96,10 +96,23 @@ sealed class Edge { companion object { private const val TAG = "Edge" + @JvmStatic + @JvmOverloads fun create(from: KeyguardState? = null, to: KeyguardState? = null) = StateToState(from, to) + @JvmStatic + @JvmOverloads fun create(from: KeyguardState? = null, to: SceneKey) = StateToScene(from, to) + @JvmStatic + @JvmOverloads fun create(from: SceneKey, to: KeyguardState? = null) = SceneToState(from, to) + + /** + * This edge is a placeholder for when an edge needs to be passed but there is no edge for + * this flag configuration available. Usually for Scene <-> Scene edges with scene container + * enabled where these edges are managed by STL separately. + */ + val INVALID = StateToState(UNDEFINED, UNDEFINED) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt index c05a1b732a50..d9a6d6401d64 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt @@ -29,6 +29,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor import com.android.systemui.keyguard.shared.model.BurnInModel import com.android.systemui.keyguard.shared.model.ClockSize +import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.ui.StateToValue import com.android.systemui.res.R import javax.inject.Inject @@ -111,8 +112,8 @@ constructor( params: BurnInParameters, ): Flow<BurnInModel> { return combine( - keyguardTransitionInteractor.dozeAmountTransition.map { - Interpolators.FAST_OUT_SLOW_IN.getInterpolation(it.value) + keyguardTransitionInteractor.transitionValue(KeyguardState.AOD).map { + Interpolators.FAST_OUT_SLOW_IN.getInterpolation(it) }, burnInInteractor.burnIn( xDimenResourceId = R.dimen.burn_in_prevention_offset_x, diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java index c01b7b6f4883..1df085b24cdc 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java @@ -227,7 +227,7 @@ public class NotificationShadeWindowViewController implements Dumpable { bouncerViewBinder.bind(mView.findViewById(R.id.keyguard_bouncer_container)); collectFlow(mView, keyguardTransitionInteractor.transition( - Edge.Companion.create(LOCKSCREEN, DREAMING)), + Edge.create(LOCKSCREEN, DREAMING)), mLockscreenToDreamingTransition); collectFlow( mView, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt index 6dfaec9d8830..6a8c43a077a6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt @@ -441,7 +441,7 @@ constructor( anyOf( *toFlowArray(statesForHiddenKeyguard) { state -> keyguardTransitionInteractor - .transitionStepsToState(state) + .transition(Edge.create(to = state)) .map { it.value > 0f && it.transitionState == RUNNING } .onStart { emit(false) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index db4f0af5ba9f..b40bf56ee66e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -73,6 +73,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInte import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor; import com.android.systemui.keyguard.shared.model.DismissAction; +import com.android.systemui.keyguard.shared.model.Edge; import com.android.systemui.keyguard.shared.model.KeyguardDone; import com.android.systemui.keyguard.shared.model.KeyguardState; import com.android.systemui.keyguard.shared.model.TransitionStep; @@ -508,8 +509,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mListenForCanShowAlternateBouncer = null; if (!DeviceEntryUdfpsRefactor.isEnabled()) { mListenForAlternateBouncerTransitionSteps = mJavaAdapter.alwaysCollectFlow( - mKeyguardTransitionInteractor.transitionStepsFromState( - KeyguardState.ALTERNATE_BOUNCER), + mKeyguardTransitionInteractor + .transition(Edge.create(KeyguardState.ALTERNATE_BOUNCER)), this::consumeFromAlternateBouncerTransitionSteps ); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt index 5702a8c61e7a..69a6f2aed4c4 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt @@ -348,7 +348,8 @@ class ClockEventControllerTest : SysuiTestCase() { fun listenForTransitionToAodFromGone_updatesClockDozeAmountToOne() = runBlocking(IMMEDIATE) { val transitionStep = MutableStateFlow(TransitionStep()) - whenever(keyguardTransitionInteractor.transitionStepsToState(AOD)) + whenever(keyguardTransitionInteractor + .transition(Edge.create(to = AOD))) .thenReturn(transitionStep) val job = underTest.listenForAnyStateToAodTransition(this) @@ -369,7 +370,8 @@ class ClockEventControllerTest : SysuiTestCase() { fun listenForTransitionToLSFromOccluded_updatesClockDozeAmountToZero() = runBlocking(IMMEDIATE) { val transitionStep = MutableStateFlow(TransitionStep()) - whenever(keyguardTransitionInteractor.transitionStepsToState(LOCKSCREEN)) + whenever(keyguardTransitionInteractor + .transition(Edge.create(to = LOCKSCREEN))) .thenReturn(transitionStep) val job = underTest.listenForAnyStateToLockscreenTransition(this) @@ -390,7 +392,8 @@ class ClockEventControllerTest : SysuiTestCase() { fun listenForTransitionToAodFromLockscreen_neverUpdatesClockDozeAmount() = runBlocking(IMMEDIATE) { val transitionStep = MutableStateFlow(TransitionStep()) - whenever(keyguardTransitionInteractor.transitionStepsToState(AOD)) + whenever(keyguardTransitionInteractor + .transition(Edge.create(to = AOD))) .thenReturn(transitionStep) val job = underTest.listenForAnyStateToAodTransition(this) @@ -411,7 +414,8 @@ class ClockEventControllerTest : SysuiTestCase() { fun listenForAnyStateToLockscreenTransition_neverUpdatesClockDozeAmount() = runBlocking(IMMEDIATE) { val transitionStep = MutableStateFlow(TransitionStep()) - whenever(keyguardTransitionInteractor.transitionStepsToState(LOCKSCREEN)) + whenever(keyguardTransitionInteractor + .transition(Edge.create(to = LOCKSCREEN))) .thenReturn(transitionStep) val job = underTest.listenForAnyStateToLockscreenTransition(this) @@ -432,7 +436,8 @@ class ClockEventControllerTest : SysuiTestCase() { fun listenForAnyStateToDozingTransition_UpdatesClockDozeAmountToOne() = runBlocking(IMMEDIATE) { val transitionStep = MutableStateFlow(TransitionStep()) - whenever(keyguardTransitionInteractor.transitionStepsToState(DOZING)) + whenever(keyguardTransitionInteractor + .transition(Edge.create(to = DOZING))) .thenReturn(transitionStep) val job = underTest.listenForAnyStateToDozingTransition(this) diff --git a/packages/SystemUI/tests/src/com/android/keyguard/LegacyLockIconViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/LegacyLockIconViewControllerWithCoroutinesTest.kt index 25a87b8aaf60..958013908e44 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/LegacyLockIconViewControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/LegacyLockIconViewControllerWithCoroutinesTest.kt @@ -22,10 +22,6 @@ import androidx.test.filters.SmallTest import com.android.keyguard.LockIconView.ICON_LOCK import com.android.systemui.doze.util.getBurnInOffset import com.android.systemui.flags.Flags.LOCKSCREEN_WALLPAPER_DREAM_ENABLED -import com.android.systemui.keyguard.shared.model.KeyguardState.AOD -import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN -import com.android.systemui.keyguard.shared.model.TransitionState.FINISHED -import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.statusbar.StatusBarState import com.android.systemui.util.mockito.whenever import kotlinx.coroutines.Dispatchers @@ -104,7 +100,7 @@ class LegacyLockIconViewControllerWithCoroutinesTest : LegacyLockIconViewControl // WHEN dozing updates mUnderTest.mIsDozingCallback.accept(true) - mUnderTest.mDozeTransitionCallback.accept(TransitionStep(LOCKSCREEN, AOD, 1f, FINISHED)) + mUnderTest.mDozeTransitionCallback.accept(1f) // THEN the view's translation is updated to use the AoD burn-in offsets verify(mLockIconView).setTranslationY(burnInOffset.toFloat()) @@ -113,7 +109,7 @@ class LegacyLockIconViewControllerWithCoroutinesTest : LegacyLockIconViewControl // WHEN the device is no longer dozing mUnderTest.mIsDozingCallback.accept(false) - mUnderTest.mDozeTransitionCallback.accept(TransitionStep(AOD, LOCKSCREEN, 0f, FINISHED)) + mUnderTest.mDozeTransitionCallback.accept(0f) // THEN the view is updated to NO translation (no burn-in offsets anymore) verify(mLockIconView).setTranslationY(0f) |