Loading packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java +8 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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(); } } } } packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugStartable.kt +0 −6 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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) } } } } } } Loading packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseStartable.kt +1 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -42,12 +37,7 @@ constructor( } } } } override fun start() { override fun start() {} if (initializationChecker.initializeComponents()) { restartDozeListener.init() delayableExecutor.executeDelayed({ restartDozeListener.maybeRestartSleep() }, 1000) } } } } @Module @Module Loading packages/SystemUI/src/com/android/systemui/flags/RestartDozeListener.kt +18 −7 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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) } } } } Loading @@ -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) } } } } } packages/SystemUI/tests/src/com/android/systemui/flags/RestartDozeListenerTest.kt +9 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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() Loading @@ -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() } } Loading @@ -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()) } } Loading @@ -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()) } } Loading Loading
packages/SystemUI/src/com/android/systemui/dreams/DreamMonitor.java +8 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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(); } } } }
packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugStartable.kt +0 −6 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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) } } } } } } Loading
packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseStartable.kt +1 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -42,12 +37,7 @@ constructor( } } } } override fun start() { override fun start() {} if (initializationChecker.initializeComponents()) { restartDozeListener.init() delayableExecutor.executeDelayed({ restartDozeListener.maybeRestartSleep() }, 1000) } } } } @Module @Module Loading
packages/SystemUI/src/com/android/systemui/flags/RestartDozeListener.kt +18 −7 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading @@ -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) } } } } Loading @@ -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) } } } } }
packages/SystemUI/tests/src/com/android/systemui/flags/RestartDozeListenerTest.kt +9 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading @@ -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() Loading @@ -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() } } Loading @@ -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()) } } Loading @@ -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()) } } Loading