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

Commit 33e09a36 authored by Anna Trostanetski's avatar Anna Trostanetski Committed by Gerrit Code Review
Browse files

Merge "Add support for LoggingOnly changes"

parents 11fcab68 ce6f5d38
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ public class CompatibilityChangeInfo implements Parcelable {
    private final @Nullable String mName;
    private final int mEnableAfterTargetSdk;
    private final boolean mDisabled;
    private final boolean mLoggingOnly;
    private final @Nullable String mDescription;

    public long getId() {
@@ -49,17 +50,22 @@ public class CompatibilityChangeInfo implements Parcelable {
        return mDisabled;
    }

    public boolean getLoggingOnly() {
        return mLoggingOnly;
    }

    public String getDescription()  {
        return mDescription;
    }

    public CompatibilityChangeInfo(
            Long changeId, String name, int enableAfterTargetSdk, boolean disabled,
            String description) {
            boolean loggingOnly, String description) {
        this.mChangeId = changeId;
        this.mName = name;
        this.mEnableAfterTargetSdk = enableAfterTargetSdk;
        this.mDisabled = disabled;
        this.mLoggingOnly = loggingOnly;
        this.mDescription = description;
    }

@@ -68,6 +74,7 @@ public class CompatibilityChangeInfo implements Parcelable {
        mName = in.readString();
        mEnableAfterTargetSdk = in.readInt();
        mDisabled = in.readBoolean();
        mLoggingOnly = in.readBoolean();
        mDescription = in.readString();
    }

@@ -82,6 +89,7 @@ public class CompatibilityChangeInfo implements Parcelable {
        dest.writeString(mName);
        dest.writeInt(mEnableAfterTargetSdk);
        dest.writeBoolean(mDisabled);
        dest.writeBoolean(mLoggingOnly);
        dest.writeString(mDescription);
    }

+10 −1
Original line number Diff line number Diff line
@@ -33,7 +33,8 @@ public final class OverrideAllowedState implements Parcelable {
            DISABLED_NOT_DEBUGGABLE,
            DISABLED_NON_TARGET_SDK,
            DISABLED_TARGET_SDK_TOO_HIGH,
            PACKAGE_DOES_NOT_EXIST
            PACKAGE_DOES_NOT_EXIST,
            LOGGING_ONLY_CHANGE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface State {
@@ -60,6 +61,10 @@ public final class OverrideAllowedState implements Parcelable {
     * Package does not exist.
     */
    public static final int PACKAGE_DOES_NOT_EXIST = 4;
    /**
     * Change is marked as logging only, and cannot be toggled.
     */
    public static final int LOGGING_ONLY_CHANGE = 5;

    @State
    public final int state;
@@ -118,6 +123,10 @@ public final class OverrideAllowedState implements Parcelable {
                        "Cannot override %1$d for %2$s because the package does not exist, and "
                                + "the change is targetSdk gated.",
                        changeId, packageName));
            case LOGGING_ONLY_CHANGE:
                throw new SecurityException(String.format(
                        "Cannot override %1$d because it is marked as a logging-only change.",
                        changeId));
        }
    }

+11 −4
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public final class CompatChange extends CompatibilityChangeInfo {
    private Map<String, Boolean> mPackageOverrides;

    public CompatChange(long changeId) {
        this(changeId, null, -1, false, null);
        this(changeId, null, -1, false, false, null);
    }

    /**
@@ -74,8 +74,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
     * @param disabled If {@code true}, overrides any {@code enableAfterTargetSdk} set.
     */
    public CompatChange(long changeId, @Nullable String name, int enableAfterTargetSdk,
            boolean disabled, String description) {
        super(changeId, name, enableAfterTargetSdk, disabled, description);
            boolean disabled, boolean loggingOnly, String description) {
        super(changeId, name, enableAfterTargetSdk, disabled, loggingOnly, description);
    }

    /**
@@ -83,7 +83,7 @@ public final class CompatChange extends CompatibilityChangeInfo {
     */
    public CompatChange(Change change) {
        super(change.getId(), change.getName(), change.getEnableAfterTargetSdk(),
                change.getDisabled(), change.getDescription());
                change.getDisabled(), change.getLoggingOnly(), change.getDescription());
    }

    void registerListener(ChangeListener listener) {
@@ -105,6 +105,10 @@ public final class CompatChange extends CompatibilityChangeInfo {
     * @param enabled Whether or not to enable the change.
     */
    void addPackageOverride(String pname, boolean enabled) {
        if (getLoggingOnly()) {
            throw new IllegalArgumentException(
                    "Can't add overrides for a logging only change " + toString());
        }
        if (mPackageOverrides == null) {
            mPackageOverrides = new HashMap<>();
        }
@@ -160,6 +164,9 @@ public final class CompatChange extends CompatibilityChangeInfo {
        if (getDisabled()) {
            sb.append("; disabled");
        }
        if (getLoggingOnly()) {
            sb.append("; loggingOnly");
        }
        if (mPackageOverrides != null && mPackageOverrides.size() > 0) {
            sb.append("; packageOverrides=").append(mPackageOverrides);
        }
+14 −0
Original line number Diff line number Diff line
@@ -200,6 +200,19 @@ final class CompatConfig {
        }
    }

    /**
     * Returns whether the change is marked as logging only.
     */
    boolean isLoggingOnly(long changeId) {
        synchronized (mChanges) {
            CompatChange c = mChanges.get(changeId);
            if (c == null) {
                return false;
            }
            return c.getLoggingOnly();
        }
    }

    /**
     * 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
@@ -357,6 +370,7 @@ final class CompatConfig {
                        change.getName(),
                        change.getEnableAfterTargetSdk(),
                        change.getDisabled(),
                        change.getLoggingOnly(),
                        change.getDescription());
            }
            return changeInfos;
+7 −5
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.internal.compat.OverrideAllowedState.ALLOWED;
import static com.android.internal.compat.OverrideAllowedState.DISABLED_NON_TARGET_SDK;
import static com.android.internal.compat.OverrideAllowedState.DISABLED_NOT_DEBUGGABLE;
import static com.android.internal.compat.OverrideAllowedState.DISABLED_TARGET_SDK_TOO_HIGH;
import static com.android.internal.compat.OverrideAllowedState.LOGGING_ONLY_CHANGE;
import static com.android.internal.compat.OverrideAllowedState.PACKAGE_DOES_NOT_EXIST;

import android.content.Context;
@@ -51,12 +52,13 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {

    @Override
    public OverrideAllowedState getOverrideAllowedState(long changeId, String packageName) {
        boolean debuggableBuild = false;
        boolean finalBuild = false;
        int minTargetSdk = mCompatConfig.minTargetSdkForChangeId(changeId);
        if (mCompatConfig.isLoggingOnly(changeId)) {
            return new OverrideAllowedState(LOGGING_ONLY_CHANGE, -1, -1);
        }

        debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
        finalBuild = mAndroidBuildClassifier.isFinalBuild();
        boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
        boolean finalBuild = mAndroidBuildClassifier.isFinalBuild();
        int minTargetSdk = mCompatConfig.minTargetSdkForChangeId(changeId);

        // Allow any override for userdebug or eng builds.
        if (debuggableBuild) {
Loading