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

Commit ca93c0a2 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Remove ids from SystemUI Flagging System.

Bug: 292511372
Fixes: 265188950
Test: manually built and run flag flipper
Change-Id: I3e8cd6a1f30d0b75b4e4ee5d870e5effac813c0a
Merged-In: I3e8cd6a1f30d0b75b4e4ee5d870e5effac813c0a
parent 615cf195
Loading
Loading
Loading
Loading
+55 −31
Original line number Diff line number Diff line
@@ -24,14 +24,12 @@ import android.os.Parcelable

/**
 * Base interface for flags that can change value on a running device.
 * @property id unique id to help identify this flag. Must be unique. This will be removed soon.
 * @property teamfood Set to true to include this flag as part of the teamfood flag. This will
 *                    be removed soon.
 * @property name Used for server-side flagging where appropriate. Also used for display. No spaces.
 * @property namespace The server-side namespace that this flag lives under.
 */
interface Flag<T> {
    val id: Int
    val teamfood: Boolean
    val name: String
    val namespace: String
@@ -58,7 +56,6 @@ interface SysPropFlag<T> : Flag<T> {
 */
// Consider using the "parcelize" kotlin library.
abstract class BooleanFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: Boolean = false,
@@ -74,8 +71,17 @@ abstract class BooleanFlag constructor(
        }
    }

    private constructor(
            id: Int,
            name: String,
            namespace: String,
            default: Boolean,
            teamfood: Boolean,
            overridden: Boolean,
            ) : this(name, namespace, default, teamfood, overridden)

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readBoolean(),
@@ -84,7 +90,7 @@ abstract class BooleanFlag constructor(
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeBoolean(default)
@@ -99,12 +105,11 @@ abstract class BooleanFlag constructor(
 * It can be changed or overridden in debug builds but not in release builds.
 */
data class UnreleasedFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : BooleanFlag(id, name, namespace, false, teamfood, overridden)
) : BooleanFlag(name, namespace, false, teamfood, overridden)

/**
 * A Flag that is true by default.
@@ -112,12 +117,11 @@ data class UnreleasedFlag constructor(
 * It can be changed or overridden in any build, meaning it can be turned off if needed.
 */
data class ReleasedFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : BooleanFlag(id, name, namespace, true, teamfood, overridden)
) : BooleanFlag(name, namespace, true, teamfood, overridden)

/**
 * A Flag that reads its default values from a resource overlay instead of code.
@@ -125,7 +129,6 @@ data class ReleasedFlag constructor(
 * Prefer [UnreleasedFlag] and [ReleasedFlag].
 */
data class ResourceBooleanFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    @BoolRes override val resourceId: Int,
@@ -140,7 +143,6 @@ data class ResourceBooleanFlag constructor(
 * Prefer [UnreleasedFlag] and [ReleasedFlag].
 */
data class SysPropBooleanFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: Boolean = false,
@@ -150,7 +152,6 @@ data class SysPropBooleanFlag constructor(
}

data class StringFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: String = "",
@@ -165,15 +166,21 @@ data class StringFlag constructor(
        }
    }

    private constructor(id: Int, name: String, namespace: String, default: String) : this(
            name,
            namespace,
            default
    )

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readString() ?: ""
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeString(default)
@@ -181,7 +188,6 @@ data class StringFlag constructor(
}

data class ResourceStringFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    @StringRes override val resourceId: Int,
@@ -189,7 +195,6 @@ data class ResourceStringFlag constructor(
) : ResourceFlag<String>

data class IntFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: Int = 0,
@@ -205,15 +210,21 @@ data class IntFlag constructor(
        }
    }

    private constructor(id: Int, name: String, namespace: String, default: Int) : this(
            name,
            namespace,
            default
    )

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readInt()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeInt(default)
@@ -221,7 +232,6 @@ data class IntFlag constructor(
}

data class ResourceIntFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    @IntegerRes override val resourceId: Int,
@@ -229,11 +239,10 @@ data class ResourceIntFlag constructor(
) : ResourceFlag<Int>

data class LongFlag constructor(
    override val id: Int,
    override val default: Long = 0,
    override val teamfood: Boolean = false,
    override val name: String,
    override val namespace: String,
    override val default: Long = 0,
    override val teamfood: Boolean = false,
    override val overridden: Boolean = false
) : ParcelableFlag<Long> {

@@ -245,15 +254,21 @@ data class LongFlag constructor(
        }
    }

    private constructor(id: Int, name: String, namespace: String, default: Long) : this(
            name,
            namespace,
            default
    )

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readLong()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeLong(default)
@@ -261,7 +276,6 @@ data class LongFlag constructor(
}

data class FloatFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: Float = 0f,
@@ -277,15 +291,21 @@ data class FloatFlag constructor(
        }
    }

    private constructor(id: Int, name: String, namespace: String, default: Float) : this(
            name,
            namespace,
            default
    )

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readFloat()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeFloat(default)
@@ -293,7 +313,6 @@ data class FloatFlag constructor(
}

data class ResourceFloatFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val resourceId: Int,
@@ -301,7 +320,6 @@ data class ResourceFloatFlag constructor(
) : ResourceFlag<Int>

data class DoubleFlag constructor(
    override val id: Int,
    override val name: String,
    override val namespace: String,
    override val default: Double = 0.0,
@@ -317,15 +335,21 @@ data class DoubleFlag constructor(
        }
    }

    private constructor(id: Int, name: String, namespace: String, default: Double) : this(
            name,
            namespace,
            default
    )

    private constructor(parcel: Parcel) : this(
        id = parcel.readInt(),
        parcel.readInt(),
        name = parcel.readString() ?: "",
        namespace = parcel.readString() ?: "",
        default = parcel.readDouble()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(id)
        parcel.writeInt(0)
        parcel.writeString(name)
        parcel.writeString(namespace)
        parcel.writeDouble(default)
+0 −12
Original line number Diff line number Diff line
@@ -115,13 +115,6 @@ class FlagManager constructor(
        context.sendBroadcast(intent)
    }

    /** Returns the stored value or null if not set.  */
    // TODO(b/265188950): Remove method this once ids are fully deprecated.
    fun <T> readFlagValue(id: Int, serializer: FlagSerializer<T>): T? {
        val data = settings.getStringFromSecure(idToSettingsKey(id))
        return serializer.fromSettingsData(data)
    }

    /** Returns the stored value or null if not set.  */
    fun <T> readFlagValue(name: String, serializer: FlagSerializer<T>): T? {
        val data = settings.getString(nameToSettingsKey(name))
@@ -158,11 +151,6 @@ class FlagManager constructor(
        return intent
    }

    // TODO(b/265188950): Remove method this once ids are fully deprecated.
    fun idToSettingsKey(id: Int): String {
        return "$SETTINGS_PREFIX/$id"
    }

    fun nameToSettingsKey(name: String): String {
        return "$SETTINGS_PREFIX/$name"
    }
+0 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.provider.Settings

class FlagSettingsHelper(private val contentResolver: ContentResolver) {

    // TODO(b/265188950): Remove method this once ids are fully deprecated.
    fun getStringFromSecure(key: String): String? = Settings.Secure.getString(contentResolver, key)

    fun getString(key: String): String? = Settings.Global.getString(contentResolver, key)
+3 −9
Original line number Diff line number Diff line
@@ -29,35 +29,31 @@ object FlagsFactory {
        }

    fun unreleasedFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
        teamfood: Boolean = false
    ): UnreleasedFlag {
        val flag = UnreleasedFlag(id = id, name = name, namespace = namespace, teamfood = teamfood)
        val flag = UnreleasedFlag(name = name, namespace = namespace, teamfood = teamfood)
        checkForDupesAndAdd(flag)
        return flag
    }

    fun releasedFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
    ): ReleasedFlag {
        val flag = ReleasedFlag(id = id, name = name, namespace = namespace, teamfood = false)
        val flag = ReleasedFlag(name = name, namespace = namespace, teamfood = false)
        checkForDupesAndAdd(flag)
        return flag
    }

    fun resourceBooleanFlag(
        id: Int,
        @BoolRes resourceId: Int,
        name: String,
        namespace: String = "systemui",
    ): ResourceBooleanFlag {
        val flag =
            ResourceBooleanFlag(
                id = id,
                name = name,
                namespace = namespace,
                resourceId = resourceId,
@@ -68,13 +64,11 @@ object FlagsFactory {
    }

    fun sysPropBooleanFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
        default: Boolean = false
    ): SysPropBooleanFlag {
        val flag =
            SysPropBooleanFlag(id = id, name = name, namespace = "systemui", default = default)
        val flag = SysPropBooleanFlag(name = name, namespace = "systemui", default = default)
        checkForDupesAndAdd(flag)
        return flag
    }
+3 −9
Original line number Diff line number Diff line
@@ -29,35 +29,31 @@ object FlagsFactory {
        }

    fun unreleasedFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
        teamfood: Boolean = false
    ): UnreleasedFlag {
        // Unreleased flags are always false in this build.
        val flag = UnreleasedFlag(id = id, name = "", namespace = "", teamfood = false)
        val flag = UnreleasedFlag(name = name, namespace = namespace, teamfood = false)
        return flag
    }

    fun releasedFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
    ): ReleasedFlag {
        val flag = ReleasedFlag(id = id, name = name, namespace = namespace, teamfood = false)
        val flag = ReleasedFlag(name = name, namespace = namespace, teamfood = false)
        flagMap[name] = flag
        return flag
    }

    fun resourceBooleanFlag(
        id: Int,
        @BoolRes resourceId: Int,
        name: String,
        namespace: String = "systemui",
    ): ResourceBooleanFlag {
        val flag =
            ResourceBooleanFlag(
                id = id,
                name = name,
                namespace = namespace,
                resourceId = resourceId,
@@ -68,13 +64,11 @@ object FlagsFactory {
    }

    fun sysPropBooleanFlag(
        id: Int,
        name: String,
        namespace: String = "systemui",
        default: Boolean = false
    ): SysPropBooleanFlag {
        val flag =
            SysPropBooleanFlag(id = id, name = name, namespace = namespace, default = default)
        val flag = SysPropBooleanFlag(name = name, namespace = namespace, default = default)
        flagMap[name] = flag
        return flag
    }
Loading