Merge "Wait to restart Doze until after DreamMonitor starts." into tm-qpr-dev am: 74ce3239d2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22124911

Change-Id: I4d42d9b71c90859dbdc695ce9bad5866402d650e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Dave Mankoff
2023-03-20 21:37:20 +00:00
committed by Automerger Merge Worker
5 changed files with 36 additions and 27 deletions

View File

@@ -23,6 +23,7 @@ import android.util.Log;
import com.android.systemui.CoreStartable; import com.android.systemui.CoreStartable;
import com.android.systemui.dreams.callbacks.DreamStatusBarStateCallback; import com.android.systemui.dreams.callbacks.DreamStatusBarStateCallback;
import com.android.systemui.dreams.conditions.DreamCondition; import com.android.systemui.dreams.conditions.DreamCondition;
import com.android.systemui.flags.RestartDozeListener;
import com.android.systemui.shared.condition.Monitor; import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.condition.ConditionalCoreStartable; import com.android.systemui.util.condition.ConditionalCoreStartable;
@@ -39,17 +40,19 @@ public class DreamMonitor extends ConditionalCoreStartable {
private final Monitor mConditionMonitor; private final Monitor mConditionMonitor;
private final DreamCondition mDreamCondition; private final DreamCondition mDreamCondition;
private final DreamStatusBarStateCallback mCallback; private final DreamStatusBarStateCallback mCallback;
private RestartDozeListener mRestartDozeListener;
@Inject @Inject
public DreamMonitor(Monitor monitor, DreamCondition dreamCondition, public DreamMonitor(Monitor monitor, DreamCondition dreamCondition,
@Named(DREAM_PRETEXT_MONITOR) Monitor pretextMonitor, @Named(DREAM_PRETEXT_MONITOR) Monitor pretextMonitor,
DreamStatusBarStateCallback callback) { DreamStatusBarStateCallback callback,
RestartDozeListener restartDozeListener) {
super(pretextMonitor); super(pretextMonitor);
mConditionMonitor = monitor; mConditionMonitor = monitor;
mDreamCondition = dreamCondition; mDreamCondition = dreamCondition;
mCallback = callback; mCallback = callback;
mRestartDozeListener = restartDozeListener;
} }
@Override @Override
@@ -61,5 +64,8 @@ public class DreamMonitor extends ConditionalCoreStartable {
mConditionMonitor.addSubscription(new Monitor.Subscription.Builder(mCallback) mConditionMonitor.addSubscription(new Monitor.Subscription.Builder(mCallback)
.addCondition(mDreamCondition) .addCondition(mDreamCondition)
.build()); .build());
mRestartDozeListener.init();
mRestartDozeListener.maybeRestartSleep();
} }
} }

View File

@@ -22,7 +22,6 @@ import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.commandline.CommandRegistry import com.android.systemui.statusbar.commandline.CommandRegistry
import com.android.systemui.util.InitializationChecker import com.android.systemui.util.InitializationChecker
import com.android.systemui.util.concurrency.DelayableExecutor
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.multibindings.ClassKey import dagger.multibindings.ClassKey
@@ -38,8 +37,6 @@ constructor(
private val featureFlags: FeatureFlagsDebug, private val featureFlags: FeatureFlagsDebug,
private val broadcastSender: BroadcastSender, private val broadcastSender: BroadcastSender,
private val initializationChecker: InitializationChecker, private val initializationChecker: InitializationChecker,
private val restartDozeListener: RestartDozeListener,
private val delayableExecutor: DelayableExecutor
) : CoreStartable { ) : CoreStartable {
init { init {
@@ -55,9 +52,6 @@ constructor(
// protected broadcast should only be sent for the main process // protected broadcast should only be sent for the main process
val intent = Intent(FlagManager.ACTION_SYSUI_STARTED) val intent = Intent(FlagManager.ACTION_SYSUI_STARTED)
broadcastSender.sendBroadcast(intent) broadcastSender.sendBroadcast(intent)
restartDozeListener.init()
delayableExecutor.executeDelayed({ restartDozeListener.maybeRestartSleep() }, 1000)
} }
} }
} }

View File

@@ -18,8 +18,6 @@ package com.android.systemui.flags
import com.android.systemui.CoreStartable import com.android.systemui.CoreStartable
import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager
import com.android.systemui.util.InitializationChecker
import com.android.systemui.util.concurrency.DelayableExecutor
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.multibindings.ClassKey import dagger.multibindings.ClassKey
@@ -31,9 +29,6 @@ class FeatureFlagsReleaseStartable
constructor( constructor(
dumpManager: DumpManager, dumpManager: DumpManager,
featureFlags: FeatureFlags, featureFlags: FeatureFlags,
private val initializationChecker: InitializationChecker,
private val restartDozeListener: RestartDozeListener,
private val delayableExecutor: DelayableExecutor
) : CoreStartable { ) : CoreStartable {
init { init {
@@ -42,12 +37,7 @@ constructor(
} }
} }
override fun start() { override fun start() {}
if (initializationChecker.initializeComponents()) {
restartDozeListener.init()
delayableExecutor.executeDelayed({ restartDozeListener.maybeRestartSleep() }, 1000)
}
}
} }
@Module @Module

View File

@@ -20,7 +20,9 @@ import android.os.PowerManager
import android.util.Log import android.util.Log
import com.android.internal.annotations.VisibleForTesting import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.time.SystemClock import com.android.systemui.util.time.SystemClock
import javax.inject.Inject import javax.inject.Inject
@@ -33,6 +35,7 @@ constructor(
private val statusBarStateController: StatusBarStateController, private val statusBarStateController: StatusBarStateController,
private val powerManager: PowerManager, private val powerManager: PowerManager,
private val systemClock: SystemClock, private val systemClock: SystemClock,
@Background val bgExecutor: DelayableExecutor,
) { ) {
companion object { companion object {
@@ -44,7 +47,7 @@ constructor(
val listener = val listener =
object : StatusBarStateController.StateListener { object : StatusBarStateController.StateListener {
override fun onDreamingChanged(isDreaming: Boolean) { override fun onDreamingChanged(isDreaming: Boolean) {
settings.putBool(RESTART_NAP_KEY, isDreaming) storeSleepState(isDreaming)
} }
} }
@@ -62,11 +65,19 @@ constructor(
} }
fun maybeRestartSleep() { fun maybeRestartSleep() {
bgExecutor.executeDelayed(
{
if (settings.getBool(RESTART_NAP_KEY, false)) { if (settings.getBool(RESTART_NAP_KEY, false)) {
Log.d("RestartDozeListener", "Restarting sleep state") Log.d("RestartDozeListener", "Restarting sleep state")
powerManager.wakeUp(systemClock.uptimeMillis()) powerManager.wakeUp(systemClock.uptimeMillis())
powerManager.goToSleep(systemClock.uptimeMillis()) powerManager.goToSleep(systemClock.uptimeMillis())
settings.putBool(RESTART_NAP_KEY, false) }
} },
1000
)
}
private fun storeSleepState(sleeping: Boolean) {
bgExecutor.execute { settings.putBool(RESTART_NAP_KEY, sleeping) }
} }
} }

View File

@@ -20,6 +20,7 @@ import android.os.PowerManager
import android.test.suitebuilder.annotation.SmallTest import android.test.suitebuilder.annotation.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.FakeSettings
import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
@@ -41,13 +42,14 @@ class RestartDozeListenerTest : SysuiTestCase() {
@Mock lateinit var statusBarStateController: StatusBarStateController @Mock lateinit var statusBarStateController: StatusBarStateController
@Mock lateinit var powerManager: PowerManager @Mock lateinit var powerManager: PowerManager
val clock = FakeSystemClock() val clock = FakeSystemClock()
val executor = FakeExecutor(clock)
lateinit var listener: StatusBarStateController.StateListener lateinit var listener: StatusBarStateController.StateListener
@Before @Before
fun setup() { fun setup() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
restartDozeListener = restartDozeListener =
RestartDozeListener(settings, statusBarStateController, powerManager, clock) RestartDozeListener(settings, statusBarStateController, powerManager, clock, executor)
val captor = ArgumentCaptor.forClass(StatusBarStateController.StateListener::class.java) val captor = ArgumentCaptor.forClass(StatusBarStateController.StateListener::class.java)
restartDozeListener.init() restartDozeListener.init()
@@ -58,12 +60,14 @@ class RestartDozeListenerTest : SysuiTestCase() {
@Test @Test
fun testStoreDreamState_onDreamingStarted() { fun testStoreDreamState_onDreamingStarted() {
listener.onDreamingChanged(true) listener.onDreamingChanged(true)
executor.runAllReady()
assertThat(settings.getBool(RestartDozeListener.RESTART_NAP_KEY)).isTrue() assertThat(settings.getBool(RestartDozeListener.RESTART_NAP_KEY)).isTrue()
} }
@Test @Test
fun testStoreDreamState_onDreamingStopped() { fun testStoreDreamState_onDreamingStopped() {
listener.onDreamingChanged(false) listener.onDreamingChanged(false)
executor.runAllReady()
assertThat(settings.getBool(RestartDozeListener.RESTART_NAP_KEY)).isFalse() assertThat(settings.getBool(RestartDozeListener.RESTART_NAP_KEY)).isFalse()
} }
@@ -71,6 +75,8 @@ class RestartDozeListenerTest : SysuiTestCase() {
fun testRestoreDreamState_dreamingShouldStart() { fun testRestoreDreamState_dreamingShouldStart() {
settings.putBool(RestartDozeListener.RESTART_NAP_KEY, true) settings.putBool(RestartDozeListener.RESTART_NAP_KEY, true)
restartDozeListener.maybeRestartSleep() restartDozeListener.maybeRestartSleep()
executor.advanceClockToLast()
executor.runAllReady()
verify(powerManager).wakeUp(clock.uptimeMillis()) verify(powerManager).wakeUp(clock.uptimeMillis())
verify(powerManager).goToSleep(clock.uptimeMillis()) verify(powerManager).goToSleep(clock.uptimeMillis())
} }
@@ -79,6 +85,8 @@ class RestartDozeListenerTest : SysuiTestCase() {
fun testRestoreDreamState_dreamingShouldNot() { fun testRestoreDreamState_dreamingShouldNot() {
settings.putBool(RestartDozeListener.RESTART_NAP_KEY, false) settings.putBool(RestartDozeListener.RESTART_NAP_KEY, false)
restartDozeListener.maybeRestartSleep() restartDozeListener.maybeRestartSleep()
executor.advanceClockToLast()
executor.runAllReady()
verify(powerManager, never()).wakeUp(anyLong()) verify(powerManager, never()).wakeUp(anyLong())
verify(powerManager, never()).goToSleep(anyLong()) verify(powerManager, never()).goToSleep(anyLong())
} }