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

Commit e2f2d9ab authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[CS] Move CS#wakeUpForFullScreenIntent to PowerInteractor.

Bug: 277764509
Bug: 277762009
Test: manual: verified via logging that
PowerInteractor#wakeUpForFullScreenIntent is called when an FSI
notification comes in while dozing
Test: atest PowerInteractorTest StatusBarNotificationActivityStarterTest

Change-Id: I7641db4e63390a909431ccd4b200da33eedaf5c7
parent 8bd61cdd
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ package com.android.systemui.power.domain.interactor
import android.os.PowerManager
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.KeyguardRepository
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.power.data.repository.PowerRepository
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
@@ -32,6 +33,7 @@ class PowerInteractor
@Inject
constructor(
    private val repository: PowerRepository,
    private val keyguardRepository: KeyguardRepository,
    private val falsingCollector: FalsingCollector,
    private val screenOffAnimationController: ScreenOffAnimationController,
    private val statusBarStateController: StatusBarStateController,
@@ -54,4 +56,21 @@ constructor(
            falsingCollector.onScreenOnFromTouch()
        }
    }

    /**
     * Wakes up the device if the device was dozing or going to sleep in order to display a
     * full-screen intent.
     */
    fun wakeUpForFullScreenIntent() {
        if (
            keyguardRepository.wakefulness.value.isStartingToSleep() ||
                statusBarStateController.isDozing
        ) {
            repository.wakeUp(why = FSI_WAKE_WHY, wakeReason = PowerManager.WAKE_REASON_APPLICATION)
        }
    }

    companion object {
        private const val FSI_WAKE_WHY = "full_screen_intent"
    }
}
+0 −2
Original line number Diff line number Diff line
@@ -362,8 +362,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner {
    @VisibleForTesting
    void setBarStateForTest(int state);

    void wakeUpForFullScreenIntent();

    void showTransientUnchecked();

    void clearTransient();
+1 −11
Original line number Diff line number Diff line
@@ -1773,7 +1773,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
                try {
                    EventLog.writeEvent(EventLogTags.SYSUI_HEADS_UP_ESCALATION,
                            sbn.getKey());
                    wakeUpForFullScreenIntent();
                    mPowerInteractor.wakeUpForFullScreenIntent();
                    ActivityOptions opts = ActivityOptions.makeBasic();
                    opts.setPendingIntentBackgroundActivityStartMode(
                            ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
@@ -1786,16 +1786,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        mHeadsUpManager.releaseAllImmediately();
    }

    @Override
    public void wakeUpForFullScreenIntent() {
        if (isGoingToSleep() || mDozing) {
            mPowerManager.wakeUp(
                    SystemClock.uptimeMillis(),
                    PowerManager.WAKE_REASON_APPLICATION,
                    "com.android.systemui:full_screen_intent");
        }
    }

    /**
     * Called when another window is about to transfer it's input focus.
     */
+5 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeViewController;
@@ -126,6 +127,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
    private final NotificationShadeWindowController mNotificationShadeWindowController;
    private final ActivityLaunchAnimator mActivityLaunchAnimator;
    private final NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider;
    private final PowerInteractor mPowerInteractor;
    private final UserTracker mUserTracker;
    private final OnUserInteractionCallback mOnUserInteractionCallback;

@@ -163,6 +165,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
            ActivityLaunchAnimator activityLaunchAnimator,
            NotificationLaunchAnimatorControllerProvider notificationAnimationProvider,
            LaunchFullScreenIntentProvider launchFullScreenIntentProvider,
            PowerInteractor powerInteractor,
            FeatureFlags featureFlags,
            UserTracker userTracker) {
        mContext = context;
@@ -196,6 +199,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
        mShadeViewController = shadeViewController;
        mActivityLaunchAnimator = activityLaunchAnimator;
        mNotificationAnimationProvider = notificationAnimationProvider;
        mPowerInteractor = powerInteractor;
        mUserTracker = userTracker;

        launchFullScreenIntentProvider.registerListener(entry -> launchFullScreenIntent(entry));
@@ -592,7 +596,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte
        try {
            EventLog.writeEvent(EventLogTags.SYSUI_FULLSCREEN_NOTIFICATION,
                    entry.getKey());
            mCentralSurfaces.wakeUpForFullScreenIntent();
            mPowerInteractor.wakeUpForFullScreenIntent();

            ActivityOptions options = ActivityOptions.makeBasic();
            options.setPendingIntentBackgroundActivityStartMode(
+57 −0
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@ import android.os.PowerManager
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.shared.model.WakeSleepReason
import com.android.systemui.keyguard.shared.model.WakefulnessModel
import com.android.systemui.keyguard.shared.model.WakefulnessState
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.power.data.repository.FakePowerRepository
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
@@ -44,6 +48,7 @@ class PowerInteractorTest : SysuiTestCase() {

    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
    @Mock private lateinit var statusBarStateController: StatusBarStateController
@@ -59,6 +64,7 @@ class PowerInteractorTest : SysuiTestCase() {
        underTest =
            PowerInteractor(
                repository,
                keyguardRepository,
                falsingCollector,
                screenOffAnimationController,
                statusBarStateController,
@@ -125,6 +131,57 @@ class PowerInteractorTest : SysuiTestCase() {
        verify(falsingCollector).onScreenOnFromTouch()
    }

    @Test
    fun wakeUpForFullScreenIntent_notGoingToSleepAndNotDozing_notWoken() {
        keyguardRepository.setWakefulnessModel(
            WakefulnessModel(
                state = WakefulnessState.AWAKE,
                lastWakeReason = WakeSleepReason.OTHER,
                lastSleepReason = WakeSleepReason.OTHER,
            )
        )
        whenever(statusBarStateController.isDozing).thenReturn(false)

        underTest.wakeUpForFullScreenIntent()

        assertThat(repository.lastWakeWhy).isNull()
        assertThat(repository.lastWakeReason).isNull()
    }

    @Test
    fun wakeUpForFullScreenIntent_startingToSleep_woken() {
        keyguardRepository.setWakefulnessModel(
            WakefulnessModel(
                state = WakefulnessState.STARTING_TO_SLEEP,
                lastWakeReason = WakeSleepReason.OTHER,
                lastSleepReason = WakeSleepReason.OTHER,
            )
        )
        whenever(statusBarStateController.isDozing).thenReturn(false)

        underTest.wakeUpForFullScreenIntent()

        assertThat(repository.lastWakeWhy).isNotNull()
        assertThat(repository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_APPLICATION)
    }

    @Test
    fun wakeUpForFullScreenIntent_dozing_woken() {
        whenever(statusBarStateController.isDozing).thenReturn(true)
        keyguardRepository.setWakefulnessModel(
            WakefulnessModel(
                state = WakefulnessState.AWAKE,
                lastWakeReason = WakeSleepReason.OTHER,
                lastSleepReason = WakeSleepReason.OTHER,
            )
        )

        underTest.wakeUpForFullScreenIntent()

        assertThat(repository.lastWakeWhy).isNotNull()
        assertThat(repository.lastWakeReason).isEqualTo(PowerManager.WAKE_REASON_APPLICATION)
    }

    companion object {
        private val IMMEDIATE = Dispatchers.Main.immediate
    }
Loading