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

Commit e9e7d56c authored by Anna Trostanetski's avatar Anna Trostanetski Committed by Android (Google) Code Review
Browse files

Merge "Add support for LoggingOnly changes" into rvc-dev

parents e4a1a3b8 fd87a60b
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
@@ -205,6 +205,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
@@ -365,6 +378,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