aconfig: Respect flag naming convention on test flags
Test: atest aconfig.test
Bug: 311152507
Change-Id: I960867d32415007db5dacab57e97b813cbbee650
diff --git a/tools/aconfig/src/codegen/cpp.rs b/tools/aconfig/src/codegen/cpp.rs
index 6e3ac7b..000581b 100644
--- a/tools/aconfig/src/codegen/cpp.rs
+++ b/tools/aconfig/src/codegen/cpp.rs
@@ -170,6 +170,8 @@
virtual bool enabled_ro() = 0;
+ virtual bool enabled_ro_exported() = 0;
+
virtual bool enabled_rw() = 0;
};
@@ -199,6 +201,10 @@
return true;
}
+inline bool enabled_ro_exported() {
+ return true;
+}
+
inline bool enabled_rw() {
return provider_->enabled_rw();
}
@@ -220,6 +226,8 @@
bool com_android_aconfig_test_enabled_ro();
+bool com_android_aconfig_test_enabled_ro_exported();
+
bool com_android_aconfig_test_enabled_rw();
#ifdef __cplusplus
@@ -265,6 +273,10 @@
virtual void enabled_ro(bool val) = 0;
+ virtual bool enabled_ro_exported() = 0;
+
+ virtual void enabled_ro_exported(bool val) = 0;
+
virtual bool enabled_rw() = 0;
virtual void enabled_rw(bool val) = 0;
@@ -322,6 +334,14 @@
provider_->enabled_ro(val);
}
+inline bool enabled_ro_exported() {
+ return provider_->enabled_ro_exported();
+}
+
+inline void enabled_ro_exported(bool val) {
+ provider_->enabled_ro_exported(val);
+}
+
inline bool enabled_rw() {
return provider_->enabled_rw();
}
@@ -363,6 +383,10 @@
void set_com_android_aconfig_test_enabled_ro(bool val);
+bool com_android_aconfig_test_enabled_ro_exported();
+
+void set_com_android_aconfig_test_enabled_ro_exported(bool val);
+
bool com_android_aconfig_test_enabled_rw();
void set_com_android_aconfig_test_enabled_rw(bool val);
@@ -429,6 +453,10 @@
return true;
}
+ virtual bool enabled_ro_exported() override {
+ return true;
+ }
+
virtual bool enabled_rw() override {
if (cache_[3] == -1) {
cache_[3] = server_configurable_flags::GetServerConfigurableFlag(
@@ -471,6 +499,10 @@
return true;
}
+bool com_android_aconfig_test_enabled_ro_exported() {
+ return true;
+}
+
bool com_android_aconfig_test_enabled_rw() {
return com::android::aconfig::test::enabled_rw();
}
@@ -581,6 +613,19 @@
overrides_["enabled_ro"] = val;
}
+ virtual bool enabled_ro_exported() override {
+ auto it = overrides_.find("enabled_ro_exported");
+ if (it != overrides_.end()) {
+ return it->second;
+ } else {
+ return true;
+ }
+ }
+
+ virtual void enabled_ro_exported(bool val) override {
+ overrides_["enabled_ro_exported"] = val;
+ }
+
virtual bool enabled_rw() override {
auto it = overrides_.find("enabled_rw");
if (it != overrides_.end()) {
@@ -661,6 +706,17 @@
com::android::aconfig::test::enabled_ro(val);
}
+
+bool com_android_aconfig_test_enabled_ro_exported() {
+ return com::android::aconfig::test::enabled_ro_exported();
+}
+
+
+void set_com_android_aconfig_test_enabled_ro_exported(bool val) {
+ com::android::aconfig::test::enabled_ro_exported(val);
+}
+
+
bool com_android_aconfig_test_enabled_rw() {
return com::android::aconfig::test::enabled_rw();
}
diff --git a/tools/aconfig/src/codegen/java.rs b/tools/aconfig/src/codegen/java.rs
index 47ab1ec..f958c21 100644
--- a/tools/aconfig/src/codegen/java.rs
+++ b/tools/aconfig/src/codegen/java.rs
@@ -193,6 +193,9 @@
@com.android.aconfig.annotations.AssumeTrueForR8
@UnsupportedAppUsage
boolean enabledRo();
+ @com.android.aconfig.annotations.AssumeTrueForR8
+ @UnsupportedAppUsage
+ boolean enabledRoExported();
@UnsupportedAppUsage
boolean enabledRw();
}
@@ -217,6 +220,8 @@
/** @hide */
public static final String FLAG_ENABLED_RO = "com.android.aconfig.test.enabled_ro";
/** @hide */
+ public static final String FLAG_ENABLED_RO_EXPORTED = "com.android.aconfig.test.enabled_ro_exported";
+ /** @hide */
public static final String FLAG_ENABLED_RW = "com.android.aconfig.test.enabled_rw";
@com.android.aconfig.annotations.AssumeFalseForR8
@@ -246,6 +251,11 @@
public static boolean enabledRo() {
return FEATURE_FLAGS.enabledRo();
}
+ @com.android.aconfig.annotations.AssumeTrueForR8
+ @UnsupportedAppUsage
+ public static boolean enabledRoExported() {
+ return FEATURE_FLAGS.enabledRoExported();
+ }
@UnsupportedAppUsage
public static boolean enabledRw() {
return FEATURE_FLAGS.enabledRw();
@@ -295,6 +305,11 @@
}
@Override
@UnsupportedAppUsage
+ public boolean enabledRoExported() {
+ return getValue(Flags.FLAG_ENABLED_RO_EXPORTED);
+ }
+ @Override
+ @UnsupportedAppUsage
public boolean enabledRw() {
return getValue(Flags.FLAG_ENABLED_RW);
}
@@ -324,6 +339,7 @@
Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false),
Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO, false),
+ Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false),
Map.entry(Flags.FLAG_ENABLED_RW, false)
)
);
@@ -442,6 +458,11 @@
}
@Override
@UnsupportedAppUsage
+ public boolean enabledRoExported() {
+ return true;
+ }
+ @Override
+ @UnsupportedAppUsage
public boolean enabledRw() {
if (!aconfig_test_is_cached) {
load_overrides_aconfig_test();
@@ -495,18 +516,18 @@
/** @hide */
public final class Flags {
/** @hide */
- public static final String FLAG_DISABLED_RW = "com.android.aconfig.test.disabled_rw";
- /** @hide */
public static final String FLAG_DISABLED_RW_EXPORTED = "com.android.aconfig.test.disabled_rw_exported";
+ /** @hide */
+ public static final String FLAG_ENABLED_RO_EXPORTED = "com.android.aconfig.test.enabled_ro_exported";
@UnsupportedAppUsage
- public static boolean disabledRw() {
- return FEATURE_FLAGS.disabledRw();
- }
- @UnsupportedAppUsage
public static boolean disabledRwExported() {
return FEATURE_FLAGS.disabledRwExported();
}
+ @UnsupportedAppUsage
+ public static boolean enabledRoExported() {
+ return FEATURE_FLAGS.enabledRoExported();
+ }
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
}
"#;
@@ -518,9 +539,9 @@
/** @hide */
public interface FeatureFlags {
@UnsupportedAppUsage
- boolean disabledRw();
- @UnsupportedAppUsage
boolean disabledRwExported();
+ @UnsupportedAppUsage
+ boolean enabledRoExported();
}
"#;
@@ -534,17 +555,17 @@
public final class FeatureFlagsImpl implements FeatureFlags {
private static boolean aconfig_test_is_cached = false;
private static boolean other_namespace_is_cached = false;
- private static boolean disabledRw = false;
private static boolean disabledRwExported = false;
+ private static boolean enabledRoExported = false;
private void load_overrides_aconfig_test() {
try {
Properties properties = DeviceConfig.getProperties("aconfig_test");
- disabledRw =
- properties.getBoolean("com.android.aconfig.test.disabled_rw", false);
disabledRwExported =
properties.getBoolean("com.android.aconfig.test.disabled_rw_exported", false);
+ enabledRoExported =
+ properties.getBoolean("com.android.aconfig.test.enabled_ro_exported", false);
} catch (NullPointerException e) {
throw new RuntimeException(
"Cannot read value from namespace aconfig_test "
@@ -576,21 +597,21 @@
@Override
@UnsupportedAppUsage
- public boolean disabledRw() {
- if (!aconfig_test_is_cached) {
- load_overrides_aconfig_test();
- }
- return disabledRw;
- }
-
- @Override
- @UnsupportedAppUsage
public boolean disabledRwExported() {
if (!aconfig_test_is_cached) {
load_overrides_aconfig_test();
}
return disabledRwExported;
}
+
+ @Override
+ @UnsupportedAppUsage
+ public boolean enabledRoExported() {
+ if (!aconfig_test_is_cached) {
+ load_overrides_aconfig_test();
+ }
+ return enabledRoExported;
+ }
}"#;
let expect_fake_feature_flags_impl_content = r#"
@@ -606,13 +627,13 @@
}
@Override
@UnsupportedAppUsage
- public boolean disabledRw() {
- return getValue(Flags.FLAG_DISABLED_RW);
+ public boolean disabledRwExported() {
+ return getValue(Flags.FLAG_DISABLED_RW_EXPORTED);
}
@Override
@UnsupportedAppUsage
- public boolean disabledRwExported() {
- return getValue(Flags.FLAG_DISABLED_RW_EXPORTED);
+ public boolean enabledRoExported() {
+ return getValue(Flags.FLAG_ENABLED_RO_EXPORTED);
}
public void setFlag(String flagName, boolean value) {
if (!this.mFlagMap.containsKey(flagName)) {
@@ -640,6 +661,7 @@
Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false),
Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false),
Map.entry(Flags.FLAG_ENABLED_RO, false),
+ Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false),
Map.entry(Flags.FLAG_ENABLED_RW, false)
)
);
@@ -739,6 +761,12 @@
}
@Override
@UnsupportedAppUsage
+ public boolean enabledRoExported() {
+ throw new UnsupportedOperationException(
+ "Method is not implemented.");
+ }
+ @Override
+ @UnsupportedAppUsage
public boolean enabledRw() {
throw new UnsupportedOperationException(
"Method is not implemented.");
diff --git a/tools/aconfig/src/codegen/rust.rs b/tools/aconfig/src/codegen/rust.rs
index a573793..04be93b 100644
--- a/tools/aconfig/src/codegen/rust.rs
+++ b/tools/aconfig/src/codegen/rust.rs
@@ -158,6 +158,11 @@
true
}
+ /// query flag enabled_ro_exported
+ pub fn enabled_ro_exported(&self) -> bool {
+ true
+ }
+
/// query flag enabled_rw
pub fn enabled_rw(&self) -> bool {
*CACHED_enabled_rw
@@ -203,6 +208,12 @@
true
}
+/// query flag enabled_ro_exported
+#[inline(always)]
+pub fn enabled_ro_exported() -> bool {
+ true
+}
+
/// query flag enabled_rw
#[inline(always)]
pub fn enabled_rw() -> bool {
@@ -303,6 +314,18 @@
self.overrides.insert("enabled_ro", val);
}
+ /// query flag enabled_ro_exported
+ pub fn enabled_ro_exported(&self) -> bool {
+ self.overrides.get("enabled_ro_exported").copied().unwrap_or(
+ true
+ )
+ }
+
+ /// set flag enabled_ro_exported
+ pub fn set_enabled_ro_exported(&mut self, val: bool) {
+ self.overrides.insert("enabled_ro_exported", val);
+ }
+
/// query flag enabled_rw
pub fn enabled_rw(&self) -> bool {
self.overrides.get("enabled_rw").copied().unwrap_or(
@@ -401,6 +424,18 @@
PROVIDER.lock().unwrap().set_enabled_ro(val);
}
+/// query flag enabled_ro_exported
+#[inline(always)]
+pub fn enabled_ro_exported() -> bool {
+ PROVIDER.lock().unwrap().enabled_ro_exported()
+}
+
+/// set flag enabled_ro_exported
+#[inline(always)]
+pub fn set_enabled_ro_exported(val: bool) {
+ PROVIDER.lock().unwrap().set_enabled_ro_exported(val);
+}
+
/// query flag enabled_rw
#[inline(always)]
pub fn enabled_rw() -> bool {
diff --git a/tools/aconfig/src/commands.rs b/tools/aconfig/src/commands.rs
index d80a31b..be32bde 100644
--- a/tools/aconfig/src/commands.rs
+++ b/tools/aconfig/src/commands.rs
@@ -370,7 +370,7 @@
assert_eq!(ProtoFlagState::ENABLED, enabled_ro.trace[2].state());
assert_eq!(ProtoFlagPermission::READ_ONLY, enabled_ro.trace[2].permission());
- assert_eq!(7, parsed_flags.parsed_flag.len());
+ assert_eq!(8, parsed_flags.parsed_flag.len());
for pf in parsed_flags.parsed_flag.iter() {
if pf.name() == "enabled_fixed_ro" {
continue;
diff --git a/tools/aconfig/src/test.rs b/tools/aconfig/src/test.rs
index 2c63fef..71de57e 100644
--- a/tools/aconfig/src/test.rs
+++ b/tools/aconfig/src/test.rs
@@ -62,7 +62,7 @@
permission: READ_WRITE
}
is_fixed_read_only: false
- is_exported: true
+ is_exported: false
container: "system"
metadata {
purpose: PURPOSE_UNSPECIFIED
@@ -72,7 +72,7 @@
package: "com.android.aconfig.test"
name: "disabled_rw_exported"
namespace: "aconfig_test"
- description: "This flag is exported"
+ description: "This flag is DISABLED + READ_WRITE and exported"
bug: "111"
state: DISABLED
permission: READ_WRITE
@@ -175,6 +175,31 @@
}
parsed_flag {
package: "com.android.aconfig.test"
+ name: "enabled_ro_exported"
+ namespace: "aconfig_test"
+ description: "This flag is ENABLED + READ_ONLY and exported"
+ bug: "111"
+ state: ENABLED
+ permission: READ_ONLY
+ trace {
+ source: "tests/test.aconfig"
+ state: DISABLED
+ permission: READ_WRITE
+ }
+ trace {
+ source: "tests/first.values"
+ state: ENABLED
+ permission: READ_ONLY
+ }
+ is_fixed_read_only: false
+ is_exported: true
+ container: "system"
+ metadata {
+ purpose: PURPOSE_UNSPECIFIED
+ }
+}
+parsed_flag {
+ package: "com.android.aconfig.test"
name: "enabled_rw"
namespace: "aconfig_test"
description: "This flag is ENABLED + READ_WRITE"
diff --git a/tools/aconfig/templates/FeatureFlagsImpl.java.template b/tools/aconfig/templates/FeatureFlagsImpl.java.template
index a15c859..33aa605 100644
--- a/tools/aconfig/templates/FeatureFlagsImpl.java.template
+++ b/tools/aconfig/templates/FeatureFlagsImpl.java.template
@@ -71,14 +71,10 @@
@Override
@UnsupportedAppUsage
public boolean {flag.method_name}() \{
- {{ -if flag.is_read_write }}
if (!{flag.device_config_namespace}_is_cached) \{
load_overrides_{flag.device_config_namespace}();
}
return {flag.method_name};
- {{ else }}
- return {flag.default_value};
- {{ endif- }}
}
{{ endif }}
diff --git a/tools/aconfig/tests/first.values b/tools/aconfig/tests/first.values
index b248d43..731ce84 100644
--- a/tools/aconfig/tests/first.values
+++ b/tools/aconfig/tests/first.values
@@ -30,6 +30,12 @@
}
flag_value {
package: "com.android.aconfig.test"
+ name: "enabled_ro_exported"
+ state: ENABLED
+ permission: READ_ONLY
+}
+flag_value {
+ package: "com.android.aconfig.test"
name: "disabled_rw_exported"
state: DISABLED
permission: READ_WRITE
diff --git a/tools/aconfig/tests/test.aconfig b/tools/aconfig/tests/test.aconfig
index 310d0a6..014bced 100644
--- a/tools/aconfig/tests/test.aconfig
+++ b/tools/aconfig/tests/test.aconfig
@@ -43,7 +43,6 @@
namespace: "aconfig_test"
description: "This flag is DISABLED + READ_WRITE"
bug: "456"
- is_exported: true
}
# This flag's final value calculated from:
@@ -65,9 +64,17 @@
}
flag {
- name: "disabled_rw_exported"
+ name: "enabled_ro_exported"
namespace: "aconfig_test"
- description: "This flag is exported"
+ description: "This flag is ENABLED + READ_ONLY and exported"
bug: "111"
is_exported: true
-}
\ No newline at end of file
+}
+
+flag {
+ name: "disabled_rw_exported"
+ namespace: "aconfig_test"
+ description: "This flag is DISABLED + READ_WRITE and exported"
+ bug: "111"
+ is_exported: true
+}