Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +4 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.motionEventSpy import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.ObservableTransitionState as SceneTransitionObservableTransitionState import com.android.compose.animation.scene.SceneKey as SceneTransitionSceneKey Loading Loading @@ -56,6 +58,7 @@ import kotlinx.coroutines.flow.map * must have entries in this map. * @param modifier A modifier. */ @OptIn(ExperimentalComposeUiApi::class) @Composable fun SceneContainer( viewModel: SceneContainerViewModel, Loading @@ -79,7 +82,7 @@ fun SceneContainer( onChangeScene = viewModel::onSceneChanged, transitions = SceneContainerTransitions, state = state, modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize().motionEventSpy { viewModel.onUserInput() }, ) { sceneByKey.forEach { (sceneKey, composableScene) -> scene( Loading packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt +11 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ interface PowerRepository { /** Wakes up the device. */ fun wakeUp(why: String, @PowerManager.WakeReason wakeReason: Int) /** Notifies the power repository that a user touch happened. */ fun userTouch() } @SysUISingleton Loading Loading @@ -83,6 +86,14 @@ constructor( ) } override fun userTouch() { manager.userActivity( systemClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, /* flags= */ 0, ) } companion object { private const val TAG = "PowerRepository" } Loading packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt +7 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.scene.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.power.data.repository.PowerRepository import com.android.systemui.scene.data.repository.SceneContainerRepository import com.android.systemui.scene.shared.logger.SceneLogger import com.android.systemui.scene.shared.model.ObservableTransitionState Loading @@ -44,6 +45,7 @@ class SceneInteractor constructor( @Application applicationScope: CoroutineScope, private val repository: SceneContainerRepository, private val powerRepository: PowerRepository, private val logger: SceneLogger, ) { Loading Loading @@ -153,6 +155,11 @@ constructor( repository.setTransitionState(transitionState) } /** Handles a user input event. */ fun onUserInput() { powerRepository.userTouch() } /** * Notifies that the UI has transitioned sufficiently to the given scene. * Loading packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,11 @@ constructor( interactor.setTransitionState(transitionState) } /** Handles an event representing user input. */ fun onUserInput() { interactor.onUserInput() } companion object { private const val SCENE_TRANSITION_LOGGING_REASON = "user input" } Loading packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt +17 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,23 @@ class PowerRepositoryImplTest : SysuiTestCase() { assertThat(reasonCaptor.value).contains(context.applicationContext.packageName) } @Test fun userActivity_notifiesPowerManager() { systemClock.setUptimeMillis(345000) underTest.userTouch() val flagsCaptor = argumentCaptor<Int>() verify(manager) .userActivity( eq(345000L), eq(PowerManager.USER_ACTIVITY_EVENT_TOUCH), capture(flagsCaptor) ) assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS) assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_INDIRECT) } private fun verifyRegistered() { // We must verify with all arguments, even those that are optional because they have default // values because Mockito is forcing us to. Once we can use mockito-kotlin, we should be Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +4 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.motionEventSpy import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.ObservableTransitionState as SceneTransitionObservableTransitionState import com.android.compose.animation.scene.SceneKey as SceneTransitionSceneKey Loading Loading @@ -56,6 +58,7 @@ import kotlinx.coroutines.flow.map * must have entries in this map. * @param modifier A modifier. */ @OptIn(ExperimentalComposeUiApi::class) @Composable fun SceneContainer( viewModel: SceneContainerViewModel, Loading @@ -79,7 +82,7 @@ fun SceneContainer( onChangeScene = viewModel::onSceneChanged, transitions = SceneContainerTransitions, state = state, modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize().motionEventSpy { viewModel.onUserInput() }, ) { sceneByKey.forEach { (sceneKey, composableScene) -> scene( Loading
packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt +11 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ interface PowerRepository { /** Wakes up the device. */ fun wakeUp(why: String, @PowerManager.WakeReason wakeReason: Int) /** Notifies the power repository that a user touch happened. */ fun userTouch() } @SysUISingleton Loading Loading @@ -83,6 +86,14 @@ constructor( ) } override fun userTouch() { manager.userActivity( systemClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_TOUCH, /* flags= */ 0, ) } companion object { private const val TAG = "PowerRepository" } Loading
packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt +7 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.scene.domain.interactor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.power.data.repository.PowerRepository import com.android.systemui.scene.data.repository.SceneContainerRepository import com.android.systemui.scene.shared.logger.SceneLogger import com.android.systemui.scene.shared.model.ObservableTransitionState Loading @@ -44,6 +45,7 @@ class SceneInteractor constructor( @Application applicationScope: CoroutineScope, private val repository: SceneContainerRepository, private val powerRepository: PowerRepository, private val logger: SceneLogger, ) { Loading Loading @@ -153,6 +155,11 @@ constructor( repository.setTransitionState(transitionState) } /** Handles a user input event. */ fun onUserInput() { powerRepository.userTouch() } /** * Notifies that the UI has transitioned sufficiently to the given scene. * Loading
packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt +5 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,11 @@ constructor( interactor.setTransitionState(transitionState) } /** Handles an event representing user input. */ fun onUserInput() { interactor.onUserInput() } companion object { private const val SCENE_TRANSITION_LOGGING_REASON = "user input" } Loading
packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt +17 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,23 @@ class PowerRepositoryImplTest : SysuiTestCase() { assertThat(reasonCaptor.value).contains(context.applicationContext.packageName) } @Test fun userActivity_notifiesPowerManager() { systemClock.setUptimeMillis(345000) underTest.userTouch() val flagsCaptor = argumentCaptor<Int>() verify(manager) .userActivity( eq(345000L), eq(PowerManager.USER_ACTIVITY_EVENT_TOUCH), capture(flagsCaptor) ) assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS) assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_INDIRECT) } private fun verifyRegistered() { // We must verify with all arguments, even those that are optional because they have default // values because Mockito is forcing us to. Once we can use mockito-kotlin, we should be Loading