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

Commit f20124b6 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Allow overriding disabled changes in final release." am: 43fe983a

Change-Id: I1fb776743125717d6bec8ceacc89a4c3f82f35d5
parents 88eb11ea 43fe983a
Loading
Loading
Loading
Loading
+25 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ public final class OverrideAllowedState implements Parcelable {
    public static final int DISABLED_NOT_DEBUGGABLE = 1;
    public static final int DISABLED_NOT_DEBUGGABLE = 1;
    /**
    /**
     * Change cannot be overridden, due to the build being non-debuggable and the change being
     * 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;
    public static final int DISABLED_NON_TARGET_SDK = 2;
    /**
    /**
@@ -159,4 +159,28 @@ public final class OverrideAllowedState implements Parcelable {
                && appTargetSdk == otherState.appTargetSdk
                && appTargetSdk == otherState.appTargetSdk
                && changeIdTargetSdk == otherState.changeIdTargetSdk;
                && 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 Original line Diff line number Diff line
@@ -213,6 +213,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
     * 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
     * restores the default behaviour for the given change and app, once any app processes have been
+4 −3
Original line number Original line Diff line number Diff line
@@ -59,6 +59,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 minTargetSdk = mCompatConfig.minTargetSdkForChangeId(changeId);
        boolean disabled = mCompatConfig.isDisabled(changeId);


        // Allow any override for userdebug or eng builds.
        // Allow any override for userdebug or eng builds.
        if (debuggableBuild) {
        if (debuggableBuild) {
@@ -83,12 +84,12 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
        if (!finalBuild) {
        if (!finalBuild) {
            return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
            return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
        }
        }
        // Do not allow overriding non-target sdk gated changes on user builds
        // Do not allow overriding default enabled changes on user builds
        if (minTargetSdk == -1) {
        if (minTargetSdk == -1 && !disabled) {
            return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk);
            return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk);
        }
        }
        // Only allow to opt-in for a targetSdk gated change.
        // 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(ALLOWED, appTargetSdk, minTargetSdk);
        }
        }
        return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk);
        return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk);
+10 −4
Original line number Original line Diff line number Diff line
@@ -175,7 +175,8 @@ public class OverrideValidatorImplTest {
        CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext)
        CompatConfig config = CompatConfigBuilder.create(betaBuild(), mContext)
                        .addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1)
                        .addTargetSdkChangeWithId(TARGET_SDK_BEFORE, 1)
                        .addTargetSdkChangeWithId(TARGET_SDK, 2)
                        .addTargetSdkChangeWithId(TARGET_SDK, 2)
                        .addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3).build();
                        .addTargetSdkChangeWithId(TARGET_SDK_AFTER, 3)
                        .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()))
                .thenReturn(ApplicationInfoBuilder.create()
                .thenReturn(ApplicationInfoBuilder.create()
@@ -189,6 +190,8 @@ public class OverrideValidatorImplTest {
                overrideValidator.getOverrideAllowedState(2, PACKAGE_NAME);
                overrideValidator.getOverrideAllowedState(2, PACKAGE_NAME);
        OverrideAllowedState stateTargetSdkAfterChange =
        OverrideAllowedState stateTargetSdkAfterChange =
                overrideValidator.getOverrideAllowedState(3, PACKAGE_NAME);
                overrideValidator.getOverrideAllowedState(3, PACKAGE_NAME);
        OverrideAllowedState stateDisabledChange =
                overrideValidator.getOverrideAllowedState(4, PACKAGE_NAME);


        assertThat(stateTargetSdkLessChange)
        assertThat(stateTargetSdkLessChange)
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_BEFORE));
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_BEFORE));
@@ -196,6 +199,8 @@ public class OverrideValidatorImplTest {
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK));
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK));
        assertThat(stateTargetSdkAfterChange)
        assertThat(stateTargetSdkAfterChange)
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_AFTER));
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, TARGET_SDK_AFTER));
        assertThat(stateDisabledChange)
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, -1));
    }
    }


    @Test
    @Test
@@ -342,7 +347,7 @@ public class OverrideValidatorImplTest {
    }
    }


    @Test
    @Test
    public void getOverrideAllowedState_finalBuildDisabledChangeDebugApp_rejectOverride()
    public void getOverrideAllowedState_finalBuildDisabledChangeDebugApp_allowOverride()
            throws Exception {
            throws Exception {
        CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
        CompatConfig config = CompatConfigBuilder.create(finalBuild(), mContext)
                .addDisabledChangeWithId(1).build();
                .addDisabledChangeWithId(1).build();
@@ -350,13 +355,14 @@ public class OverrideValidatorImplTest {
        when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
        when(mPackageManager.getApplicationInfo(eq(PACKAGE_NAME), anyInt()))
                .thenReturn(ApplicationInfoBuilder.create()
                .thenReturn(ApplicationInfoBuilder.create()
                        .withPackageName(PACKAGE_NAME)
                        .withPackageName(PACKAGE_NAME)
                        .withTargetSdk(TARGET_SDK)
                        .debuggable().build());
                        .debuggable().build());


        OverrideAllowedState allowedState =
        OverrideAllowedState allowedState =
                overrideValidator.getOverrideAllowedState(1, PACKAGE_NAME);
                overrideValidator.getOverrideAllowedState(1, PACKAGE_NAME);


        assertThat(allowedState)
        assertThat(allowedState)
                .isEqualTo(new OverrideAllowedState(DISABLED_NON_TARGET_SDK, -1, -1));
                .isEqualTo(new OverrideAllowedState(ALLOWED, TARGET_SDK, -1));
    }
    }


    @Test
    @Test