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
diff --git a/core/java/android/flags/BooleanFlag.java b/core/java/android/flags/BooleanFlag.java
index ae9ccf8..d4a35b2 100644
--- a/core/java/android/flags/BooleanFlag.java
+++ b/core/java/android/flags/BooleanFlag.java
@@ -43,4 +43,10 @@
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 f4141ec..985dbe3 100644
--- a/core/java/android/flags/BooleanFlagBase.java
+++ b/core/java/android/flags/BooleanFlagBase.java
@@ -22,6 +22,9 @@
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 @@
BooleanFlagBase(String namespace, String name) {
mNamespace = namespace;
mName = name;
+ mLabel = name;
}
public abstract Boolean getDefault();
@@ -47,6 +51,30 @@
}
@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() {
return getNamespace() + "." + getName() + "[" + getDefault() + "]";
diff --git a/core/java/android/flags/DynamicBooleanFlag.java b/core/java/android/flags/DynamicBooleanFlag.java
index 92009c6..271a8c5f4 100644
--- a/core/java/android/flags/DynamicBooleanFlag.java
+++ b/core/java/android/flags/DynamicBooleanFlag.java
@@ -41,4 +41,10 @@
public Boolean getDefault() {
return mDefault;
}
+
+ @Override
+ public DynamicBooleanFlag defineMetaData(String label, String description, String categoryName) {
+ super.defineMetaData(label, description, categoryName);
+ return this;
+ }
}
diff --git a/core/java/android/flags/Flag.java b/core/java/android/flags/Flag.java
index 0ab3c8a..b97a4c8 100644
--- a/core/java/android/flags/Flag.java
+++ b/core/java/android/flags/Flag.java
@@ -42,4 +42,41 @@
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<T> 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 5f435be..6844b8f 100644
--- a/core/java/android/flags/FusedOffFlag.java
+++ b/core/java/android/flags/FusedOffFlag.java
@@ -40,4 +40,10 @@
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 ea8d9b2..e9adba7 100644
--- a/core/java/android/flags/FusedOnFlag.java
+++ b/core/java/android/flags/FusedOnFlag.java
@@ -40,4 +40,10 @@
public Boolean getDefault() {
return true;
}
+
+ @Override
+ public FusedOnFlag defineMetaData(String label, String description, String categoryName) {
+ super.defineMetaData(label, description, categoryName);
+ return this;
+ }
}