diff options
author | 2019-02-04 16:17:38 -0800 | |
---|---|---|
committer | 2019-02-05 15:37:40 -0800 | |
commit | 71d70360b2f12bd4abdccd321bba28acb4196fd0 (patch) | |
tree | 810c5815d7a0525830f9b12f58e78bd02a5e353a | |
parent | 027b668bea44baf80de33fd18344c5e0c11b0445 (diff) |
Add flags parameter for managing role holders.
This change allows passing a flag parameter when managing role
holders, including a DONT_KILL_APP flag that can be used by the
request role dialog.
Bug: 123429697
Test: manual
Change-Id: I57b690dcdfbf6fd13940cf45d392a48adeccdfaa
11 files changed, 115 insertions, 70 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index c3088c0cdeb7..280e1d0c3239 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1071,16 +1071,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, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + 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 android.app.role.RoleManagerCallback); 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, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); 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, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + 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 android.app.role.RoleManagerCallback); 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 field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT"; } @@ -6029,11 +6030,11 @@ package android.rolecontrollerservice { public abstract class RoleControllerService extends android.app.Service { ctor public RoleControllerService(); - method public abstract void onAddRoleHolder(@NonNull String, @NonNull String, @NonNull android.app.role.RoleManagerCallback); + method public abstract void onAddRoleHolder(@NonNull String, @NonNull String, int, @NonNull android.app.role.RoleManagerCallback); method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent); - method public abstract void onClearRoleHolders(@NonNull String, @NonNull android.app.role.RoleManagerCallback); + method public abstract void onClearRoleHolders(@NonNull String, int, @NonNull android.app.role.RoleManagerCallback); method public abstract void onGrantDefaultRoles(@NonNull android.app.role.RoleManagerCallback); - method public abstract void onRemoveRoleHolder(@NonNull String, @NonNull String, @NonNull android.app.role.RoleManagerCallback); + method public abstract void onRemoveRoleHolder(@NonNull String, @NonNull String, int, @NonNull android.app.role.RoleManagerCallback); method public abstract void onSmsKillSwitchToggled(boolean); field public static final String SERVICE_INTERFACE = "android.rolecontrollerservice.RoleControllerService"; } diff --git a/api/test-current.txt b/api/test-current.txt index 49c4e6853212..07821083e534 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -429,11 +429,11 @@ package android.app.prediction { package android.app.role { public final class RoleManager { - method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void addRoleHolderAsUser(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); - method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void clearRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List<java.lang.String> getRoleHolders(@NonNull String); method @NonNull @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public java.util.List<java.lang.String> getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle); - method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void removeRoleHolderAsUser(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); + method @RequiresPermission("android.permission.MANAGE_ROLE_HOLDERS") public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.app.role.RoleManagerCallback); field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT"; } diff --git a/core/java/android/app/role/IRoleManager.aidl b/core/java/android/app/role/IRoleManager.aidl index cf62e8d625db..76dbf7e4504b 100644 --- a/core/java/android/app/role/IRoleManager.aidl +++ b/core/java/android/app/role/IRoleManager.aidl @@ -32,13 +32,14 @@ interface IRoleManager { List<String> getRoleHoldersAsUser(in String roleName, int userId); - void addRoleHolderAsUser(in String roleName, in String packageName, int userId, + void addRoleHolderAsUser(in String roleName, in String packageName, int flags, int userId, in IRoleManagerCallback callback); - void removeRoleHolderAsUser(in String roleName, in String packageName, int userId, + void removeRoleHolderAsUser(in String roleName, in String packageName, int flags, int userId, in IRoleManagerCallback callback); - void clearRoleHoldersAsUser(in String roleName, int userId, in IRoleManagerCallback callback); + void clearRoleHoldersAsUser(in String roleName, int flags, int userId, + in IRoleManagerCallback callback); void addOnRoleHoldersChangedListenerAsUser(IOnRoleHoldersChangedListener listener, int userId); diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java index ddd531339d39..fa2a6a1f08e4 100644 --- a/core/java/android/app/role/RoleManager.java +++ b/core/java/android/app/role/RoleManager.java @@ -18,6 +18,7 @@ package android.app.role; import android.Manifest; import android.annotation.CallbackExecutor; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; @@ -181,6 +182,22 @@ public final class RoleManager { public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT"; /** + * @hide + */ + @IntDef(flag = true, value = { MANAGE_HOLDERS_FLAG_DONT_KILL_APP }) + public @interface ManageHoldersFlags {} + + /** + * Flag parameter for {@link #addRoleHolderAsUser}, {@link #removeRoleHolderAsUser} and + * {@link #clearRoleHoldersAsUser} to indicate that apps should not be killed when changing + * their role holder status. + * + * @hide + */ + @SystemApi + public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; + + /** * The action used to request user approval of a role for an application. * * @hide @@ -305,9 +322,9 @@ public final class RoleManager { * * @return a list of package names of the role holders, or an empty list if none. * - * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) - * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) - * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * @see #addRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) + * @see #removeRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, int, UserHandle, Executor, RoleManagerCallback) * * @hide */ @@ -335,13 +352,14 @@ public final class RoleManager { * * @param roleName the name of the role to add the role holder for * @param packageName the package name of the application to add to the role holders + * @param flags optional behavior flags * @param user the user to add the role holder for * @param executor the {@code Executor} to run the callback on. * @param callback the callback for whether this call is successful * * @see #getRoleHoldersAsUser(String, UserHandle) - * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) - * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * @see #removeRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, int, UserHandle, Executor, RoleManagerCallback) * * @hide */ @@ -349,15 +367,15 @@ public final class RoleManager { @SystemApi @TestApi public void addRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, - @NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor, - @NonNull RoleManagerCallback callback) { + @ManageHoldersFlags int flags, @NonNull UserHandle user, + @CallbackExecutor @NonNull Executor executor, @NonNull RoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(user, "user cannot be null"); Preconditions.checkNotNull(executor, "executor cannot be null"); Preconditions.checkNotNull(callback, "callback cannot be null"); try { - mService.addRoleHolderAsUser(roleName, packageName, user.getIdentifier(), + mService.addRoleHolderAsUser(roleName, packageName, flags, user.getIdentifier(), new RoleManagerCallbackDelegate(executor, callback)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -373,13 +391,14 @@ public final class RoleManager { * * @param roleName the name of the role to remove the role holder for * @param packageName the package name of the application to remove from the role holders + * @param flags optional behavior flags * @param user the user to remove the role holder for * @param executor the {@code Executor} to run the callback on. * @param callback the callback for whether this call is successful * * @see #getRoleHoldersAsUser(String, UserHandle) - * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) - * @see #clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * @see #addRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) + * @see #clearRoleHoldersAsUser(String, int, UserHandle, Executor, RoleManagerCallback) * * @hide */ @@ -387,15 +406,15 @@ public final class RoleManager { @SystemApi @TestApi public void removeRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, - @NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor, - @NonNull RoleManagerCallback callback) { + @ManageHoldersFlags int flags, @NonNull UserHandle user, + @CallbackExecutor @NonNull Executor executor, @NonNull RoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(user, "user cannot be null"); Preconditions.checkNotNull(executor, "executor cannot be null"); Preconditions.checkNotNull(callback, "callback cannot be null"); try { - mService.removeRoleHolderAsUser(roleName, packageName, user.getIdentifier(), + mService.removeRoleHolderAsUser(roleName, packageName, flags, user.getIdentifier(), new RoleManagerCallbackDelegate(executor, callback)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -410,27 +429,29 @@ public final class RoleManager { * {@code android.permission.INTERACT_ACROSS_USERS_FULL}. * * @param roleName the name of the role to remove role holders for + * @param flags optional behavior flags * @param user the user to remove role holders for * @param executor the {@code Executor} to run the callback on. * @param callback the callback for whether this call is successful * * @see #getRoleHoldersAsUser(String, UserHandle) - * @see #addRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) - * @see #removeRoleHolderAsUser(String, String, UserHandle, Executor, RoleManagerCallback) + * @see #addRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) + * @see #removeRoleHolderAsUser(String, String, int, UserHandle, Executor, RoleManagerCallback) * * @hide */ @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS) @SystemApi @TestApi - public void clearRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user, - @CallbackExecutor @NonNull Executor executor, @NonNull RoleManagerCallback callback) { + public void clearRoleHoldersAsUser(@NonNull String roleName, @ManageHoldersFlags int flags, + @NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor, + @NonNull RoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkNotNull(user, "user cannot be null"); Preconditions.checkNotNull(executor, "executor cannot be null"); Preconditions.checkNotNull(callback, "callback cannot be null"); try { - mService.clearRoleHoldersAsUser(roleName, user.getIdentifier(), + mService.clearRoleHoldersAsUser(roleName, flags, user.getIdentifier(), new RoleManagerCallbackDelegate(executor, callback)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/rolecontrollerservice/IRoleControllerService.aidl b/core/java/android/rolecontrollerservice/IRoleControllerService.aidl index 4e98201118a4..40852ea9719d 100644 --- a/core/java/android/rolecontrollerservice/IRoleControllerService.aidl +++ b/core/java/android/rolecontrollerservice/IRoleControllerService.aidl @@ -23,13 +23,13 @@ import android.app.role.IRoleManagerCallback; */ oneway interface IRoleControllerService { - void onAddRoleHolder(in String roleName, in String packageName, + void onAddRoleHolder(in String roleName, in String packageName, int flags, in IRoleManagerCallback callback); - void onRemoveRoleHolder(in String roleName, in String packageName, + void onRemoveRoleHolder(in String roleName, in String packageName, int flags, in IRoleManagerCallback callback); - void onClearRoleHolders(in String roleName, in IRoleManagerCallback callback); + void onClearRoleHolders(in String roleName, int flags, in IRoleManagerCallback callback); void onGrantDefaultRoles(in IRoleManagerCallback callback); diff --git a/core/java/android/rolecontrollerservice/RoleControllerService.java b/core/java/android/rolecontrollerservice/RoleControllerService.java index 5403cfa06807..c846b076c14f 100644 --- a/core/java/android/rolecontrollerservice/RoleControllerService.java +++ b/core/java/android/rolecontrollerservice/RoleControllerService.java @@ -61,32 +61,33 @@ public abstract class RoleControllerService extends Service { return new IRoleControllerService.Stub() { @Override - public void onAddRoleHolder(String roleName, String packageName, + public void onAddRoleHolder(String roleName, String packageName, int flags, IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); - RoleControllerService.this.onAddRoleHolder(roleName, packageName, + RoleControllerService.this.onAddRoleHolder(roleName, packageName, flags, new RoleManagerCallbackDelegate(callback)); } @Override - public void onRemoveRoleHolder(String roleName, String packageName, + public void onRemoveRoleHolder(String roleName, String packageName, int flags, IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); - RoleControllerService.this.onRemoveRoleHolder(roleName, packageName, + RoleControllerService.this.onRemoveRoleHolder(roleName, packageName, flags, new RoleManagerCallbackDelegate(callback)); } @Override - public void onClearRoleHolders(String roleName, IRoleManagerCallback callback) { + public void onClearRoleHolders(String roleName, int flags, + IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); - RoleControllerService.this.onClearRoleHolders(roleName, + RoleControllerService.this.onClearRoleHolders(roleName, flags, new RoleManagerCallbackDelegate(callback)); } @@ -113,37 +114,41 @@ public abstract class RoleControllerService extends Service { * * @param roleName the name of the role to add the role holder for * @param packageName the package name of the application to add to the role holders + * @param flags optional behavior flags * @param callback the callback for whether this call is successful * - * @see RoleManager#addRoleHolderAsUser(String, String, UserHandle, Executor, + * @see RoleManager#addRoleHolderAsUser(String, String, int, UserHandle, Executor, * RoleManagerCallback) */ public abstract void onAddRoleHolder(@NonNull String roleName, @NonNull String packageName, - @NonNull RoleManagerCallback callback); + @RoleManager.ManageHoldersFlags int flags, @NonNull RoleManagerCallback callback); /** * Remove a specific application from the holders of a role. * * @param roleName the name of the role to remove the role holder for * @param packageName the package name of the application to remove from the role holders + * @param flags optional behavior flags * @param callback the callback for whether this call is successful * - * @see RoleManager#removeRoleHolderAsUser(String, String, UserHandle, Executor, + * @see RoleManager#removeRoleHolderAsUser(String, String, int, UserHandle, Executor, * RoleManagerCallback) */ public abstract void onRemoveRoleHolder(@NonNull String roleName, @NonNull String packageName, - @NonNull RoleManagerCallback callback); + @RoleManager.ManageHoldersFlags int flags, @NonNull RoleManagerCallback callback); /** * Remove all holders of a role. * * @param roleName the name of the role to remove role holders for + * @param flags optional behavior flags * @param callback the callback for whether this call is successful * - * @see RoleManager#clearRoleHoldersAsUser(String, UserHandle, Executor, RoleManagerCallback) + * @see RoleManager#clearRoleHoldersAsUser(String, int, UserHandle, Executor, + * RoleManagerCallback) */ public abstract void onClearRoleHolders(@NonNull String roleName, - @NonNull RoleManagerCallback callback); + @RoleManager.ManageHoldersFlags int flags, @NonNull RoleManagerCallback callback); /** * Cleanup appop/permissions state in response to sms kill switch toggle diff --git a/services/core/java/com/android/server/role/RemoteRoleControllerService.java b/services/core/java/com/android/server/role/RemoteRoleControllerService.java index 107cb2cc1a2e..4fb40db8597c 100644 --- a/services/core/java/com/android/server/role/RemoteRoleControllerService.java +++ b/services/core/java/com/android/server/role/RemoteRoleControllerService.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.role.IRoleManagerCallback; +import android.app.role.RoleManager; import android.app.role.RoleManagerCallback; import android.content.ComponentName; import android.content.Context; @@ -61,34 +62,35 @@ public class RemoteRoleControllerService { * Add a specific application to the holders of a role. If the role is exclusive, the previous * holder will be replaced. * - * @see RoleControllerService#onAddRoleHolder(String, String, RoleManagerCallback) + * @see RoleControllerService#onAddRoleHolder(String, String, int, RoleManagerCallback) */ public void onAddRoleHolder(@NonNull String roleName, @NonNull String packageName, - @NonNull IRoleManagerCallback callback) { + @RoleManager.ManageHoldersFlags int flags, @NonNull IRoleManagerCallback callback) { mConnection.enqueueCall(new Connection.Call((service, callbackDelegate) -> - service.onAddRoleHolder(roleName, packageName, callbackDelegate), callback)); + service.onAddRoleHolder(roleName, packageName, flags, callbackDelegate), callback)); } /** * Remove a specific application from the holders of a role. * - * @see RoleControllerService#onRemoveRoleHolder(String, String, RoleManagerCallback) + * @see RoleControllerService#onRemoveRoleHolder(String, String, int, RoleManagerCallback) */ public void onRemoveRoleHolder(@NonNull String roleName, @NonNull String packageName, - @NonNull IRoleManagerCallback callback) { + @RoleManager.ManageHoldersFlags int flags, @NonNull IRoleManagerCallback callback) { mConnection.enqueueCall(new Connection.Call((service, callbackDelegate) -> - service.onRemoveRoleHolder(roleName, packageName, callbackDelegate), callback)); + service.onRemoveRoleHolder(roleName, packageName, flags, callbackDelegate), + callback)); } /** * Remove all holders of a role. * - * @see RoleControllerService#onClearRoleHolders(String, RoleManagerCallback) + * @see RoleControllerService#onClearRoleHolders(String, int, RoleManagerCallback) */ public void onClearRoleHolders(@NonNull String roleName, - @NonNull IRoleManagerCallback callback) { + @RoleManager.ManageHoldersFlags int flags, @NonNull IRoleManagerCallback callback) { mConnection.enqueueCall(new Connection.Call((service, callbackDelegate) -> - service.onClearRoleHolders(roleName, callbackDelegate), callback)); + service.onClearRoleHolders(roleName, flags, callbackDelegate), callback)); } /** diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java index 84305be0aed5..3c51d1225c0b 100644 --- a/services/core/java/com/android/server/role/RoleManagerService.java +++ b/services/core/java/com/android/server/role/RoleManagerService.java @@ -450,7 +450,8 @@ public class RoleManagerService extends SystemService implements RoleUserState.C @Override public void addRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, - @UserIdInt int userId, @NonNull IRoleManagerCallback callback) { + @RoleManager.ManageHoldersFlags int flags, @UserIdInt int userId, + @NonNull IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); @@ -462,12 +463,14 @@ public class RoleManagerService extends SystemService implements RoleUserState.C getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, "addRoleHolderAsUser"); - getOrCreateControllerService(userId).onAddRoleHolder(roleName, packageName, callback); + getOrCreateControllerService(userId).onAddRoleHolder(roleName, packageName, flags, + callback); } @Override public void removeRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName, - @UserIdInt int userId, @NonNull IRoleManagerCallback callback) { + @RoleManager.ManageHoldersFlags int flags, @UserIdInt int userId, + @NonNull IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); @@ -479,12 +482,13 @@ public class RoleManagerService extends SystemService implements RoleUserState.C getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, "removeRoleHolderAsUser"); - getOrCreateControllerService(userId).onRemoveRoleHolder(roleName, packageName, + getOrCreateControllerService(userId).onRemoveRoleHolder(roleName, packageName, flags, callback); } @Override - public void clearRoleHoldersAsUser(@NonNull String roleName, @UserIdInt int userId, + public void clearRoleHoldersAsUser(@NonNull String roleName, + @RoleManager.ManageHoldersFlags int flags, @UserIdInt int userId, @NonNull IRoleManagerCallback callback) { Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty"); Preconditions.checkNotNull(callback, "callback cannot be null"); @@ -496,7 +500,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, "clearRoleHoldersAsUser"); - getOrCreateControllerService(userId).onClearRoleHolders(roleName, callback); + getOrCreateControllerService(userId).onClearRoleHolders(roleName, flags, callback); } @Override @@ -718,9 +722,9 @@ public class RoleManagerService extends SystemService implements RoleUserState.C }; if (packageName != null) { getOrCreateControllerService(userId).onAddRoleHolder(RoleManager.ROLE_BROWSER, - packageName, callback); + packageName, 0, callback); } else { - getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_BROWSER, + getOrCreateControllerService(userId).onClearRoleHolders(RoleManager.ROLE_BROWSER, 0, callback); } try { diff --git a/services/core/java/com/android/server/role/RoleManagerShellCommand.java b/services/core/java/com/android/server/role/RoleManagerShellCommand.java index b245e987022d..00021d7fb986 100644 --- a/services/core/java/com/android/server/role/RoleManagerShellCommand.java +++ b/services/core/java/com/android/server/role/RoleManagerShellCommand.java @@ -98,13 +98,22 @@ class RoleManagerShellCommand extends ShellCommand { return userId; } + private int getFlagsMaybe() { + String flags = getNextArg(); + if (flags == null) { + return 0; + } + return Integer.parseInt(flags); + } + private int runAddRoleHolder() throws RemoteException { int userId = getUserIdMaybe(); String roleName = getNextArgRequired(); String packageName = getNextArgRequired(); + int flags = getFlagsMaybe(); Callback callback = new Callback(); - mRoleManager.addRoleHolderAsUser(roleName, packageName, userId, callback); + mRoleManager.addRoleHolderAsUser(roleName, packageName, flags, userId, callback); return callback.waitForResult(); } @@ -112,18 +121,20 @@ class RoleManagerShellCommand extends ShellCommand { int userId = getUserIdMaybe(); String roleName = getNextArgRequired(); String packageName = getNextArgRequired(); + int flags = getFlagsMaybe(); Callback callback = new Callback(); - mRoleManager.removeRoleHolderAsUser(roleName, packageName, userId, callback); + mRoleManager.removeRoleHolderAsUser(roleName, packageName, flags, userId, callback); return callback.waitForResult(); } private int runClearRoleHolders() throws RemoteException { int userId = getUserIdMaybe(); String roleName = getNextArgRequired(); + int flags = getFlagsMaybe(); Callback callback = new Callback(); - mRoleManager.clearRoleHoldersAsUser(roleName, userId, callback); + mRoleManager.clearRoleHoldersAsUser(roleName, flags, userId, callback); return callback.waitForResult(); } @@ -134,9 +145,9 @@ class RoleManagerShellCommand extends ShellCommand { pw.println(" help"); pw.println(" Print this help text."); pw.println(); - pw.println(" add-role-holder [--user USER_ID] ROLE PACKAGE"); - pw.println(" remove-role-holder [--user USER_ID] ROLE PACKAGE"); - pw.println(" clear-role-holders [--user USER_ID] ROLE"); + pw.println(" add-role-holder [--user USER_ID] ROLE PACKAGE [FLAGS]"); + pw.println(" remove-role-holder [--user USER_ID] ROLE PACKAGE [FLAGS]"); + pw.println(" clear-role-holders [--user USER_ID] ROLE [FLAGS]"); pw.println(); } } diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java index 57ae5d3c05a0..aac0956d4339 100644 --- a/telecomm/java/android/telecom/DefaultDialerManager.java +++ b/telecomm/java/android/telecom/DefaultDialerManager.java @@ -78,7 +78,7 @@ public class DefaultDialerManager { try { RoleManagerCallback.Future cb = new RoleManagerCallback.Future(); context.getSystemService(RoleManager.class).addRoleHolderAsUser( - RoleManager.ROLE_DIALER, packageName, UserHandle.of(user), + RoleManager.ROLE_DIALER, packageName, 0, UserHandle.of(user), AsyncTask.THREAD_POOL_EXECUTOR, cb); cb.get(5, TimeUnit.SECONDS); return true; diff --git a/telephony/java/com/android/internal/telephony/SmsApplication.java b/telephony/java/com/android/internal/telephony/SmsApplication.java index d3420eef518d..7478a00009c0 100644 --- a/telephony/java/com/android/internal/telephony/SmsApplication.java +++ b/telephony/java/com/android/internal/telephony/SmsApplication.java @@ -636,7 +636,7 @@ public final class SmsApplication { // Update the setting. RoleManagerCallback.Future res = new RoleManagerCallback.Future(); context.getSystemService(RoleManager.class).addRoleHolderAsUser( - RoleManager.ROLE_SMS, applicationData.mPackageName, UserHandle.of(userId), + RoleManager.ROLE_SMS, applicationData.mPackageName, 0, UserHandle.of(userId), AsyncTask.THREAD_POOL_EXECUTOR, res); try { res.get(5, TimeUnit.SECONDS); |