Create avf_v_test_apis aconfig flag and use it in @FlaggedApi

We are using build flags to flag-guard our features (there are multiple
reasons for it, the most simple one is - almost all of our features
add new non-trivial files to /system partition / com.android.virt APEX,
and don't want these additions to be released in a QPR).

Unfortunately, build flags are not supported in @FlaggedApi annotation.
There is a tracking bug to expose build flags as aconfig flags
(b/309090563), but it will take time to implement.

To work around these limitations, and to ensure that our api surface
additions are handled correctly during API finalization, we are adding
this avf_v_test_apis aconfig flag. The whole purpose of this flag is
just to be used in @FlaggedApi, the implementation of the features is
actually guarded by build flags. We also have a
VirtualMachine#isFeatureEnabled @TestApi that is used by CTS test to
ensure that tests are skipped on release configurations that haven't
enabled the feature yet.

Bug: 325441024
Test: m
Change-Id: I28bae128ea764bc91b52824c421a492beb2dc02f
diff --git a/Android.bp b/Android.bp
index 717c902..6e7c3c8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -89,3 +89,19 @@
     tools: ["dtc"],
     cmd: "FILES=($(in)) && $(location dtc) -I dts -O dtb $${FILES[-1]} -o $(out)",
 }
+
+// This is a temporary workaround until b/309090563 is implemented.
+aconfig_declarations {
+    name: "avf_aconfig_flags",
+    package: "com.android.system.virtualmachine.flags",
+    srcs: [
+        "avf_flags.aconfig",
+    ],
+}
+
+java_aconfig_library {
+    name: "avf_aconfig_flags_java",
+    aconfig_declarations: "avf_aconfig_flags",
+    sdk_version: "module_current",
+    apex_available: ["com.android.virt"],
+}
diff --git a/avf_flags.aconfig b/avf_flags.aconfig
new file mode 100644
index 0000000..8abb9ee
--- /dev/null
+++ b/avf_flags.aconfig
@@ -0,0 +1,10 @@
+package: "com.android.system.virtualmachine.flags"
+
+flag {
+  name: "avf_v_test_apis"
+  namespace: "virtualization"
+  description: "Only purpose of this flag is to be used in @FlaggedApi in our V test apis"
+  bug: "325441024"
+  is_fixed_read_only: true
+}
+
diff --git a/javalib/Android.bp b/javalib/Android.bp
index e3cb2e3..a7c531e 100644
--- a/javalib/Android.bp
+++ b/javalib/Android.bp
@@ -33,6 +33,7 @@
     srcs: ["src/**/*.java"],
     static_libs: [
         "android.system.virtualizationservice-java",
+        "avf_aconfig_flags_java",
         // For android.sysprop.HypervisorProperties
         "PlatformProperties",
     ],
diff --git a/javalib/api/test-current.txt b/javalib/api/test-current.txt
index 3ea50e2..0a988d8 100644
--- a/javalib/api/test-current.txt
+++ b/javalib/api/test-current.txt
@@ -2,33 +2,33 @@
 package android.system.virtualmachine {
 
   public class VirtualMachine implements java.lang.AutoCloseable {
-    method @FlaggedApi("RELEASE_AVF_ENABLE_REMOTE_ATTESTATION") @RequiresPermission(android.system.virtualmachine.VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION) public void enableTestAttestation() throws android.system.virtualmachine.VirtualMachineException;
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @RequiresPermission(android.system.virtualmachine.VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION) public void enableTestAttestation() throws android.system.virtualmachine.VirtualMachineException;
     method @NonNull @WorkerThread public java.io.OutputStream getConsoleInput() throws android.system.virtualmachine.VirtualMachineException;
     method @NonNull public java.io.File getRootDir();
   }
 
   public final class VirtualMachineConfig {
-    method @FlaggedApi("RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM") @NonNull public java.util.List<java.lang.String> getExtraApks();
-    method @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES") @Nullable public String getOs();
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @NonNull public java.util.List<java.lang.String> getExtraApks();
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @Nullable public String getOs();
     method @Nullable public String getPayloadConfigPath();
     method public boolean isVmConsoleInputSupported();
   }
 
   public static final class VirtualMachineConfig.Builder {
-    method @FlaggedApi("RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder addExtraApk(@NonNull String);
-    method @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setOs(@NonNull String);
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder addExtraApk(@NonNull String);
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setOs(@NonNull String);
     method @NonNull @RequiresPermission(android.system.virtualmachine.VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION) public android.system.virtualmachine.VirtualMachineConfig.Builder setPayloadConfigPath(@NonNull String);
-    method @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES") @NonNull @RequiresPermission(android.system.virtualmachine.VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION) public android.system.virtualmachine.VirtualMachineConfig.Builder setVendorDiskImage(@NonNull java.io.File);
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @NonNull @RequiresPermission(android.system.virtualmachine.VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION) public android.system.virtualmachine.VirtualMachineConfig.Builder setVendorDiskImage(@NonNull java.io.File);
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setVmConsoleInputSupported(boolean);
   }
 
   public class VirtualMachineManager {
-    method @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES") @NonNull public java.util.List<java.lang.String> getSupportedOSList() throws android.system.virtualmachine.VirtualMachineException;
-    method @RequiresPermission(android.system.virtualmachine.VirtualMachine.MANAGE_VIRTUAL_MACHINE_PERMISSION) public boolean isFeatureEnabled(String) throws android.system.virtualmachine.VirtualMachineException;
-    field public static final String FEATURE_DICE_CHANGES = "com.android.kvm.DICE_CHANGES";
-    field public static final String FEATURE_MULTI_TENANT = "com.android.kvm.MULTI_TENANT";
-    field public static final String FEATURE_REMOTE_ATTESTATION = "com.android.kvm.REMOTE_ATTESTATION";
-    field public static final String FEATURE_VENDOR_MODULES = "com.android.kvm.VENDOR_MODULES";
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @NonNull public java.util.List<java.lang.String> getSupportedOSList() throws android.system.virtualmachine.VirtualMachineException;
+    method @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") @RequiresPermission(android.system.virtualmachine.VirtualMachine.MANAGE_VIRTUAL_MACHINE_PERMISSION) public boolean isFeatureEnabled(String) throws android.system.virtualmachine.VirtualMachineException;
+    field @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") public static final String FEATURE_DICE_CHANGES = "com.android.kvm.DICE_CHANGES";
+    field @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") public static final String FEATURE_MULTI_TENANT = "com.android.kvm.MULTI_TENANT";
+    field @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") public static final String FEATURE_REMOTE_ATTESTATION = "com.android.kvm.REMOTE_ATTESTATION";
+    field @FlaggedApi("com.android.system.virtualmachine.flags.avf_v_test_apis") public static final String FEATURE_VENDOR_MODULES = "com.android.kvm.VENDOR_MODULES";
   }
 
 }
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachine.java b/javalib/src/android/system/virtualmachine/VirtualMachine.java
index b4ba00b..6b03cfe 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachine.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachine.java
@@ -76,6 +76,7 @@
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.system.virtualmachine.flags.Flags;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -1215,7 +1216,7 @@
      */
     @TestApi
     @RequiresPermission(USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION)
-    @FlaggedApi("RELEASE_AVF_ENABLE_REMOTE_ATTESTATION")
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     public void enableTestAttestation() throws VirtualMachineException {
         try {
             mVirtualizationService.getBinder().enableTestAttestation();
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java b/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
index 9688789..19e663f 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -40,6 +40,8 @@
 import android.system.virtualizationservice.VirtualMachinePayloadConfig;
 import android.util.Log;
 
+import com.android.system.virtualmachine.flags.Flags;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -376,7 +378,7 @@
      * @hide
      */
     @TestApi
-    @FlaggedApi("RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM")
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     @NonNull
     public List<String> getExtraApks() {
         return mExtraApks;
@@ -502,7 +504,7 @@
      * @hide
      */
     @TestApi
-    @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES")
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     @Nullable
     public String getOs() {
         return mOs;
@@ -792,7 +794,7 @@
          * @hide
          */
         @TestApi
-        @FlaggedApi("RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM")
+        @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
         @NonNull
         public Builder addExtraApk(@NonNull String packageName) {
             mExtraApks.add(requireNonNull(packageName, "extra APK package name must not be null"));
@@ -1003,8 +1005,8 @@
          * @hide
          */
         @TestApi
+        @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
         @RequiresPermission(VirtualMachine.USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION)
-        @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES")
         @NonNull
         public Builder setVendorDiskImage(@NonNull File vendorDiskImage) {
             mVendorDiskImage =
@@ -1020,7 +1022,7 @@
          * @hide
          */
         @TestApi
-        @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES")
+        @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
         @NonNull
         public Builder setOs(@NonNull String os) {
             mOs = requireNonNull(os, "os must not be null");
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
index 1a4b53a..f263b32 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
@@ -36,6 +36,7 @@
 import android.util.ArrayMap;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.system.virtualmachine.flags.Flags;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -130,6 +131,7 @@
      * @hide
      */
     @TestApi
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     public static final String FEATURE_DICE_CHANGES = IVirtualizationService.FEATURE_DICE_CHANGES;
 
     /**
@@ -138,6 +140,7 @@
      * @hide
      */
     @TestApi
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     public static final String FEATURE_MULTI_TENANT = IVirtualizationService.FEATURE_MULTI_TENANT;
 
     /**
@@ -146,6 +149,7 @@
      * @hide
      */
     @TestApi
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     public static final String FEATURE_REMOTE_ATTESTATION =
             IVirtualizationService.FEATURE_REMOTE_ATTESTATION;
 
@@ -155,6 +159,7 @@
      * @hide
      */
     @TestApi
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     public static final String FEATURE_VENDOR_MODULES =
             IVirtualizationService.FEATURE_VENDOR_MODULES;
 
@@ -347,7 +352,7 @@
      * @hide
      */
     @TestApi
-    @FlaggedApi("RELEASE_AVF_ENABLE_VENDOR_MODULES")
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     @NonNull
     public List<String> getSupportedOSList() throws VirtualMachineException {
         synchronized (sCreateLock) {
@@ -366,6 +371,7 @@
      * @hide
      */
     @TestApi
+    @FlaggedApi(Flags.FLAG_AVF_V_TEST_APIS)
     @RequiresPermission(VirtualMachine.MANAGE_VIRTUAL_MACHINE_PERMISSION)
     public boolean isFeatureEnabled(@Features String featureName) throws VirtualMachineException {
         synchronized (sCreateLock) {