Loading services/core/java/com/android/server/compat/CompatChange.java +9 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,15 @@ public final class CompatChange extends CompatibilityChangeInfo { return true; } /** * Checks whether a change has an override for a package. * @param packageName name of the package * @return true if there is such override */ boolean hasOverride(String packageName) { return mPackageOverrides != null && mPackageOverrides.containsKey(packageName); } @Override public String toString() { StringBuilder sb = new StringBuilder("ChangeId(") Loading services/core/java/com/android/server/compat/CompatConfig.java +15 −11 Original line number Diff line number Diff line Loading @@ -247,12 +247,14 @@ final class CompatConfig { CompatChange c = mChanges.get(changeId); try { if (c != null) { overrideExists = c.hasOverride(packageName); if (overrideExists) { OverrideAllowedState allowedState = mOverrideValidator.getOverrideAllowedState(changeId, packageName); allowedState.enforce(changeId, packageName); overrideExists = true; c.removePackageOverride(packageName); } } } catch (RemoteException e) { // Should never occur, since validator is in the same process. throw new RuntimeException("Unable to call override validator!", e); Loading Loading @@ -298,6 +300,7 @@ final class CompatConfig { for (int i = 0; i < mChanges.size(); ++i) { try { CompatChange change = mChanges.valueAt(i); if (change.hasOverride(packageName)) { OverrideAllowedState allowedState = mOverrideValidator.getOverrideAllowedState(change.getId(), packageName); Loading @@ -305,6 +308,7 @@ final class CompatConfig { if (change != null) { mChanges.valueAt(i).removePackageOverride(packageName); } } } catch (RemoteException e) { // Should never occur, since validator is in the same process. throw new RuntimeException("Unable to call override validator!", e); Loading services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,28 @@ public class CompatConfigTest { assertThat(compatConfig.isChangeEnabled(1234L, applicationInfo)).isTrue(); } @Test public void testAllowRemoveOverrideNoOverride() throws Exception { CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) .addDisabledChangeWithId(1234L) .addLoggingOnlyChangeWithId(2L) .build(); ApplicationInfo applicationInfo = ApplicationInfoBuilder.create() .withPackageName("com.some.package") .build(); when(mPackageManager.getApplicationInfo(eq("com.some.package"), anyInt())) .thenReturn(applicationInfo); // Reject all override attempts. // Force the validator to prevent overriding the change by using a user build. when(mBuildClassifier.isDebuggableBuild()).thenReturn(false); when(mBuildClassifier.isFinalBuild()).thenReturn(true); // Try to remove a non existing override, and it doesn't fail. assertThat(compatConfig.removeOverride(1234L, "com.some.package")).isFalse(); assertThat(compatConfig.removeOverride(2L, "com.some.package")).isFalse(); compatConfig.removePackageOverrides("com.some.package"); } @Test public void testRemovePackageOverride() throws Exception { CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) Loading Loading
services/core/java/com/android/server/compat/CompatChange.java +9 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,15 @@ public final class CompatChange extends CompatibilityChangeInfo { return true; } /** * Checks whether a change has an override for a package. * @param packageName name of the package * @return true if there is such override */ boolean hasOverride(String packageName) { return mPackageOverrides != null && mPackageOverrides.containsKey(packageName); } @Override public String toString() { StringBuilder sb = new StringBuilder("ChangeId(") Loading
services/core/java/com/android/server/compat/CompatConfig.java +15 −11 Original line number Diff line number Diff line Loading @@ -247,12 +247,14 @@ final class CompatConfig { CompatChange c = mChanges.get(changeId); try { if (c != null) { overrideExists = c.hasOverride(packageName); if (overrideExists) { OverrideAllowedState allowedState = mOverrideValidator.getOverrideAllowedState(changeId, packageName); allowedState.enforce(changeId, packageName); overrideExists = true; c.removePackageOverride(packageName); } } } catch (RemoteException e) { // Should never occur, since validator is in the same process. throw new RuntimeException("Unable to call override validator!", e); Loading Loading @@ -298,6 +300,7 @@ final class CompatConfig { for (int i = 0; i < mChanges.size(); ++i) { try { CompatChange change = mChanges.valueAt(i); if (change.hasOverride(packageName)) { OverrideAllowedState allowedState = mOverrideValidator.getOverrideAllowedState(change.getId(), packageName); Loading @@ -305,6 +308,7 @@ final class CompatConfig { if (change != null) { mChanges.valueAt(i).removePackageOverride(packageName); } } } catch (RemoteException e) { // Should never occur, since validator is in the same process. throw new RuntimeException("Unable to call override validator!", e); Loading
services/tests/servicestests/src/com/android/server/compat/CompatConfigTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,28 @@ public class CompatConfigTest { assertThat(compatConfig.isChangeEnabled(1234L, applicationInfo)).isTrue(); } @Test public void testAllowRemoveOverrideNoOverride() throws Exception { CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) .addDisabledChangeWithId(1234L) .addLoggingOnlyChangeWithId(2L) .build(); ApplicationInfo applicationInfo = ApplicationInfoBuilder.create() .withPackageName("com.some.package") .build(); when(mPackageManager.getApplicationInfo(eq("com.some.package"), anyInt())) .thenReturn(applicationInfo); // Reject all override attempts. // Force the validator to prevent overriding the change by using a user build. when(mBuildClassifier.isDebuggableBuild()).thenReturn(false); when(mBuildClassifier.isFinalBuild()).thenReturn(true); // Try to remove a non existing override, and it doesn't fail. assertThat(compatConfig.removeOverride(1234L, "com.some.package")).isFalse(); assertThat(compatConfig.removeOverride(2L, "com.some.package")).isFalse(); compatConfig.removePackageOverrides("com.some.package"); } @Test public void testRemovePackageOverride() throws Exception { CompatConfig compatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext) Loading