Loading core/api/system-current.txt +16 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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); } } Loading core/java/android/app/compat/CompatChanges.java +4 −5 Original line number Diff line number Diff line Loading @@ -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(); } Loading core/java/android/app/compat/PackageOverride.java +17 −32 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { } Loading Loading @@ -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. Loading Loading @@ -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() { Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -189,6 +172,7 @@ public class PackageOverride implements Parcelable { * * default value: {@code false}. */ @NonNull public Builder setEnabled(boolean enabled) { mEnabled = enabled; return this; Loading @@ -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 " Loading core/java/com/android/internal/compat/CompatibilityOverrideConfig.java +2 −3 Original line number Diff line number Diff line Loading @@ -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)); } } Loading @@ -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); } } Loading core/java/com/android/internal/compat/IPlatformCompat.aidl +11 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
core/api/system-current.txt +16 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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); } } Loading
core/java/android/app/compat/CompatChanges.java +4 −5 Original line number Diff line number Diff line Loading @@ -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(); } Loading
core/java/android/app/compat/PackageOverride.java +17 −32 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { } Loading Loading @@ -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. Loading Loading @@ -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() { Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -189,6 +172,7 @@ public class PackageOverride implements Parcelable { * * default value: {@code false}. */ @NonNull public Builder setEnabled(boolean enabled) { mEnabled = enabled; return this; Loading @@ -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 " Loading
core/java/com/android/internal/compat/CompatibilityOverrideConfig.java +2 −3 Original line number Diff line number Diff line Loading @@ -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)); } } Loading @@ -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); } } Loading
core/java/com/android/internal/compat/IPlatformCompat.aidl +11 −3 Original line number Diff line number Diff line Loading @@ -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