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

Commit a5b9c920 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Create a new permission to override Overridable change ids" am: 44008b63

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1599153

Change-Id: I903139aedc745ce8fbf3f5614319f81ca1d69586
parents d1f76026 44008b63
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ package android {
    field public static final String OBSERVE_NETWORK_POLICY = "android.permission.OBSERVE_NETWORK_POLICY";
    field public static final String OBSERVE_ROLE_HOLDERS = "android.permission.OBSERVE_ROLE_HOLDERS";
    field public static final String OPEN_ACCESSIBILITY_DETAILS_SETTINGS = "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS";
    field public static final String OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD = "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD";
    field public static final String OVERRIDE_WIFI_CONFIG = "android.permission.OVERRIDE_WIFI_CONFIG";
    field public static final String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT";
    field public static final String PACKET_KEEPALIVE_OFFLOAD = "android.permission.PACKET_KEEPALIVE_OFFLOAD";
@@ -1125,6 +1126,21 @@ package android.app.compat {
    method public static boolean isChangeEnabled(long);
    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, @NonNull String, @NonNull android.os.UserHandle);
    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, int);
    method @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD) public static void setPackageOverride(@NonNull String, @NonNull java.util.Map<java.lang.Long,android.app.compat.PackageOverride>);
  }
  public final class PackageOverride {
    method public long getMaxVersionCode();
    method public long getMinVersionCode();
    method public boolean isEnabled();
  }
  public static final class PackageOverride.Builder {
    ctor public PackageOverride.Builder();
    method @NonNull public android.app.compat.PackageOverride build();
    method @NonNull public android.app.compat.PackageOverride.Builder setEnabled(boolean);
    method @NonNull public android.app.compat.PackageOverride.Builder setMaxVersionCode(long);
    method @NonNull public android.app.compat.PackageOverride.Builder setMinVersionCode(long);
  }
}
+4 −5
Original line number Diff line number Diff line
@@ -104,16 +104,15 @@ public final class CompatChanges {
     *
     * @param packageName The package name of the app in question.
     * @param overrides A map from changeId to the override applied for this change id.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG)
    public static void setPackageOverride(String packageName,
            Map<Long, PackageOverride> overrides) {
    @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD)
    public static void setPackageOverride(@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.setOverridesFromInstaller(config, packageName);
            platformCompat.setOverridesOnReleaseBuilds(config, packageName);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
+17 −32
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@
package android.app.compat;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -32,15 +33,16 @@ import java.lang.annotation.RetentionPolicy;
 *
 * @hide
 */
public class PackageOverride implements Parcelable {
@SystemApi
public final class PackageOverride {

    /** @hide */
    @IntDef({
            VALUE_UNDEFINED,
            VALUE_ENABLED,
            VALUE_DISABLED
    })
    @Retention(RetentionPolicy.SOURCE)
    /** @hide */
    public @interface EvaluatedOverride {
    }

@@ -75,10 +77,6 @@ public class PackageOverride implements Parcelable {
        this.mEnabled = enabled;
    }

    private PackageOverride(Parcel in) {
        this(in.readLong(), in.readLong(), in.readBoolean());
    }

    /**
     * Evaluate the override for the given {@code versionCode}. If no override is defined for
     * the specified version code, {@link #VALUE_UNDEFINED} is returned.
@@ -114,24 +112,22 @@ public class PackageOverride implements Parcelable {
    }

    /** Returns the enabled value for the override. */
    public boolean getEnabled() {
    public boolean isEnabled() {
        return mEnabled;
    }

    /** @hide */
    @Override
    public int describeContents() {
        return 0;
    }

    /** @hide */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(Parcel dest) {
        dest.writeLong(mMinVersionCode);
        dest.writeLong(mMaxVersionCode);
        dest.writeBoolean(mEnabled);
    }

    /** @hide */
    public static PackageOverride createFromParcel(Parcel in) {
        return new PackageOverride(in.readLong(), in.readLong(), in.readBoolean());
    }

    /** @hide */
    @Override
    public String toString() {
@@ -141,25 +137,10 @@ public class PackageOverride implements Parcelable {
        return String.format("[%d,%d,%b]", mMinVersionCode, mMaxVersionCode, mEnabled);
    }

    /** @hide */
    public static final Creator<PackageOverride> CREATOR =
            new Creator<PackageOverride>() {

                @Override
                public PackageOverride createFromParcel(Parcel in) {
                    return new PackageOverride(in);
                }

                @Override
                public PackageOverride[] newArray(int size) {
                    return new PackageOverride[size];
                }
            };

    /**
     * Builder to construct a PackageOverride.
     */
    public static class Builder {
    public static final class Builder {
        private long mMinVersionCode = Long.MIN_VALUE;
        private long mMaxVersionCode = Long.MAX_VALUE;
        private boolean mEnabled;
@@ -169,6 +150,7 @@ public class PackageOverride implements Parcelable {
         *
         * default value: {@code Long.MIN_VALUE}.
         */
        @NonNull
        public Builder setMinVersionCode(long minVersionCode) {
            mMinVersionCode = minVersionCode;
            return this;
@@ -179,6 +161,7 @@ public class PackageOverride implements Parcelable {
         *
         * default value: {@code Long.MAX_VALUE}.
         */
        @NonNull
        public Builder setMaxVersionCode(long maxVersionCode) {
            mMaxVersionCode = maxVersionCode;
            return this;
@@ -189,6 +172,7 @@ public class PackageOverride implements Parcelable {
         *
         * default value: {@code false}.
         */
        @NonNull
        public Builder setEnabled(boolean enabled) {
            mEnabled = enabled;
            return this;
@@ -200,6 +184,7 @@ public class PackageOverride implements Parcelable {
         * @throws IllegalArgumentException if {@code minVersionCode} is larger than
         *                                  {@code maxVersionCode}.
         */
        @NonNull
        public PackageOverride build() {
            if (mMinVersionCode > mMaxVersionCode) {
                throw new IllegalArgumentException("minVersionCode must not be larger than "
+2 −3
Original line number Diff line number Diff line
@@ -40,8 +40,7 @@ public final class CompatibilityOverrideConfig implements Parcelable {
        overrides = new HashMap<>();
        for (int i = 0; i < keyCount; i++) {
            long key = in.readLong();
            PackageOverride override = in.readParcelable(PackageOverride.class.getClassLoader());
            overrides.put(key, override);
            overrides.put(key, PackageOverride.createFromParcel(in));
        }
    }

@@ -55,7 +54,7 @@ public final class CompatibilityOverrideConfig implements Parcelable {
        dest.writeInt(overrides.size());
        for (Long key : overrides.keySet()) {
            dest.writeLong(key);
            dest.writeParcelable(overrides.get(key), 0);
            overrides.get(key).writeToParcel(dest);
        }
    }

+11 −3
Original line number Diff line number Diff line
@@ -151,15 +151,23 @@ interface IPlatformCompat {
    void setOverrides(in CompatibilityChangeConfig overrides, in String packageName);

    /**
     * Adds overrides to compatibility changes.
     * Adds overrides to compatibility changes on release builds.
     *
     * <p>Kills the app to allow the changes to take effect.
     * <p>The caller to this API needs to hold
     * {@code android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD} and all change ids
     * in {@code overrides} need to annotated with {@link android.compat.annotation.Overridable}.
     *
     * A release build in this definition means that {@link android.os.Build#IS_DEBUGGABLE} needs to
     * be {@code false}.
     *
     * <p>Note that this does not kill the app, and therefore overrides read from the app process
     * will not be updated. Overrides read from the system process do take effect.
     *
     * @param overrides   parcelable containing the compat change overrides to be applied
     * @param packageName the package name of the app whose changes will be overridden
     * @throws SecurityException if overriding changes is not permitted
     */
    void setOverridesFromInstaller(in CompatibilityOverrideConfig overrides, in String packageName);
    void setOverridesOnReleaseBuilds(in CompatibilityOverrideConfig overrides, in String packageName);

    /**
     * Adds overrides to compatibility changes.
Loading