Merge "Add enabledSince support for compat changes" am: c90a797b8e

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

Change-Id: I9da4af4172ed8c13582c27e0e4394cbd3caa0d72
This commit is contained in:
Andrei-Valentin Onea
2020-10-19 14:37:29 +00:00
committed by Automerger Merge Worker
12 changed files with 151 additions and 108 deletions

View File

@@ -28,7 +28,7 @@ import android.os.Parcelable;
public class CompatibilityChangeInfo implements Parcelable { public class CompatibilityChangeInfo implements Parcelable {
private final long mChangeId; private final long mChangeId;
private final @Nullable String mName; private final @Nullable String mName;
private final int mEnableAfterTargetSdk; private final int mEnableSinceTargetSdk;
private final boolean mDisabled; private final boolean mDisabled;
private final boolean mLoggingOnly; private final boolean mLoggingOnly;
private final @Nullable String mDescription; private final @Nullable String mDescription;
@@ -42,8 +42,8 @@ public class CompatibilityChangeInfo implements Parcelable {
return mName; return mName;
} }
public int getEnableAfterTargetSdk() { public int getEnableSinceTargetSdk() {
return mEnableAfterTargetSdk; return mEnableSinceTargetSdk;
} }
public boolean getDisabled() { public boolean getDisabled() {
@@ -59,20 +59,37 @@ public class CompatibilityChangeInfo implements Parcelable {
} }
public CompatibilityChangeInfo( public CompatibilityChangeInfo(
Long changeId, String name, int enableAfterTargetSdk, boolean disabled, Long changeId, String name, int enableAfterTargetSdk, int enableSinceTargetSdk,
boolean loggingOnly, String description) { boolean disabled, boolean loggingOnly, String description) {
this.mChangeId = changeId; this.mChangeId = changeId;
this.mName = name; this.mName = name;
this.mEnableAfterTargetSdk = enableAfterTargetSdk; if (enableAfterTargetSdk > 0) {
// Need to maintain support for @EnabledAfter(X), but make it equivalent to
// @EnabledSince(X+1)
this.mEnableSinceTargetSdk = enableAfterTargetSdk + 1;
} else if (enableSinceTargetSdk > 0) {
this.mEnableSinceTargetSdk = enableSinceTargetSdk;
} else {
this.mEnableSinceTargetSdk = -1;
}
this.mDisabled = disabled; this.mDisabled = disabled;
this.mLoggingOnly = loggingOnly; this.mLoggingOnly = loggingOnly;
this.mDescription = description; this.mDescription = description;
} }
public CompatibilityChangeInfo(CompatibilityChangeInfo other) {
this.mChangeId = other.mChangeId;
this.mName = other.mName;
this.mEnableSinceTargetSdk = other.mEnableSinceTargetSdk;
this.mDisabled = other.mDisabled;
this.mLoggingOnly = other.mLoggingOnly;
this.mDescription = other.mDescription;
}
private CompatibilityChangeInfo(Parcel in) { private CompatibilityChangeInfo(Parcel in) {
mChangeId = in.readLong(); mChangeId = in.readLong();
mName = in.readString(); mName = in.readString();
mEnableAfterTargetSdk = in.readInt(); mEnableSinceTargetSdk = in.readInt();
mDisabled = in.readBoolean(); mDisabled = in.readBoolean();
mLoggingOnly = in.readBoolean(); mLoggingOnly = in.readBoolean();
mDescription = in.readString(); mDescription = in.readString();
@@ -87,7 +104,7 @@ public class CompatibilityChangeInfo implements Parcelable {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(mChangeId); dest.writeLong(mChangeId);
dest.writeString(mName); dest.writeString(mName);
dest.writeInt(mEnableAfterTargetSdk); dest.writeInt(mEnableSinceTargetSdk);
dest.writeBoolean(mDisabled); dest.writeBoolean(mDisabled);
dest.writeBoolean(mLoggingOnly); dest.writeBoolean(mLoggingOnly);
dest.writeString(mDescription); dest.writeString(mDescription);
@@ -100,8 +117,8 @@ public class CompatibilityChangeInfo implements Parcelable {
if (getName() != null) { if (getName() != null) {
sb.append("; name=").append(getName()); sb.append("; name=").append(getName());
} }
if (getEnableAfterTargetSdk() != -1) { if (getEnableSinceTargetSdk() != -1) {
sb.append("; enableAfterTargetSdk=").append(getEnableAfterTargetSdk()); sb.append("; enableSinceTargetSdk=").append(getEnableSinceTargetSdk());
} }
if (getDisabled()) { if (getDisabled()) {
sb.append("; disabled"); sb.append("; disabled");
@@ -123,7 +140,7 @@ public class CompatibilityChangeInfo implements Parcelable {
CompatibilityChangeInfo that = (CompatibilityChangeInfo) o; CompatibilityChangeInfo that = (CompatibilityChangeInfo) o;
return this.mChangeId == that.mChangeId return this.mChangeId == that.mChangeId
&& this.mName.equals(that.mName) && this.mName.equals(that.mName)
&& this.mEnableAfterTargetSdk == that.mEnableAfterTargetSdk && this.mEnableSinceTargetSdk == that.mEnableSinceTargetSdk
&& this.mDisabled == that.mDisabled && this.mDisabled == that.mDisabled
&& this.mLoggingOnly == that.mLoggingOnly && this.mLoggingOnly == that.mLoggingOnly
&& this.mDescription.equals(that.mDescription); && this.mDescription.equals(that.mDescription);

View File

@@ -164,7 +164,7 @@ interface IPlatformCompat
boolean clearOverride(long changeId, String packageName); boolean clearOverride(long changeId, String packageName);
/** /**
* Enable all compatibility changes which have enabledAfterTargetSdk == * Enable all compatibility changes which have enabledSinceTargetSdk ==
* {@param targetSdkVersion} for an app, subject to the policy. Kills the app to allow the * {@param targetSdkVersion} for an app, subject to the policy. Kills the app to allow the
* changes to take effect. * changes to take effect.
* *

View File

@@ -63,7 +63,7 @@ public final class CompatChange extends CompatibilityChangeInfo {
private Map<String, Boolean> mPackageOverrides; private Map<String, Boolean> mPackageOverrides;
public CompatChange(long changeId) { public CompatChange(long changeId) {
this(changeId, null, -1, false, false, null); this(changeId, null, -1, -1, false, false, null);
} }
/** /**
@@ -71,11 +71,14 @@ public final class CompatChange extends CompatibilityChangeInfo {
* @param name Short descriptive name. * @param name Short descriptive name.
* @param enableAfterTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledAfter}; * @param enableAfterTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledAfter};
* -1 if the change is always enabled. * -1 if the change is always enabled.
* @param enableSinceTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledSince};
* -1 if the change is always enabled.
* @param disabled If {@code true}, overrides any {@code enableAfterTargetSdk} set. * @param disabled If {@code true}, overrides any {@code enableAfterTargetSdk} set.
*/ */
public CompatChange(long changeId, @Nullable String name, int enableAfterTargetSdk, public CompatChange(long changeId, @Nullable String name, int enableAfterTargetSdk,
boolean disabled, boolean loggingOnly, String description) { int enableSinceTargetSdk, boolean disabled, boolean loggingOnly, String description) {
super(changeId, name, enableAfterTargetSdk, disabled, loggingOnly, description); super(changeId, name, enableAfterTargetSdk, enableSinceTargetSdk, disabled, loggingOnly,
description);
} }
/** /**
@@ -83,7 +86,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
*/ */
public CompatChange(Change change) { public CompatChange(Change change) {
super(change.getId(), change.getName(), change.getEnableAfterTargetSdk(), super(change.getId(), change.getName(), change.getEnableAfterTargetSdk(),
change.getDisabled(), change.getLoggingOnly(), change.getDescription()); change.getEnableSinceTargetSdk(), change.getDisabled(), change.getLoggingOnly(),
change.getDescription());
} }
void registerListener(ChangeListener listener) { void registerListener(ChangeListener listener) {
@@ -145,8 +149,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
if (getDisabled()) { if (getDisabled()) {
return false; return false;
} }
if (getEnableAfterTargetSdk() != -1) { if (getEnableSinceTargetSdk() != -1) {
return app.targetSdkVersion > getEnableAfterTargetSdk(); return app.targetSdkVersion >= getEnableSinceTargetSdk();
} }
return true; return true;
} }
@@ -167,8 +171,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
if (getName() != null) { if (getName() != null) {
sb.append("; name=").append(getName()); sb.append("; name=").append(getName());
} }
if (getEnableAfterTargetSdk() != -1) { if (getEnableSinceTargetSdk() != -1) {
sb.append("; enableAfterTargetSdk=").append(getEnableAfterTargetSdk()); sb.append("; enableSinceTargetSdk=").append(getEnableSinceTargetSdk());
} }
if (getDisabled()) { if (getDisabled()) {
sb.append("; disabled"); sb.append("; disabled");

View File

@@ -192,16 +192,19 @@ final class CompatConfig {
} }
/** /**
* Returns the minimum sdk version for which this change should be enabled (or 0 if it is not * Returns the maximum sdk version for which this change can be opted in (or -1 if it is not
* target sdk gated). * target sdk gated).
*/ */
int minTargetSdkForChangeId(long changeId) { int maxTargetSdkForChangeIdOptIn(long changeId) {
synchronized (mChanges) { synchronized (mChanges) {
CompatChange c = mChanges.get(changeId); CompatChange c = mChanges.get(changeId);
if (c == null) { if (c == null) {
return 0; return -1;
} }
return c.getEnableAfterTargetSdk(); if (c.getEnableSinceTargetSdk() != -1) {
return c.getEnableSinceTargetSdk() - 1;
}
return -1;
} }
} }
@@ -318,7 +321,7 @@ final class CompatConfig {
} }
} }
private long[] getAllowedChangesAfterTargetSdkForPackage(String packageName, private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName,
int targetSdkVersion) int targetSdkVersion)
throws RemoteException { throws RemoteException {
LongArray allowed = new LongArray(); LongArray allowed = new LongArray();
@@ -326,7 +329,7 @@ final class CompatConfig {
for (int i = 0; i < mChanges.size(); ++i) { for (int i = 0; i < mChanges.size(); ++i) {
try { try {
CompatChange change = mChanges.valueAt(i); CompatChange change = mChanges.valueAt(i);
if (change.getEnableAfterTargetSdk() != targetSdkVersion) { if (change.getEnableSinceTargetSdk() != targetSdkVersion) {
continue; continue;
} }
OverrideAllowedState allowedState = OverrideAllowedState allowedState =
@@ -345,14 +348,14 @@ final class CompatConfig {
} }
/** /**
* Enables all changes with enabledAfterTargetSdk == {@param targetSdkVersion} for * Enables all changes with enabledSinceTargetSdk == {@param targetSdkVersion} for
* {@param packageName}. * {@param packageName}.
* *
* @return The number of changes that were toggled. * @return The number of changes that were toggled.
*/ */
int enableTargetSdkChangesForPackage(String packageName, int targetSdkVersion) int enableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
throws RemoteException { throws RemoteException {
long[] changes = getAllowedChangesAfterTargetSdkForPackage(packageName, targetSdkVersion); long[] changes = getAllowedChangesSinceTargetSdkForPackage(packageName, targetSdkVersion);
for (long changeId : changes) { for (long changeId : changes) {
addOverride(changeId, packageName, true); addOverride(changeId, packageName, true);
} }
@@ -361,14 +364,14 @@ final class CompatConfig {
/** /**
* Disables all changes with enabledAfterTargetSdk == {@param targetSdkVersion} for * Disables all changes with enabledSinceTargetSdk == {@param targetSdkVersion} for
* {@param packageName}. * {@param packageName}.
* *
* @return The number of changes that were toggled. * @return The number of changes that were toggled.
*/ */
int disableTargetSdkChangesForPackage(String packageName, int targetSdkVersion) int disableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
throws RemoteException { throws RemoteException {
long[] changes = getAllowedChangesAfterTargetSdkForPackage(packageName, targetSdkVersion); long[] changes = getAllowedChangesSinceTargetSdkForPackage(packageName, targetSdkVersion);
for (long changeId : changes) { for (long changeId : changes) {
addOverride(changeId, packageName, false); addOverride(changeId, packageName, false);
} }
@@ -448,12 +451,7 @@ final class CompatConfig {
CompatibilityChangeInfo[] changeInfos = new CompatibilityChangeInfo[mChanges.size()]; CompatibilityChangeInfo[] changeInfos = new CompatibilityChangeInfo[mChanges.size()];
for (int i = 0; i < mChanges.size(); ++i) { for (int i = 0; i < mChanges.size(); ++i) {
CompatChange change = mChanges.valueAt(i); CompatChange change = mChanges.valueAt(i);
changeInfos[i] = new CompatibilityChangeInfo(change.getId(), changeInfos[i] = new CompatibilityChangeInfo(change);
change.getName(),
change.getEnableAfterTargetSdk(),
change.getDisabled(),
change.getLoggingOnly(),
change.getDescription());
} }
return changeInfos; return changeInfos;
} }

View File

@@ -58,7 +58,7 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild(); boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
boolean finalBuild = mAndroidBuildClassifier.isFinalBuild(); boolean finalBuild = mAndroidBuildClassifier.isFinalBuild();
int minTargetSdk = mCompatConfig.minTargetSdkForChangeId(changeId); int maxTargetSdk = mCompatConfig.maxTargetSdkForChangeIdOptIn(changeId);
boolean disabled = mCompatConfig.isDisabled(changeId); boolean disabled = mCompatConfig.isDisabled(changeId);
// Allow any override for userdebug or eng builds. // Allow any override for userdebug or eng builds.
@@ -82,16 +82,16 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
} }
// Allow overriding any change for debuggable apps on non-final builds. // Allow overriding any change for debuggable apps on non-final builds.
if (!finalBuild) { if (!finalBuild) {
return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk); return new OverrideAllowedState(ALLOWED, appTargetSdk, maxTargetSdk);
} }
// Do not allow overriding default enabled changes on user builds // Do not allow overriding default enabled changes on user builds
if (minTargetSdk == -1 && !disabled) { if (maxTargetSdk == -1 && !disabled) {
return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk); return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, maxTargetSdk);
} }
// Only allow to opt-in for a targetSdk gated change. // Only allow to opt-in for a targetSdk gated change.
if (disabled || appTargetSdk <= minTargetSdk) { if (disabled || appTargetSdk <= maxTargetSdk) {
return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk); return new OverrideAllowedState(ALLOWED, appTargetSdk, maxTargetSdk);
} }
return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk); return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, maxTargetSdk);
} }
} }

View File

@@ -59,8 +59,8 @@ public class PlatformCompat extends IPlatformCompat.Stub {
private final ChangeReporter mChangeReporter; private final ChangeReporter mChangeReporter;
private final CompatConfig mCompatConfig; private final CompatConfig mCompatConfig;
private static int sMinTargetSdk = Build.VERSION_CODES.P; private static int sMinTargetSdk = Build.VERSION_CODES.Q;
private static int sMaxTargetSdk = Build.VERSION_CODES.Q; private static int sMaxTargetSdk = Build.VERSION_CODES.R;
public PlatformCompat(Context context) { public PlatformCompat(Context context) {
mContext = context; mContext = context;
@@ -375,9 +375,9 @@ public class PlatformCompat extends IPlatformCompat.Stub {
if (change.getLoggingOnly()) { if (change.getLoggingOnly()) {
return false; return false;
} }
if (change.getEnableAfterTargetSdk() > 0) { if (change.getEnableSinceTargetSdk() > 0) {
if (change.getEnableAfterTargetSdk() < sMinTargetSdk if (change.getEnableSinceTargetSdk() < sMinTargetSdk
|| change.getEnableAfterTargetSdk() > sMaxTargetSdk) { || change.getEnableSinceTargetSdk() > sMaxTargetSdk) {
return false; return false;
} }
} }

View File

@@ -29,6 +29,7 @@
<xs:attribute type="xs:boolean" name="disabled"/> <xs:attribute type="xs:boolean" name="disabled"/>
<xs:attribute type="xs:boolean" name="loggingOnly"/> <xs:attribute type="xs:boolean" name="loggingOnly"/>
<xs:attribute type="xs:int" name="enableAfterTargetSdk"/> <xs:attribute type="xs:int" name="enableAfterTargetSdk"/>
<xs:attribute type="xs:int" name="enableSinceTargetSdk"/>
<xs:attribute type="xs:string" name="description"/> <xs:attribute type="xs:string" name="description"/>
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>

View File

@@ -6,6 +6,7 @@ package com.android.server.compat.config {
method public String getDescription(); method public String getDescription();
method public boolean getDisabled(); method public boolean getDisabled();
method public int getEnableAfterTargetSdk(); method public int getEnableAfterTargetSdk();
method public int getEnableSinceTargetSdk();
method public long getId(); method public long getId();
method public boolean getLoggingOnly(); method public boolean getLoggingOnly();
method public String getName(); method public String getName();
@@ -13,6 +14,7 @@ package com.android.server.compat.config {
method public void setDescription(String); method public void setDescription(String);
method public void setDisabled(boolean); method public void setDisabled(boolean);
method public void setEnableAfterTargetSdk(int); method public void setEnableAfterTargetSdk(int);
method public void setEnableSinceTargetSdk(int);
method public void setId(long); method public void setId(long);
method public void setLoggingOnly(boolean); method public void setLoggingOnly(boolean);
method public void setName(String); method public void setName(String);

View File

@@ -39,58 +39,79 @@ class CompatConfigBuilder {
return new CompatConfigBuilder(buildClassifier, context); return new CompatConfigBuilder(buildClassifier, context);
} }
CompatConfigBuilder addTargetSdkChangeWithId(int sdk, long id) { CompatConfigBuilder addEnableAfterSdkChangeWithId(int sdk, long id) {
mChanges.add(new CompatChange(id, "", sdk, false, false, "")); mChanges.add(new CompatChange(id, "", sdk, -1, false, false, ""));
return this; return this;
} }
CompatConfigBuilder addTargetSdkDisabledChangeWithId(int sdk, long id) { CompatConfigBuilder addEnableAfterSdkChangeWithIdAndName(int sdk, long id, String name) {
mChanges.add(new CompatChange(id, "", sdk, true, false, "")); mChanges.add(new CompatChange(id, name, sdk, -1, false, false, ""));
return this; return this;
} }
CompatConfigBuilder addTargetSdkChangeWithIdAndName(int sdk, long id, String name) { CompatConfigBuilder addEnableAfterSdkChangeWithIdDefaultDisabled(int sdk, long id) {
mChanges.add(new CompatChange(id, name, sdk, false, false, "")); mChanges.add(new CompatChange(id, "", sdk, -1, true, false, ""));
return this; return this;
} }
CompatConfigBuilder addTargetSdkChangeWithIdAndDescription(int sdk, long id, CompatConfigBuilder addEnableAfterSdkChangeWithIdAndDescription(int sdk, long id,
String description) { String description) {
mChanges.add(new CompatChange(id, "", sdk, false, false, description)); mChanges.add(new CompatChange(id, "", sdk, -1, false, false, description));
return this;
}
CompatConfigBuilder addEnableSinceSdkChangeWithId(int sdk, long id) {
mChanges.add(new CompatChange(id, "", -1, sdk, false, false, ""));
return this;
}
CompatConfigBuilder addEnableSinceSdkChangeWithIdAndName(int sdk, long id, String name) {
mChanges.add(new CompatChange(id, name, -1, sdk, false, false, ""));
return this;
}
CompatConfigBuilder addEnableSinceSdkChangeWithIdDefaultDisabled(int sdk, long id) {
mChanges.add(new CompatChange(id, "", -1, sdk, true, false, ""));
return this;
}
CompatConfigBuilder addEnableSinceSdkChangeWithIdAndDescription(int sdk, long id,
String description) {
mChanges.add(new CompatChange(id, "", -1, sdk, false, false, description));
return this; return this;
} }
CompatConfigBuilder addEnabledChangeWithId(long id) { CompatConfigBuilder addEnabledChangeWithId(long id) {
mChanges.add(new CompatChange(id, "", -1, false, false, "")); mChanges.add(new CompatChange(id, "", -1, -1, false, false, ""));
return this; return this;
} }
CompatConfigBuilder addEnabledChangeWithIdAndName(long id, String name) { CompatConfigBuilder addEnabledChangeWithIdAndName(long id, String name) {
mChanges.add(new CompatChange(id, name, -1, false, false, "")); mChanges.add(new CompatChange(id, name, -1, -1, false, false, ""));
return this; return this;
} }
CompatConfigBuilder addEnabledChangeWithIdAndDescription(long id, String description) { CompatConfigBuilder addEnabledChangeWithIdAndDescription(long id, String description) {
mChanges.add(new CompatChange(id, "", -1, false, false, description)); mChanges.add(new CompatChange(id, "", -1, -1, false, false, description));
return this; return this;
} }
CompatConfigBuilder addDisabledChangeWithId(long id) { CompatConfigBuilder addDisabledChangeWithId(long id) {
mChanges.add(new CompatChange(id, "", -1, true, false, "")); mChanges.add(new CompatChange(id, "", -1, -1, true, false, ""));
return this; return this;
} }
CompatConfigBuilder addDisabledChangeWithIdAndName(long id, String name) { CompatConfigBuilder addDisabledChangeWithIdAndName(long id, String name) {
mChanges.add(new CompatChange(id, name, -1, true, false, "")); mChanges.add(new CompatChange(id, name, -1, -1, true, false, ""));
return this; return this;
} }
CompatConfigBuilder addDisabledChangeWithIdAndDescription(long id, String description) { CompatConfigBuilder addDisabledChangeWithIdAndDescription(long id, String description) {
mChanges.add(new CompatChange(id, "", -1, true, false, description)); mChanges.add(new CompatChange(id, "", -1, -1, true, false, description));
return this; return this;
} }
CompatConfigBuilder addLoggingOnlyChangeWithId(long id) { CompatConfigBuilder addLoggingOnlyChangeWithId(long id) {
mChanges.add(new CompatChange(id, "", -1, false, true, "")); mChanges.add(new CompatChange(id, "", -1, -1, false, true, ""));
return this; return this;
} }

View File

@@ -98,7 +98,7 @@ public class CompatConfigTest {
@Test @Test
public void testTargetSdkChangeDisabled() throws Exception { public void testTargetSdkChangeDisabled() throws Exception {
CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addTargetSdkChangeWithId(2, 1234L) .addEnableAfterSdkChangeWithId(2, 1234L)
.build(); .build();
assertThat(compatConfig.isChangeEnabled(1234L, assertThat(compatConfig.isChangeEnabled(1234L,
@@ -109,7 +109,7 @@ public class CompatConfigTest {
@Test @Test
public void testTargetSdkChangeEnabled() throws Exception { public void testTargetSdkChangeEnabled() throws Exception {
CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addTargetSdkChangeWithId(2, 1234L) .addEnableAfterSdkChangeWithId(2, 1234L)
.build(); .build();
assertThat(compatConfig.isChangeEnabled(1234L, assertThat(compatConfig.isChangeEnabled(1234L,
@@ -119,7 +119,7 @@ public class CompatConfigTest {
@Test @Test
public void testDisabledOverrideTargetSdkChange() throws Exception { public void testDisabledOverrideTargetSdkChange() throws Exception {
CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addTargetSdkDisabledChangeWithId(2, 1234L) .addEnableAfterSdkChangeWithIdDefaultDisabled(2, 1234L)
.build(); .build();
assertThat(compatConfig.isChangeEnabled(1234L, assertThat(compatConfig.isChangeEnabled(1234L,
@@ -293,8 +293,8 @@ public class CompatConfigTest {
CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addEnabledChangeWithId(1L) .addEnabledChangeWithId(1L)
.addDisabledChangeWithId(2L) .addDisabledChangeWithId(2L)
.addTargetSdkChangeWithId(3, 3L) .addEnableSinceSdkChangeWithId(3, 3L)
.addTargetSdkChangeWithId(4, 4L) .addEnableSinceSdkChangeWithId(4, 4L)
.build(); .build();
ApplicationInfo applicationInfo = ApplicationInfoBuilder.create() ApplicationInfo applicationInfo = ApplicationInfoBuilder.create()
.withPackageName("foo.bar") .withPackageName("foo.bar")
@@ -314,8 +314,8 @@ public class CompatConfigTest {
CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addEnabledChangeWithId(1L) .addEnabledChangeWithId(1L)
.addDisabledChangeWithId(2L) .addDisabledChangeWithId(2L)
.addTargetSdkChangeWithId(3, 3L) .addEnableSinceSdkChangeWithId(3, 3L)
.addTargetSdkChangeWithId(4, 4L) .addEnableSinceSdkChangeWithId(4, 4L)
.build(); .build();
ApplicationInfo applicationInfo = ApplicationInfoBuilder.create() ApplicationInfo applicationInfo = ApplicationInfoBuilder.create()
.withPackageName("foo.bar") .withPackageName("foo.bar")

View File

@@ -87,9 +87,9 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_debugBuildAnyChangeDebugApp_allowOverride() public void getOverrideAllowedState_debugBuildAnyChangeDebugApp_allowOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(debuggableBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(debuggableBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2) .addEnableAfterSdkChangeWithId(TARGET_SDK, 2)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 3)
.addEnabledChangeWithId(4) .addEnabledChangeWithId(4)
.addDisabledChangeWithId(5) .addDisabledChangeWithId(5)
.addLoggingOnlyChangeWithId(6).build(); .addLoggingOnlyChangeWithId(6).build();
@@ -131,9 +131,9 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_debugBuildAnyChangeReleaseApp_allowOverride() public void getOverrideAllowedState_debugBuildAnyChangeReleaseApp_allowOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(debuggableBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(debuggableBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2) .addEnableAfterSdkChangeWithId(TARGET_SDK, 2)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 3)
.addEnabledChangeWithId(4) .addEnabledChangeWithId(4)
.addDisabledChangeWithId(5) .addDisabledChangeWithId(5)
.addLoggingOnlyChangeWithId(6).build(); .addLoggingOnlyChangeWithId(6).build();
@@ -174,9 +174,9 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_betaBuildTargetSdkChangeDebugApp_allowOverride() public void getOverrideAllowedState_betaBuildTargetSdkChangeDebugApp_allowOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2) .addEnableAfterSdkChangeWithId(TARGET_SDK, 2)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 3)
.addDisabledChangeWithId(4).build(); .addDisabledChangeWithId(4).build();
IOverrideValidator overrideValidator = config.getOverrideValidator(); IOverrideValidator overrideValidator = config.getOverrideValidator();
when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt())) when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
@@ -245,9 +245,9 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_betaBuildAnyChangeReleaseApp_rejectOverride() public void getOverrideAllowedState_betaBuildAnyChangeReleaseApp_rejectOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2) .addEnableAfterSdkChangeWithId(TARGET_SDK, 2)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 3)
.addEnabledChangeWithId(4) .addEnabledChangeWithId(4)
.addDisabledChangeWithId(5) .addDisabledChangeWithId(5)
.addLoggingOnlyChangeWithId(6).build(); .addLoggingOnlyChangeWithId(6).build();
@@ -288,8 +288,8 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptin_allowOverride() public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptin_allowOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2).build(); .addEnableAfterSdkChangeWithId(TARGET_SDK, 2).build();
IOverrideValidator overrideValidator = config.getOverrideValidator(); IOverrideValidator overrideValidator = config.getOverrideValidator();
when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt())) when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
.thenReturn(ApplicationInfoBuilder.create() .thenReturn(ApplicationInfoBuilder.create()
@@ -313,7 +313,7 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptout_rejectOverride() public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptout_rejectOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1).build(); .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1).build();
IOverrideValidator overrideValidator = config.getOverrideValidator(); IOverrideValidator overrideValidator = config.getOverrideValidator();
when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt())) when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
.thenReturn(ApplicationInfoBuilder.create() .thenReturn(ApplicationInfoBuilder.create()
@@ -371,9 +371,9 @@ public class OverrideValidatorImplTest {
public void getOverrideAllowedState_finalBuildAnyChangeReleaseApp_rejectOverride() public void getOverrideAllowedState_finalBuildAnyChangeReleaseApp_rejectOverride()
throws Exception { throws Exception {
CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext) CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) .addEnableAfterSdkChangeWithId(TARGET_SDK_BEFORE, 1)
.addTargetSdkChangeWithId(TARGET_SDK, 2) .addEnableAfterSdkChangeWithId(TARGET_SDK, 2)
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3) .addEnableAfterSdkChangeWithId(TARGET_SDK_AFTER, 3)
.addEnabledChangeWithId(4) .addEnabledChangeWithId(4)
.addDisabledChangeWithId(5) .addDisabledChangeWithId(5)
.addLoggingOnlyChangeWithId(6).build(); .addLoggingOnlyChangeWithId(6).build();

View File

@@ -84,22 +84,22 @@ public class PlatformCompatTest {
mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addEnabledChangeWithId(1L) .addEnabledChangeWithId(1L)
.addDisabledChangeWithIdAndName(2L, "change2") .addDisabledChangeWithIdAndName(2L, "change2")
.addTargetSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "description") .addEnableAfterSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "desc")
.addTargetSdkChangeWithId(Build.VERSION_CODES.P, 4L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.P, 4L)
.addTargetSdkChangeWithId(Build.VERSION_CODES.Q, 5L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.Q, 5L)
.addTargetSdkChangeWithId(Build.VERSION_CODES.R, 6L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.R, 6L)
.addLoggingOnlyChangeWithId(7L) .addLoggingOnlyChangeWithId(7L)
.build(); .build();
mPlatformCompat = new PlatformCompat(mContext, mCompatConfig); mPlatformCompat = new PlatformCompat(mContext, mCompatConfig);
assertThat(mPlatformCompat.listAllChanges()).asList().containsExactly( assertThat(mPlatformCompat.listAllChanges()).asList().containsExactly(
new CompatibilityChangeInfo(1L, "", -1, false, false, ""), new CompatibilityChangeInfo(1L, "", -1, -1, false, false, ""),
new CompatibilityChangeInfo(2L, "change2", -1, true, false, ""), new CompatibilityChangeInfo(2L, "change2", -1, -1, true, false, ""),
new CompatibilityChangeInfo(3L, "", Build.VERSION_CODES.O, false, false, new CompatibilityChangeInfo(3L, "", Build.VERSION_CODES.O, -1, false, false,
"description"), "desc"),
new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, false, false, ""), new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, -1, false, false, ""),
new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, false, false, ""), new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, -1, false, false, ""),
new CompatibilityChangeInfo(6L, "", Build.VERSION_CODES.R, false, false, ""), new CompatibilityChangeInfo(6L, "", Build.VERSION_CODES.R, -1, false, false, ""),
new CompatibilityChangeInfo(7L, "", -1, false, true, "")); new CompatibilityChangeInfo(7L, "", -1, -1, false, true, ""));
} }
@Test @Test
@@ -107,18 +107,18 @@ public class PlatformCompatTest {
mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
.addEnabledChangeWithId(1L) .addEnabledChangeWithId(1L)
.addDisabledChangeWithIdAndName(2L, "change2") .addDisabledChangeWithIdAndName(2L, "change2")
.addTargetSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "description") .addEnableAfterSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "desc")
.addTargetSdkChangeWithId(Build.VERSION_CODES.P, 4L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.P, 4L)
.addTargetSdkChangeWithId(Build.VERSION_CODES.Q, 5L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.Q, 5L)
.addTargetSdkChangeWithId(Build.VERSION_CODES.R, 6L) .addEnableAfterSdkChangeWithId(Build.VERSION_CODES.R, 6L)
.addLoggingOnlyChangeWithId(7L) .addLoggingOnlyChangeWithId(7L)
.build(); .build();
mPlatformCompat = new PlatformCompat(mContext, mCompatConfig); mPlatformCompat = new PlatformCompat(mContext, mCompatConfig);
assertThat(mPlatformCompat.listUIChanges()).asList().containsExactly( assertThat(mPlatformCompat.listUIChanges()).asList().containsExactly(
new CompatibilityChangeInfo(1L, "", -1, false, false, ""), new CompatibilityChangeInfo(1L, "", -1, -1, false, false, ""),
new CompatibilityChangeInfo(2L, "change2", -1, true, false, ""), new CompatibilityChangeInfo(2L, "change2", -1, -1, true, false, ""),
new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, false, false, ""), new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, -1, false, false, ""),
new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, false, false, "")); new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, -1, false, false, ""));
} }
@Test @Test