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

Commit b77ba496 authored by Pierre Barbier de Reuille's avatar Pierre Barbier de Reuille
Browse files

Add the list of flags in dumpsys

For flags outside of the DesktopExperienceFlags enum, it will only see
those defined in the System UI / WM Shell process.

Command to get it:

$ adb shell dumpsys activity service SystemUIService WMShell

And search for `DesktopExperienceFlags`.

Bug: 389092752
Flag: com.android.window.flags.show_desktop_experience_dev_option
Test: Manual
Change-Id: Ia5e5cb15b29d1852352a3bc57b4d6ba8425f0762
parent 97c707c8
Loading
Loading
Loading
Loading
+50 −1
Original line number Diff line number Diff line
@@ -22,10 +22,14 @@ import static com.android.server.display.feature.flags.Flags.enableDisplayConten
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.SystemProperties;
import android.util.ArrayMap;
import android.util.Log;

import com.android.window.flags.Flags;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.BooleanSupplier;

/**
@@ -196,6 +200,9 @@ public enum DesktopExperienceFlags {
            this.mFlagFunction = flagFunction;
            this.mFlagName = flagName;
            this.mShouldOverrideByDevOptionDefault = shouldOverrideByDevOption;
            if (Flags.showDesktopExperienceDevOption()) {
                registerFlag(flagName, this);
            }
        }

        /**
@@ -212,6 +219,18 @@ public enum DesktopExperienceFlags {
            }
            return isFlagTrue(mFlagFunction, mCachedIsOverrideByDevOption);
        }

        public String getFlagName() {
            return mFlagName;
        }

        public boolean getFlagValue() {
            return mFlagFunction.getAsBoolean();
        }

        public boolean isOverridable() {
            return mShouldOverrideByDevOptionDefault;
        }
    }

    private static final String TAG = "DesktopExperienceFlags";
@@ -229,6 +248,13 @@ public enum DesktopExperienceFlags {
    @Nullable
    private static Boolean sCachedToggleOverride;

    /**
     * Local cache of dynamically defined flag, organised by name.
     *
     * <p> Create an array with a capacity of 10, which should be plenty.
     */
    private static Map<String, DesktopExperienceFlag> sDynamicFlags = new ArrayMap<>(10);

    public static final String SYSTEM_PROPERTY_NAME = "persist.wm.debug.desktop_experience_devopts";
    public static final String SYSTEM_PROPERTY_OVERRIDE_PREFIX =
            "persist.wm.debug.desktop_experience.add_dev_option.";
@@ -255,6 +281,19 @@ public enum DesktopExperienceFlags {
        return isFlagTrue(mFlagFunction, mCachedIsOverrideByDevOption);
    }

    public boolean getFlagValue() {
        return mFlagFunction.getAsBoolean();
    }

    public String getFlagName() {
        return mFlagName;
    }

    /** Returns whether or not the developer option can override that flag. */
    public boolean isOverridable() {
        return mShouldOverrideByDevOptionDefault;
    }

    private static boolean isFlagTrue(
            BooleanSupplier flagFunction, boolean shouldOverrideByDevOption) {
        if (Flags.showDesktopExperienceDevOption()
@@ -265,6 +304,14 @@ public enum DesktopExperienceFlags {
        return flagFunction.getAsBoolean();
    }

    private static void registerFlag(String name, DesktopExperienceFlag flag) {
        sDynamicFlags.put(name, flag);
    }

    public static List<DesktopExperienceFlag> getRegisteredFlags() {
        return new ArrayList<>(sDynamicFlags.values());
    }

    private static boolean checkIfFlagShouldBeOverridden(@Nullable String flagName,
            boolean defaultValue) {
        if (!Flags.showDesktopExperienceDevOption() || enableDisplayContentModeManagement()) {
@@ -279,7 +326,8 @@ public enum DesktopExperienceFlags {
                defaultValue);
    }

    private static boolean getToggleOverride() {
    /** Check whether the flags are overridden to true or not. */
    public static boolean getToggleOverride() {
        // If cached, return it
        if (sCachedToggleOverride != null) {
            return sCachedToggleOverride;
@@ -297,3 +345,4 @@ public enum DesktopExperienceFlags {
        return SystemProperties.getBoolean(SYSTEM_PROPERTY_NAME, false);
    }
}
+41 −0
Original line number Diff line number Diff line
@@ -4440,6 +4440,47 @@ class DesktopTasksController(
        desktopConfig.dump(pw, innerPrefix)
        userRepositories.dump(pw, innerPrefix)
        focusTransitionObserver.dump(pw, innerPrefix)
        if (Flags.showDesktopExperienceDevOption()) {
            dumpFlags(pw, prefix)
        }
    }

    private fun dumpFlags(pw: PrintWriter, prefix: String) {
        val flagPrefix = "$prefix  "
        fun dumpFlag(
            name: String,
            flagNameWidth: Int,
            value: Boolean,
            flagValue: Boolean,
            overridable: Boolean,
        ) {
            val spaces = " ".repeat(flagNameWidth - name.length)
            pw.println(
                "${flagPrefix}Flag $name$spaces - $value (default: $flagValue, overridable: $overridable)"
            )
        }

        fun dumpFlag(flag: DesktopExperienceFlags, flagNameWidth: Int) {
            dumpFlag(flag.flagName, flagNameWidth, flag.isTrue, flag.flagValue, flag.isOverridable)
        }

        fun dumpFlag(flag: DesktopExperienceFlag, flagNameWidth: Int) {
            dumpFlag(flag.flagName, flagNameWidth, flag.isTrue, flag.flagValue, flag.isOverridable)
        }
        pw.println("${prefix}DesktopExperienceFlags")
        pw.println(
            "$prefix  Status: ${if (DesktopExperienceFlags.getToggleOverride()) "enabled" else "disabled"}"
        )
        val maxEnumFlagName = DesktopExperienceFlags.entries.maxOf { it.flagName.length }
        for (flag in DesktopExperienceFlags.entries) {
            dumpFlag(flag, maxEnumFlagName + 1)
        }
        val registeredFlags = DesktopExperienceFlags.getRegisteredFlags()
        val maxRegisteredFlagName = registeredFlags.maxOf { it.flagName.length }
        pw.println("${prefix}DesktopExperienceFlags.DesktopExperienceFlag")
        for (flag in registeredFlags) {
            dumpFlag(flag, maxRegisteredFlagName + 1)
        }
    }

    /** The interface for calls from outside the shell, within the host process. */