diff options
| author | Andrei Onea <andreionea@google.com> | 2019-09-12 18:08:59 +0100 |
|---|---|---|
| committer | Andrei Onea <andreionea@google.com> | 2019-10-10 17:09:02 +0100 |
| commit | ea997f222c791fa58520b995da93cd08e9362b1b (patch) | |
| tree | 1907318895abc88cefbb19efbae1b13ed5b579cf /core/java | |
| parent | 90a84e26bd3648e9565c8d10f43788e8571c7d7d (diff) | |
Add extra compat change overriding methods.
This CL adds two new methods to the IPlatformCompat binder interface for
toggling multiple compat changes at once, and for clearing all the
overrides for a given package name.
Bug: 140367850
Test: http://aosp/1113771
Change-Id: I02d08d76e42da308856408dadc2c8c73c7ff20d1
Diffstat (limited to 'core/java')
3 files changed, 134 insertions, 1 deletions
diff --git a/core/java/com/android/internal/compat/CompatibilityChangeConfig.aidl b/core/java/com/android/internal/compat/CompatibilityChangeConfig.aidl new file mode 100644 index 000000000000..434c1b819582 --- /dev/null +++ b/core/java/com/android/internal/compat/CompatibilityChangeConfig.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.compat; + +parcelable CompatibilityChangeConfig; diff --git a/core/java/com/android/internal/compat/CompatibilityChangeConfig.java b/core/java/com/android/internal/compat/CompatibilityChangeConfig.java new file mode 100644 index 000000000000..fd2ada08edc1 --- /dev/null +++ b/core/java/com/android/internal/compat/CompatibilityChangeConfig.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.compat; + + +import android.compat.Compatibility.ChangeConfig; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.HashSet; +import java.util.Set; + +/** + * Parcelable containing compat config overrides for a given application. + * @hide + */ +public final class CompatibilityChangeConfig implements Parcelable { + private final ChangeConfig mChangeConfig; + + public CompatibilityChangeConfig(ChangeConfig changeConfig) { + mChangeConfig = changeConfig; + } + + /** + * Changes forced to be enabled. + */ + public Set<Long> enabledChanges() { + return mChangeConfig.forceEnabledSet(); + } + + /** + * Changes forced to be disabled. + */ + public Set<Long> disabledChanges() { + return mChangeConfig.forceDisabledSet(); + } + + private CompatibilityChangeConfig(Parcel in) { + long[] enabledArray = in.createLongArray(); + long[] disabledArray = in.createLongArray(); + Set<Long> enabled = toLongSet(enabledArray); + Set<Long> disabled = toLongSet(disabledArray); + mChangeConfig = new ChangeConfig(enabled, disabled); + } + + private static Set<Long> toLongSet(long[] values) { + Set<Long> ret = new HashSet<>(); + for (long value: values) { + ret.add(value); + } + return ret; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + long[] enabled = mChangeConfig.forceEnabledChangesArray(); + long[] disabled = mChangeConfig.forceDisabledChangesArray(); + + dest.writeLongArray(enabled); + dest.writeLongArray(disabled); + } + + public static final Parcelable.Creator<CompatibilityChangeConfig> CREATOR = + new Parcelable.Creator<CompatibilityChangeConfig>() { + + @Override + public CompatibilityChangeConfig createFromParcel(Parcel in) { + return new CompatibilityChangeConfig(in); + } + + @Override + public CompatibilityChangeConfig[] newArray(int size) { + return new CompatibilityChangeConfig[size]; + } + }; +} diff --git a/core/java/com/android/internal/compat/IPlatformCompat.aidl b/core/java/com/android/internal/compat/IPlatformCompat.aidl index 4d8378a34599..4099cfa51b33 100644 --- a/core/java/com/android/internal/compat/IPlatformCompat.aidl +++ b/core/java/com/android/internal/compat/IPlatformCompat.aidl @@ -18,6 +18,8 @@ package com.android.internal.compat; import android.content.pm.ApplicationInfo; +parcelable CompatibilityChangeConfig; + /** * Platform private API for talking with the PlatformCompat service. * @@ -125,4 +127,21 @@ interface IPlatformCompat * @return {@code true} if the change is enabled for the current app. */ boolean isChangeEnabledByUid(long changeId, int uid); -}
\ No newline at end of file + + /** + * Add overrides to compatibility changes. + * + * @param overrides Parcelable containing the compat change overrides to be applied. + * @param packageName The package name of the app whose changes will be overridden. + * + */ + void setOverrides(in CompatibilityChangeConfig overrides, in String packageName); + + /** + * Revert overrides to compatibility changes. + * + * @param packageName The package name of the app whose overrides will be cleared. + * + */ + void clearOverrides(in String packageName); +} |
