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

Commit b5c9e938 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Remove flag plugin with flag manager with DI" into sc-v2-dev am: 24e24658

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16040960

Change-Id: Iab196751ba1e88e4c59f8c3212100cd0d6c6b341
parents dd1be6c2 24e24658
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -15,15 +15,19 @@
 */

package com.android.systemui.flags;
import android.util.ArraySet;

import com.android.systemui.dagger.SysUISingleton;

import javax.inject.Inject;

/**
 * Concrete implementation of the a Flag manager that returns default values for debug builds
 */
@SysUISingleton
public class FeatureFlagManager {
public class FeatureFlagManager implements FlagReader, FlagWriter {
    @Inject
    public FeatureFlagManager() {}

    public boolean isEnabled(int key, boolean defaultValue) {
        return isEnabled(Integer.toString(key), defaultValue);
    }
@@ -40,4 +44,9 @@ public class FeatureFlagManager {
    public void setEnabled(String key, boolean value) {
        // TODO
    }

    public void addListener(Listener run) {}

    public void removeListener(Listener run) {}

}
+9 −0
Original line number Diff line number Diff line
@@ -38,7 +38,10 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.demomode.dagger.DemoModeModule;
import com.android.systemui.doze.dagger.DozeComponent;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlagManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FlagReader;
import com.android.systemui.flags.FlagWriter;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.log.dagger.LogModule;
import com.android.systemui.model.SysUiState;
@@ -149,6 +152,12 @@ public abstract class SystemUIModule {
        return state;
    }

    @Binds
    abstract FlagReader provideFlagReader(FeatureFlagManager impl);

    @Binds
    abstract FlagWriter provideFlagWriter(FeatureFlagManager impl);

    @BindsOptionalOf
    abstract CommandQueue optionalCommandQueue();

+9 −7
Original line number Diff line number Diff line
@@ -18,19 +18,21 @@ package com.android.systemui.flags;

import com.android.systemui.dagger.SysUISingleton;

import javax.inject.Inject;

/**
 * Default implementation of the a Flag manager that returns default values for release builds
 */
@SysUISingleton
public class FeatureFlagManager {
    public boolean getBoolean(int key, boolean defaultValue) {
public class FeatureFlagManager implements FlagReader, FlagWriter {
    @Inject
    public FeatureFlagManager() {}
    public boolean isEnabled(String key, boolean defaultValue) {
        return defaultValue;
    }
    public void setBoolean(int key, boolean value) {}
    public boolean getBoolean(String key, boolean defaultValue) {
    public boolean isEnabled(int key, boolean defaultValue) {
        return defaultValue;
    }
    public void setBoolean(String key, boolean value) {}
    public void addFlagChangedListener(Runnable run) {}
    public void removeFlagUpdatedListener(Runnable run) {}
    public void setEnabled(String key, boolean value) {}
    public void setEnabled(int key, boolean value) {}
}
+37 −49
Original line number Diff line number Diff line
@@ -16,26 +16,29 @@

package com.android.systemui.flags;

import android.content.Context;
import android.content.res.Resources;
import android.util.SparseArray;

import androidx.annotation.BoolRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.FlagReaderPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.util.wrapper.BuildInfo;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.inject.Inject;
/**
 * Reads and caches feature flags for quick access
 *
 * Feature flags must be defined as boolean resources. For example:
 * Feature flags must be defined as boolean resources. For example:t
 *
 * {@code
 *  <bool name="flag_foo_bar_baz">false</bool>
@@ -55,71 +58,39 @@ import javax.inject.Inject;
 * Calls to this class should probably be wrapped by a method in {@link FeatureFlags}.
 */
@SysUISingleton
public class FeatureFlagReader {
public class FeatureFlagReader implements Dumpable {
    private final Resources mResources;
    private final boolean mAreFlagsOverrideable;
    private final PluginManager mPluginManager;
    private final SystemPropertiesHelper mSystemPropertiesHelper;
    private final SparseArray<CachedFlag> mCachedFlags = new SparseArray<>();

    private FlagReaderPlugin mPlugin = new FlagReaderPlugin(){};
    private final FlagReader mFlagReader;

    @Inject
    public FeatureFlagReader(
            @Main Resources resources,
            BuildInfo build,
            PluginManager pluginManager,
            SystemPropertiesHelper systemPropertiesHelper) {
            DumpManager dumpManager,
            SystemPropertiesHelper systemPropertiesHelper,
            FlagReader reader) {
        mResources = resources;
        mPluginManager = pluginManager;
        mFlagReader = reader;
        mSystemPropertiesHelper = systemPropertiesHelper;
        mAreFlagsOverrideable =
                build.isDebuggable() && mResources.getBoolean(R.bool.are_flags_overrideable);

        mPluginManager.addPluginListener(mPluginListener, FlagReaderPlugin.class);
    }

    private final PluginListener<FlagReaderPlugin> mPluginListener =
            new PluginListener<FlagReaderPlugin>() {
                public void onPluginConnected(FlagReaderPlugin plugin, Context context) {
                    mPlugin = plugin;
                }

                public void onPluginDisconnected(FlagReaderPlugin plugin) {
                    mPlugin = new FlagReaderPlugin() {};
        dumpManager.registerDumpable("FeatureFlags", this);
    }
            };

    boolean isEnabled(BooleanFlag flag) {
        return mPlugin.isEnabled(flag.getId(), flag.getDefault());
    }

    String getValue(StringFlag flag) {
        return mPlugin.getValue(flag.getId(), flag.getDefault());
    }

    int getValue(IntFlag flag) {
        return mPlugin.getValue(flag.getId(), flag.getDefault());
        return mFlagReader.isEnabled(flag.getId(), flag.getDefault());
    }

    long getValue(LongFlag flag) {
        return mPlugin.getValue(flag.getId(), flag.getDefault());
    void addListener(FlagReader.Listener listener) {
        mFlagReader.addListener(listener);
    }

    float getValue(FloatFlag flag) {
        return mPlugin.getValue(flag.getId(), flag.getDefault());
    }

    double getValue(DoubleFlag flag) {
        return mPlugin.getValue(flag.getId(), flag.getDefault());
    }

    void addListener(FlagReaderPlugin.Listener listener) {
        mPlugin.addListener(listener);
    }

    void removeListener(FlagReaderPlugin.Listener listener) {
        mPlugin.removeListener(listener);
    void removeListener(FlagReader.Listener listener) {
        mFlagReader.removeListener(listener);
    }

    /**
@@ -172,6 +143,23 @@ public class FeatureFlagReader {
        }
    }

    @Override
    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
        ArrayList<String> flagStrings = new ArrayList<>(mCachedFlags.size());
        for (int i = 0; i < mCachedFlags.size(); i++) {
            int key = mCachedFlags.keyAt(i);
            // get the object by the key.
            CachedFlag flag = mCachedFlags.get(key);
            flagStrings.add("  " + RESNAME_PREFIX + flag.name + ": " + flag.value + "\n");
        }
        flagStrings.sort(String.CASE_INSENSITIVE_ORDER);
        pw.println("AreFlagsOverrideable: " + mAreFlagsOverrideable);
        pw.println("Cached FeatureFlags:");
        for (String flagString : flagStrings) {
            pw.print(flagString);
        }
    }

    private static class CachedFlag {
        public final String name;
        public final boolean value;
+1 −39
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.util.FeatureFlagUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.plugins.FlagReaderPlugin;

import java.util.ArrayList;
import java.util.HashMap;
@@ -51,7 +50,7 @@ public class FeatureFlags {
        flagReader.addListener(mListener);
    }

    private final FlagReaderPlugin.Listener mListener = id -> {
    private final FlagReader.Listener mListener = id -> {
        if (mListeners.containsKey(id) && mFlagMap.containsKey(id)) {
            mListeners.get(id).forEach(listener -> listener.onFlagChanged(mFlagMap.get(id)));
        }
@@ -70,45 +69,8 @@ public class FeatureFlags {
        return mFlagReader.isEnabled(flag);
    }

    /**
     * @param flag The {@link StringFlag} of interest.
     * @return The value of the flag.
     */
    public String getValue(StringFlag flag) {
        return mFlagReader.getValue(flag);
    }

    /**
     * @param flag The {@link IntFlag} of interest.
     * @return The value of the flag.
     */
    public int getValue(IntFlag flag) {
        return mFlagReader.getValue(flag);
    }

    /**
     * @param flag The {@link LongFlag} of interest.
     * @return The value of the flag.
     */
    public long getValue(LongFlag flag) {
        return mFlagReader.getValue(flag);
    }

    /**
     * @param flag The {@link FloatFlag} of interest.
     * @return The value of the flag.
     */
    public float getValue(FloatFlag flag) {
        return mFlagReader.getValue(flag);
    }

    /**
     * @param flag The {@link DoubleFlag} of interest.
     * @return The value of the flag.
     */
    public double getValue(DoubleFlag flag) {
        return mFlagReader.getValue(flag);
    }

    /** Add a listener for a specific flag. */
    public void addFlagListener(Flag<?> flag, Listener listener) {
Loading