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

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

Merge "Cache PlatformCompatService in compat framework"

parents 1e0b9ea9 7100928c
Loading
Loading
Loading
Loading
+24 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.app.compat;

import android.annotation.NonNull;
import android.app.PropertyInvalidatedCache;
import android.content.Context;
import android.os.Binder;
@@ -33,6 +34,7 @@ public final class ChangeIdStateCache
    private static final String CACHE_KEY = "cache_key.is_compat_change_enabled";
    private static final int MAX_ENTRIES = 20;
    private static boolean sDisabled = false;
    private volatile IPlatformCompat mPlatformCompat;

    /** @hide */
    public ChangeIdStateCache() {
@@ -61,18 +63,36 @@ public final class ChangeIdStateCache
        }
    }

    @NonNull
    IPlatformCompat getPlatformCompatService() {
        IPlatformCompat platformCompat = mPlatformCompat;
        if (platformCompat == null) {
            synchronized (this) {
                platformCompat = mPlatformCompat;
                if (platformCompat == null) {
                    platformCompat = IPlatformCompat.Stub.asInterface(
                        ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
                    if (platformCompat == null) {
                        throw new RuntimeException(
                            "Could not get PlatformCompatService instance!");
                    }
                    mPlatformCompat = platformCompat;
                }
            }
        }
        return platformCompat;
    }

    @Override
    protected Boolean recompute(ChangeIdStateQuery query) {
        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
        final long token = Binder.clearCallingIdentity();
        try {
            if (query.type == ChangeIdStateQuery.QUERY_BY_PACKAGE_NAME) {
                return platformCompat.isChangeEnabledByPackageName(query.changeId,
                return getPlatformCompatService().isChangeEnabledByPackageName(query.changeId,
                                                                   query.packageName,
                                                                   query.userId);
            } else if (query.type == ChangeIdStateQuery.QUERY_BY_UID) {
                return platformCompat.isChangeEnabledByUid(query.changeId, query.uid);
                return getPlatformCompatService().isChangeEnabledByUid(query.changeId, query.uid);
            } else {
                throw new IllegalArgumentException("Invalid query type: " + query.type);
            }
+5 −9
Original line number Diff line number Diff line
@@ -20,14 +20,11 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.compat.Compatibility;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;

import com.android.internal.compat.CompatibilityOverrideConfig;
import com.android.internal.compat.CompatibilityOverridesToRemoveConfig;
import com.android.internal.compat.IPlatformCompat;

import java.util.Map;
import java.util.Set;
@@ -41,6 +38,7 @@ import java.util.Set;
@SystemApi
public final class CompatChanges {
    private static final ChangeIdStateCache QUERY_CACHE = new ChangeIdStateCache();

    private CompatChanges() {}

    /**
@@ -115,11 +113,10 @@ public final class CompatChanges {
    @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD)
    public static void putPackageOverrides(@NonNull String packageName,
            @NonNull Map<Long, PackageOverride> overrides) {
        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
        CompatibilityOverrideConfig config = new CompatibilityOverrideConfig(overrides);
        try {
            platformCompat.putOverridesOnReleaseBuilds(config, packageName);
            QUERY_CACHE.getPlatformCompatService()
                .putOverridesOnReleaseBuilds(config, packageName);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
@@ -139,12 +136,11 @@ public final class CompatChanges {
    @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD)
    public static void removePackageOverrides(@NonNull String packageName,
            @NonNull Set<Long> overridesToRemove) {
        IPlatformCompat platformCompat = IPlatformCompat.Stub.asInterface(
                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
        CompatibilityOverridesToRemoveConfig config = new CompatibilityOverridesToRemoveConfig(
                overridesToRemove);
        try {
            platformCompat.removeOverridesOnReleaseBuilds(config, packageName);
            QUERY_CACHE.getPlatformCompatService()
                .removeOverridesOnReleaseBuilds(config, packageName);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }