Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9363ac77 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge "Don't restart SystemUI in TestHarness mode." into tm-qpr-dev

parents f38ff6c1 f3553617
Loading
Loading
Loading
Loading
+42 −21
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import androidx.annotation.Nullable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;

import org.jetbrains.annotations.NotNull;

@@ -74,7 +73,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
    private final FlagManager mFlagManager;
    private final Context mContext;
    private final GlobalSettings mGlobalSettings;
    private final SecureSettings mSecureSettings;
    private final Resources mResources;
    private final SystemPropertiesHelper mSystemProperties;
    private final ServerFlagReader mServerFlagReader;
@@ -87,8 +85,9 @@ public class FeatureFlagsDebug implements FeatureFlags {
    private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
            new ServerFlagReader.ChangeListener() {
                @Override
                public void onChange() {
                    mRestarter.restartSystemUI();
                public void onChange(Flag<?> flag) {
                    mRestarter.restartSystemUI(
                            "Server flag change: " + flag.getNamespace() + "." + flag.getName());
                }
            };

@@ -97,7 +96,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
            FlagManager flagManager,
            Context context,
            GlobalSettings globalSettings,
            SecureSettings secureSettings,
            SystemPropertiesHelper systemProperties,
            @Main Resources resources,
            ServerFlagReader serverFlagReader,
@@ -106,7 +104,6 @@ public class FeatureFlagsDebug implements FeatureFlags {
        mFlagManager = flagManager;
        mContext = context;
        mGlobalSettings = globalSettings;
        mSecureSettings = secureSettings;
        mResources = resources;
        mSystemProperties = systemProperties;
        mServerFlagReader = serverFlagReader;
@@ -119,7 +116,8 @@ public class FeatureFlagsDebug implements FeatureFlags {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_SET_FLAG);
        filter.addAction(ACTION_GET_FLAGS);
        mFlagManager.setOnSettingsChangedAction(this::restartSystemUI);
        mFlagManager.setOnSettingsChangedAction(
                suppressRestart -> restartSystemUI(suppressRestart, "Settings changed"));
        mFlagManager.setClearCacheAction(this::removeFromCache);
        mContext.registerReceiver(mReceiver, filter, null, null,
                Context.RECEIVER_EXPORTED_UNAUDITED);
@@ -233,6 +231,10 @@ public class FeatureFlagsDebug implements FeatureFlags {
        Boolean result = readBooleanFlagOverride(flag.getName());
        if (result == null) {
            result = readBooleanFlagOverride(flag.getId());
            if (result != null) {
                // Move overrides from id to name
                setFlagValueInternal(flag.getName(), result, BooleanFlagSerializer.INSTANCE);
            }
        }
        boolean hasServerOverride = mServerFlagReader.hasOverride(
                flag.getNamespace(), flag.getName());
@@ -305,25 +307,38 @@ public class FeatureFlagsDebug implements FeatureFlags {
        requireNonNull(value, "Cannot set a null value");
        T currentValue = readFlagValueInternal(name, serializer);
        if (Objects.equals(currentValue, value)) {
            Log.i(TAG, "Flag id " + name + " is already " + value);
            Log.i(TAG, "Flag \"" + name + "\" is already " + value);
            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);
        if (data == null) {
            Log.w(TAG, "Failed to set id " + name + " to " + value);
            Log.w(TAG, "Failed to set flag " + name + " to " + value);
            return;
        }
        mGlobalSettings.putStringForUser(mFlagManager.nameToSettingsKey(name), data,
                UserHandle.USER_CURRENT);
        Log.i(TAG, "Set id " + name + " to " + value);
        removeFromCache(name);
        mFlagManager.dispatchListenersAndMaybeRestart(name, this::restartSystemUI);
    }

    <T> void eraseFlag(Flag<T> flag) {
        if (flag instanceof SysPropFlag) {
            mSystemProperties.erase(((SysPropFlag<T>) flag).getName());
            dispatchListenersAndMaybeRestart(flag.getName(), this::restartAndroid);
            mSystemProperties.erase(flag.getName());
            dispatchListenersAndMaybeRestart(
                    flag.getName(),
                    suppressRestart -> restartSystemUI(
                            suppressRestart,
                            "SysProp Flag \"" + flag.getNamespace() + "."
                                    + flag.getName() + "\" reset to default."));
        } else {
            eraseFlag(flag.getName());
        }
@@ -333,7 +348,10 @@ public class FeatureFlagsDebug implements FeatureFlags {
    private void eraseFlag(String name) {
        eraseInternal(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) {
@@ -367,20 +385,20 @@ public class FeatureFlagsDebug implements FeatureFlags {
        mFlagManager.removeListener(listener);
    }

    private void restartSystemUI(boolean requestSuppress) {
    private void restartSystemUI(boolean requestSuppress, String reason) {
        if (requestSuppress) {
            Log.i(TAG, "SystemUI Restart Suppressed");
            return;
        }
        mRestarter.restartSystemUI();
        mRestarter.restartSystemUI(reason);
    }

    private void restartAndroid(boolean requestSuppress) {
    private void restartAndroid(boolean requestSuppress, String reason) {
        if (requestSuppress) {
            Log.i(TAG, "Android Restart Suppressed");
            return;
        }
        mRestarter.restartAndroid();
        mRestarter.restartAndroid(reason);
    }

    void setBooleanFlagInternal(Flag<?> flag, boolean value) {
@@ -391,8 +409,11 @@ public class FeatureFlagsDebug implements FeatureFlags {
        } else if (flag instanceof SysPropBooleanFlag) {
            // Store SysProp flags in SystemProperties where they can read by outside parties.
            mSystemProperties.setBoolean(((SysPropBooleanFlag) flag).getName(), value);
            dispatchListenersAndMaybeRestart(flag.getName(),
                    FeatureFlagsDebug.this::restartAndroid);
            dispatchListenersAndMaybeRestart(
                    flag.getName(),
                    suppressRestart -> restartSystemUI(
                            suppressRestart,
                            "Flag \"" + flag.getName() + "\" changed to " + value));
        } else {
            throw new IllegalArgumentException("Unknown flag type");
        }
+10 −7
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ constructor(
) : Restarter {

    private var androidRestartRequested = false
    private var pendingReason = ""

    val 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.")
        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.")
        androidRestartRequested = true
        scheduleRestart()
        scheduleRestart(reason)
    }

    fun scheduleRestart() {
    fun scheduleRestart(reason: String) {
        pendingReason = reason
        if (wakefulnessLifecycle.wakefulness == WakefulnessLifecycle.WAKEFULNESS_ASLEEP) {
            restartNow()
        } else {
@@ -59,9 +62,9 @@ constructor(

    private fun restartNow() {
        if (androidRestartRequested) {
            systemExitRestarter.restartAndroid()
            systemExitRestarter.restartAndroid(pendingReason)
        } else {
            systemExitRestarter.restartSystemUI()
            systemExitRestarter.restartSystemUI(pendingReason)
        }
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -57,8 +57,9 @@ public class FeatureFlagsRelease implements FeatureFlags {
    private final ServerFlagReader.ChangeListener mOnPropertiesChanged =
            new ServerFlagReader.ChangeListener() {
                @Override
                public void onChange() {
                    mRestarter.restartSystemUI();
                public void onChange(Flag<?> flag) {
                    mRestarter.restartSystemUI(
                            "Server flag change: " + flag.getNamespace() + "." + flag.getName());
                }
            };

+11 −9
Original line number Diff line number Diff line
@@ -36,41 +36,43 @@ constructor(
) : Restarter {
    var listenersAdded = false
    var pendingRestart: Runnable? = null
    private var pendingReason = ""
    var androidRestartRequested = false

    val observer =
        object : WakefulnessLifecycle.Observer {
            override fun onFinishedGoingToSleep() {
                scheduleRestart()
                scheduleRestart(pendingReason)
            }
        }

    val batteryCallback =
        object : BatteryController.BatteryStateChangeCallback {
            override fun onBatteryLevelChanged(level: Int, pluggedIn: Boolean, charging: Boolean) {
                scheduleRestart()
                scheduleRestart(pendingReason)
            }
        }

    override fun restartSystemUI() {
    override fun restartSystemUI(reason: String) {
        Log.d(
            FeatureFlagsDebug.TAG,
            "SystemUI Restart requested. Restarting when plugged in and idle."
        )
        scheduleRestart()
        scheduleRestart(reason)
    }

    override fun restartAndroid() {
    override fun restartAndroid(reason: String) {
        Log.d(
            FeatureFlagsDebug.TAG,
            "Android Restart requested. Restarting when plugged in and idle."
        )
        androidRestartRequested = true
        scheduleRestart()
        scheduleRestart(reason)
    }

    private fun scheduleRestart() {
    private fun scheduleRestart(reason: String) {
        // Don't bother adding listeners twice.
        pendingReason = reason
        if (!listenersAdded) {
            listenersAdded = true
            wakefulnessLifecycle.addObserver(observer)
@@ -91,9 +93,9 @@ constructor(
    private fun restartNow() {
        Log.d(FeatureFlagsRelease.TAG, "Restarting due to systemui flag change")
        if (androidRestartRequested) {
            systemExitRestarter.restartAndroid()
            systemExitRestarter.restartAndroid(pendingReason)
        } else {
            systemExitRestarter.restartSystemUI()
            systemExitRestarter.restartSystemUI(pendingReason)
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
package com.android.systemui.flags

interface Restarter {
    fun restartSystemUI()
    fun restartSystemUI(reason: String)

    fun restartAndroid()
    fun restartAndroid(reason: String)
}
Loading