Loading Android.bp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -194,6 +194,9 @@ filegroup { ":PacProcessor-aidl-sources", ":PacProcessor-aidl-sources", ":ProxyHandler-aidl-sources", ":ProxyHandler-aidl-sources", // AIDL from frameworks/base/native/ ":platform-compat-native-aidl", // AIDL sources from external directories // AIDL sources from external directories ":dumpstate_aidl", ":dumpstate_aidl", ":framework_native_aidl", ":framework_native_aidl", Loading core/java/android/content/Context.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,7 @@ import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassificationManager; import com.android.internal.compat.IPlatformCompat; import com.android.internal.compat.IPlatformCompat; import com.android.internal.compat.IPlatformCompatNative; import java.io.File; import java.io.File; import java.io.FileInputStream; import java.io.FileInputStream; Loading Loading @@ -3231,6 +3232,7 @@ public abstract class Context { //@hide ROLE_CONTROLLER_SERVICE, //@hide ROLE_CONTROLLER_SERVICE, CAMERA_SERVICE, CAMERA_SERVICE, //@hide: PLATFORM_COMPAT_SERVICE, //@hide: PLATFORM_COMPAT_SERVICE, //@hide: PLATFORM_COMPAT_NATIVE_SERVICE, PRINT_SERVICE, PRINT_SERVICE, CONSUMER_IR_SERVICE, CONSUMER_IR_SERVICE, //@hide: TRUST_SERVICE, //@hide: TRUST_SERVICE, Loading Loading @@ -4595,6 +4597,14 @@ public abstract class Context { */ */ public static final String PLATFORM_COMPAT_SERVICE = "platform_compat"; public static final String PLATFORM_COMPAT_SERVICE = "platform_compat"; /** * Use with {@link android.os.ServiceManager.getService()} to retrieve a * {@link IPlatformCompatNative} IBinder for native code communicating with the platform compat * service. * @hide */ public static final String PLATFORM_COMPAT_NATIVE_SERVICE = "platform_compat_native"; /** /** * Service to capture a bugreport. * Service to capture a bugreport. * @see #getSystemService(String) * @see #getSystemService(String) Loading native/android/Android.bp +28 −0 Original line number Original line Diff line number Diff line Loading @@ -110,3 +110,31 @@ llndk_library { symbol_file: "libandroid_net.map.txt", symbol_file: "libandroid_net.map.txt", unversioned: true, unversioned: true, } } // Aidl library for platform compat. cc_library_shared { name: "lib-platform-compat-native-api", defaults: ["libandroid_defaults"], shared_libs: [ "libbinder", "libutils", ], aidl: { local_include_dirs: ["aidl"], export_aidl_headers: true, }, srcs: [ ":platform-compat-native-aidl", ], export_include_dirs: ["aidl"], } filegroup { name: "platform-compat-native-aidl", srcs: [ "aidl/com/android/internal/compat/IPlatformCompatNative.aidl", ], path: "aidl", } No newline at end of file native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl 0 → 100644 +91 −0 Original line number Original line Diff line number Diff line /* * 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; /** * Platform native private API for talking with the PlatformCompat service. * * <p> Should be used for gating and logging from non-app processes running cpp code. * For app processes please use android.compat.Compatibility API. * * {@hide} */ interface IPlatformCompatNative { /** * Reports that a compatibility change is affecting an app process now. * * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, String)}, * you do not need to call this API directly. The change will be reported for you. * * @param changeId The ID of the compatibility change taking effect. * @param packageName The package name of the app in question. */ void reportChangeByPackageName(long changeId, @utf8InCpp String packageName); /** * Reports that a compatibility change is affecting an app process now. * * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, int)}, * you do not need to call this API directly. The change will be reported for you. * * @param changeId The ID of the compatibility change taking effect. * @param uid The UID of the app in question. */ void reportChangeByUid(long changeId, int uid); /** * Query if a given compatibility change is enabled for an app process. This method should * be called when implementing functionality on behalf of the affected app. * * <p>Returns {@code true} if there is no installed package by the provided package name. * * <p>If this method returns {@code true}, the calling code should implement the compatibility * change, resulting in differing behaviour compared to earlier releases. If this method * returns * {@code false}, the calling code should behave as it did in earlier releases. * * <p>It will also report the change as {@link #reportChange(long, String)} would, so there is * no need to call that method directly. * * @param changeId The ID of the compatibility change in question. * @param packageName The package name of the app in question. * @return {@code true} if the change is enabled for the current app. */ boolean isChangeEnabledByPackageName(long changeId, @utf8InCpp String packageName); /** * Query if a given compatibility change is enabled for an app process. This method should * be called when implementing functionality on behalf of the affected app. * * <p> Returns {@code true} if there are no installed packages for the required UID, or if the * change is enabled for ALL of the installed packages associated with the provided UID. Please * use a more specific API if you want a different behaviour for multi-package UIDs. * * <p>If this method returns {@code true}, the calling code should implement the compatibility * change, resulting in differing behaviour compared to earlier releases. If this method * returns {@code false}, the calling code should behave as it did in earlier releases. * * <p>It will also report the change as {@link #reportChange(long, int)} would, so there is * no need to call that method directly. * * @param changeId The ID of the compatibility change in question. * @param uid The UID of the app in question. * @return {@code true} if the change is enabled for the current app. */ boolean isChangeEnabledByUid(long changeId, int uid); } No newline at end of file services/core/java/com/android/server/compat/PlatformCompatNative.java 0 → 100644 +50 −0 Original line number Original line Diff line number Diff line /* * 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.server.compat; import com.android.internal.compat.IPlatformCompatNative; /** * @hide */ public class PlatformCompatNative extends IPlatformCompatNative.Stub { private final PlatformCompat mPlatformCompat; public PlatformCompatNative(PlatformCompat platformCompat) { mPlatformCompat = platformCompat; } @Override public void reportChangeByPackageName(long changeId, String packageName) { mPlatformCompat.reportChangeByPackageName(changeId, packageName); } @Override public void reportChangeByUid(long changeId, int uid) { mPlatformCompat.reportChangeByUid(changeId, uid); } @Override public boolean isChangeEnabledByPackageName(long changeId, String packageName) { return mPlatformCompat.isChangeEnabledByPackageName(changeId, packageName); } @Override public boolean isChangeEnabledByUid(long changeId, int uid) { return mPlatformCompat.isChangeEnabledByUid(changeId, uid); } } Loading
Android.bp +3 −0 Original line number Original line Diff line number Diff line Loading @@ -194,6 +194,9 @@ filegroup { ":PacProcessor-aidl-sources", ":PacProcessor-aidl-sources", ":ProxyHandler-aidl-sources", ":ProxyHandler-aidl-sources", // AIDL from frameworks/base/native/ ":platform-compat-native-aidl", // AIDL sources from external directories // AIDL sources from external directories ":dumpstate_aidl", ":dumpstate_aidl", ":framework_native_aidl", ":framework_native_aidl", Loading
core/java/android/content/Context.java +10 −0 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,7 @@ import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassificationManager; import com.android.internal.compat.IPlatformCompat; import com.android.internal.compat.IPlatformCompat; import com.android.internal.compat.IPlatformCompatNative; import java.io.File; import java.io.File; import java.io.FileInputStream; import java.io.FileInputStream; Loading Loading @@ -3231,6 +3232,7 @@ public abstract class Context { //@hide ROLE_CONTROLLER_SERVICE, //@hide ROLE_CONTROLLER_SERVICE, CAMERA_SERVICE, CAMERA_SERVICE, //@hide: PLATFORM_COMPAT_SERVICE, //@hide: PLATFORM_COMPAT_SERVICE, //@hide: PLATFORM_COMPAT_NATIVE_SERVICE, PRINT_SERVICE, PRINT_SERVICE, CONSUMER_IR_SERVICE, CONSUMER_IR_SERVICE, //@hide: TRUST_SERVICE, //@hide: TRUST_SERVICE, Loading Loading @@ -4595,6 +4597,14 @@ public abstract class Context { */ */ public static final String PLATFORM_COMPAT_SERVICE = "platform_compat"; public static final String PLATFORM_COMPAT_SERVICE = "platform_compat"; /** * Use with {@link android.os.ServiceManager.getService()} to retrieve a * {@link IPlatformCompatNative} IBinder for native code communicating with the platform compat * service. * @hide */ public static final String PLATFORM_COMPAT_NATIVE_SERVICE = "platform_compat_native"; /** /** * Service to capture a bugreport. * Service to capture a bugreport. * @see #getSystemService(String) * @see #getSystemService(String) Loading
native/android/Android.bp +28 −0 Original line number Original line Diff line number Diff line Loading @@ -110,3 +110,31 @@ llndk_library { symbol_file: "libandroid_net.map.txt", symbol_file: "libandroid_net.map.txt", unversioned: true, unversioned: true, } } // Aidl library for platform compat. cc_library_shared { name: "lib-platform-compat-native-api", defaults: ["libandroid_defaults"], shared_libs: [ "libbinder", "libutils", ], aidl: { local_include_dirs: ["aidl"], export_aidl_headers: true, }, srcs: [ ":platform-compat-native-aidl", ], export_include_dirs: ["aidl"], } filegroup { name: "platform-compat-native-aidl", srcs: [ "aidl/com/android/internal/compat/IPlatformCompatNative.aidl", ], path: "aidl", } No newline at end of file
native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl 0 → 100644 +91 −0 Original line number Original line Diff line number Diff line /* * 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; /** * Platform native private API for talking with the PlatformCompat service. * * <p> Should be used for gating and logging from non-app processes running cpp code. * For app processes please use android.compat.Compatibility API. * * {@hide} */ interface IPlatformCompatNative { /** * Reports that a compatibility change is affecting an app process now. * * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, String)}, * you do not need to call this API directly. The change will be reported for you. * * @param changeId The ID of the compatibility change taking effect. * @param packageName The package name of the app in question. */ void reportChangeByPackageName(long changeId, @utf8InCpp String packageName); /** * Reports that a compatibility change is affecting an app process now. * * <p>Note: for changes that are gated using {@link #isChangeEnabled(long, int)}, * you do not need to call this API directly. The change will be reported for you. * * @param changeId The ID of the compatibility change taking effect. * @param uid The UID of the app in question. */ void reportChangeByUid(long changeId, int uid); /** * Query if a given compatibility change is enabled for an app process. This method should * be called when implementing functionality on behalf of the affected app. * * <p>Returns {@code true} if there is no installed package by the provided package name. * * <p>If this method returns {@code true}, the calling code should implement the compatibility * change, resulting in differing behaviour compared to earlier releases. If this method * returns * {@code false}, the calling code should behave as it did in earlier releases. * * <p>It will also report the change as {@link #reportChange(long, String)} would, so there is * no need to call that method directly. * * @param changeId The ID of the compatibility change in question. * @param packageName The package name of the app in question. * @return {@code true} if the change is enabled for the current app. */ boolean isChangeEnabledByPackageName(long changeId, @utf8InCpp String packageName); /** * Query if a given compatibility change is enabled for an app process. This method should * be called when implementing functionality on behalf of the affected app. * * <p> Returns {@code true} if there are no installed packages for the required UID, or if the * change is enabled for ALL of the installed packages associated with the provided UID. Please * use a more specific API if you want a different behaviour for multi-package UIDs. * * <p>If this method returns {@code true}, the calling code should implement the compatibility * change, resulting in differing behaviour compared to earlier releases. If this method * returns {@code false}, the calling code should behave as it did in earlier releases. * * <p>It will also report the change as {@link #reportChange(long, int)} would, so there is * no need to call that method directly. * * @param changeId The ID of the compatibility change in question. * @param uid The UID of the app in question. * @return {@code true} if the change is enabled for the current app. */ boolean isChangeEnabledByUid(long changeId, int uid); } No newline at end of file
services/core/java/com/android/server/compat/PlatformCompatNative.java 0 → 100644 +50 −0 Original line number Original line Diff line number Diff line /* * 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.server.compat; import com.android.internal.compat.IPlatformCompatNative; /** * @hide */ public class PlatformCompatNative extends IPlatformCompatNative.Stub { private final PlatformCompat mPlatformCompat; public PlatformCompatNative(PlatformCompat platformCompat) { mPlatformCompat = platformCompat; } @Override public void reportChangeByPackageName(long changeId, String packageName) { mPlatformCompat.reportChangeByPackageName(changeId, packageName); } @Override public void reportChangeByUid(long changeId, int uid) { mPlatformCompat.reportChangeByUid(changeId, uid); } @Override public boolean isChangeEnabledByPackageName(long changeId, String packageName) { return mPlatformCompat.isChangeEnabledByPackageName(changeId, packageName); } @Override public boolean isChangeEnabledByUid(long changeId, int uid) { return mPlatformCompat.isChangeEnabledByUid(changeId, uid); } }