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

Commit cc7f45c1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Switch to release build compatible compat override API" into sc-dev

parents 96f0dd18 fcfeedcd
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -5584,7 +5584,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"