Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d1a730b authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Allow overriding disabled changes in final release." into rvc-dev am:...

Merge "Allow overriding disabled changes in final release." into rvc-dev am: aed5eaa8 am: 00609d6e am: c5e9a8c6

Change-Id: I6b3e36719e8aa281ec6a7d8ebcf0a07b6aa51c52
parents cc5491da c5e9a8c6
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -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 + ")";
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -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
+4 −3
Original line number Diff line number Diff line
@@ -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);
+10 −4
Original line number Diff line number Diff line
@@ -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,7 +348,7 @@ 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();
@@ -351,13 +356,14 @@ public class OverrideValidatorImplTest {
        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