Revert^2 "Change extension array to map of all extensions"

006b5e82fefcd0c804f3b234bfc04493f951c081

Change-Id: I72b9e05746dac15889c7adf67b5e4a0a5975edda
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt
index 98f462b..180afea 100644
--- a/framework/api/system-current.txt
+++ b/framework/api/system-current.txt
@@ -2,8 +2,8 @@
 package android.os.ext {
 
   public class SdkExtensions {
+    method @NonNull public static java.util.Map<java.lang.Integer,java.lang.Integer> getAllExtensionVersions();
     method public static int getExtensionVersion(int);
-    field @NonNull public static final int[] EXTENSIONS;
   }
 
 }
diff --git a/framework/java/android/os/ext/SdkExtensions.java b/framework/java/android/os/ext/SdkExtensions.java
index c811255..f36a3f6 100644
--- a/framework/java/android/os/ext/SdkExtensions.java
+++ b/framework/java/android/os/ext/SdkExtensions.java
@@ -26,6 +26,9 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Methods for interacting with the extension SDK.
@@ -43,12 +46,19 @@
     private static final int VERSION_CODE_S = VERSION_CODES.CUR_DEVELOPMENT;
     private static final int R_EXTENSION_INT;
     private static final int S_EXTENSION_INT;
+    private static final Map<Integer, Integer> ALL_EXTENSION_INTS;
     static {
         // Note: when adding more extension versions, the logic that records current
         // extension versions when saving a rollback must also be updated.
         // At the time of writing this is in RollbackManagerServiceImpl#getExtensionVersions()
         R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0);
         S_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.s", 0);
+        Map<Integer, Integer> extensions = new HashMap<Integer, Integer>();
+        extensions.put(VERSION_CODES.R, R_EXTENSION_INT);
+        if (SdkLevel.isAtLeastS()) {
+            extensions.put(VERSION_CODE_S, S_EXTENSION_INT);
+        }
+        ALL_EXTENSION_INTS = Collections.unmodifiableMap(extensions);
     }
 
     /**
@@ -59,14 +69,6 @@
     @Retention(RetentionPolicy.SOURCE)
     public @interface Extension {}
 
-    /** The current set of extensions. */
-    @NonNull
-    @Extension
-    public static final int[] EXTENSIONS =
-        SdkLevel.isAtLeastS()
-            ? new int[] { VERSION_CODES.R, VERSION_CODE_S }
-            : new int[] { VERSION_CODES.R };
-
     private SdkExtensions() { }
 
     /**
@@ -89,4 +91,14 @@
         return 0;
     }
 
+    /**
+     * Return all extension versions that exist on this device.
+     *
+     * @return a map from extension to extension version.
+     */
+    @NonNull
+    public static Map<Integer, Integer> getAllExtensionVersions() {
+        return ALL_EXTENSION_INTS;
+    }
+
 }
diff --git a/tests/cts/src/android/os/ext/cts/SdkExtensionsTest.java b/tests/cts/src/android/os/ext/cts/SdkExtensionsTest.java
index 18853d7..ea310c7 100644
--- a/tests/cts/src/android/os/ext/cts/SdkExtensionsTest.java
+++ b/tests/cts/src/android/os/ext/cts/SdkExtensionsTest.java
@@ -21,6 +21,7 @@
 import android.os.ext.SdkExtensions;
 import com.android.modules.utils.build.SdkLevel;
 import junit.framework.TestCase;
+import java.util.Map;
 
 public class SdkExtensionsTest extends TestCase {
 
@@ -51,11 +52,13 @@
     }
 
     public void testExtensionVersions() throws Exception {
+        Map<Integer, Integer> versions = SdkExtensions.getAllExtensionVersions();
         int expectedSize = 1;
         if (SdkLevel.isAtLeastS()) {
             expectedSize++;
         }
-        assertEquals(expectedSize, SdkExtensions.EXTENSIONS.length);
+        assertEquals(0, (int) versions.get(Build.VERSION_CODES.R));
+        assertEquals(expectedSize, versions.size());
     }
 
 }