Merge changes from topic "b257302229-flag-restart" into tm-qpr-dev
* changes: Send a SysUI Started broadcast. Revert "Revert "Ensure SystemUI gets restarted lazily.""
This commit is contained in:
@@ -38,6 +38,7 @@ class FlagManager constructor(
|
||||
const val ACTION_SET_FLAG = "com.android.systemui.action.SET_FLAG"
|
||||
const val ACTION_GET_FLAGS = "com.android.systemui.action.GET_FLAGS"
|
||||
const val FLAGS_PERMISSION = "com.android.systemui.permission.FLAGS"
|
||||
const val ACTION_SYSUI_STARTED = "com.android.systemui.STARTED"
|
||||
const val EXTRA_ID = "id"
|
||||
const val EXTRA_VALUE = "value"
|
||||
const val EXTRA_FLAGS = "flags"
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
package com.android.systemui.flags
|
||||
|
||||
import android.content.Intent
|
||||
import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.broadcast.BroadcastSender
|
||||
import com.android.systemui.dump.DumpManager
|
||||
import com.android.systemui.statusbar.commandline.CommandRegistry
|
||||
import dagger.Binds
|
||||
@@ -31,7 +33,8 @@ constructor(
|
||||
dumpManager: DumpManager,
|
||||
private val commandRegistry: CommandRegistry,
|
||||
private val flagCommand: FlagCommand,
|
||||
private val featureFlags: FeatureFlagsDebug
|
||||
private val featureFlags: FeatureFlagsDebug,
|
||||
private val broadcastSender: BroadcastSender
|
||||
) : CoreStartable {
|
||||
|
||||
init {
|
||||
@@ -43,6 +46,8 @@ constructor(
|
||||
override fun start() {
|
||||
featureFlags.init()
|
||||
commandRegistry.registerCommand(FlagCommand.FLAG_COMMAND) { flagCommand }
|
||||
val intent = Intent(FlagManager.ACTION_SYSUI_STARTED)
|
||||
broadcastSender.sendBroadcast(intent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ public class FeatureFlagsRelease implements FeatureFlags {
|
||||
new ServerFlagReader.ChangeListener() {
|
||||
@Override
|
||||
public void onChange() {
|
||||
mRestarter.restart();
|
||||
mRestarter.restartSystemUI();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
wakefulnessLifecycle.addObserver(observer)
|
||||
batteryController.addCallback(batteryCallback)
|
||||
maybeScheduleRestart()
|
||||
}
|
||||
override fun restartSystemUI() {
|
||||
Log.d(
|
||||
FeatureFlagsDebug.TAG,
|
||||
"SystemUI Restart requested. Restarting when plugged in and idle."
|
||||
)
|
||||
scheduleRestart()
|
||||
}
|
||||
|
||||
private fun maybeScheduleRestart() {
|
||||
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)
|
||||
}
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,5 +16,7 @@
|
||||
package com.android.systemui.flags
|
||||
|
||||
interface Restarter {
|
||||
fun restart()
|
||||
}
|
||||
fun restartSystemUI()
|
||||
|
||||
fun restartAndroid()
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user