Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e99cc4ce authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add doze screen state information to PowerInteractor" into main

parents 9a81b7d2 ec585b55
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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;
@@ -87,6 +88,8 @@ public class DozeScreenStateTest extends SysuiTestCase {
    @Mock
    private DozeScreenBrightness mDozeScreenBrightness;
    @Mock
    private DozeInteractor mDozeInteractor;
    @Mock
    private SelectedUserInteractor mSelectedUserInteractor;

    @Before
@@ -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
+31 −6
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -63,7 +67,6 @@ class PowerInteractorTest : SysuiTestCase() {
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        repository = FakePowerRepository()
        underTest =
            PowerInteractor(
                repository,
@@ -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()
@@ -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()
@@ -244,7 +247,7 @@ class PowerInteractorTest : SysuiTestCase() {
        underTest.onFinishedGoingToSleep(/* powerButtonLaunchGestureTriggeredDuringSleep= */ false)
        underTest.onStartedWakingUp(
            PowerManager.WAKE_REASON_POWER_BUTTON,
            /*powerButtonLaunchGestureTriggeredDuringSleep= */ false
            /*powerButtonLaunchGestureTriggeredDuringSleep= */ false,
        )
        underTest.onFinishedWakingUp()

@@ -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()

@@ -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)
        }
}
+5 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -108,6 +111,7 @@ public class DozeScreenState implements DozeMachine.Part {
        mDozeLog = dozeLog;
        mDozeScreenBrightness = dozeScreenBrightness;
        mSelectedUserInteractor = selectedUserInteractor;
        mDozeInteractor = dozeInteractor;

        updateUdfpsController();
        if (mUdfpsController == null) {
@@ -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
+18 −0
Original line number Diff line number Diff line
@@ -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
@@ -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>,
@@ -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)
    }
+6 −0
Original line number Diff line number Diff line
@@ -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
@@ -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)

@@ -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