diff options
| author | 2024-08-16 15:32:31 +0000 | |
|---|---|---|
| committer | 2024-08-22 15:04:01 +0000 | |
| commit | 19cf1f9456a7cd2a6e93049840ae4c5798a4d08c (patch) | |
| tree | 4faceb7a0b6a489e63d713e1e31252348fa80f16 | |
| parent | 75dc3353569ce25124b2396b8846dd0a1c750fcc (diff) | |
[flexiglass] Remove SceneLogger#logSceneChangeCommitted.
The historical reason for the distinction between scene change
"requested" vs "committed" was that there was a disconnect between where
you request the scene change and where that scene change actually
happens. This is no longer true now that the data source is STL itself.
Bug: 359173565
Flag: com.android.systemui.scene_container
Test: Updated affected unit tests.
Change-Id: I94a3beb99c3a557cbc4057c0874f3a8139402faf
6 files changed, 37 insertions, 46 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt index c15a4e5a7889..163b9b0959a8 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt @@ -58,6 +58,7 @@ import com.android.systemui.qs.ui.adapter.fakeQSSceneAdapter import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.domain.startable.sceneContainerStartable +import com.android.systemui.scene.shared.logger.sceneLogger import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource @@ -133,6 +134,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { sceneInteractor = sceneInteractor, falsingInteractor = kosmos.falsingInteractor, powerInteractor = kosmos.powerInteractor, + logger = kosmos.sceneLogger, motionEventHandlerReceiver = {}, ) .apply { setTransitionState(transitionState) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt index 64a13de2145f..8f8d2e22e161 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt @@ -1682,6 +1682,7 @@ class SceneContainerStartableTest : SysuiTestCase() { underTest.start() // run all pending dismiss succeeded/cancelled calls from setup: + runCurrent() kosmos.fakeExecutor.runAllReady() val dismissCallback: IKeyguardDismissCallback = mock() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt index b3157835ffe9..f856c559454c 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt @@ -33,6 +33,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.sceneContainerConfig import com.android.systemui.scene.sceneKeys +import com.android.systemui.scene.shared.logger.sceneLogger import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource import com.android.systemui.testKosmos @@ -72,6 +73,7 @@ class SceneContainerViewModelTest : SysuiTestCase() { sceneInteractor = sceneInteractor, falsingInteractor = kosmos.falsingInteractor, powerInteractor = kosmos.powerInteractor, + logger = kosmos.sceneLogger, motionEventHandlerReceiver = { motionEventHandler -> this@SceneContainerViewModelTest.motionEventHandler = motionEventHandler }, diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt index 5885193aa017..75cb017db5c1 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt @@ -28,8 +28,6 @@ import com.android.systemui.scene.domain.resolver.SceneResolver import com.android.systemui.scene.shared.logger.SceneLogger import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.util.kotlin.getValue -import com.android.systemui.util.kotlin.pairwiseBy import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -83,20 +81,7 @@ constructor( * Note that during a transition between scenes, more than one scene might be rendered but only * one is considered the committed/current scene. */ - val currentScene: StateFlow<SceneKey> = - repository.currentScene - .pairwiseBy(initialValue = repository.currentScene.value) { from, to -> - logger.logSceneChangeCommitted( - from = from, - to = to, - ) - to - } - .stateIn( - scope = applicationScope, - started = SharingStarted.WhileSubscribed(), - initialValue = repository.currentScene.value, - ) + val currentScene: StateFlow<SceneKey> = repository.currentScene /** * The current state of the transition. @@ -234,14 +219,15 @@ constructor( return } - logger.logSceneChangeRequested( + onSceneAboutToChangeListener.forEach { it.onSceneAboutToChange(resolvedScene, sceneState) } + + logger.logSceneChanged( from = currentSceneKey, to = resolvedScene, reason = loggingReason, isInstant = false, ) - onSceneAboutToChangeListener.forEach { it.onSceneAboutToChange(resolvedScene, sceneState) } repository.changeScene(resolvedScene, transitionKey) } @@ -274,7 +260,7 @@ constructor( return } - logger.logSceneChangeRequested( + logger.logSceneChanged( from = currentSceneKey, to = resolvedScene, reason = loggingReason, diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt index cf1518ea2b8c..94c94e22a10b 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt @@ -43,7 +43,7 @@ class SceneLogger @Inject constructor(@SceneFrameworkLog private val logBuffer: ) } - fun logSceneChangeRequested( + fun logSceneChanged( from: SceneKey, to: SceneKey, reason: String, @@ -60,7 +60,7 @@ class SceneLogger @Inject constructor(@SceneFrameworkLog private val logBuffer: }, messagePrinter = { buildString { - append("Scene change requested: $str1 → $str2") + append("Scene changed: $str1 → $str2") if (isInstant) { append(" (instant)") } @@ -70,21 +70,6 @@ class SceneLogger @Inject constructor(@SceneFrameworkLog private val logBuffer: ) } - fun logSceneChangeCommitted( - from: SceneKey, - to: SceneKey, - ) { - logBuffer.log( - tag = TAG, - level = LogLevel.INFO, - messageInitializer = { - str1 = from.toString() - str2 = to.toString() - }, - messagePrinter = { "Scene change committed: $str1 → $str2" }, - ) - } - fun logSceneTransition(transitionState: ObservableTransitionState) { when (transitionState) { is ObservableTransitionState.Transition -> { diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt index 7f7f0f163bcd..f8a9f8c5a279 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt @@ -27,6 +27,7 @@ import com.android.systemui.classifier.domain.interactor.FalsingInteractor import com.android.systemui.lifecycle.SysUiViewModel import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.scene.domain.interactor.SceneInteractor +import com.android.systemui.scene.shared.logger.SceneLogger import com.android.systemui.scene.shared.model.Scenes import dagger.assisted.Assisted import dagger.assisted.AssistedFactory @@ -42,6 +43,7 @@ constructor( private val sceneInteractor: SceneInteractor, private val falsingInteractor: FalsingInteractor, private val powerInteractor: PowerInteractor, + private val logger: SceneLogger, @Assisted private val motionEventHandlerReceiver: (MotionEventHandler?) -> Unit, ) : SysUiViewModel() { /** @@ -135,16 +137,29 @@ constructor( else -> null } - return interactionTypeOrNull?.let { interactionType -> - // It's important that the falsing system is always queried, even if no enforcement will - // occur. This helps build up the right signal in the system. - val isFalseTouch = falsingInteractor.isFalseTouch(interactionType) - - // Only enforce falsing if moving from the lockscreen scene to a new scene. - val fromLockscreenScene = currentScene.value == Scenes.Lockscreen - - !fromLockscreenScene || !isFalseTouch - } ?: true + val fromScene = currentScene.value + val isAllowed = + interactionTypeOrNull?.let { interactionType -> + // It's important that the falsing system is always queried, even if no enforcement + // will occur. This helps build up the right signal in the system. + val isFalseTouch = falsingInteractor.isFalseTouch(interactionType) + + // Only enforce falsing if moving from the lockscreen scene to a new scene. + val fromLockscreenScene = fromScene == Scenes.Lockscreen + + !fromLockscreenScene || !isFalseTouch + } ?: true + + if (isAllowed) { + // A scene change is guaranteed; log it. + logger.logSceneChanged( + from = fromScene, + to = toScene, + reason = "user interaction", + isInstant = false, + ) + } + return isAllowed } /** |