Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcfeedcd authored by Adam Bodnar's avatar Adam Bodnar
Browse files

Switch to release build compatible compat override API

Bug: 180439000

Test: build user, select game mode
Change-Id: I01c9b312eb8e7bf8f8bbc167c8a2f7d46e53684a
parent 72e35e6a
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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 -->
+24 −29
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ import android.app.ActivityManager;
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 android.util.Slog;

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 @@ public final class GameManagerService extends IGameManagerService.Stub {
    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 @@ public final class GameManagerService extends IGameManagerService.Stub {
    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 @@ public final class GameManagerService extends IGameManagerService.Stub {
    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);
+2 −0
Original line number Diff line number Diff line
@@ -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"