Loading packages/SystemUI/multivalentTests/src/com/android/systemui/doze/DozeScreenStateTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.WakeLockFake; Loading Loading @@ -87,6 +88,8 @@ public class DozeScreenStateTest extends SysuiTestCase { @Mock private DozeScreenBrightness mDozeScreenBrightness; @Mock private DozeInteractor mDozeInteractor; @Mock private SelectedUserInteractor mSelectedUserInteractor; @Before Loading @@ -103,7 +106,7 @@ public class DozeScreenStateTest extends SysuiTestCase { mWakeLock = new WakeLockFake(); mScreen = new DozeScreenState(mServiceFake, mHandlerFake, mDozeHost, mDozeParameters, mWakeLock, mAuthController, mUdfpsControllerProvider, mDozeLog, mDozeScreenBrightness, mSelectedUserInteractor); mDozeScreenBrightness, mDozeInteractor, mSelectedUserInteractor); } @Test Loading packages/SystemUI/multivalentTests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt +31 −6 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.power.domain.interactor import android.os.PowerManager import android.view.Display import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading @@ -25,9 +26,12 @@ import com.android.systemui.camera.cameraGestureHelper import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.dozeInteractor import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessState import com.android.systemui.statusbar.phone.ScreenOffAnimationController Loading @@ -51,9 +55,9 @@ class PowerInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val cameraGestureHelper = kosmos.cameraGestureHelper private val repository: FakePowerRepository = kosmos.fakePowerRepository private lateinit var underTest: PowerInteractor private lateinit var repository: FakePowerRepository private val keyguardRepository = FakeKeyguardRepository() @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var screenOffAnimationController: ScreenOffAnimationController Loading @@ -63,7 +67,6 @@ class PowerInteractorTest : SysuiTestCase() { fun setUp() { MockitoAnnotations.initMocks(this) repository = FakePowerRepository() underTest = PowerInteractor( repository, Loading Loading @@ -208,7 +211,7 @@ class PowerInteractorTest : SysuiTestCase() { whenever(cameraGestureHelper.canCameraGestureBeLaunched(any())).thenReturn(false) underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() underTest.onCameraLaunchGestureDetected() Loading @@ -224,7 +227,7 @@ class PowerInteractorTest : SysuiTestCase() { fun onCameraLaunchGestureDetected_maintainsAllOtherState() { underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() underTest.onCameraLaunchGestureDetected() Loading @@ -244,7 +247,7 @@ class PowerInteractorTest : SysuiTestCase() { underTest.onFinishedGoingToSleep(/* powerButtonLaunchGestureTriggeredDuringSleep= */ false) underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() Loading @@ -262,7 +265,7 @@ class PowerInteractorTest : SysuiTestCase() { // This state should only be reset onStartedGoingToSleep. underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() Loading @@ -272,4 +275,26 @@ class PowerInteractorTest : SysuiTestCase() { .isEqualTo(WakeSleepReason.POWER_BUTTON) assertTrue(repository.wakefulness.value.powerButtonLaunchGestureTriggered) } @Test fun dozeScreenState() = testScope.runTest { val dozeScreenState by collectLastValue(underTest.dozeScreenState) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.UNKNOWN) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_OFF) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.OFF) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_ON) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.ON) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_DOZE) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.DOZE) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_DOZE_SUSPEND) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.DOZE_SUSPEND) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_ON_SUSPEND) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.ON_SUSPEND) } } packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java +5 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -82,6 +83,7 @@ public class DozeScreenState implements DozeMachine.Part { private final DozeLog mDozeLog; private final DozeScreenBrightness mDozeScreenBrightness; private final SelectedUserInteractor mSelectedUserInteractor; private final DozeInteractor mDozeInteractor; private int mPendingScreenState = Display.STATE_UNKNOWN; private SettableWakeLock mWakeLock; Loading @@ -97,6 +99,7 @@ public class DozeScreenState implements DozeMachine.Part { Provider<UdfpsController> udfpsControllerProvider, DozeLog dozeLog, DozeScreenBrightness dozeScreenBrightness, DozeInteractor dozeInteractor, SelectedUserInteractor selectedUserInteractor) { mDozeService = service; mHandler = handler; Loading @@ -108,6 +111,7 @@ public class DozeScreenState implements DozeMachine.Part { mDozeLog = dozeLog; mDozeScreenBrightness = dozeScreenBrightness; mSelectedUserInteractor = selectedUserInteractor; mDozeInteractor = dozeInteractor; updateUdfpsController(); if (mUdfpsController == null) { Loading Loading @@ -225,6 +229,7 @@ public class DozeScreenState implements DozeMachine.Part { if (screenState != Display.STATE_UNKNOWN) { if (DEBUG) Log.d(TAG, "setDozeScreenState(" + screenState + ")"); mDozeService.setDozeScreenState(screenState); mDozeInteractor.setDozeScreenState(screenState); if (screenState == Display.STATE_DOZE) { // If we're entering doze, update the doze screen brightness. We might have been // clamping it to the dim brightness during the screen off animation, and we should Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt +18 −0 Original line number Diff line number Diff line Loading @@ -17,8 +17,11 @@ package com.android.systemui.keyguard.domain.interactor import android.graphics.Point import android.view.Display import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.power.data.repository.PowerRepository import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes Loading @@ -30,6 +33,7 @@ class DozeInteractor @Inject constructor( private val keyguardRepository: KeyguardRepository, private val powerRepository: PowerRepository, // TODO(b/336364825) Remove Lazy when SceneContainerFlag is released - // while the flag is off, creating this object too early results in a crash private val sceneInteractor: Lazy<SceneInteractor>, Loading @@ -41,6 +45,20 @@ constructor( return sceneInteractor.get().currentScene.value == Scenes.Lockscreen } fun setDozeScreenState(state: Int) { powerRepository.dozeScreenState.value = when (state) { Display.STATE_UNKNOWN -> DozeScreenStateModel.UNKNOWN Display.STATE_OFF -> DozeScreenStateModel.OFF Display.STATE_ON -> DozeScreenStateModel.ON Display.STATE_DOZE -> DozeScreenStateModel.DOZE Display.STATE_DOZE_SUSPEND -> DozeScreenStateModel.DOZE_SUSPEND Display.STATE_VR -> DozeScreenStateModel.VR Display.STATE_ON_SUSPEND -> DozeScreenStateModel.ON_SUSPEND else -> throw IllegalArgumentException("Invalid DozeScreenState: $state") } } fun setAodAvailable(value: Boolean) { keyguardRepository.setAodAvailable(value) } Loading packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLoggin import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.power.shared.model.ScreenPowerState import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessModel Loading Loading @@ -64,6 +65,9 @@ interface PowerRepository { */ val screenPowerState: StateFlow<ScreenPowerState> /** More granular display states, mainly for use in dozing. */ val dozeScreenState: MutableStateFlow<DozeScreenStateModel> /** Wakes up the device. */ fun wakeUp(why: String, @PowerManager.WakeReason wakeReason: Int) Loading Loading @@ -100,6 +104,8 @@ constructor( dispatcher: BroadcastDispatcher, ) : PowerRepository { override val dozeScreenState = MutableStateFlow(DozeScreenStateModel.UNKNOWN) override val isInteractive: Flow<Boolean> = conflatedCallbackFlow { fun send() { trySendWithFailureLogging(manager.isInteractive, TAG) Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/doze/DozeScreenStateTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.WakeLockFake; Loading Loading @@ -87,6 +88,8 @@ public class DozeScreenStateTest extends SysuiTestCase { @Mock private DozeScreenBrightness mDozeScreenBrightness; @Mock private DozeInteractor mDozeInteractor; @Mock private SelectedUserInteractor mSelectedUserInteractor; @Before Loading @@ -103,7 +106,7 @@ public class DozeScreenStateTest extends SysuiTestCase { mWakeLock = new WakeLockFake(); mScreen = new DozeScreenState(mServiceFake, mHandlerFake, mDozeHost, mDozeParameters, mWakeLock, mAuthController, mUdfpsControllerProvider, mDozeLog, mDozeScreenBrightness, mSelectedUserInteractor); mDozeScreenBrightness, mDozeInteractor, mSelectedUserInteractor); } @Test Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt +31 −6 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.power.domain.interactor import android.os.PowerManager import android.view.Display import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase Loading @@ -25,9 +26,12 @@ import com.android.systemui.camera.cameraGestureHelper import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.domain.interactor.dozeInteractor import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.data.repository.fakePowerRepository import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessState import com.android.systemui.statusbar.phone.ScreenOffAnimationController Loading @@ -51,9 +55,9 @@ class PowerInteractorTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope private val cameraGestureHelper = kosmos.cameraGestureHelper private val repository: FakePowerRepository = kosmos.fakePowerRepository private lateinit var underTest: PowerInteractor private lateinit var repository: FakePowerRepository private val keyguardRepository = FakeKeyguardRepository() @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var screenOffAnimationController: ScreenOffAnimationController Loading @@ -63,7 +67,6 @@ class PowerInteractorTest : SysuiTestCase() { fun setUp() { MockitoAnnotations.initMocks(this) repository = FakePowerRepository() underTest = PowerInteractor( repository, Loading Loading @@ -208,7 +211,7 @@ class PowerInteractorTest : SysuiTestCase() { whenever(cameraGestureHelper.canCameraGestureBeLaunched(any())).thenReturn(false) underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() underTest.onCameraLaunchGestureDetected() Loading @@ -224,7 +227,7 @@ class PowerInteractorTest : SysuiTestCase() { fun onCameraLaunchGestureDetected_maintainsAllOtherState() { underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() underTest.onCameraLaunchGestureDetected() Loading @@ -244,7 +247,7 @@ class PowerInteractorTest : SysuiTestCase() { underTest.onFinishedGoingToSleep(/* powerButtonLaunchGestureTriggeredDuringSleep= */ false) underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() Loading @@ -262,7 +265,7 @@ class PowerInteractorTest : SysuiTestCase() { // This state should only be reset onStartedGoingToSleep. underTest.onStartedWakingUp( PowerManager.WAKE_REASON_POWER_BUTTON, /*powerButtonLaunchGestureTriggeredDuringSleep= */ false /*powerButtonLaunchGestureTriggeredDuringSleep= */ false, ) underTest.onFinishedWakingUp() Loading @@ -272,4 +275,26 @@ class PowerInteractorTest : SysuiTestCase() { .isEqualTo(WakeSleepReason.POWER_BUTTON) assertTrue(repository.wakefulness.value.powerButtonLaunchGestureTriggered) } @Test fun dozeScreenState() = testScope.runTest { val dozeScreenState by collectLastValue(underTest.dozeScreenState) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.UNKNOWN) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_OFF) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.OFF) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_ON) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.ON) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_DOZE) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.DOZE) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_DOZE_SUSPEND) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.DOZE_SUSPEND) kosmos.dozeInteractor.setDozeScreenState(Display.STATE_ON_SUSPEND) assertThat(dozeScreenState).isEqualTo(DozeScreenStateModel.ON_SUSPEND) } }
packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java +5 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.keyguard.domain.interactor.DozeInteractor; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -82,6 +83,7 @@ public class DozeScreenState implements DozeMachine.Part { private final DozeLog mDozeLog; private final DozeScreenBrightness mDozeScreenBrightness; private final SelectedUserInteractor mSelectedUserInteractor; private final DozeInteractor mDozeInteractor; private int mPendingScreenState = Display.STATE_UNKNOWN; private SettableWakeLock mWakeLock; Loading @@ -97,6 +99,7 @@ public class DozeScreenState implements DozeMachine.Part { Provider<UdfpsController> udfpsControllerProvider, DozeLog dozeLog, DozeScreenBrightness dozeScreenBrightness, DozeInteractor dozeInteractor, SelectedUserInteractor selectedUserInteractor) { mDozeService = service; mHandler = handler; Loading @@ -108,6 +111,7 @@ public class DozeScreenState implements DozeMachine.Part { mDozeLog = dozeLog; mDozeScreenBrightness = dozeScreenBrightness; mSelectedUserInteractor = selectedUserInteractor; mDozeInteractor = dozeInteractor; updateUdfpsController(); if (mUdfpsController == null) { Loading Loading @@ -225,6 +229,7 @@ public class DozeScreenState implements DozeMachine.Part { if (screenState != Display.STATE_UNKNOWN) { if (DEBUG) Log.d(TAG, "setDozeScreenState(" + screenState + ")"); mDozeService.setDozeScreenState(screenState); mDozeInteractor.setDozeScreenState(screenState); if (screenState == Display.STATE_DOZE) { // If we're entering doze, update the doze screen brightness. We might have been // clamping it to the dim brightness during the screen off animation, and we should Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt +18 −0 Original line number Diff line number Diff line Loading @@ -17,8 +17,11 @@ package com.android.systemui.keyguard.domain.interactor import android.graphics.Point import android.view.Display import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.data.repository.KeyguardRepository import com.android.systemui.power.data.repository.PowerRepository import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes Loading @@ -30,6 +33,7 @@ class DozeInteractor @Inject constructor( private val keyguardRepository: KeyguardRepository, private val powerRepository: PowerRepository, // TODO(b/336364825) Remove Lazy when SceneContainerFlag is released - // while the flag is off, creating this object too early results in a crash private val sceneInteractor: Lazy<SceneInteractor>, Loading @@ -41,6 +45,20 @@ constructor( return sceneInteractor.get().currentScene.value == Scenes.Lockscreen } fun setDozeScreenState(state: Int) { powerRepository.dozeScreenState.value = when (state) { Display.STATE_UNKNOWN -> DozeScreenStateModel.UNKNOWN Display.STATE_OFF -> DozeScreenStateModel.OFF Display.STATE_ON -> DozeScreenStateModel.ON Display.STATE_DOZE -> DozeScreenStateModel.DOZE Display.STATE_DOZE_SUSPEND -> DozeScreenStateModel.DOZE_SUSPEND Display.STATE_VR -> DozeScreenStateModel.VR Display.STATE_ON_SUSPEND -> DozeScreenStateModel.ON_SUSPEND else -> throw IllegalArgumentException("Invalid DozeScreenState: $state") } } fun setAodAvailable(value: Boolean) { keyguardRepository.setAodAvailable(value) } Loading
packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLoggin import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.power.shared.model.DozeScreenStateModel import com.android.systemui.power.shared.model.ScreenPowerState import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.power.shared.model.WakefulnessModel Loading Loading @@ -64,6 +65,9 @@ interface PowerRepository { */ val screenPowerState: StateFlow<ScreenPowerState> /** More granular display states, mainly for use in dozing. */ val dozeScreenState: MutableStateFlow<DozeScreenStateModel> /** Wakes up the device. */ fun wakeUp(why: String, @PowerManager.WakeReason wakeReason: Int) Loading Loading @@ -100,6 +104,8 @@ constructor( dispatcher: BroadcastDispatcher, ) : PowerRepository { override val dozeScreenState = MutableStateFlow(DozeScreenStateModel.UNKNOWN) override val isInteractive: Flow<Boolean> = conflatedCallbackFlow { fun send() { trySendWithFailureLogging(manager.isInteractive, TAG) Loading