diff options
author | Anna Trostanetski <atrost@google.com> | 2019-10-22 13:20:59 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-22 13:20:59 -0700 |
commit | 4cfb3545d60a857042a643cc3143f7958ca9aced (patch) | |
tree | ba3b5779b955c6603dbd9e4f8446166e4f5498fd | |
parent | 06792d7c5c805369264ebfbc1c1a73893e8ceb21 (diff) | |
parent | 577e3114da0684f3f5eeecb77ec4f0e95ff5b0c1 (diff) | |
download | base-4cfb3545d60a857042a643cc3143f7958ca9aced.tar.gz |
Merge "Add a native aidl API."
am: 577e3114da
Change-Id: I22c7963991747fe1e27dce432da3fc02c644bbef
-rw-r--r-- | Android.bp | 3 | ||||
-rw-r--r-- | core/java/android/content/Context.java | 10 | ||||
-rw-r--r-- | native/android/Android.bp | 28 | ||||
-rw-r--r-- | native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl | 91 | ||||
-rw-r--r-- | services/core/java/com/android/server/compat/PlatformCompatNative.java | 50 | ||||
-rw-r--r-- | services/java/com/android/server/SystemServer.java | 7 |
6 files changed, 187 insertions, 2 deletions
diff --git a/Android.bp b/Android.bp index 53b1a641ebc1..2f8bf759f578 100644 --- a/Android.bp +++ b/Android.bp @@ -194,6 +194,9 @@ filegroup { ":PacProcessor-aidl-sources", ":ProxyHandler-aidl-sources", + // AIDL from frameworks/base/native/ + ":platform-compat-native-aidl", + // AIDL sources from external directories ":dumpstate_aidl", ":framework_native_aidl", diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index a6b95a95dcd8..51bb85a7fe8e 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -74,6 +74,7 @@ import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient; import android.view.textclassifier.TextClassificationManager; import com.android.internal.compat.IPlatformCompat; +import com.android.internal.compat.IPlatformCompatNative; import java.io.File; import java.io.FileInputStream; @@ -3231,6 +3232,7 @@ public abstract class Context { //@hide ROLE_CONTROLLER_SERVICE, CAMERA_SERVICE, //@hide: PLATFORM_COMPAT_SERVICE, + //@hide: PLATFORM_COMPAT_NATIVE_SERVICE, PRINT_SERVICE, CONSUMER_IR_SERVICE, //@hide: TRUST_SERVICE, @@ -4596,6 +4598,14 @@ public abstract class Context { 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. * @see #getSystemService(String) * @see android.os.BugreportManager diff --git a/native/android/Android.bp b/native/android/Android.bp index 7c1af4a81f9d..ae8cb3a47a05 100644 --- a/native/android/Android.bp +++ b/native/android/Android.bp @@ -110,3 +110,31 @@ llndk_library { symbol_file: "libandroid_net.map.txt", 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 diff --git a/native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl b/native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl new file mode 100644 index 000000000000..c022388e0aa8 --- /dev/null +++ b/native/android/aidl/com/android/internal/compat/IPlatformCompatNative.aidl @@ -0,0 +1,91 @@ +/* + * 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 diff --git a/services/core/java/com/android/server/compat/PlatformCompatNative.java b/services/core/java/com/android/server/compat/PlatformCompatNative.java new file mode 100644 index 000000000000..839967139baa --- /dev/null +++ b/services/core/java/com/android/server/compat/PlatformCompatNative.java @@ -0,0 +1,50 @@ +/* + * 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); + } +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 5c1dfef925cd..f465855017cd 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -89,6 +89,7 @@ import com.android.server.broadcastradio.BroadcastRadioService; import com.android.server.camera.CameraServiceProxy; import com.android.server.clipboard.ClipboardService; import com.android.server.compat.PlatformCompat; +import com.android.server.compat.PlatformCompatNative; import com.android.server.connectivity.IpConnectivityMetrics; import com.android.server.contentcapture.ContentCaptureManagerInternal; import com.android.server.coverage.CoverageService; @@ -639,8 +640,10 @@ public final class SystemServer { // Platform compat service is used by ActivityManagerService, PackageManagerService, and // possibly others in the future. b/135010838. traceBeginAndSlog("PlatformCompat"); - ServiceManager.addService(Context.PLATFORM_COMPAT_SERVICE, - new PlatformCompat(mSystemContext)); + PlatformCompat platformCompat = new PlatformCompat(mSystemContext); + ServiceManager.addService(Context.PLATFORM_COMPAT_SERVICE, platformCompat); + ServiceManager.addService(Context.PLATFORM_COMPAT_NATIVE_SERVICE, + new PlatformCompatNative(platformCompat)); traceEnd(); // Wait for installd to finish starting up so that it has a chance to |