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"