Switch to release build compatible compat override API

Bug: 180439000

Test: build user, select game mode
Change-Id: I01c9b312eb8e7bf8f8bbc167c8a2f7d46e53684a
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index fc264f3..0a2c2ec 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -5581,7 +5581,6 @@
          @hide  <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG"
                 android:protectionLevel="signature|privileged" />
-    <uses-permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG"/>
     <!-- @SystemApi Allows an app to override compat change config on release builds.
         Only ChangeIds that are annotated as @Overridable can be overridden on release builds.
         @hide -->
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index 57de708..b103def 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -34,7 +34,7 @@
 import android.app.GameManager;
 import android.app.GameManager.GameMode;
 import android.app.IGameManagerService;
-import android.compat.Compatibility;
+import android.app.compat.PackageOverride;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -61,13 +61,12 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.compat.CompatibilityChangeConfig;
+import com.android.internal.compat.CompatibilityOverrideConfig;
 import com.android.internal.compat.IPlatformCompat;
 import com.android.server.ServiceThread;
 import com.android.server.SystemService;
 
 import java.io.FileDescriptor;
-import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -87,6 +86,10 @@
     static final int REMOVE_SETTINGS = 2;
     static final int POPULATE_GAME_MODE_SETTINGS = 3;
     static final int WRITE_SETTINGS_DELAY = 10 * 1000;  // 10 seconds
+    static final PackageOverride COMPAT_ENABLED = new PackageOverride.Builder().setEnabled(true)
+            .build();
+    static final PackageOverride COMPAT_DISABLED = new PackageOverride.Builder().setEnabled(false)
+            .build();
 
     private final Context mContext;
     private final Object mLock = new Object();
@@ -578,17 +581,14 @@
     private void disableCompatScale(String packageName) {
         final long uid = Binder.clearCallingIdentity();
         try {
-            final HashSet<Long> disabledSet = new HashSet<>();
-            disabledSet.add(DOWNSCALED);
-            final CompatibilityChangeConfig changeConfig = new CompatibilityChangeConfig(
-                    new Compatibility.ChangeConfig(new HashSet<>(), disabledSet));
-            // TODO: switch to new API provided by aosp/1599153 once merged
+            final ArrayMap<Long, PackageOverride> overrides = new ArrayMap<>();
+            overrides.put(DOWNSCALED, COMPAT_DISABLED);
+            final CompatibilityOverrideConfig changeConfig = new CompatibilityOverrideConfig(
+                    overrides);
             try {
-                mPlatformCompat.setOverridesForTest(changeConfig, packageName);
-            } catch (SecurityException e) {
-                Slog.e(TAG, "Missing compat override permission", e);
+                mPlatformCompat.setOverridesOnReleaseBuilds(changeConfig, packageName);
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesForTest", e);
+                Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesOnReleaseBuilds", e);
             }
         } finally {
             Binder.restoreCallingIdentity(uid);
@@ -598,25 +598,20 @@
     private void enableCompatScale(String packageName, long scaleId) {
         final long uid = Binder.clearCallingIdentity();
         try {
-            final HashSet<Long> disabledSet = new HashSet<>();
-            final HashSet<Long> enabledSet = new HashSet<>();
-            disabledSet.add(DOWNSCALE_50);
-            disabledSet.add(DOWNSCALE_60);
-            disabledSet.add(DOWNSCALE_70);
-            disabledSet.add(DOWNSCALE_80);
-            disabledSet.add(DOWNSCALE_90);
-            disabledSet.remove(scaleId);
-            enabledSet.add(DOWNSCALED);
-            enabledSet.add(scaleId);
-            final CompatibilityChangeConfig changeConfig = new CompatibilityChangeConfig(
-                    new Compatibility.ChangeConfig(enabledSet, disabledSet));
-            // TODO: switch to new API provided by aosp/1599153 once merged
+            final ArrayMap<Long, PackageOverride> overrides = new ArrayMap<>();
+            overrides.put(DOWNSCALED, COMPAT_ENABLED);
+            overrides.put(DOWNSCALE_50, COMPAT_DISABLED);
+            overrides.put(DOWNSCALE_60, COMPAT_DISABLED);
+            overrides.put(DOWNSCALE_70, COMPAT_DISABLED);
+            overrides.put(DOWNSCALE_80, COMPAT_DISABLED);
+            overrides.put(DOWNSCALE_90, COMPAT_DISABLED);
+            overrides.put(scaleId, COMPAT_ENABLED);
+            final CompatibilityOverrideConfig changeConfig = new CompatibilityOverrideConfig(
+                    overrides);
             try {
-                mPlatformCompat.setOverridesForTest(changeConfig, packageName);
-            } catch (SecurityException e) {
-                Slog.e(TAG, "Missing compat override permission", e);
+                mPlatformCompat.setOverridesOnReleaseBuilds(changeConfig, packageName);
             } catch (RemoteException e) {
-                Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesForTest", e);
+                Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesOnReleaseBuilds", e);
             }
         } finally {
             Binder.restoreCallingIdentity(uid);
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index 7c30b45..d1cd7cd 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -92,6 +92,8 @@
     <uses-permission android:name="android.permission.CONTROL_DEVICE_STATE"/>
     <uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
     <uses-permission android:name="android.permission.KILL_UID"/>
+    <uses-permission
+        android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/>
 
     <!-- Uses API introduced in O (26) -->
     <uses-sdk android:minSdkVersion="1"