Merge "Merge "Allow overriding disabled changes in final release." into rvc-dev am: aed5eaa89c am: 00609d6ee5" into rvc-d1-dev-plus-aosp
This commit is contained in:
committed by
Android (Google) Code Review
commit
c79a91f595
@@ -50,7 +50,7 @@ public final class OverrideAllowedState implements Parcelable {
|
||||
public static final int DISABLED_NOT_DEBUGGABLE = 1;
|
||||
/**
|
||||
* Change cannot be overridden, due to the build being non-debuggable and the change being
|
||||
* non-targetSdk.
|
||||
* enabled regardless of targetSdk.
|
||||
*/
|
||||
public static final int DISABLED_NON_TARGET_SDK = 2;
|
||||
/**
|
||||
@@ -159,4 +159,28 @@ public final class OverrideAllowedState implements Parcelable {
|
||||
&& appTargetSdk == otherState.appTargetSdk
|
||||
&& changeIdTargetSdk == otherState.changeIdTargetSdk;
|
||||
}
|
||||
|
||||
private String stateName() {
|
||||
switch (state) {
|
||||
case ALLOWED:
|
||||
return "ALLOWED";
|
||||
case DISABLED_NOT_DEBUGGABLE:
|
||||
return "DISABLED_NOT_DEBUGGABLE";
|
||||
case DISABLED_NON_TARGET_SDK:
|
||||
return "DISABLED_NON_TARGET_SDK";
|
||||
case DISABLED_TARGET_SDK_TOO_HIGH:
|
||||
return "DISABLED_TARGET_SDK_TOO_HIGH";
|
||||
case PACKAGE_DOES_NOT_EXIST:
|
||||
return "PACKAGE_DOES_NOT_EXIST";
|
||||
case LOGGING_ONLY_CHANGE:
|
||||
return "LOGGING_ONLY_CHANGE";
|
||||
}
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "OverrideAllowedState(state=" + stateName() + "; appTargetSdk=" + appTargetSdk
|
||||
+ "; changeIdTargetSdk=" + changeIdTargetSdk + ")";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,6 +218,19 @@ final class CompatConfig {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the change is marked as disabled.
|
||||
*/
|
||||
boolean isDisabled(long changeId) {
|
||||
synchronized (mChanges) {
|
||||
CompatChange c = mChanges.get(changeId);
|
||||
if (c == null) {
|
||||
return false;
|
||||
}
|
||||
return c.getDisabled();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an override previously added via {@link #addOverride(long, String, boolean)}. This
|
||||
* restores the default behaviour for the given change and app, once any app processes have been
|
||||
|
||||
@@ -59,6 +59,7 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
|
||||
boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
|
||||
boolean finalBuild = mAndroidBuildClassifier.isFinalBuild();
|
||||
int minTargetSdk = mCompatConfig.minTargetSdkForChangeId(changeId);
|
||||
boolean disabled = mCompatConfig.isDisabled(changeId);
|
||||
|
||||
// Allow any override for userdebug or eng builds.
|
||||
if (debuggableBuild) {
|
||||
@@ -83,12 +84,12 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
|
||||
if (!finalBuild) {
|
||||
return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
|
||||
}
|
||||
// Do not allow overriding non-target sdk gated changes on user builds
|
||||
if (minTargetSdk == -1) {
|
||||
// Do not allow overriding default enabled changes on user builds
|
||||
if (minTargetSdk == -1 && !disabled) {
|
||||
return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk);
|
||||
}
|
||||
// Only allow to opt-in for a targetSdk gated change.
|
||||
if (applicationInfo.targetSdkVersion < minTargetSdk) {
|
||||
if (disabled || applicationInfo.targetSdkVersion < minTargetSdk) {
|
||||
return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
|
||||
}
|
||||
return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk);
|
||||
|
||||
@@ -176,7 +176,8 @@ public class OverrideValidatorImplTest {
|
||||
CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext)
|
||||
.addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1)
|
||||
.addTargetSdkChangeWithId(TARGET_SDK, 2)
|
||||
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3).build();
|
||||
.addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3)
|
||||
.addDisabledChangeWithId(4).build();
|
||||
IOverrideValidator overrideValidator = config.getOverrideValidator();
|
||||
when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
|
||||
.thenReturn(ApplicationInfoBuilder.create()
|
||||
@@ -190,6 +191,8 @@ public class OverrideValidatorImplTest {
|
||||
overrideValidator.getOverrideAllowedState(2, PACKAGE_NAME);
|
||||
OverrideAllowedState stateTargetSdkAfterChange =
|
||||
overrideValidator.getOverrideAllowedState(3, PACKAGE_NAME);
|
||||
OverrideAllowedState stateDisabledChange =
|
||||
overrideValidator.getOverrideAllowedState(4, PACKAGE_NAME);
|
||||
|
||||
assertThat(stateTargetSdkLessChange)
|
||||
.isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_BEFORE));
|
||||
@@ -197,6 +200,8 @@ public class OverrideValidatorImplTest {
|
||||
.isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK));
|
||||
assertThat(stateTargetSdkAfterChange)
|
||||
.isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_AFTER));
|
||||
assertThat(stateDisabledChange)
|
||||
.isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, -1));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -343,21 +348,22 @@ public class OverrideValidatorImplTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getOverrideAllowedState_finalBuildDisabledChangeDebugApp_rejectOverride()
|
||||
public void getOverrideAllowedState_finalBuildDisabledChangeDebugApp_allowOverride()
|
||||
throws Exception {
|
||||
CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
|
||||
.addDisabledChangeWithId(1).build();
|
||||
.addDisabledChangeWithId(1).build();
|
||||
IOverrideValidator overrideValidator = config.getOverrideValidator();
|
||||
when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
|
||||
.thenReturn(ApplicationInfoBuilder.create()
|
||||
.withPackageName(PACKAGE_NAME)
|
||||
.withTargetSdk(TARGET_SDK)
|
||||
.debuggable().build());
|
||||
|
||||
OverrideAllowedState allowedState =
|
||||
overrideValidator.getOverrideAllowedState(1, PACKAGE_NAME);
|
||||
|
||||
assertThat(allowedState)
|
||||
.isEqualTo(new OverrideAllowedState(DISABLED_NON_TARGET_SDK, -1, -1));
|
||||
.isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, -1));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user