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
This commit is contained in:
35
Android.bp
35
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",
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -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"],
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
],
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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<java.lang.Boolean>);
|
||||
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<java.lang.Boolean>);
|
||||
method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List<java.lang.String> getHeldRolesFromController(@NonNull String);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> 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<java.lang.Boolean>);
|
||||
method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||
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<java.lang.Boolean>);
|
||||
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<java.lang.String>);
|
||||
field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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<Boolean> 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<Boolean> callback) {
|
||||
getRoleControllerManager().isApplicationVisibleForRole(roleName, packageName, executor,
|
||||
5
apex/permission/jarjar-rules.txt
Normal file
5
apex/permission/jarjar-rules.txt
Normal file
@@ -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
|
||||
@@ -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",
|
||||
|
||||
@@ -26,6 +26,14 @@ package com.android.permission.persistence {
|
||||
|
||||
}
|
||||
|
||||
package com.android.role {
|
||||
|
||||
public interface RoleManagerLocal {
|
||||
method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRolesAndHolders(int);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package com.android.role.persistence {
|
||||
|
||||
public interface RolesPersistence {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.role.util;
|
||||
package com.android.permission.util;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
|
||||
@@ -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;
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.role.util;
|
||||
package com.android.permission.util;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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<java.lang.Boolean>);
|
||||
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<java.lang.Boolean>);
|
||||
method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List<java.lang.String> getHeldRolesFromController(@NonNull String);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> 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<java.lang.Boolean>);
|
||||
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<java.lang.String>);
|
||||
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 {
|
||||
|
||||
@@ -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<java.lang.Boolean>);
|
||||
method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.app.usage {
|
||||
|
||||
public class NetworkStatsManager {
|
||||
|
||||
@@ -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<java.lang.Boolean>):
|
||||
|
||||
UserHandle: android.app.role.RoleManager#clearRoleHoldersAsUser(String, int, android.os.UserHandle, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Boolean>):
|
||||
|
||||
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<java.lang.Boolean>):
|
||||
|
||||
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):
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# Bug component: 137825
|
||||
|
||||
zhanghai@google.com
|
||||
moltmann@google.com
|
||||
@@ -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"
|
||||
];
|
||||
|
||||
@@ -26,6 +26,14 @@ package com.android.permission.persistence {
|
||||
|
||||
}
|
||||
|
||||
package com.android.role {
|
||||
|
||||
public interface RoleManagerLocal {
|
||||
method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> 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<java.lang.String,java.util.Set<java.lang.String>> getLegacyRoleState(int);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package com.android.server.wifi {
|
||||
|
||||
public class SupplicantManager {
|
||||
|
||||
@@ -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.
|
||||
|
||||
22
services/core/java/com/android/server/role/package-info.java
Normal file
22
services/core/java/com/android/server/role/package-info.java
Normal file
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user