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
+}