Merge "Wait to restart Doze until after DreamMonitor starts." into tm-qpr-dev
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
if (settings.getBool(RESTART_NAP_KEY, false)) {
|
bgExecutor.executeDelayed(
|
||||||
Log.d("RestartDozeListener", "Restarting sleep state")
|
{
|
||||||
powerManager.wakeUp(systemClock.uptimeMillis())
|
if (settings.getBool(RESTART_NAP_KEY, false)) {
|
||||||
powerManager.goToSleep(systemClock.uptimeMillis())
|
Log.d("RestartDozeListener", "Restarting sleep state")
|
||||||
settings.putBool(RESTART_NAP_KEY, false)
|
powerManager.wakeUp(systemClock.uptimeMillis())
|
||||||
}
|
powerManager.goToSleep(systemClock.uptimeMillis())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun storeSleepState(sleeping: Boolean) {
|
||||||
|
bgExecutor.execute { settings.putBool(RESTART_NAP_KEY, sleeping) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user