From 0b4f1718f882cbd0660ffaca99ace12925993fc9 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Thu, 21 Jan 2021 15:45:56 -0800 Subject: [PATCH 1/2] Move role into module. These changes have to be in this CL together because: - Code in service-permission depends on IRoleManager in framework-permission, so the APIs in framework-permission and the code in service-permission need to be moved together. - The changes to service-permission build rules doesn't make sense without the code moved in, so they have to be together as well. Other details: - framework-annotations: Several annotations are added into framework-annoatations. Since the discussion with API council seems to allow user IDs in system server in-process APIs, @UserIdInt and @AppIdInt is added. @MainThread and @AnyThread is added since @WorkerThread is already added. @CallSuper is added since @CheckResult is also already added and they are similar in terms of category of functionality. - framework-permission-s-shared-srcs: 3 classes (and 2 AIDL files) from framework is copied as shared source files and jarjared for framework-permission, and an additional 3 is added for service-permission as service-permission-shared-srcs. Similar to framework-wifi and service-wifi, the 3 classes in framework-permission is also available to service-permission by the stub library framework-permission-pre-jarjar, and the other 3 classes used only for service-permission is included separately to minimize our impact on classes loaded into boot classpath. framework-permission and service-permission shares the same jarjar rules to make sure the classes remain available, and for the same reason framework-permission cannot be shrank during any optimization. - framework-permission-s-shared: A java_library target for framework-permission-shared-srcs is created to make sure that the public classes won't be counted as APIs, as it would be if directly included as srcs for framework-permission java_sdk_library. service-permission-shared is the same thing for service-permission. - framework-permission-s: A new java_sdk_library target created to be loaded into bootclasspath by Android S+. - Dumpsys Protobuf: The dumpsys protobuf file (rolemanagerservice.proto) is moved into the module, and both the platform (incident.proto) and the module uses protoc-gen-javastream to generate the Java classes from it. This should be fine since it's a "source level inclusion", and we jarjar the generated classes in our module to avoid conflict with platform copies. Bug: 158736025 Test: manual Test: device boots, default apps can be changed successfully. Change-Id: I1914774f631e51d0c587a7e527a1c9bc05ee1595 --- Android.bp | 35 +++++++++++ apex/permission/Android.bp | 5 ++ apex/permission/framework-s/Android.bp | 25 ++++++++ apex/permission/framework-s/api/current.txt | 18 ++++++ .../framework-s/api/module-lib-current.txt | 10 ++++ .../framework-s/api/system-current.txt | 42 +++++++++++++ .../role/IOnRoleHoldersChangedListener.aidl | 0 .../android/app/role/IRoleController.aidl | 0 .../java/android/app/role/IRoleManager.aidl | 0 .../role/OnRoleHoldersChangedListener.java | 0 .../app/role/RoleControllerManager.java | 0 .../app/role/RoleControllerService.java | 0 .../app/role/RoleFrameworkInitializer.java | 3 +- .../java/android/app/role/RoleManager.java | 10 ++-- .../java/android/app/role/TEST_MAPPING | 0 apex/permission/jarjar-rules.txt | 5 ++ apex/permission/service/Android.bp | 60 +++++++++++++++++++ .../service/api/system-server-current.txt | 8 +++ .../permission}/compat/UserHandleCompat.java | 2 +- .../permission/compat/package-info.java} | 10 +--- .../android/permission}/util/ArrayUtils.java | 2 +- .../permission}/util/BackgroundThread.java | 2 +- .../permission}/util/CollectionUtils.java | 2 +- .../permission}/util/ForegroundThread.java | 2 +- .../permission/util}/ThrottledRunnable.java | 2 +- .../android/permission/util/package-info.java | 22 +++++++ .../com/android}/role/RoleManagerLocal.java | 5 +- .../java/com/android}/role/RoleService.java | 15 ++--- .../com/android}/role/RoleShellCommand.java | 4 +- .../java/com/android}/role/RoleUserState.java | 7 ++- .../java/com/android}/role/TEST_MAPPING | 0 .../java/com/android/role/package-info.java | 22 +++++++ .../proto/com/android/role/roleservice.proto | 4 +- core/api/current.txt | 18 ------ core/api/module-lib-current.txt | 8 --- core/api/system-current.txt | 36 ----------- core/api/test-current.txt | 10 ---- core/api/test-lint-baseline.txt | 16 ----- core/java/android/app/role/OWNERS | 4 -- core/proto/android/os/incident.proto | 4 +- services/api/current.txt | 17 ++++++ .../role/RoleServicePlatformHelper.java | 3 +- .../com/android/server/role/package-info.java | 22 +++++++ .../stats/pull/StatsPullAtomService.java | 2 +- .../java/com/android/server/SystemServer.java | 2 +- 45 files changed, 331 insertions(+), 133 deletions(-) rename {core => apex/permission/framework-s}/java/android/app/role/IOnRoleHoldersChangedListener.aidl (100%) rename {core => apex/permission/framework-s}/java/android/app/role/IRoleController.aidl (100%) rename {core => apex/permission/framework-s}/java/android/app/role/IRoleManager.aidl (100%) rename {core => apex/permission/framework-s}/java/android/app/role/OnRoleHoldersChangedListener.java (100%) rename {core => apex/permission/framework-s}/java/android/app/role/RoleControllerManager.java (100%) rename {core => apex/permission/framework-s}/java/android/app/role/RoleControllerService.java (100%) rename {core => apex/permission/framework-s}/java/android/app/role/RoleFrameworkInitializer.java (96%) rename {core => apex/permission/framework-s}/java/android/app/role/RoleManager.java (99%) rename {core => apex/permission/framework-s}/java/android/app/role/TEST_MAPPING (100%) create mode 100644 apex/permission/jarjar-rules.txt rename {services/core/java/com/android/server/role => apex/permission/service/java/com/android/permission}/compat/UserHandleCompat.java (97%) rename apex/permission/{framework-s/java/android/app/role/RoleFrameworkPlaceholder.java => service/java/com/android/permission/compat/package-info.java} (76%) rename {services/core/java/com/android/server/role => apex/permission/service/java/com/android/permission}/util/ArrayUtils.java (98%) rename {services/core/java/com/android/server/role => apex/permission/service/java/com/android/permission}/util/BackgroundThread.java (98%) rename {services/core/java/com/android/server/role => apex/permission/service/java/com/android/permission}/util/CollectionUtils.java (98%) rename {services/core/java/com/android/server/role => apex/permission/service/java/com/android/permission}/util/ForegroundThread.java (98%) rename {core/java/com/android/internal/infra => apex/permission/service/java/com/android/permission/util}/ThrottledRunnable.java (98%) create mode 100644 apex/permission/service/java/com/android/permission/util/package-info.java rename {services/core/java/com/android/server => apex/permission/service/java/com/android}/role/RoleManagerLocal.java (90%) rename {services/core/java/com/android/server => apex/permission/service/java/com/android}/role/RoleService.java (98%) rename {services/core/java/com/android/server => apex/permission/service/java/com/android}/role/RoleShellCommand.java (98%) rename {services/core/java/com/android/server => apex/permission/service/java/com/android}/role/RoleUserState.java (98%) rename {services/core/java/com/android/server => apex/permission/service/java/com/android}/role/TEST_MAPPING (100%) create mode 100644 apex/permission/service/java/com/android/role/package-info.java rename core/proto/android/server/rolemanagerservice.proto => apex/permission/service/proto/com/android/role/roleservice.proto (95%) delete mode 100644 core/java/android/app/role/OWNERS create mode 100644 services/core/java/com/android/server/role/package-info.java diff --git a/Android.bp b/Android.bp index c957aed4a8b92..d170913150c5f 100644 --- a/Android.bp +++ b/Android.bp @@ -761,6 +761,7 @@ gensrcs { ":libstats_atom_enum_protos", "core/proto/**/*.proto", "libs/incident/**/*.proto", + ":service-permission-protos", ], output_extension: "srcjar", } @@ -788,6 +789,7 @@ gensrcs { ":libstats_atom_enum_protos", "core/proto/**/*.proto", "libs/incident/**/*.proto", + ":service-permission-protos", ], output_extension: "proto.h", @@ -796,6 +798,9 @@ gensrcs { filegroup { name: "framework-annotations", srcs: [ + "core/java/android/annotation/AnyThread.java", + "core/java/android/annotation/AppIdInt.java", + "core/java/android/annotation/CallSuper.java", "core/java/android/annotation/CallbackExecutor.java", "core/java/android/annotation/CheckResult.java", "core/java/android/annotation/CurrentTimeMillisLong.java", @@ -803,6 +808,7 @@ filegroup { "core/java/android/annotation/IntDef.java", "core/java/android/annotation/IntRange.java", "core/java/android/annotation/LongDef.java", + "core/java/android/annotation/MainThread.java", "core/java/android/annotation/NonNull.java", "core/java/android/annotation/Nullable.java", "core/java/android/annotation/RequiresPermission.java", @@ -812,6 +818,7 @@ filegroup { "core/java/android/annotation/SystemApi.java", "core/java/android/annotation/SystemService.java", "core/java/android/annotation/TestApi.java", + "core/java/android/annotation/UserIdInt.java", "core/java/android/annotation/WorkerThread.java", "core/java/com/android/internal/annotations/GuardedBy.java", "core/java/com/android/internal/annotations/VisibleForTesting.java", @@ -906,6 +913,30 @@ filegroup { ], } +// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module. +filegroup { + name: "framework-permission-s-shared-srcs", + srcs: [ + "core/java/com/android/internal/infra/AndroidFuture.java", + "core/java/com/android/internal/infra/ServiceConnector.java", + "core/java/com/android/internal/util/Preconditions.java", + "core/java/com/android/internal/infra/AndroidFuture.aidl", + "core/java/com/android/internal/infra/IAndroidFuture.aidl", + "core/java/android/os/HandlerExecutor.java", + ], + path: "core/java", +} + +// Keep these files in sync with the apex/permission/jarjar-rules.txt for the permission module. +filegroup { + name: "service-permission-shared-srcs", + srcs: [ + "core/java/android/util/IndentingPrintWriter.java", + "core/java/com/android/internal/util/dump/DualDumpOutputStream.java", + ], + path: "core/java", +} + // Build ext.jar // ============================================================ java_library { @@ -932,6 +963,7 @@ java_library_host { "cmds/statsd/src/**/*.proto", "core/proto/**/*.proto", "libs/incident/proto/**/*.proto", + ":service-permission-protos", ], proto: { include_dirs: [ @@ -965,6 +997,7 @@ java_library { ":libstats_atom_enum_protos", "core/proto/**/*.proto", "libs/incident/proto/android/os/**/*.proto", + ":service-permission-protos", ], } @@ -981,6 +1014,7 @@ java_library { ":libstats_atom_enum_protos", "core/proto/**/*.proto", "libs/incident/proto/android/os/**/*.proto", + ":service-permission-protos", ], exclude_srcs: [ "core/proto/android/privacy.proto", @@ -1015,6 +1049,7 @@ cc_defaults { ":ipconnectivity-proto-src", ":libstats_atom_enum_protos", "core/proto/**/*.proto", + ":service-permission-protos", ], } diff --git a/apex/permission/Android.bp b/apex/permission/Android.bp index d839df3708da5..be51143e47305 100644 --- a/apex/permission/Android.bp +++ b/apex/permission/Android.bp @@ -42,3 +42,8 @@ android_app_certificate { name: "com.android.permission.certificate", certificate: "com.android.permission", } + +filegroup { + name: "permission-jarjar-rules", + srcs: ["jarjar-rules.txt"], +} diff --git a/apex/permission/framework-s/Android.bp b/apex/permission/framework-s/Android.bp index c621a04cad491..89840f74b0986 100644 --- a/apex/permission/framework-s/Android.bp +++ b/apex/permission/framework-s/Android.bp @@ -22,12 +22,34 @@ filegroup { visibility: ["//frameworks/base"], } +java_library { + name: "framework-permission-s-shared", + srcs: [":framework-permission-s-shared-srcs"], + libs: [ + "framework-annotations-lib", + "unsupportedappusage", + ], + apex_available: [ + "com.android.permission", + "test_com.android.permission", + ], + installable: false, + min_sdk_version: "30", + sdk_version: "module_current", +} + java_sdk_library { name: "framework-permission-s", defaults: ["framework-module-defaults"], srcs: [ ":framework-permission-s-sources", ], + libs: [ + "framework-annotations-lib" + ], + static_libs: [ + "framework-permission-s-shared", + ], apex_available: [ "com.android.permission", "test_com.android.permission", @@ -36,9 +58,12 @@ java_sdk_library { // Restrict access to implementation library. impl_library_visibility: ["//frameworks/base/apex/permission:__subpackages__"], installable: true, + jarjar_rules: ":permission-jarjar-rules", min_sdk_version: "30", permitted_packages: [ "android.permission", "android.app.role", + // For com.android.permission.jarjar. + "com.android.permission", ], } diff --git a/apex/permission/framework-s/api/current.txt b/apex/permission/framework-s/api/current.txt index d802177e249b3..4ecc98980c439 100644 --- a/apex/permission/framework-s/api/current.txt +++ b/apex/permission/framework-s/api/current.txt @@ -1 +1,19 @@ // Signature format: 2.0 +package android.app.role { + + public final class RoleManager { + method @NonNull public android.content.Intent createRequestRoleIntent(@NonNull String); + method public boolean isRoleAvailable(@NonNull String); + method public boolean isRoleHeld(@NonNull String); + field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT"; + field public static final String ROLE_BROWSER = "android.app.role.BROWSER"; + field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION"; + field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING"; + field public static final String ROLE_DIALER = "android.app.role.DIALER"; + field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY"; + field public static final String ROLE_HOME = "android.app.role.HOME"; + field public static final String ROLE_SMS = "android.app.role.SMS"; + } + +} + diff --git a/apex/permission/framework-s/api/module-lib-current.txt b/apex/permission/framework-s/api/module-lib-current.txt index d802177e249b3..d7c9a2395c043 100644 --- a/apex/permission/framework-s/api/module-lib-current.txt +++ b/apex/permission/framework-s/api/module-lib-current.txt @@ -1 +1,11 @@ // Signature format: 2.0 +package android.app.role { + + public final class RoleManager { + method @Nullable public String getBrowserRoleHolder(int); + method @Nullable public String getSmsRoleHolder(int); + method @Nullable @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public boolean setBrowserRoleHolder(@Nullable String, int); + } + +} + diff --git a/apex/permission/framework-s/api/system-current.txt b/apex/permission/framework-s/api/system-current.txt index d802177e249b3..e87f124453b4f 100644 --- a/apex/permission/framework-s/api/system-current.txt +++ b/apex/permission/framework-s/api/system-current.txt @@ -1 +1,43 @@ // Signature format: 2.0 +package android.app.role { + + public interface OnRoleHoldersChangedListener { + method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); + } + + public abstract class RoleControllerService extends android.app.Service { + ctor public RoleControllerService(); + method @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int); + method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); + method @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int); + method @WorkerThread public abstract boolean onGrantDefaultRoles(); + method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String); + method public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String); + method public abstract boolean onIsRoleVisible(@NonNull String); + method @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int); + field public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService"; + } + + public class RoleFrameworkInitializer { + method public static void registerServiceWrappers(); + } + + public final class RoleManager { + method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List getHeldRolesFromController(@NonNull String); + method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHolders(@NonNull String); + method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); + method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List); + field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1 + } + +} + diff --git a/core/java/android/app/role/IOnRoleHoldersChangedListener.aidl b/apex/permission/framework-s/java/android/app/role/IOnRoleHoldersChangedListener.aidl similarity index 100% rename from core/java/android/app/role/IOnRoleHoldersChangedListener.aidl rename to apex/permission/framework-s/java/android/app/role/IOnRoleHoldersChangedListener.aidl diff --git a/core/java/android/app/role/IRoleController.aidl b/apex/permission/framework-s/java/android/app/role/IRoleController.aidl similarity index 100% rename from core/java/android/app/role/IRoleController.aidl rename to apex/permission/framework-s/java/android/app/role/IRoleController.aidl diff --git a/core/java/android/app/role/IRoleManager.aidl b/apex/permission/framework-s/java/android/app/role/IRoleManager.aidl similarity index 100% rename from core/java/android/app/role/IRoleManager.aidl rename to apex/permission/framework-s/java/android/app/role/IRoleManager.aidl diff --git a/core/java/android/app/role/OnRoleHoldersChangedListener.java b/apex/permission/framework-s/java/android/app/role/OnRoleHoldersChangedListener.java similarity index 100% rename from core/java/android/app/role/OnRoleHoldersChangedListener.java rename to apex/permission/framework-s/java/android/app/role/OnRoleHoldersChangedListener.java diff --git a/core/java/android/app/role/RoleControllerManager.java b/apex/permission/framework-s/java/android/app/role/RoleControllerManager.java similarity index 100% rename from core/java/android/app/role/RoleControllerManager.java rename to apex/permission/framework-s/java/android/app/role/RoleControllerManager.java diff --git a/core/java/android/app/role/RoleControllerService.java b/apex/permission/framework-s/java/android/app/role/RoleControllerService.java similarity index 100% rename from core/java/android/app/role/RoleControllerService.java rename to apex/permission/framework-s/java/android/app/role/RoleControllerService.java diff --git a/core/java/android/app/role/RoleFrameworkInitializer.java b/apex/permission/framework-s/java/android/app/role/RoleFrameworkInitializer.java similarity index 96% rename from core/java/android/app/role/RoleFrameworkInitializer.java rename to apex/permission/framework-s/java/android/app/role/RoleFrameworkInitializer.java index 15a324f050c8f..7a97770ecf0fe 100644 --- a/core/java/android/app/role/RoleFrameworkInitializer.java +++ b/apex/permission/framework-s/java/android/app/role/RoleFrameworkInitializer.java @@ -16,6 +16,7 @@ package android.app.role; +import android.annotation.SystemApi; import android.app.SystemServiceRegistry; import android.content.Context; @@ -24,7 +25,7 @@ import android.content.Context; * * @hide */ -//@SystemApi +@SystemApi public class RoleFrameworkInitializer { private RoleFrameworkInitializer() {} diff --git a/core/java/android/app/role/RoleManager.java b/apex/permission/framework-s/java/android/app/role/RoleManager.java similarity index 99% rename from core/java/android/app/role/RoleManager.java rename to apex/permission/framework-s/java/android/app/role/RoleManager.java index 73f9c747b074c..e545a75ca64f9 100644 --- a/core/java/android/app/role/RoleManager.java +++ b/apex/permission/framework-s/java/android/app/role/RoleManager.java @@ -24,7 +24,6 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; -import android.annotation.TestApi; import android.annotation.UserIdInt; import android.content.Context; import android.content.Intent; @@ -630,7 +629,7 @@ public final class RoleManager { * @hide */ @Nullable - //@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public String getBrowserRoleHolder(@UserIdInt int userId) { try { return mService.getBrowserRoleHolder(userId); @@ -653,7 +652,7 @@ public final class RoleManager { */ @Nullable @RequiresPermission(Manifest.permission.SET_PREFERRED_APPLICATIONS) - //@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) + @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public boolean setBrowserRoleHolder(@Nullable String packageName, @UserIdInt int userId) { try { return mService.setBrowserRoleHolder(packageName, userId); @@ -674,7 +673,6 @@ public final class RoleManager { */ @Nullable @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) - @TestApi public String getSmsRoleHolder(@UserIdInt int userId) { try { return mService.getSmsRoleHolder(userId); @@ -693,7 +691,7 @@ public final class RoleManager { * @hide */ @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) - @TestApi + @SystemApi public void isRoleVisible(@NonNull String roleName, @NonNull @CallbackExecutor Executor executor, @NonNull Consumer callback) { getRoleControllerManager().isRoleVisible(roleName, executor, callback); @@ -714,7 +712,7 @@ public final class RoleManager { * @hide */ @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) - @TestApi + @SystemApi public void isApplicationVisibleForRole(@NonNull String roleName, @NonNull String packageName, @NonNull @CallbackExecutor Executor executor, @NonNull Consumer callback) { getRoleControllerManager().isApplicationVisibleForRole(roleName, packageName, executor, diff --git a/core/java/android/app/role/TEST_MAPPING b/apex/permission/framework-s/java/android/app/role/TEST_MAPPING similarity index 100% rename from core/java/android/app/role/TEST_MAPPING rename to apex/permission/framework-s/java/android/app/role/TEST_MAPPING diff --git a/apex/permission/jarjar-rules.txt b/apex/permission/jarjar-rules.txt new file mode 100644 index 0000000000000..4729ed13dc4c7 --- /dev/null +++ b/apex/permission/jarjar-rules.txt @@ -0,0 +1,5 @@ +rule android.os.HandlerExecutor com.android.permission.jarjar.@0 +rule android.util.IndentingPrintWriter com.android.permission.jarjar.@0 +rule com.android.internal.** com.android.permission.jarjar.@0 +rule com.android.modules.** com.android.permission.jarjar.@0 +rule com.android.role.*Proto com.android.permission.jarjar.@0 diff --git a/apex/permission/service/Android.bp b/apex/permission/service/Android.bp index 349eeb422401b..b7f8082145075 100644 --- a/apex/permission/service/Android.bp +++ b/apex/permission/service/Android.bp @@ -21,6 +21,56 @@ filegroup { visibility: ["//frameworks/base/services"], } +filegroup { + name: "service-permission-protos", + srcs: [ + "proto/**/*.proto", + ], + visibility: ["//frameworks/base"], +} + +gensrcs { + name: "service-permission-javastream-protos", + depfile: true, + + tools: [ + "aprotoc", + "protoc-gen-javastream", + "soong_zip", + ], + + cmd: "mkdir -p $(genDir)/$(in) " + + "&& $(location aprotoc) " + + " --plugin=$(location protoc-gen-javastream) " + + " --dependency_out=$(depfile) " + + " --javastream_out=$(genDir)/$(in) " + + " -Iexternal/protobuf/src " + + " -I . " + + " $(in) " + + "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)", + + srcs: [ + ":service-permission-protos", + ], + output_extension: "srcjar", +} + +java_library { + name: "service-permission-shared", + srcs: [":service-permission-shared-srcs"], + libs: [ + "framework-annotations-lib", + "framework-permission-s-shared", + ], + apex_available: [ + "com.android.permission", + "test_com.android.permission", + ], + installable: false, + min_sdk_version: "30", + sdk_version: "system_server_current", +} + java_sdk_library { name: "service-permission", defaults: ["framework-system-server-module-defaults"], @@ -31,10 +81,20 @@ java_sdk_library { ], srcs: [ ":service-permission-sources", + ":service-permission-javastream-protos", ], libs: [ "framework-permission", + "framework-permission-s.impl", + "framework-permission-s-shared", ], + static_libs: [ + "modules-utils-os", + "service-permission-shared", + ], + jarjar_rules: ":permission-jarjar-rules", + min_sdk_version: "30", + sdk_version: "system_server_current", apex_available: [ "com.android.permission", "test_com.android.permission", diff --git a/apex/permission/service/api/system-server-current.txt b/apex/permission/service/api/system-server-current.txt index c76cc3275737e..b1869c2c731dd 100644 --- a/apex/permission/service/api/system-server-current.txt +++ b/apex/permission/service/api/system-server-current.txt @@ -26,6 +26,14 @@ package com.android.permission.persistence { } +package com.android.role { + + public interface RoleManagerLocal { + method @NonNull public java.util.Map> getRolesAndHolders(int); + } + +} + package com.android.role.persistence { public interface RolesPersistence { diff --git a/services/core/java/com/android/server/role/compat/UserHandleCompat.java b/apex/permission/service/java/com/android/permission/compat/UserHandleCompat.java similarity index 97% rename from services/core/java/com/android/server/role/compat/UserHandleCompat.java rename to apex/permission/service/java/com/android/permission/compat/UserHandleCompat.java index 8f14c1fcfca73..7c711d301f00e 100644 --- a/services/core/java/com/android/server/role/compat/UserHandleCompat.java +++ b/apex/permission/service/java/com/android/permission/compat/UserHandleCompat.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role.compat; +package com.android.permission.compat; import android.annotation.UserIdInt; import android.os.UserHandle; diff --git a/apex/permission/framework-s/java/android/app/role/RoleFrameworkPlaceholder.java b/apex/permission/service/java/com/android/permission/compat/package-info.java similarity index 76% rename from apex/permission/framework-s/java/android/app/role/RoleFrameworkPlaceholder.java rename to apex/permission/service/java/com/android/permission/compat/package-info.java index fb7ba3eee2b4b..c89cc8eabb92a 100644 --- a/apex/permission/framework-s/java/android/app/role/RoleFrameworkPlaceholder.java +++ b/apex/permission/service/java/com/android/permission/compat/package-info.java @@ -14,13 +14,9 @@ * limitations under the License. */ -package android.app.role; - /** - * Temporary placeholder class inside framework-permission-s for compilation to pass. - * * @hide + * TODO(b/146466118) remove this javadoc tag */ -public class RoleFrameworkPlaceholder { - private RoleFrameworkPlaceholder() {} -} +@android.annotation.Hide +package com.android.permission.compat; diff --git a/services/core/java/com/android/server/role/util/ArrayUtils.java b/apex/permission/service/java/com/android/permission/util/ArrayUtils.java similarity index 98% rename from services/core/java/com/android/server/role/util/ArrayUtils.java rename to apex/permission/service/java/com/android/permission/util/ArrayUtils.java index 8b7c07b7473c4..5d5cd78201bdd 100644 --- a/services/core/java/com/android/server/role/util/ArrayUtils.java +++ b/apex/permission/service/java/com/android/permission/util/ArrayUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role.util; +package com.android.permission.util; import android.annotation.Nullable; diff --git a/services/core/java/com/android/server/role/util/BackgroundThread.java b/apex/permission/service/java/com/android/permission/util/BackgroundThread.java similarity index 98% rename from services/core/java/com/android/server/role/util/BackgroundThread.java rename to apex/permission/service/java/com/android/permission/util/BackgroundThread.java index 385595b950ab9..7308eec985008 100644 --- a/services/core/java/com/android/server/role/util/BackgroundThread.java +++ b/apex/permission/service/java/com/android/permission/util/BackgroundThread.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role.util; +package com.android.permission.util; import android.annotation.NonNull; import android.os.Handler; diff --git a/services/core/java/com/android/server/role/util/CollectionUtils.java b/apex/permission/service/java/com/android/permission/util/CollectionUtils.java similarity index 98% rename from services/core/java/com/android/server/role/util/CollectionUtils.java rename to apex/permission/service/java/com/android/permission/util/CollectionUtils.java index f924fbc39177b..ea49524041790 100644 --- a/services/core/java/com/android/server/role/util/CollectionUtils.java +++ b/apex/permission/service/java/com/android/permission/util/CollectionUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role.util; +package com.android.permission.util; import android.annotation.Nullable; diff --git a/services/core/java/com/android/server/role/util/ForegroundThread.java b/apex/permission/service/java/com/android/permission/util/ForegroundThread.java similarity index 98% rename from services/core/java/com/android/server/role/util/ForegroundThread.java rename to apex/permission/service/java/com/android/permission/util/ForegroundThread.java index 05da59e7c4eff..cd6f6057030b0 100644 --- a/services/core/java/com/android/server/role/util/ForegroundThread.java +++ b/apex/permission/service/java/com/android/permission/util/ForegroundThread.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role.util; +package com.android.permission.util; import android.annotation.NonNull; import android.os.Handler; diff --git a/core/java/com/android/internal/infra/ThrottledRunnable.java b/apex/permission/service/java/com/android/permission/util/ThrottledRunnable.java similarity index 98% rename from core/java/com/android/internal/infra/ThrottledRunnable.java rename to apex/permission/service/java/com/android/permission/util/ThrottledRunnable.java index 9846fa9815ecd..ba1c3939f73ea 100644 --- a/core/java/com/android/internal/infra/ThrottledRunnable.java +++ b/apex/permission/service/java/com/android/permission/util/ThrottledRunnable.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.internal.infra; +package com.android.permission.util; import android.annotation.NonNull; import android.os.Handler; diff --git a/apex/permission/service/java/com/android/permission/util/package-info.java b/apex/permission/service/java/com/android/permission/util/package-info.java new file mode 100644 index 0000000000000..18fada534424b --- /dev/null +++ b/apex/permission/service/java/com/android/permission/util/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 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. + */ + +/** + * @hide + * TODO(b/146466118) remove this javadoc tag + */ +@android.annotation.Hide +package com.android.permission.util; diff --git a/services/core/java/com/android/server/role/RoleManagerLocal.java b/apex/permission/service/java/com/android/role/RoleManagerLocal.java similarity index 90% rename from services/core/java/com/android/server/role/RoleManagerLocal.java rename to apex/permission/service/java/com/android/role/RoleManagerLocal.java index f11d99d43061a..e243e2e0db66c 100644 --- a/services/core/java/com/android/server/role/RoleManagerLocal.java +++ b/apex/permission/service/java/com/android/role/RoleManagerLocal.java @@ -14,9 +14,10 @@ * limitations under the License. */ -package com.android.server.role; +package com.android.role; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.annotation.UserIdInt; import java.util.Map; @@ -27,7 +28,7 @@ import java.util.Set; * * @hide */ -//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) +@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) public interface RoleManagerLocal { /** * Get all roles and their holders. diff --git a/services/core/java/com/android/server/role/RoleService.java b/apex/permission/service/java/com/android/role/RoleService.java similarity index 98% rename from services/core/java/com/android/server/role/RoleService.java rename to apex/permission/service/java/com/android/role/RoleService.java index 944ebf0f77c05..5f7eb22a42a70 100644 --- a/services/core/java/com/android/server/role/RoleService.java +++ b/apex/permission/service/java/com/android/role/RoleService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role; +package com.android.role; import android.Manifest; import android.annotation.AnyThread; @@ -51,15 +51,16 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.AndroidFuture; -import com.android.internal.infra.ThrottledRunnable; import com.android.internal.util.Preconditions; import com.android.internal.util.dump.DualDumpOutputStream; +import com.android.permission.compat.UserHandleCompat; +import com.android.permission.util.ArrayUtils; +import com.android.permission.util.CollectionUtils; +import com.android.permission.util.ForegroundThread; +import com.android.permission.util.ThrottledRunnable; import com.android.server.LocalManagerRegistry; import com.android.server.SystemService; -import com.android.server.role.compat.UserHandleCompat; -import com.android.server.role.util.ArrayUtils; -import com.android.server.role.util.CollectionUtils; -import com.android.server.role.util.ForegroundThread; +import com.android.server.role.RoleServicePlatformHelper; import java.io.FileDescriptor; import java.io.FileOutputStream; @@ -701,7 +702,7 @@ public class RoleService extends SystemService implements RoleUserState.Callback final RoleUserState userState = mUserStates.valueAt(i); userState.dump(dumpOutputStream, "user_states", - RoleManagerServiceDumpProto.USER_STATES); + RoleServiceDumpProto.USER_STATES); } } diff --git a/services/core/java/com/android/server/role/RoleShellCommand.java b/apex/permission/service/java/com/android/role/RoleShellCommand.java similarity index 98% rename from services/core/java/com/android/server/role/RoleShellCommand.java rename to apex/permission/service/java/com/android/role/RoleShellCommand.java index 6e0d81a605f31..03b7c76d2df5b 100644 --- a/services/core/java/com/android/server/role/RoleShellCommand.java +++ b/apex/permission/service/java/com/android/role/RoleShellCommand.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role; +package com.android.role; import android.annotation.NonNull; import android.annotation.Nullable; @@ -23,7 +23,7 @@ import android.os.RemoteCallback; import android.os.RemoteException; import com.android.modules.utils.BasicShellCommandHandler; -import com.android.server.role.compat.UserHandleCompat; +import com.android.permission.compat.UserHandleCompat; import java.io.PrintWriter; import java.util.concurrent.CompletableFuture; diff --git a/services/core/java/com/android/server/role/RoleUserState.java b/apex/permission/service/java/com/android/role/RoleUserState.java similarity index 98% rename from services/core/java/com/android/server/role/RoleUserState.java rename to apex/permission/service/java/com/android/role/RoleUserState.java index 52861c5e59e46..78d8d15bbe604 100644 --- a/services/core/java/com/android/server/role/RoleUserState.java +++ b/apex/permission/service/java/com/android/role/RoleUserState.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.role; +package com.android.role; import android.annotation.CheckResult; import android.annotation.NonNull; @@ -29,10 +29,11 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.dump.DualDumpOutputStream; +import com.android.permission.util.BackgroundThread; +import com.android.permission.util.CollectionUtils; import com.android.role.persistence.RolesPersistence; import com.android.role.persistence.RolesState; -import com.android.server.role.util.BackgroundThread; -import com.android.server.role.util.CollectionUtils; +import com.android.server.role.RoleServicePlatformHelper; import java.util.ArrayList; import java.util.List; diff --git a/services/core/java/com/android/server/role/TEST_MAPPING b/apex/permission/service/java/com/android/role/TEST_MAPPING similarity index 100% rename from services/core/java/com/android/server/role/TEST_MAPPING rename to apex/permission/service/java/com/android/role/TEST_MAPPING diff --git a/apex/permission/service/java/com/android/role/package-info.java b/apex/permission/service/java/com/android/role/package-info.java new file mode 100644 index 0000000000000..8b5b2516105fe --- /dev/null +++ b/apex/permission/service/java/com/android/role/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 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. + */ + +/** + * @hide + * TODO(b/146466118) remove this javadoc tag + */ +@android.annotation.Hide +package com.android.role; diff --git a/core/proto/android/server/rolemanagerservice.proto b/apex/permission/service/proto/com/android/role/roleservice.proto similarity index 95% rename from core/proto/android/server/rolemanagerservice.proto rename to apex/permission/service/proto/com/android/role/roleservice.proto index 146522ce9c8b4..79c42299207c1 100644 --- a/core/proto/android/server/rolemanagerservice.proto +++ b/apex/permission/service/proto/com/android/role/roleservice.proto @@ -16,13 +16,13 @@ syntax = "proto2"; -package com.android.server.role; +package com.android.role; option java_multiple_files = true; import "frameworks/base/core/proto/android/privacy.proto"; -message RoleManagerServiceDumpProto { +message RoleServiceDumpProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; // List of per-user states for all users. diff --git a/core/api/current.txt b/core/api/current.txt index 03ec4167c6807..e0e2762cdd569 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7907,24 +7907,6 @@ package android.app.people { } -package android.app.role { - - public final class RoleManager { - method @NonNull public android.content.Intent createRequestRoleIntent(@NonNull String); - method public boolean isRoleAvailable(@NonNull String); - method public boolean isRoleHeld(@NonNull String); - field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT"; - field public static final String ROLE_BROWSER = "android.app.role.BROWSER"; - field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION"; - field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING"; - field public static final String ROLE_DIALER = "android.app.role.DIALER"; - field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY"; - field public static final String ROLE_HOME = "android.app.role.HOME"; - field public static final String ROLE_SMS = "android.app.role.SMS"; - } - -} - package android.app.slice { public final class Slice implements android.os.Parcelable { diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index 5d61aca0a123a..4acbf74aafe49 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -32,14 +32,6 @@ package android.app { } -package android.app.role { - - public final class RoleManager { - method @Nullable public String getSmsRoleHolder(int); - } - -} - package android.content { public abstract class Context { diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 802e4ab5a7177..96069f93c2fe9 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1357,42 +1357,6 @@ package android.app.prediction { } -package android.app.role { - - public interface OnRoleHoldersChangedListener { - method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); - } - - public abstract class RoleControllerService extends android.app.Service { - ctor public RoleControllerService(); - method @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int); - method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); - method @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int); - method @WorkerThread public abstract boolean onGrantDefaultRoles(); - method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String); - method public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String); - method public abstract boolean onIsRoleVisible(@NonNull String); - method @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int); - field public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService"; - } - - public final class RoleManager { - method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); - method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String); - method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List getHeldRolesFromController(@NonNull String); - method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHolders(@NonNull String); - method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); - method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); - method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List); - field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1 - } - -} - package android.app.search { public final class Query implements android.os.Parcelable { diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 2efa87e4d793f..d6abbeca44808 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -544,16 +544,6 @@ package android.app.prediction { } -package android.app.role { - - public final class RoleManager { - method @Nullable public String getSmsRoleHolder(int); - method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - } - -} - package android.app.usage { public class NetworkStatsManager { diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt index 216d340690833..3c67e44ff41f4 100644 --- a/core/api/test-lint-baseline.txt +++ b/core/api/test-lint-baseline.txt @@ -2843,10 +2843,6 @@ RethrowRemoteException: android.telephony.mbms.vendor.MbmsStreamingServiceBase#s SamShouldBeLast: android.app.ActivityManager#addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int): -SamShouldBeLast: android.app.role.RoleManager#addOnRoleHoldersChangedListenerAsUser(java.util.concurrent.Executor, android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle): - -SamShouldBeLast: android.app.role.RoleManager#removeOnRoleHoldersChangedListenerAsUser(android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle): - SamShouldBeLast: android.database.sqlite.SQLiteDebug#dump(android.util.Printer, String[]): SamShouldBeLast: android.database.sqlite.SQLiteDirectCursorDriver#query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]): @@ -2973,18 +2969,6 @@ UserHandle: android.app.ActivityManager#switchUser(android.os.UserHandle): UserHandle: android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts(android.os.UserHandle): -UserHandle: android.app.role.RoleManager#addOnRoleHoldersChangedListenerAsUser(java.util.concurrent.Executor, android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle): - -UserHandle: android.app.role.RoleManager#addRoleHolderAsUser(String, String, int, android.os.UserHandle, java.util.concurrent.Executor, java.util.function.Consumer): - -UserHandle: android.app.role.RoleManager#clearRoleHoldersAsUser(String, int, android.os.UserHandle, java.util.concurrent.Executor, java.util.function.Consumer): - -UserHandle: android.app.role.RoleManager#getRoleHoldersAsUser(String, android.os.UserHandle): - -UserHandle: android.app.role.RoleManager#removeOnRoleHoldersChangedListenerAsUser(android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle): - -UserHandle: android.app.role.RoleManager#removeRoleHolderAsUser(String, String, int, android.os.UserHandle, java.util.concurrent.Executor, java.util.function.Consumer): - UserHandle: android.app.usage.StorageStatsManager#queryCratesForPackage(java.util.UUID, String, android.os.UserHandle): UserHandle: android.app.usage.StorageStatsManager#queryCratesForUser(java.util.UUID, android.os.UserHandle): diff --git a/core/java/android/app/role/OWNERS b/core/java/android/app/role/OWNERS deleted file mode 100644 index b807636658eb4..0000000000000 --- a/core/java/android/app/role/OWNERS +++ /dev/null @@ -1,4 +0,0 @@ -# Bug component: 137825 - -zhanghai@google.com -moltmann@google.com diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 944edb0ff7509..48094198c2e95 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -41,7 +41,7 @@ import "frameworks/base/core/proto/android/server/jobscheduler.proto"; import "frameworks/base/core/proto/android/server/location/context_hub.proto"; import "frameworks/base/core/proto/android/server/powermanagerservice.proto"; import "frameworks/base/core/proto/android/server/powerstatsservice.proto"; -import "frameworks/base/core/proto/android/server/rolemanagerservice.proto"; +import "frameworks/base/apex/permission/service/proto/com/android/role/roleservice.proto"; import "frameworks/base/core/proto/android/server/windowmanagerservice.proto"; import "frameworks/base/core/proto/android/service/appwidget.proto"; import "frameworks/base/core/proto/android/service/battery.proto"; @@ -362,7 +362,7 @@ message IncidentProto { (section).userdebug_and_eng_only = true ]; - optional com.android.server.role.RoleManagerServiceDumpProto role = 3024 [ + optional com.android.role.RoleServiceDumpProto role = 3024 [ (section).type = SECTION_DUMPSYS, (section).args = "role --proto" ]; diff --git a/services/api/current.txt b/services/api/current.txt index 17ca369c62aba..7e8f7a20bd647 100644 --- a/services/api/current.txt +++ b/services/api/current.txt @@ -26,6 +26,14 @@ package com.android.permission.persistence { } +package com.android.role { + + public interface RoleManagerLocal { + method @NonNull public java.util.Map> getRolesAndHolders(int); + } + +} + package com.android.role.persistence { public interface RolesPersistence { @@ -80,6 +88,15 @@ package com.android.server { } +package com.android.server.role { + + public interface RoleServicePlatformHelper { + method @NonNull public String computePackageStateHash(int); + method @NonNull public java.util.Map> getLegacyRoleState(int); + } + +} + package com.android.server.wifi { public class SupplicantManager { diff --git a/services/core/java/com/android/server/role/RoleServicePlatformHelper.java b/services/core/java/com/android/server/role/RoleServicePlatformHelper.java index d804d130fc6b8..8f4cc023dc27d 100644 --- a/services/core/java/com/android/server/role/RoleServicePlatformHelper.java +++ b/services/core/java/com/android/server/role/RoleServicePlatformHelper.java @@ -17,6 +17,7 @@ package com.android.server.role; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.annotation.UserIdInt; import java.util.Map; @@ -27,7 +28,7 @@ import java.util.Set; * * @hide */ -//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) +@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) public interface RoleServicePlatformHelper { /** * Get the legacy role state stored in the platform. diff --git a/services/core/java/com/android/server/role/package-info.java b/services/core/java/com/android/server/role/package-info.java new file mode 100644 index 0000000000000..c0fede9c67b1a --- /dev/null +++ b/services/core/java/com/android/server/role/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 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. + */ + +/** + * @hide + * TODO(b/146466118) remove this javadoc tag + */ +@android.annotation.Hide +package com.android.server.role; diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 14855aee29914..0cc2a6c52b1d2 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -154,6 +154,7 @@ import com.android.internal.os.ProcessCpuTracker; import com.android.internal.os.StoragedUidIoStatsReader; import com.android.internal.util.CollectionUtils; import com.android.internal.util.FrameworkStatsLog; +import com.android.role.RoleManagerLocal; import com.android.server.BatteryService; import com.android.server.BinderCallsStatsService; import com.android.server.LocalManagerRegistry; @@ -162,7 +163,6 @@ import com.android.server.SystemService; import com.android.server.SystemServiceManager; import com.android.server.am.MemoryStatUtil.MemoryStat; import com.android.server.notification.NotificationManagerService; -import com.android.server.role.RoleManagerLocal; import com.android.server.stats.pull.IonMemoryUtil.IonAllocations; import com.android.server.stats.pull.ProcfsMemoryUtil.MemorySnapshot; import com.android.server.stats.pull.netstats.NetworkStatsExt; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 7839274904ad7..2e0c16638685e 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -353,7 +353,7 @@ public final class SystemServer implements Dumpable { "com.android.server.ConnectivityServiceInitializer"; private static final String IP_CONNECTIVITY_METRICS_CLASS = "com.android.server.connectivity.IpConnectivityMetrics"; - private static final String ROLE_SERVICE_CLASS = "com.android.server.role.RoleService"; + private static final String ROLE_SERVICE_CLASS = "com.android.role.RoleService"; private static final String TETHERING_CONNECTOR_CLASS = "android.net.ITetheringConnector"; From 61545a7efd635fb0701c4376e5abf6611e76cd4f Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Wed, 20 Jan 2021 17:15:30 -0800 Subject: [PATCH 2/2] Deprecate RoleControllerService related system APIs. The RoleControllerService is an internal implementation detail of role, and was exposed as system API in platform before modularization and the ability to have updatable code in system server. Now that we have our updatable system server JAR, this should no longer be exposed and we may refactor the implementation for better performance/stability later. Hence deprecate them now in S for the earliest possible removal of these APIs. Bug: 158736025 Test: presubmit Change-Id: I1358e16ad0e9cf875316d93dd2152001c13b84dd --- .../framework-s/api/system-current.txt | 28 +++++++++---------- .../app/role/RoleControllerService.java | 4 +++ .../java/android/app/role/RoleManager.java | 16 +++++++++++ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/apex/permission/framework-s/api/system-current.txt b/apex/permission/framework-s/api/system-current.txt index e87f124453b4f..6778d4826841e 100644 --- a/apex/permission/framework-s/api/system-current.txt +++ b/apex/permission/framework-s/api/system-current.txt @@ -5,17 +5,17 @@ package android.app.role { method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle); } - public abstract class RoleControllerService extends android.app.Service { - ctor public RoleControllerService(); - method @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int); - method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); - method @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int); - method @WorkerThread public abstract boolean onGrantDefaultRoles(); + @Deprecated public abstract class RoleControllerService extends android.app.Service { + ctor @Deprecated public RoleControllerService(); + method @Deprecated @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int); + method @Deprecated @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); + method @Deprecated @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int); + method @Deprecated @WorkerThread public abstract boolean onGrantDefaultRoles(); method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String); - method public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String); - method public abstract boolean onIsRoleVisible(@NonNull String); - method @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int); - field public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService"; + method @Deprecated public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String); + method @Deprecated public abstract boolean onIsRoleVisible(@NonNull String); + method @Deprecated @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int); + field @Deprecated public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService"; } public class RoleFrameworkInitializer { @@ -25,17 +25,17 @@ package android.app.role { public final class RoleManager { method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String); + method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List getHeldRolesFromController(@NonNull String); + method @Deprecated @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List getHeldRolesFromController(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHolders(@NonNull String); method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); - method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List); + method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String); + method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List); field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1 } diff --git a/apex/permission/framework-s/java/android/app/role/RoleControllerService.java b/apex/permission/framework-s/java/android/app/role/RoleControllerService.java index 6ef9e445d1c97..cf7872913f26b 100644 --- a/apex/permission/framework-s/java/android/app/role/RoleControllerService.java +++ b/apex/permission/framework-s/java/android/app/role/RoleControllerService.java @@ -44,8 +44,12 @@ import java.util.concurrent.Executor; * requirements and granting or revoking relevant privileges of roles. This class can only be * implemented by the permission controller app which is registered in {@code PackageManager}. * + * @deprecated The role controller service is an internal implementation detail inside role, and it + * may be replaced by other mechanisms in the future and no longer be called. + * * @hide */ +@Deprecated @SystemApi public abstract class RoleControllerService extends Service { diff --git a/apex/permission/framework-s/java/android/app/role/RoleManager.java b/apex/permission/framework-s/java/android/app/role/RoleManager.java index e545a75ca64f9..ceccc4cfc9f75 100644 --- a/apex/permission/framework-s/java/android/app/role/RoleManager.java +++ b/apex/permission/framework-s/java/android/app/role/RoleManager.java @@ -521,8 +521,12 @@ public final class RoleManager { * * @param roleNames the names of all the available roles * + * @deprecated This is only usable by the role controller service, which is an internal + * implementation detail inside role. + * * @hide */ + @Deprecated @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi public void setRoleNamesFromController(@NonNull List roleNames) { @@ -551,8 +555,12 @@ public final class RoleManager { * @see #getRoleHolders(String) * @see #removeRoleHolderFromController(String, String) * + * @deprecated This is only usable by the role controller service, which is an internal + * implementation detail inside role. + * * @hide */ + @Deprecated @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi public boolean addRoleHolderFromController(@NonNull String roleName, @@ -583,8 +591,12 @@ public final class RoleManager { * @see #getRoleHolders(String) * @see #addRoleHolderFromController(String, String) * + * @deprecated This is only usable by the role controller service, which is an internal + * implementation detail inside role. + * * @hide */ + @Deprecated @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi public boolean removeRoleHolderFromController(@NonNull String roleName, @@ -604,8 +616,12 @@ public final class RoleManager { * @param packageName the package name * @return the list of role names * + * @deprecated This is only usable by the role controller service, which is an internal + * implementation detail inside role. + * * @hide */ + @Deprecated @NonNull @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER) @SystemApi