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

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

Merge "Allow flags to be marked as overriden." into tm-qpr-dev

parents 13f6aed5 9d70f273
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ interface Flag<T> {

interface ParcelableFlag<T> : Flag<T>, Parcelable {
    val default: T
    val overridden: Boolean
    override fun describeContents() = 0
}

@@ -52,7 +53,8 @@ interface SysPropFlag<T> : Flag<T> {
data class BooleanFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: Boolean = false,
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Boolean> {

    companion object {
@@ -65,12 +67,16 @@ data class BooleanFlag @JvmOverloads constructor(

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        default = parcel.readBoolean()
        default = parcel.readBoolean(),
        teamfood = parcel.readBoolean(),
        overridden = parcel.readBoolean()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeBoolean(default)
        parcel.writeBoolean(teamfood)
        parcel.writeBoolean(overridden)
    }
}

@@ -100,7 +106,8 @@ data class SysPropBooleanFlag @JvmOverloads constructor(
data class StringFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: String = "",
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<String> {
    companion object {
        @JvmField
@@ -130,7 +137,8 @@ data class ResourceStringFlag @JvmOverloads constructor(
data class IntFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: Int = 0,
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Int> {

    companion object {
@@ -161,7 +169,8 @@ data class ResourceIntFlag @JvmOverloads constructor(
data class LongFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: Long = 0,
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Long> {

    companion object {
@@ -186,7 +195,8 @@ data class LongFlag @JvmOverloads constructor(
data class FloatFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: Float = 0f,
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Float> {

    companion object {
@@ -217,7 +227,8 @@ data class ResourceFloatFlag @JvmOverloads constructor(
data class DoubleFlag @JvmOverloads constructor(
    override val id: Int,
    override val default: Double = 0.0,
    override val teamfood: Boolean = false
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Double> {

    companion object {
+29 −15
Original line number Diff line number Diff line
@@ -65,19 +65,28 @@ class FlagManager constructor(

        return CallbackToFutureAdapter.getFuture {
                completer: CallbackToFutureAdapter.Completer<Collection<Flag<*>>> ->
                context.sendOrderedBroadcast(intent, null,
            context.sendOrderedBroadcast(
                intent,
                null,
                object : BroadcastReceiver() {
                    override fun onReceive(context: Context, intent: Intent) {
                        val extras: Bundle? = getResultExtras(false)
                        val listOfFlags: java.util.ArrayList<ParcelableFlag<*>>? =
                                extras?.getParcelableArrayList(EXTRA_FLAGS)
                            extras?.getParcelableArrayList(
                                EXTRA_FLAGS, ParcelableFlag::class.java
                            )
                        if (listOfFlags != null) {
                            completer.set(listOfFlags)
                        } else {
                            completer.setException(NoFlagResultsException())
                        }
                    }
                    }, null, Activity.RESULT_OK, "extra data", null)
                },
                null,
                Activity.RESULT_OK,
                "extra data",
                null
            )
            "QueryingFlags"
        }
    }
@@ -152,7 +161,11 @@ class FlagManager constructor(
            }
            val parts = uri.pathSegments
            val idStr = parts[parts.size - 1]
            val id = try { idStr.toInt() } catch (e: NumberFormatException) { return }
            val id = try {
                idStr.toInt()
            } catch (e: NumberFormatException) {
                return
            }
            clearCacheAction?.accept(id)
            dispatchListenersAndMaybeRestart(id, onSettingsChangedAction)
        }
@@ -188,4 +201,5 @@ class FlagManager constructor(
}

class NoFlagResultsException : Exception(
    "SystemUI failed to communicate its flags back successfully")
 No newline at end of file
    "SystemUI failed to communicate its flags back successfully"
)
+18 −5
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.content.res.Resources;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.util.Log;

import androidx.annotation.NonNull;
@@ -197,7 +196,7 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {

    /** Specific override for Boolean flags that checks against the teamfood list.*/
    private boolean readFlagValue(int id, boolean defaultValue) {
        Boolean result = readFlagValueInternal(id, BooleanFlagSerializer.INSTANCE);
        Boolean result = readBooleanFlagOverride(id);
        // Only check for teamfood if the default is false.
        if (!defaultValue && result == null && id != Flags.TEAMFOOD.getId()) {
            if (mAllFlags.containsKey(id) && mAllFlags.get(id).getTeamfood()) {
@@ -208,6 +207,10 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
        return result == null ? defaultValue : result;
    }

    private Boolean readBooleanFlagOverride(int id) {
        return readFlagValueInternal(id, BooleanFlagSerializer.INSTANCE);
    }

    @NonNull
    private <T> T readFlagValue(int id, @NonNull T defaultValue, FlagSerializer<T> serializer) {
        requireNonNull(defaultValue, "defaultValue");
@@ -407,11 +410,18 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
        @Nullable
        private ParcelableFlag<?> toParcelableFlag(Flag<?> f) {
            if (f instanceof BooleanFlag) {
                return new BooleanFlag(f.getId(), isEnabled((BooleanFlag) f), f.getTeamfood());
                return new BooleanFlag(
                        f.getId(),
                        isEnabled((BooleanFlag) f),
                        f.getTeamfood(),
                        readBooleanFlagOverride(f.getId()) != null);
            }
            if (f instanceof ResourceBooleanFlag) {
                return new BooleanFlag(
                        f.getId(), isEnabled((ResourceBooleanFlag) f), f.getTeamfood());
                        f.getId(),
                        isEnabled((ResourceBooleanFlag) f),
                        f.getTeamfood(),
                        readBooleanFlagOverride(f.getId()) != null);
            }
            if (f instanceof DeviceConfigBooleanFlag) {
                return new BooleanFlag(
@@ -420,7 +430,10 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
            if (f instanceof SysPropBooleanFlag) {
                // TODO(b/223379190): Teamfood not supported for sysprop flags yet.
                return new BooleanFlag(
                        f.getId(), isEnabled((SysPropBooleanFlag) f), false);
                        f.getId(),
                        ((SysPropBooleanFlag) f).getDefault(),
                        false,
                        !mSystemProperties.get(((SysPropBooleanFlag) f).getName()).isEmpty());
            }

            // TODO: add support for other flag types.