Merge "Don't restart SystemUI in TestHarness mode." into tm-qpr-dev
This commit is contained in:
@@ -40,7 +40,6 @@ import androidx.annotation.Nullable;
|
|||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.util.settings.GlobalSettings;
|
import com.android.systemui.util.settings.GlobalSettings;
|
||||||
import com.android.systemui.util.settings.SecureSettings;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -74,7 +73,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
private final FlagManager mFlagManager;
|
private final FlagManager mFlagManager;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final GlobalSettings mGlobalSettings;
|
private final GlobalSettings mGlobalSettings;
|
||||||
private final SecureSettings mSecureSettings;
|
|
||||||
private final Resources mResources;
|
private final Resources mResources;
|
||||||
private final SystemPropertiesHelper mSystemProperties;
|
private final SystemPropertiesHelper mSystemProperties;
|
||||||
private final ServerFlagReader mServerFlagReader;
|
private final ServerFlagReader mServerFlagReader;
|
||||||
@@ -87,8 +85,9 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
|
private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
|
||||||
new ServerFlagReader.ChangeListener() {
|
new ServerFlagReader.ChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onChange() {
|
public void onChange(Flag<?> flag) {
|
||||||
mRestarter.restartSystemUI();
|
mRestarter.restartSystemUI(
|
||||||
|
"Server flag change: " + flag.getNamespace() + "." + flag.getName());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -97,7 +96,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
FlagManager flagManager,
|
FlagManager flagManager,
|
||||||
Context context,
|
Context context,
|
||||||
GlobalSettings globalSettings,
|
GlobalSettings globalSettings,
|
||||||
SecureSettings secureSettings,
|
|
||||||
SystemPropertiesHelper systemProperties,
|
SystemPropertiesHelper systemProperties,
|
||||||
@Main Resources resources,
|
@Main Resources resources,
|
||||||
ServerFlagReader serverFlagReader,
|
ServerFlagReader serverFlagReader,
|
||||||
@@ -106,7 +104,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
mFlagManager = flagManager;
|
mFlagManager = flagManager;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mGlobalSettings = globalSettings;
|
mGlobalSettings = globalSettings;
|
||||||
mSecureSettings = secureSettings;
|
|
||||||
mResources = resources;
|
mResources = resources;
|
||||||
mSystemProperties = systemProperties;
|
mSystemProperties = systemProperties;
|
||||||
mServerFlagReader = serverFlagReader;
|
mServerFlagReader = serverFlagReader;
|
||||||
@@ -119,7 +116,8 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(ACTION_SET_FLAG);
|
filter.addAction(ACTION_SET_FLAG);
|
||||||
filter.addAction(ACTION_GET_FLAGS);
|
filter.addAction(ACTION_GET_FLAGS);
|
||||||
mFlagManager.setOnSettingsChangedAction(this::restartSystemUI);
|
mFlagManager.setOnSettingsChangedAction(
|
||||||
|
suppressRestart -> restartSystemUI(suppressRestart, "Settings changed"));
|
||||||
mFlagManager.setClearCacheAction(this::removeFromCache);
|
mFlagManager.setClearCacheAction(this::removeFromCache);
|
||||||
mContext.registerReceiver(mReceiver, filter, null, null,
|
mContext.registerReceiver(mReceiver, filter, null, null,
|
||||||
Context.RECEIVER_EXPORTED_UNAUDITED);
|
Context.RECEIVER_EXPORTED_UNAUDITED);
|
||||||
@@ -233,6 +231,10 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
Boolean result = readBooleanFlagOverride(flag.getName());
|
Boolean result = readBooleanFlagOverride(flag.getName());
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
result = readBooleanFlagOverride(flag.getId());
|
result = readBooleanFlagOverride(flag.getId());
|
||||||
|
if (result != null) {
|
||||||
|
// Move overrides from id to name
|
||||||
|
setFlagValueInternal(flag.getName(), result, BooleanFlagSerializer.INSTANCE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
boolean hasServerOverride = mServerFlagReader.hasOverride(
|
boolean hasServerOverride = mServerFlagReader.hasOverride(
|
||||||
flag.getNamespace(), flag.getName());
|
flag.getNamespace(), flag.getName());
|
||||||
@@ -305,25 +307,38 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
requireNonNull(value, "Cannot set a null value");
|
requireNonNull(value, "Cannot set a null value");
|
||||||
T currentValue = readFlagValueInternal(name, serializer);
|
T currentValue = readFlagValueInternal(name, serializer);
|
||||||
if (Objects.equals(currentValue, value)) {
|
if (Objects.equals(currentValue, value)) {
|
||||||
Log.i(TAG, "Flag id " + name + " is already " + value);
|
Log.i(TAG, "Flag \"" + name + "\" is already " + value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
setFlagValueInternal(name, value, serializer);
|
||||||
|
Log.i(TAG, "Set flag \"" + name + "\" to " + value);
|
||||||
|
removeFromCache(name);
|
||||||
|
mFlagManager.dispatchListenersAndMaybeRestart(
|
||||||
|
name,
|
||||||
|
suppressRestart -> restartSystemUI(
|
||||||
|
suppressRestart, "Flag \"" + name + "\" changed to " + value));
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> void setFlagValueInternal(
|
||||||
|
String name, @NonNull T value, FlagSerializer<T> serializer) {
|
||||||
final String data = serializer.toSettingsData(value);
|
final String data = serializer.toSettingsData(value);
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
Log.w(TAG, "Failed to set id " + name + " to " + value);
|
Log.w(TAG, "Failed to set flag " + name + " to " + value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mGlobalSettings.putStringForUser(mFlagManager.nameToSettingsKey(name), data,
|
mGlobalSettings.putStringForUser(mFlagManager.nameToSettingsKey(name), data,
|
||||||
UserHandle.USER_CURRENT);
|
UserHandle.USER_CURRENT);
|
||||||
Log.i(TAG, "Set id " + name + " to " + value);
|
|
||||||
removeFromCache(name);
|
|
||||||
mFlagManager.dispatchListenersAndMaybeRestart(name, this::restartSystemUI);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<T> void eraseFlag(Flag<T> flag) {
|
<T> void eraseFlag(Flag<T> flag) {
|
||||||
if (flag instanceof SysPropFlag) {
|
if (flag instanceof SysPropFlag) {
|
||||||
mSystemProperties.erase(((SysPropFlag<T>) flag).getName());
|
mSystemProperties.erase(flag.getName());
|
||||||
dispatchListenersAndMaybeRestart(flag.getName(), this::restartAndroid);
|
dispatchListenersAndMaybeRestart(
|
||||||
|
flag.getName(),
|
||||||
|
suppressRestart -> restartSystemUI(
|
||||||
|
suppressRestart,
|
||||||
|
"SysProp Flag \"" + flag.getNamespace() + "."
|
||||||
|
+ flag.getName() + "\" reset to default."));
|
||||||
} else {
|
} else {
|
||||||
eraseFlag(flag.getName());
|
eraseFlag(flag.getName());
|
||||||
}
|
}
|
||||||
@@ -333,7 +348,10 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
private void eraseFlag(String name) {
|
private void eraseFlag(String name) {
|
||||||
eraseInternal(name);
|
eraseInternal(name);
|
||||||
removeFromCache(name);
|
removeFromCache(name);
|
||||||
dispatchListenersAndMaybeRestart(name, this::restartSystemUI);
|
dispatchListenersAndMaybeRestart(
|
||||||
|
name,
|
||||||
|
suppressRestart -> restartSystemUI(
|
||||||
|
suppressRestart, "Flag \"" + name + "\" reset to default"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispatchListenersAndMaybeRestart(String name, Consumer<Boolean> restartAction) {
|
private void dispatchListenersAndMaybeRestart(String name, Consumer<Boolean> restartAction) {
|
||||||
@@ -367,20 +385,20 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
mFlagManager.removeListener(listener);
|
mFlagManager.removeListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restartSystemUI(boolean requestSuppress) {
|
private void restartSystemUI(boolean requestSuppress, String reason) {
|
||||||
if (requestSuppress) {
|
if (requestSuppress) {
|
||||||
Log.i(TAG, "SystemUI Restart Suppressed");
|
Log.i(TAG, "SystemUI Restart Suppressed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mRestarter.restartSystemUI();
|
mRestarter.restartSystemUI(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restartAndroid(boolean requestSuppress) {
|
private void restartAndroid(boolean requestSuppress, String reason) {
|
||||||
if (requestSuppress) {
|
if (requestSuppress) {
|
||||||
Log.i(TAG, "Android Restart Suppressed");
|
Log.i(TAG, "Android Restart Suppressed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mRestarter.restartAndroid();
|
mRestarter.restartAndroid(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBooleanFlagInternal(Flag<?> flag, boolean value) {
|
void setBooleanFlagInternal(Flag<?> flag, boolean value) {
|
||||||
@@ -391,8 +409,11 @@ public class FeatureFlagsDebug implements FeatureFlags {
|
|||||||
} else if (flag instanceof SysPropBooleanFlag) {
|
} else if (flag instanceof SysPropBooleanFlag) {
|
||||||
// Store SysProp flags in SystemProperties where they can read by outside parties.
|
// Store SysProp flags in SystemProperties where they can read by outside parties.
|
||||||
mSystemProperties.setBoolean(((SysPropBooleanFlag) flag).getName(), value);
|
mSystemProperties.setBoolean(((SysPropBooleanFlag) flag).getName(), value);
|
||||||
dispatchListenersAndMaybeRestart(flag.getName(),
|
dispatchListenersAndMaybeRestart(
|
||||||
FeatureFlagsDebug.this::restartAndroid);
|
flag.getName(),
|
||||||
|
suppressRestart -> restartSystemUI(
|
||||||
|
suppressRestart,
|
||||||
|
"Flag \"" + flag.getName() + "\" changed to " + value));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Unknown flag type");
|
throw new IllegalArgumentException("Unknown flag type");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ constructor(
|
|||||||
) : Restarter {
|
) : Restarter {
|
||||||
|
|
||||||
private var androidRestartRequested = false
|
private var androidRestartRequested = false
|
||||||
|
private var pendingReason = ""
|
||||||
|
|
||||||
val observer =
|
val observer =
|
||||||
object : WakefulnessLifecycle.Observer {
|
object : WakefulnessLifecycle.Observer {
|
||||||
@@ -38,18 +39,20 @@ constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun restartSystemUI() {
|
override fun restartSystemUI(reason: String) {
|
||||||
Log.d(FeatureFlagsDebug.TAG, "SystemUI Restart requested. Restarting on next screen off.")
|
Log.d(FeatureFlagsDebug.TAG, "SystemUI Restart requested. Restarting on next screen off.")
|
||||||
scheduleRestart()
|
Log.i(FeatureFlagsDebug.TAG, reason)
|
||||||
|
scheduleRestart(reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun restartAndroid() {
|
override fun restartAndroid(reason: String) {
|
||||||
Log.d(FeatureFlagsDebug.TAG, "Android Restart requested. Restarting on next screen off.")
|
Log.d(FeatureFlagsDebug.TAG, "Android Restart requested. Restarting on next screen off.")
|
||||||
androidRestartRequested = true
|
androidRestartRequested = true
|
||||||
scheduleRestart()
|
scheduleRestart(reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun scheduleRestart() {
|
fun scheduleRestart(reason: String) {
|
||||||
|
pendingReason = reason
|
||||||
if (wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_ASLEEP) {
|
if (wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_ASLEEP) {
|
||||||
restartNow()
|
restartNow()
|
||||||
} else {
|
} else {
|
||||||
@@ -59,9 +62,9 @@ constructor(
|
|||||||
|
|
||||||
private fun restartNow() {
|
private fun restartNow() {
|
||||||
if (androidRestartRequested) {
|
if (androidRestartRequested) {
|
||||||
systemExitRestarter.restartAndroid()
|
systemExitRestarter.restartAndroid(pendingReason)
|
||||||
} else {
|
} else {
|
||||||
systemExitRestarter.restartSystemUI()
|
systemExitRestarter.restartSystemUI(pendingReason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,8 +57,9 @@ public class FeatureFlagsRelease implements FeatureFlags {
|
|||||||
private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
|
private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
|
||||||
new ServerFlagReader.ChangeListener() {
|
new ServerFlagReader.ChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onChange() {
|
public void onChange(Flag<?> flag) {
|
||||||
mRestarter.restartSystemUI();
|
mRestarter.restartSystemUI(
|
||||||
|
"Server flag change: " + flag.getNamespace() + "." + flag.getName());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -36,41 +36,43 @@ constructor(
|
|||||||
) : Restarter {
|
) : Restarter {
|
||||||
var listenersAdded = false
|
var listenersAdded = false
|
||||||
var pendingRestart: Runnable? = null
|
var pendingRestart: Runnable? = null
|
||||||
|
private var pendingReason = ""
|
||||||
var androidRestartRequested = false
|
var androidRestartRequested = false
|
||||||
|
|
||||||
val observer =
|
val observer =
|
||||||
object : WakefulnessLifecycle.Observer {
|
object : WakefulnessLifecycle.Observer {
|
||||||
override fun onFinishedGoingToSleep() {
|
override fun onFinishedGoingToSleep() {
|
||||||
scheduleRestart()
|
scheduleRestart(pendingReason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val batteryCallback =
|
val batteryCallback =
|
||||||
object : BatteryController.BatteryStateChangeCallback {
|
object : BatteryController.BatteryStateChangeCallback {
|
||||||
override fun onBatteryLevelChanged(level: Int, pluggedIn: Boolean, charging: Boolean) {
|
override fun onBatteryLevelChanged(level: Int, pluggedIn: Boolean, charging: Boolean) {
|
||||||
scheduleRestart()
|
scheduleRestart(pendingReason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun restartSystemUI() {
|
override fun restartSystemUI(reason: String) {
|
||||||
Log.d(
|
Log.d(
|
||||||
FeatureFlagsDebug.TAG,
|
FeatureFlagsDebug.TAG,
|
||||||
"SystemUI Restart requested. Restarting when plugged in and idle."
|
"SystemUI Restart requested. Restarting when plugged in and idle."
|
||||||
)
|
)
|
||||||
scheduleRestart()
|
scheduleRestart(reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun restartAndroid() {
|
override fun restartAndroid(reason: String) {
|
||||||
Log.d(
|
Log.d(
|
||||||
FeatureFlagsDebug.TAG,
|
FeatureFlagsDebug.TAG,
|
||||||
"Android Restart requested. Restarting when plugged in and idle."
|
"Android Restart requested. Restarting when plugged in and idle."
|
||||||
)
|
)
|
||||||
androidRestartRequested = true
|
androidRestartRequested = true
|
||||||
scheduleRestart()
|
scheduleRestart(reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun scheduleRestart() {
|
private fun scheduleRestart(reason: String) {
|
||||||
// Don't bother adding listeners twice.
|
// Don't bother adding listeners twice.
|
||||||
|
pendingReason = reason
|
||||||
if (!listenersAdded) {
|
if (!listenersAdded) {
|
||||||
listenersAdded = true
|
listenersAdded = true
|
||||||
wakefulnessLifecycle.addObserver(observer)
|
wakefulnessLifecycle.addObserver(observer)
|
||||||
@@ -91,9 +93,9 @@ constructor(
|
|||||||
private fun restartNow() {
|
private fun restartNow() {
|
||||||
Log.d(FeatureFlagsRelease.TAG, "Restarting due to systemui flag change")
|
Log.d(FeatureFlagsRelease.TAG, "Restarting due to systemui flag change")
|
||||||
if (androidRestartRequested) {
|
if (androidRestartRequested) {
|
||||||
systemExitRestarter.restartAndroid()
|
systemExitRestarter.restartAndroid(pendingReason)
|
||||||
} else {
|
} else {
|
||||||
systemExitRestarter.restartSystemUI()
|
systemExitRestarter.restartSystemUI(pendingReason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
package com.android.systemui.flags
|
package com.android.systemui.flags
|
||||||
|
|
||||||
interface Restarter {
|
interface Restarter {
|
||||||
fun restartSystemUI()
|
fun restartSystemUI(reason: String)
|
||||||
|
|
||||||
fun restartAndroid()
|
fun restartAndroid(reason: String)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,10 @@
|
|||||||
package com.android.systemui.flags
|
package com.android.systemui.flags
|
||||||
|
|
||||||
import android.provider.DeviceConfig
|
import android.provider.DeviceConfig
|
||||||
|
import android.util.Log
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.dagger.qualifiers.Background
|
import com.android.systemui.dagger.qualifiers.Background
|
||||||
|
import com.android.systemui.dagger.qualifiers.TestHarness
|
||||||
import com.android.systemui.util.DeviceConfigProxy
|
import com.android.systemui.util.DeviceConfigProxy
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
@@ -35,21 +37,27 @@ interface ServerFlagReader {
|
|||||||
fun listenForChanges(values: Collection<Flag<*>>, listener: ChangeListener)
|
fun listenForChanges(values: Collection<Flag<*>>, listener: ChangeListener)
|
||||||
|
|
||||||
interface ChangeListener {
|
interface ChangeListener {
|
||||||
fun onChange()
|
fun onChange(flag: Flag<*>)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ServerFlagReaderImpl @Inject constructor(
|
class ServerFlagReaderImpl @Inject constructor(
|
||||||
private val namespace: String,
|
private val namespace: String,
|
||||||
private val deviceConfig: DeviceConfigProxy,
|
private val deviceConfig: DeviceConfigProxy,
|
||||||
@Background private val executor: Executor
|
@Background private val executor: Executor,
|
||||||
|
@TestHarness private val isTestHarness: Boolean
|
||||||
) : ServerFlagReader {
|
) : ServerFlagReader {
|
||||||
|
|
||||||
|
private val TAG = "ServerFlagReader"
|
||||||
|
|
||||||
private val listeners =
|
private val listeners =
|
||||||
mutableListOf<Pair<ServerFlagReader.ChangeListener, Collection<Flag<*>>>>()
|
mutableListOf<Pair<ServerFlagReader.ChangeListener, Collection<Flag<*>>>>()
|
||||||
|
|
||||||
private val onPropertiesChangedListener = object : DeviceConfig.OnPropertiesChangedListener {
|
private val onPropertiesChangedListener = object : DeviceConfig.OnPropertiesChangedListener {
|
||||||
override fun onPropertiesChanged(properties: DeviceConfig.Properties) {
|
override fun onPropertiesChanged(properties: DeviceConfig.Properties) {
|
||||||
|
if (isTestHarness) {
|
||||||
|
Log.w(TAG, "Ignore server flag changes in Test Harness mode.")
|
||||||
|
}
|
||||||
if (properties.namespace != namespace) {
|
if (properties.namespace != namespace) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -59,7 +67,7 @@ class ServerFlagReaderImpl @Inject constructor(
|
|||||||
propLoop@ for (propName in properties.keyset) {
|
propLoop@ for (propName in properties.keyset) {
|
||||||
for (flag in flags) {
|
for (flag in flags) {
|
||||||
if (propName == getServerOverrideName(flag.id) || propName == flag.name) {
|
if (propName == getServerOverrideName(flag.id) || propName == flag.name) {
|
||||||
listener.onChange()
|
listener.onChange(flag)
|
||||||
break@propLoop
|
break@propLoop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,10 +119,11 @@ interface ServerFlagReaderModule {
|
|||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
fun bindsReader(
|
fun bindsReader(
|
||||||
deviceConfig: DeviceConfigProxy,
|
deviceConfig: DeviceConfigProxy,
|
||||||
@Background executor: Executor
|
@Background executor: Executor,
|
||||||
|
@TestHarness isTestHarness: Boolean
|
||||||
): ServerFlagReader {
|
): ServerFlagReader {
|
||||||
return ServerFlagReaderImpl(
|
return ServerFlagReaderImpl(
|
||||||
SYSUI_NAMESPACE, deviceConfig, executor
|
SYSUI_NAMESPACE, deviceConfig, executor, isTestHarness
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,7 +148,7 @@ class ServerFlagReaderFake : ServerFlagReader {
|
|||||||
for ((listener, flags) in listeners) {
|
for ((listener, flags) in listeners) {
|
||||||
flagLoop@ for (flag in flags) {
|
flagLoop@ for (flag in flags) {
|
||||||
if (name == flag.name) {
|
if (name == flag.name) {
|
||||||
listener.onChange()
|
listener.onChange(flag)
|
||||||
break@flagLoop
|
break@flagLoop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.flags
|
package com.android.systemui.flags
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import com.android.internal.statusbar.IStatusBarService
|
import com.android.internal.statusbar.IStatusBarService
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@@ -24,11 +25,13 @@ class SystemExitRestarter
|
|||||||
constructor(
|
constructor(
|
||||||
private val barService: IStatusBarService,
|
private val barService: IStatusBarService,
|
||||||
) : Restarter {
|
) : Restarter {
|
||||||
override fun restartAndroid() {
|
override fun restartAndroid(reason: String) {
|
||||||
|
Log.d(FeatureFlagsDebug.TAG, "Restarting Android: " + reason)
|
||||||
barService.restart()
|
barService.restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun restartSystemUI() {
|
override fun restartSystemUI(reason: String) {
|
||||||
|
Log.d(FeatureFlagsDebug.TAG, "Restarting SystemUI: " + reason)
|
||||||
System.exit(0)
|
System.exit(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.android.systemui.SysuiTestCase
|
|||||||
import com.android.systemui.keyguard.WakefulnessLifecycle
|
import com.android.systemui.keyguard.WakefulnessLifecycle
|
||||||
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP
|
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP
|
||||||
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE
|
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE
|
||||||
|
import com.android.systemui.util.mockito.any
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.mockito.ArgumentCaptor
|
import org.mockito.ArgumentCaptor
|
||||||
@@ -48,22 +49,22 @@ class FeatureFlagsDebugRestarterTest : SysuiTestCase() {
|
|||||||
@Test
|
@Test
|
||||||
fun testRestart_ImmediateWhenAsleep() {
|
fun testRestart_ImmediateWhenAsleep() {
|
||||||
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
verify(systemExitRestarter).restartSystemUI()
|
verify(systemExitRestarter).restartSystemUI(any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testRestart_WaitsForSceenOff() {
|
fun testRestart_WaitsForSceenOff() {
|
||||||
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE)
|
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE)
|
||||||
|
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
verify(systemExitRestarter, never()).restartSystemUI()
|
verify(systemExitRestarter, never()).restartSystemUI(any())
|
||||||
|
|
||||||
val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java)
|
val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java)
|
||||||
verify(wakefulnessLifecycle).addObserver(captor.capture())
|
verify(wakefulnessLifecycle).addObserver(captor.capture())
|
||||||
|
|
||||||
captor.value.onFinishedGoingToSleep()
|
captor.value.onFinishedGoingToSleep()
|
||||||
|
|
||||||
verify(systemExitRestarter).restartSystemUI()
|
verify(systemExitRestarter).restartSystemUI(any())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import com.android.systemui.util.mockito.eq
|
|||||||
import com.android.systemui.util.mockito.nullable
|
import com.android.systemui.util.mockito.nullable
|
||||||
import com.android.systemui.util.mockito.withArgCaptor
|
import com.android.systemui.util.mockito.withArgCaptor
|
||||||
import com.android.systemui.util.settings.GlobalSettings
|
import com.android.systemui.util.settings.GlobalSettings
|
||||||
import com.android.systemui.util.settings.SecureSettings
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -63,8 +62,6 @@ class FeatureFlagsDebugTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var globalSettings: GlobalSettings
|
private lateinit var globalSettings: GlobalSettings
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var secureSettings: SecureSettings
|
|
||||||
@Mock
|
|
||||||
private lateinit var systemProperties: SystemPropertiesHelper
|
private lateinit var systemProperties: SystemPropertiesHelper
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var resources: Resources
|
private lateinit var resources: Resources
|
||||||
@@ -92,7 +89,6 @@ class FeatureFlagsDebugTest : SysuiTestCase() {
|
|||||||
flagManager,
|
flagManager,
|
||||||
mockContext,
|
mockContext,
|
||||||
globalSettings,
|
globalSettings,
|
||||||
secureSettings,
|
|
||||||
systemProperties,
|
systemProperties,
|
||||||
resources,
|
resources,
|
||||||
serverFlagReader,
|
serverFlagReader,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP
|
|||||||
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE
|
import com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE
|
||||||
import com.android.systemui.statusbar.policy.BatteryController
|
import com.android.systemui.statusbar.policy.BatteryController
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
|
import com.android.systemui.util.mockito.any
|
||||||
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
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -63,7 +64,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(batteryController.isPluggedIn).thenReturn(true)
|
whenever(batteryController.isPluggedIn).thenReturn(true)
|
||||||
|
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
assertThat(executor.numPending()).isEqualTo(1)
|
assertThat(executor.numPending()).isEqualTo(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,11 +73,11 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
||||||
whenever(batteryController.isPluggedIn).thenReturn(true)
|
whenever(batteryController.isPluggedIn).thenReturn(true)
|
||||||
|
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
verify(systemExitRestarter, never()).restartSystemUI()
|
verify(systemExitRestarter, never()).restartSystemUI("Restart for test")
|
||||||
executor.advanceClockToLast()
|
executor.advanceClockToLast()
|
||||||
executor.runAllReady()
|
executor.runAllReady()
|
||||||
verify(systemExitRestarter).restartSystemUI()
|
verify(systemExitRestarter).restartSystemUI(any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -85,7 +86,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(batteryController.isPluggedIn).thenReturn(true)
|
whenever(batteryController.isPluggedIn).thenReturn(true)
|
||||||
|
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(batteryController.isPluggedIn).thenReturn(false)
|
whenever(batteryController.isPluggedIn).thenReturn(false)
|
||||||
|
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +106,8 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(batteryController.isPluggedIn).thenReturn(true)
|
whenever(batteryController.isPluggedIn).thenReturn(true)
|
||||||
|
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
assertThat(executor.numPending()).isEqualTo(1)
|
assertThat(executor.numPending()).isEqualTo(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +116,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE)
|
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_AWAKE)
|
||||||
whenever(batteryController.isPluggedIn).thenReturn(true)
|
whenever(batteryController.isPluggedIn).thenReturn(true)
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
|
|
||||||
val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java)
|
val captor = ArgumentCaptor.forClass(WakefulnessLifecycle.Observer::class.java)
|
||||||
verify(wakefulnessLifecycle).addObserver(captor.capture())
|
verify(wakefulnessLifecycle).addObserver(captor.capture())
|
||||||
@@ -131,7 +132,7 @@ class FeatureFlagsReleaseRestarterTest : SysuiTestCase() {
|
|||||||
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
whenever(wakefulnessLifecycle.wakefulness).thenReturn(WAKEFULNESS_ASLEEP)
|
||||||
whenever(batteryController.isPluggedIn).thenReturn(false)
|
whenever(batteryController.isPluggedIn).thenReturn(false)
|
||||||
assertThat(executor.numPending()).isEqualTo(0)
|
assertThat(executor.numPending()).isEqualTo(0)
|
||||||
restarter.restartSystemUI()
|
restarter.restartSystemUI("Restart for test")
|
||||||
|
|
||||||
val captor =
|
val captor =
|
||||||
ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback::class.java)
|
ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback::class.java)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class ServerFlagReaderImplTest : SysuiTestCase() {
|
|||||||
fun setup() {
|
fun setup() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
|
||||||
serverFlagReader = ServerFlagReaderImpl(NAMESPACE, deviceConfig, executor)
|
serverFlagReader = ServerFlagReaderImpl(NAMESPACE, deviceConfig, executor, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -56,6 +56,6 @@ class ServerFlagReaderImplTest : SysuiTestCase() {
|
|||||||
deviceConfig.setProperty(NAMESPACE, "flag_override_1", "1", false)
|
deviceConfig.setProperty(NAMESPACE, "flag_override_1", "1", false)
|
||||||
executor.runAllReady()
|
executor.runAllReady()
|
||||||
|
|
||||||
verify(changeListener).onChange()
|
verify(changeListener).onChange(flag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user