diff options
8 files changed, 83 insertions, 41 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java index 5dae0a21d588..d1a14a1ba65f 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java +++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java @@ -86,7 +86,7 @@ public class FeatureFlagsDebug implements FeatureFlags { new ServerFlagReader.ChangeListener() { @Override public void onChange() { - mRestarter.restart(); + mRestarter.restartSystemUI(); } }; @@ -326,9 +326,7 @@ public class FeatureFlagsDebug implements FeatureFlags { Log.i(TAG, "SystemUI Restart Suppressed"); return; } - Log.i(TAG, "Restarting SystemUI"); - // SysUI starts back when up exited. Is there a better way to do this? - System.exit(0); + mRestarter.restartSystemUI(); } private void restartAndroid(boolean requestSuppress) { @@ -336,7 +334,7 @@ public class FeatureFlagsDebug implements FeatureFlags { Log.i(TAG, "Android Restart Suppressed"); return; } - mRestarter.restart(); + mRestarter.restartAndroid(); } void setBooleanFlagInternal(Flag<?> flag, boolean value) { diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugRestarter.kt b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugRestarter.kt index 3d9f62768a37..069e6127aa30 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugRestarter.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebugRestarter.kt @@ -28,6 +28,8 @@ constructor( private val systemExitRestarter: SystemExitRestarter, ) : Restarter { + private var androidRestartRequested = false + val observer = object : WakefulnessLifecycle.Observer { override fun onFinishedGoingToSleep() { @@ -36,8 +38,18 @@ constructor( } } - override fun restart() { - Log.d(FeatureFlagsDebug.TAG, "Restart requested. Restarting on next screen off.") + override fun restartSystemUI() { + Log.d(FeatureFlagsDebug.TAG, "SystemUI Restart requested. Restarting on next screen off.") + scheduleRestart() + } + + override fun restartAndroid() { + Log.d(FeatureFlagsDebug.TAG, "Android Restart requested. Restarting on next screen off.") + androidRestartRequested = true + scheduleRestart() + } + + fun scheduleRestart() { if (wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_ASLEEP) { restartNow() } else { @@ -46,6 +58,10 @@ constructor( } private fun restartNow() { - systemExitRestarter.restart() + if (androidRestartRequested) { + systemExitRestarter.restartAndroid() + } else { + systemExitRestarter.restartSystemUI() + } } } diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java index 3c83682210b6..8bddacc4e32c 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java +++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java @@ -61,7 +61,7 @@ public class FeatureFlagsRelease implements FeatureFlags { new ServerFlagReader.ChangeListener() { @Override public void onChange() { - mRestarter.restart(); + mRestarter.restartSystemUI(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseRestarter.kt b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseRestarter.kt index a3f0f665c056..7ff3876f5d4e 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseRestarter.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsReleaseRestarter.kt @@ -34,35 +34,48 @@ constructor( @Background private val bgExecutor: DelayableExecutor, private val systemExitRestarter: SystemExitRestarter ) : Restarter { - var shouldRestart = false + var listenersAdded = false var pendingRestart: Runnable? = null + var androidRestartRequested = false val observer = object : WakefulnessLifecycle.Observer { override fun onFinishedGoingToSleep() { - maybeScheduleRestart() + scheduleRestart() } } val batteryCallback = object : BatteryController.BatteryStateChangeCallback { override fun onBatteryLevelChanged(level: Int, pluggedIn: Boolean, charging: Boolean) { - maybeScheduleRestart() + scheduleRestart() } } - override fun restart() { - Log.d(FeatureFlagsDebug.TAG, "Restart requested. Restarting when plugged in and idle.") - if (!shouldRestart) { - // Don't bother scheduling twice. - shouldRestart = true + override fun restartSystemUI() { + Log.d( + FeatureFlagsDebug.TAG, + "SystemUI Restart requested. Restarting when plugged in and idle." + ) + scheduleRestart() + } + + override fun restartAndroid() { + Log.d( + FeatureFlagsDebug.TAG, + "Android Restart requested. Restarting when plugged in and idle." + ) + androidRestartRequested = true + scheduleRestart() + } + + private fun scheduleRestart() { + // Don't bother adding listeners twice. + if (!listenersAdded) { + listenersAdded = true wakefulnessLifecycle.addObserver(observer) batteryController.addCallback(batteryCallback) - maybeScheduleRestart() } - } - - private fun maybeScheduleRestart() { if ( wakefulnessLifecycle.wakefulness == WAKEFULNESS_ASLEEP && batteryController.isPluggedIn ) { @@ -77,6 +90,10 @@ constructor( private fun restartNow() { Log.d(FeatureFlagsRelease.TAG, "Restarting due to systemui flag change") - systemExitRestarter.restart() + if (androidRestartRequested) { + systemExitRestarter.restartAndroid() + } else { + systemExitRestarter.restartSystemUI() + } } } diff --git a/packages/SystemUI/src/com/android/systemui/flags/Restarter.kt b/packages/SystemUI/src/com/android/systemui/flags/Restarter.kt index 8f095a24de94..ce8b821b1182 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Restarter.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Restarter.kt @@ -16,5 +16,7 @@ package com.android.systemui.flags interface Restarter { - fun restart() -}
\ No newline at end of file + fun restartSystemUI() + + fun restartAndroid() +} diff --git a/packages/SystemUI/src/com/android/systemui/flags/SystemExitRestarter.kt b/packages/SystemUI/src/com/android/systemui/flags/SystemExitRestarter.kt index f1b1be47a84f..89daa6487fbc 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/SystemExitRestarter.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/SystemExitRestarter.kt @@ -16,10 +16,19 @@ package com.android.systemui.flags +import com.android.internal.statusbar.IStatusBarService import javax.inject.Inject -class SystemExitRestarter @Inject constructor() : Restarter { - override fun restart() { +class SystemExitRestarter +@Inject +constructor( + private val barService: IStatusBarService, +) : Restarter { + override fun restartAndroid() { + barService.restart() + } + + override fun restartSystemUI() { System.exit(0) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugRestarterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugRestarterTest.kt index 1e7b1f26ba8c..ed167212c96a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugRestarterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugRestarterTest.kt @@ -48,22 +48,22 @@ class FeatureFlagsDebugRestarterTest : SysuiTestCase() { @Test fun testRestart_ImmediateWhenAsleep() { whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP) - restarter.restart() - verify(systemExitRestarter).restart() + restarter.restartSystemUI() + verify(systemExitRestarter).restartSystemUI() } @Test fun testRestart_WaitsForSceenOff() { whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE) - restarter.restart() - verify(systemExitRestarter, never()).restart() + restarter.restartSystemUI() + verify(systemExitRestarter, never()).restartSystemUI() val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java) verify(wakefulnessLifecycle).addObserver(captor.capture()) captor.value.onFinishedGoingToSleep() - verify(systemExitRestarter).restart() + verify(systemExitRestarter).restartSystemUI() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseRestarterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseRestarterTest.kt index 68ca48dd327d..7d807e2ff207 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseRestarterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseRestarterTest.kt @@ -63,7 +63,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(batteryController.isPluggedIn).thenReturn(true) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() + restarter.restartSystemUI() assertThat(executor.numPending()).isEqualTo(1) } @@ -72,11 +72,11 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP) whenever(batteryController.isPluggedIn).thenReturn(true) - restarter.restart() - verify(systemExitRestarter, never()).restart() + restarter.restartSystemUI() + verify(systemExitRestarter, never()).restartSystemUI() executor.advanceClockToLast() executor.runAllReady() - verify(systemExitRestarter).restart() + verify(systemExitRestarter).restartSystemUI() } @Test @@ -85,7 +85,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(batteryController.isPluggedIn).thenReturn(true) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() + restarter.restartSystemUI() assertThat(executor.numPending()).isEqualTo(0) } @@ -95,7 +95,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(batteryController.isPluggedIn).thenReturn(false) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() + restarter.restartSystemUI() assertThat(executor.numPending()).isEqualTo(0) } @@ -105,8 +105,8 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(batteryController.isPluggedIn).thenReturn(true) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() - restarter.restart() + restarter.restartSystemUI() + restarter.restartSystemUI() assertThat(executor.numPending()).isEqualTo(1) } @@ -115,7 +115,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE) whenever(batteryController.isPluggedIn).thenReturn(true) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() + restarter.restartSystemUI() val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java) verify(wakefulnessLifecycle).addObserver(captor.capture()) @@ -131,7 +131,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() { whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP) whenever(batteryController.isPluggedIn).thenReturn(false) assertThat(executor.numPending()).isEqualTo(0) - restarter.restart() + restarter.restartSystemUI() val captor = ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback::class.java) |