From e3de88df1721d4eb449d7bf99ec1c34313455f38 Mon Sep 17 00:00:00 2001 From: Andrei Onea Date: Wed, 20 May 2020 16:53:17 +0100 Subject: [PATCH] Fix boundary condition for targetSDK gated changes @EnabledAfter(targetSdk = FOO) means that apps targeting FOO should still be able to override the change. Previously, the condition was excluding FOO. Bug: 156047625 Test: atest OverideValidatorImplTest Change-Id: Ic0eecc83c9f96fb605b499579b9d58064dcaedd9 --- .../server/compat/OverrideValidatorImpl.java | 2 +- .../compat/OverrideValidatorImplTest.java | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/compat/OverrideValidatorImpl.java b/services/core/java/com/android/server/compat/OverrideValidatorImpl.java index f5d6e5ac46e5d..08d266478f4b9 100644 --- a/services/core/java/com/android/server/compat/OverrideValidatorImpl.java +++ b/services/core/java/com/android/server/compat/OverrideValidatorImpl.java @@ -89,7 +89,7 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub { return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk); } // Only allow to opt-in for a targetSdk gated change. - if (disabled || applicationInfo.targetSdkVersion < minTargetSdk) { + if (disabled || appTargetSdk <= minTargetSdk) { return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk); } return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk); diff --git a/services/tests/servicestests/src/com/android/server/compat/OverrideValidatorImplTest.java b/services/tests/servicestests/src/com/android/server/compat/OverrideValidatorImplTest.java index 425c7247e50fd..d45589d90ce3b 100644 --- a/services/tests/servicestests/src/com/android/server/compat/OverrideValidatorImplTest.java +++ b/services/tests/servicestests/src/com/android/server/compat/OverrideValidatorImplTest.java @@ -288,7 +288,8 @@ public class OverrideValidatorImplTest { public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptin_allowOverride() throws Exception { CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext) - .addTargetSdkChangeWithId(TARGET_SDK_AFTER, 1).build(); + .addTargetSdkChangeWithId(TARGET_SDK_AFTER, 1) + .addTargetSdkChangeWithId(TARGET_SDK, 2).build(); IOverrideValidator overrideValidator = config.getOverrideValidator(); when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt())) .thenReturn(ApplicationInfoBuilder.create() @@ -296,19 +297,23 @@ public class OverrideValidatorImplTest { .withTargetSdk(TARGET_SDK) .withPackageName(PACKAGE_NAME).build()); - OverrideAllowedState allowedState = + OverrideAllowedState stateTargetSdkGreaterChange = overrideValidator.getOverrideAllowedState(1, PACKAGE_NAME); + OverrideAllowedState stateTargetSdkEqualChange = + overrideValidator.getOverrideAllowedState(2, PACKAGE_NAME); - assertThat(allowedState) + assertThat(stateTargetSdkGreaterChange) .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_AFTER)); + + assertThat(stateTargetSdkEqualChange) + .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK)); } @Test public void getOverrideAllowedState_finalBuildTargetSdkChangeDebugAppOptout_rejectOverride() throws Exception { CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext) - .addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1) - .addTargetSdkChangeWithId(TARGET_SDK, 2).build(); + .addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1).build(); IOverrideValidator overrideValidator = config.getOverrideValidator(); when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt())) .thenReturn(ApplicationInfoBuilder.create() @@ -319,14 +324,10 @@ public class OverrideValidatorImplTest { OverrideAllowedState stateTargetSdkLessChange = overrideValidator.getOverrideAllowedState(1, PACKAGE_NAME); - OverrideAllowedState stateTargetSdkEqualChange = - overrideValidator.getOverrideAllowedState(2, PACKAGE_NAME); assertThat(stateTargetSdkLessChange).isEqualTo( new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, TARGET_SDK, TARGET_SDK_BEFORE)); - assertThat(stateTargetSdkEqualChange).isEqualTo( - new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, TARGET_SDK, TARGET_SDK)); } @Test