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

Commit 021aedcb authored by Andrei-Valentin Onea's avatar Andrei-Valentin Onea Committed by Automerger Merge Worker
Browse files

Merge "Add enabledSince support for compat changes" am: c90a797b am:...

Merge "Add enabledSince support for compat changes" am: c90a797b am: 33edcd4d am: bcf00b61 am: 6eb084ed

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1450823

Change-Id: I597f9b8028c2af4d1e09a5e0d7db237e80fa3ca3
parents 61e17b25 6eb084ed
Loading
Loading
Loading
Loading
+28 −11
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@ import android.os.Parcelable;
public class CompatibilityChangeInfo implements Parcelable {
public class CompatibilityChangeInfo implements Parcelable {
    private final long mChangeId;
    private final long mChangeId;
    private final @Nullable String mName;
    private final @Nullable String mName;
    private final int mEnableAfterTargetSdk;
    private final int mEnableSinceTargetSdk;
    private final boolean mDisabled;
    private final boolean mDisabled;
    private final boolean mLoggingOnly;
    private final boolean mLoggingOnly;
    private final @Nullable String mDescription;
    private final @Nullable String mDescription;
@@ -42,8 +42,8 @@ public class CompatibilityChangeInfo implements Parcelable {
        return mName;
        return mName;
    }
    }


    public int getEnableAfterTargetSdk() {
    public int getEnableSinceTargetSdk() {
        return mEnableAfterTargetSdk;
        return mEnableSinceTargetSdk;
    }
    }


    public boolean getDisabled() {
    public boolean getDisabled() {
@@ -59,20 +59,37 @@ public class CompatibilityChangeInfo implements Parcelable {
    }
    }


    public CompatibilityChangeInfo(
    public CompatibilityChangeInfo(
            Long changeId, String name, int enableAfterTargetSdk, boolean disabled,
            Long changeId, String name, int enableAfterTargetSdk, int enableSinceTargetSdk,
            boolean loggingOnly, String description) {
            boolean disabled, boolean loggingOnly, String description) {
        this.mChangeId = changeId;
        this.mChangeId = changeId;
        this.mName = name;
        this.mName = name;
        this.mEnableAfterTargetSdk = enableAfterTargetSdk;
        if (enableAfterTargetSdk > 0) {
            // Need to maintain support for @EnabledAfter(X), but make it equivalent to
            // @EnabledSince(X+1)
            this.mEnableSinceTargetSdk = enableAfterTargetSdk + 1;
        } else if (enableSinceTargetSdk > 0) {
            this.mEnableSinceTargetSdk = enableSinceTargetSdk;
        } else {
            this.mEnableSinceTargetSdk = -1;
        }
        this.mDisabled = disabled;
        this.mDisabled = disabled;
        this.mLoggingOnly = loggingOnly;
        this.mLoggingOnly = loggingOnly;
        this.mDescription = description;
        this.mDescription = description;
    }
    }


    public CompatibilityChangeInfo(CompatibilityChangeInfo other) {
        this.mChangeId = other.mChangeId;
        this.mName = other.mName;
        this.mEnableSinceTargetSdk = other.mEnableSinceTargetSdk;
        this.mDisabled = other.mDisabled;
        this.mLoggingOnly = other.mLoggingOnly;
        this.mDescription = other.mDescription;
    }

    private CompatibilityChangeInfo(Parcel in) {
    private CompatibilityChangeInfo(Parcel in) {
        mChangeId = in.readLong();
        mChangeId = in.readLong();
        mName = in.readString();
        mName = in.readString();
        mEnableAfterTargetSdk = in.readInt();
        mEnableSinceTargetSdk = in.readInt();
        mDisabled = in.readBoolean();
        mDisabled = in.readBoolean();
        mLoggingOnly = in.readBoolean();
        mLoggingOnly = in.readBoolean();
        mDescription = in.readString();
        mDescription = in.readString();
@@ -87,7 +104,7 @@ public class CompatibilityChangeInfo implements Parcelable {
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(mChangeId);
        dest.writeLong(mChangeId);
        dest.writeString(mName);
        dest.writeString(mName);
        dest.writeInt(mEnableAfterTargetSdk);
        dest.writeInt(mEnableSinceTargetSdk);
        dest.writeBoolean(mDisabled);
        dest.writeBoolean(mDisabled);
        dest.writeBoolean(mLoggingOnly);
        dest.writeBoolean(mLoggingOnly);
        dest.writeString(mDescription);
        dest.writeString(mDescription);
@@ -100,8 +117,8 @@ public class CompatibilityChangeInfo implements Parcelable {
        if (getName() != null) {
        if (getName() != null) {
            sb.append("; name=").append(getName());
            sb.append("; name=").append(getName());
        }
        }
        if (getEnableAfterTargetSdk() != -1) {
        if (getEnableSinceTargetSdk() != -1) {
            sb.append("; enableAfterTargetSdk=").append(getEnableAfterTargetSdk());
            sb.append("; enableSinceTargetSdk=").append(getEnableSinceTargetSdk());
        }
        }
        if (getDisabled()) {
        if (getDisabled()) {
            sb.append("; disabled");
            sb.append("; disabled");
@@ -123,7 +140,7 @@ public class CompatibilityChangeInfo implements Parcelable {
        CompatibilityChangeInfo that = (CompatibilityChangeInfo) o;
        CompatibilityChangeInfo that = (CompatibilityChangeInfo) o;
        return this.mChangeId == that.mChangeId
        return this.mChangeId == that.mChangeId
                && this.mName.equals(that.mName)
                && this.mName.equals(that.mName)
                && this.mEnableAfterTargetSdk == that.mEnableAfterTargetSdk
                && this.mEnableSinceTargetSdk == that.mEnableSinceTargetSdk
                && this.mDisabled == that.mDisabled
                && this.mDisabled == that.mDisabled
                && this.mLoggingOnly == that.mLoggingOnly
                && this.mLoggingOnly == that.mLoggingOnly
                && this.mDescription.equals(that.mDescription);
                && this.mDescription.equals(that.mDescription);
+1 −1
Original line number Original line Diff line number Diff line
@@ -164,7 +164,7 @@ interface IPlatformCompat
    boolean clearOverride(long changeId, String packageName);
    boolean clearOverride(long changeId, String packageName);


    /**
    /**
     * Enable all compatibility changes which have enabledAfterTargetSdk ==
     * Enable all compatibility changes which have enabledSinceTargetSdk ==
     * {@param targetSdkVersion} for an app, subject to the policy. Kills the app to allow the
     * {@param targetSdkVersion} for an app, subject to the policy. Kills the app to allow the
     * changes to take effect.
     * changes to take effect.
     *
     *
+12 −8
Original line number Original line Diff line number Diff line
@@ -63,7 +63,7 @@ public final class CompatChange extends CompatibilityChangeInfo {
    private Map<String, Boolean> mPackageOverrides;
    private Map<String, Boolean> mPackageOverrides;


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


    /**
    /**
@@ -71,11 +71,14 @@ public final class CompatChange extends CompatibilityChangeInfo {
     * @param name Short descriptive name.
     * @param name Short descriptive name.
     * @param enableAfterTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledAfter};
     * @param enableAfterTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledAfter};
     *                             -1 if the change is always enabled.
     *                             -1 if the change is always enabled.
     * @param enableSinceTargetSdk {@code targetSdkVersion} restriction. See {@link EnabledSince};
     *                             -1 if the change is always enabled.
     * @param disabled If {@code true}, overrides any {@code enableAfterTargetSdk} set.
     * @param disabled If {@code true}, overrides any {@code enableAfterTargetSdk} set.
     */
     */
    public CompatChange(long changeId, @Nullable String name, int enableAfterTargetSdk,
    public CompatChange(long changeId, @Nullable String name, int enableAfterTargetSdk,
            boolean disabled, boolean loggingOnly, String description) {
            int enableSinceTargetSdk, boolean disabled, boolean loggingOnly, String description) {
        super(changeId, name, enableAfterTargetSdk, disabled, loggingOnly, description);
        super(changeId, name, enableAfterTargetSdk, enableSinceTargetSdk, disabled, loggingOnly,
              description);
    }
    }


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


    void registerListener(ChangeListener listener) {
    void registerListener(ChangeListener listener) {
@@ -145,8 +149,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
        if (getDisabled()) {
        if (getDisabled()) {
            return false;
            return false;
        }
        }
        if (getEnableAfterTargetSdk() != -1) {
        if (getEnableSinceTargetSdk() != -1) {
            return app.targetSdkVersion > getEnableAfterTargetSdk();
            return app.targetSdkVersion >= getEnableSinceTargetSdk();
        }
        }
        return true;
        return true;
    }
    }
@@ -167,8 +171,8 @@ public final class CompatChange extends CompatibilityChangeInfo {
        if (getName() != null) {
        if (getName() != null) {
            sb.append("; name=").append(getName());
            sb.append("; name=").append(getName());
        }
        }
        if (getEnableAfterTargetSdk() != -1) {
        if (getEnableSinceTargetSdk() != -1) {
            sb.append("; enableAfterTargetSdk=").append(getEnableAfterTargetSdk());
            sb.append("; enableSinceTargetSdk=").append(getEnableSinceTargetSdk());
        }
        }
        if (getDisabled()) {
        if (getDisabled()) {
            sb.append("; disabled");
            sb.append("; disabled");
+14 −16
Original line number Original line Diff line number Diff line
@@ -192,16 +192,19 @@ final class CompatConfig {
    }
    }


    /**
    /**
     * Returns the minimum sdk version for which this change should be enabled (or 0 if it is not
     * Returns the maximum sdk version for which this change can be opted in (or -1 if it is not
     * target sdk gated).
     * target sdk gated).
     */
     */
    int minTargetSdkForChangeId(long changeId) {
    int maxTargetSdkForChangeIdOptIn(long changeId) {
        synchronized (mChanges) {
        synchronized (mChanges) {
            CompatChange c = mChanges.get(changeId);
            CompatChange c = mChanges.get(changeId);
            if (c == null) {
            if (c == null) {
                return 0;
                return -1;
            }
            if (c.getEnableSinceTargetSdk() != -1) {
                return c.getEnableSinceTargetSdk() - 1;
            }
            }
            return c.getEnableAfterTargetSdk();
            return -1;
        }
        }
    }
    }


@@ -318,7 +321,7 @@ final class CompatConfig {
        }
        }
    }
    }


    private long[] getAllowedChangesAfterTargetSdkForPackage(String packageName,
    private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName,
                                                             int targetSdkVersion)
                                                             int targetSdkVersion)
                    throws RemoteException {
                    throws RemoteException {
        LongArray allowed = new LongArray();
        LongArray allowed = new LongArray();
@@ -326,7 +329,7 @@ final class CompatConfig {
            for (int i = 0; i < mChanges.size(); ++i) {
            for (int i = 0; i < mChanges.size(); ++i) {
                try {
                try {
                    CompatChange change = mChanges.valueAt(i);
                    CompatChange change = mChanges.valueAt(i);
                    if (change.getEnableAfterTargetSdk() != targetSdkVersion) {
                    if (change.getEnableSinceTargetSdk() != targetSdkVersion) {
                        continue;
                        continue;
                    }
                    }
                    OverrideAllowedState allowedState =
                    OverrideAllowedState allowedState =
@@ -345,14 +348,14 @@ final class CompatConfig {
    }
    }


    /**
    /**
     * Enables all changes with enabledAfterTargetSdk == {@param targetSdkVersion} for
     * Enables all changes with enabledSinceTargetSdk == {@param targetSdkVersion} for
     * {@param packageName}.
     * {@param packageName}.
     *
     *
     * @return The number of changes that were toggled.
     * @return The number of changes that were toggled.
     */
     */
    int enableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
    int enableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
            throws RemoteException {
            throws RemoteException {
        long[] changes = getAllowedChangesAfterTargetSdkForPackage(packageName, targetSdkVersion);
        long[] changes = getAllowedChangesSinceTargetSdkForPackage(packageName, targetSdkVersion);
        for (long changeId : changes) {
        for (long changeId : changes) {
            addOverride(changeId, packageName, true);
            addOverride(changeId, packageName, true);
        }
        }
@@ -361,14 +364,14 @@ final class CompatConfig {




    /**
    /**
     * Disables all changes with enabledAfterTargetSdk == {@param targetSdkVersion} for
     * Disables all changes with enabledSinceTargetSdk == {@param targetSdkVersion} for
     * {@param packageName}.
     * {@param packageName}.
     *
     *
     * @return The number of changes that were toggled.
     * @return The number of changes that were toggled.
     */
     */
    int disableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
    int disableTargetSdkChangesForPackage(String packageName, int targetSdkVersion)
            throws RemoteException {
            throws RemoteException {
        long[] changes = getAllowedChangesAfterTargetSdkForPackage(packageName, targetSdkVersion);
        long[] changes = getAllowedChangesSinceTargetSdkForPackage(packageName, targetSdkVersion);
        for (long changeId : changes) {
        for (long changeId : changes) {
            addOverride(changeId, packageName, false);
            addOverride(changeId, packageName, false);
        }
        }
@@ -448,12 +451,7 @@ final class CompatConfig {
            CompatibilityChangeInfo[] changeInfos = new CompatibilityChangeInfo[mChanges.size()];
            CompatibilityChangeInfo[] changeInfos = new CompatibilityChangeInfo[mChanges.size()];
            for (int i = 0; i < mChanges.size(); ++i) {
            for (int i = 0; i < mChanges.size(); ++i) {
                CompatChange change = mChanges.valueAt(i);
                CompatChange change = mChanges.valueAt(i);
                changeInfos[i] = new CompatibilityChangeInfo(change.getId(),
                changeInfos[i] = new CompatibilityChangeInfo(change);
                        change.getName(),
                        change.getEnableAfterTargetSdk(),
                        change.getDisabled(),
                        change.getLoggingOnly(),
                        change.getDescription());
            }
            }
            return changeInfos;
            return changeInfos;
        }
        }
+7 −7
Original line number Original line Diff line number Diff line
@@ -58,7 +58,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 maxTargetSdk = mCompatConfig.maxTargetSdkForChangeIdOptIn(changeId);
        boolean disabled = mCompatConfig.isDisabled(changeId);
        boolean disabled = mCompatConfig.isDisabled(changeId);


        // Allow any override for userdebug or eng builds.
        // Allow any override for userdebug or eng builds.
@@ -82,16 +82,16 @@ public class OverrideValidatorImpl extends IOverrideValidator.Stub {
        }
        }
        // Allow overriding any change for debuggable apps on non-final builds.
        // Allow overriding any change for debuggable apps on non-final builds.
        if (!finalBuild) {
        if (!finalBuild) {
            return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
            return new OverrideAllowedState(ALLOWED, appTargetSdk, maxTargetSdk);
        }
        }
        // Do not allow overriding default enabled changes on user builds
        // Do not allow overriding default enabled changes on user builds
        if (minTargetSdk == -1 && !disabled) {
        if (maxTargetSdk == -1 && !disabled) {
            return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, minTargetSdk);
            return new OverrideAllowedState(DISABLED_NON_TARGET_SDK, appTargetSdk, maxTargetSdk);
        }
        }
        // Only allow to opt-in for a targetSdk gated change.
        // Only allow to opt-in for a targetSdk gated change.
        if (disabled || appTargetSdk <= minTargetSdk) {
        if (disabled || appTargetSdk <= maxTargetSdk) {
            return new OverrideAllowedState(ALLOWED, appTargetSdk, minTargetSdk);
            return new OverrideAllowedState(ALLOWED, appTargetSdk, maxTargetSdk);
        }
        }
        return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, minTargetSdk);
        return new OverrideAllowedState(DISABLED_TARGET_SDK_TOO_HIGH, appTargetSdk, maxTargetSdk);
    }
    }
}
}
Loading