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
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -180,6 +181,22 @@ public final class RoleManager {
|
||||
@TestApi
|
||||
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.
|
||||
*
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user