Loading core/java/com/android/internal/compat/CompatibilityChangeInfo.java +9 −1 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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; } Loading @@ -68,6 +74,7 @@ public class CompatibilityChangeInfo implements Parcelable { mName = in.readString(); mEnableAfterTargetSdk = in.readInt(); mDisabled = in.readBoolean(); mLoggingOnly = in.readBoolean(); mDescription = in.readString(); } Loading @@ -82,6 +89,7 @@ public class CompatibilityChangeInfo implements Parcelable { dest.writeString(mName); dest.writeInt(mEnableAfterTargetSdk); dest.writeBoolean(mDisabled); dest.writeBoolean(mLoggingOnly); dest.writeString(mDescription); } Loading core/java/com/android/internal/compat/OverrideAllowedState.java +10 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; Loading Loading @@ -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)); } } Loading services/core/java/com/android/server/compat/CompatChange.java +11 −4 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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) { Loading @@ -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<>(); } Loading Loading @@ -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); } Loading services/core/java/com/android/server/compat/CompatConfig.java +14 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -357,6 +370,7 @@ final class CompatConfig { change.getName(), change.getEnableAfterTargetSdk(), change.getDisabled(), change.getLoggingOnly(), change.getDescription()); } return changeInfos; Loading services/core/java/com/android/server/compat/OverrideValidatorImpl.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
core/java/com/android/internal/compat/CompatibilityChangeInfo.java +9 −1 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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; } Loading @@ -68,6 +74,7 @@ public class CompatibilityChangeInfo implements Parcelable { mName = in.readString(); mEnableAfterTargetSdk = in.readInt(); mDisabled = in.readBoolean(); mLoggingOnly = in.readBoolean(); mDescription = in.readString(); } Loading @@ -82,6 +89,7 @@ public class CompatibilityChangeInfo implements Parcelable { dest.writeString(mName); dest.writeInt(mEnableAfterTargetSdk); dest.writeBoolean(mDisabled); dest.writeBoolean(mLoggingOnly); dest.writeString(mDescription); } Loading
core/java/com/android/internal/compat/OverrideAllowedState.java +10 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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; Loading Loading @@ -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)); } } Loading
services/core/java/com/android/server/compat/CompatChange.java +11 −4 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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); } /** Loading @@ -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) { Loading @@ -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<>(); } Loading Loading @@ -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); } Loading
services/core/java/com/android/server/compat/CompatConfig.java +14 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -357,6 +370,7 @@ final class CompatConfig { change.getName(), change.getEnableAfterTargetSdk(), change.getDisabled(), change.getLoggingOnly(), change.getDescription()); } return changeInfos; Loading
services/core/java/com/android/server/compat/OverrideValidatorImpl.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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