From 8f91c5d73c1bf0550651dcf473934def66338fb6 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Mon, 22 May 2023 17:43:21 +0000 Subject: [PATCH] Allow flags to add metadata directly in code. Bug: 279054964 Test: build and flash. Accessed in flipper app (updated app in a future cl) Change-Id: Ia4a20ab4388936ccd09ffe80044bb99a1f841971 --- core/java/android/flags/BooleanFlag.java | 6 +++ core/java/android/flags/BooleanFlagBase.java | 28 ++++++++++++++ .../android/flags/DynamicBooleanFlag.java | 6 +++ core/java/android/flags/Flag.java | 37 +++++++++++++++++++ core/java/android/flags/FusedOffFlag.java | 6 +++ core/java/android/flags/FusedOnFlag.java | 6 +++ 6 files changed, 89 insertions(+) diff --git a/core/java/android/flags/BooleanFlag.java b/core/java/android/flags/BooleanFlag.java index ae9ccf8c52c36..d4a35b25f6236 100644 --- a/core/java/android/flags/BooleanFlag.java +++ b/core/java/android/flags/BooleanFlag.java @@ -43,4 +43,10 @@ public class BooleanFlag extends BooleanFlagBase { public Boolean getDefault() { return mDefault; } + + @Override + public BooleanFlag defineMetaData(String label, String description, String categoryName) { + super.defineMetaData(label, description, categoryName); + return this; + } } diff --git a/core/java/android/flags/BooleanFlagBase.java b/core/java/android/flags/BooleanFlagBase.java index f4141ecab01b1..985dbe3f2f01e 100644 --- a/core/java/android/flags/BooleanFlagBase.java +++ b/core/java/android/flags/BooleanFlagBase.java @@ -22,6 +22,9 @@ abstract class BooleanFlagBase implements Flag { private final String mNamespace; private final String mName; + private String mLabel; + private String mDescription; + private String mCategoryName; /** * @param namespace A namespace for this flag. See {@link android.provider.DeviceConfig}. @@ -30,6 +33,7 @@ abstract class BooleanFlagBase implements Flag { BooleanFlagBase(String namespace, String name) { mNamespace = namespace; mName = name; + mLabel = name; } public abstract Boolean getDefault(); @@ -46,6 +50,30 @@ abstract class BooleanFlagBase implements Flag { return mName; } + @Override + public BooleanFlagBase defineMetaData(String label, String description, String categoryName) { + mLabel = label; + mDescription = description; + mCategoryName = categoryName; + return this; + } + + @Override + @NonNull + public String getLabel() { + return mLabel; + } + + @Override + public String getDescription() { + return mDescription; + } + + @Override + public String getCategoryName() { + return mCategoryName; + } + @Override @NonNull public String toString() { diff --git a/core/java/android/flags/DynamicBooleanFlag.java b/core/java/android/flags/DynamicBooleanFlag.java index 92009c60d91a1..271a8c5f4d15f 100644 --- a/core/java/android/flags/DynamicBooleanFlag.java +++ b/core/java/android/flags/DynamicBooleanFlag.java @@ -41,4 +41,10 @@ public class DynamicBooleanFlag extends BooleanFlagBase implements DynamicFlag { default boolean isDynamic() { return false; } + + /** + * Add human-readable details to the flag. Flag client's are not required to set this. + * + * See {@link #getLabel()}, {@link #getDescription()}, and {@link #getCategoryName()}. + * + * @return Returns `this`, to make a fluent api. + */ + Flag defineMetaData(String label, String description, String categoryName); + + /** + * A human-readable name for the flag. Defaults to {@link #getName()} + * + * See {@link #defineMetaData(String, String, String)} + */ + @NonNull + default String getLabel() { + return getName(); + } + + /** + * A human-readable description for the flag. Defaults to null if unset. + * + * See {@link #defineMetaData(String, String, String)} + */ + default String getDescription() { + return null; + } + + /** + * A human-readable category name for the flag. Defaults to null if unset. + * + * See {@link #defineMetaData(String, String, String)} + */ + default String getCategoryName() { + return null; + } } diff --git a/core/java/android/flags/FusedOffFlag.java b/core/java/android/flags/FusedOffFlag.java index 5f435beb26421..6844b8faafef0 100644 --- a/core/java/android/flags/FusedOffFlag.java +++ b/core/java/android/flags/FusedOffFlag.java @@ -40,4 +40,10 @@ public final class FusedOffFlag extends BooleanFlagBase { public Boolean getDefault() { return false; } + + @Override + public FusedOffFlag defineMetaData(String label, String description, String categoryName) { + super.defineMetaData(label, description, categoryName); + return this; + } } diff --git a/core/java/android/flags/FusedOnFlag.java b/core/java/android/flags/FusedOnFlag.java index ea8d9b29b3cec..e9adba7595c11 100644 --- a/core/java/android/flags/FusedOnFlag.java +++ b/core/java/android/flags/FusedOnFlag.java @@ -40,4 +40,10 @@ public final class FusedOnFlag extends BooleanFlagBase { public Boolean getDefault() { return true; } + + @Override + public FusedOnFlag defineMetaData(String label, String description, String categoryName) { + super.defineMetaData(label, description, categoryName); + return this; + } }