Add RoleControllerManager.isApplicationVisibleForRole().
Settings doesn't actually need to know whether an application qualifies for a role, but only whether the default app setting should be visible for an application. Qualification and visibility differs in cases such as FallbackHome inside Settings which is a qualifying home activity but should never be shown in default apps UI. Fixes: 138636320 Test: manual Change-Id: I216195c64a7b106e2769b11c1a998741a77fdce2
This commit is contained in:
@@ -1135,7 +1135,8 @@ package android.app.role {
|
||||
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 public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String);
|
||||
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";
|
||||
|
||||
@@ -36,5 +36,8 @@ oneway interface IRoleController {
|
||||
void isApplicationQualifiedForRole(in String roleName, in String packageName,
|
||||
in RemoteCallback callback);
|
||||
|
||||
void isApplicationVisibleForRole(in String roleName, in String packageName,
|
||||
in RemoteCallback callback);
|
||||
|
||||
void isRoleVisible(in String roleName, in RemoteCallback callback);
|
||||
}
|
||||
|
||||
@@ -183,6 +183,9 @@ public class RoleControllerManager {
|
||||
|
||||
/**
|
||||
* @see RoleControllerService#onIsApplicationQualifiedForRole(String, String)
|
||||
*
|
||||
* @deprecated Use {@link #isApplicationVisibleForRole(String, String, Executor, Consumer)}
|
||||
* instead.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
|
||||
public void isApplicationQualifiedForRole(@NonNull String roleName, @NonNull String packageName,
|
||||
@@ -196,6 +199,21 @@ public class RoleControllerManager {
|
||||
propagateCallback(operation, "isApplicationQualifiedForRole", executor, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see RoleControllerService#onIsApplicationVisibleForRole(String, String)
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
|
||||
public void isApplicationVisibleForRole(@NonNull String roleName, @NonNull String packageName,
|
||||
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<Boolean> callback) {
|
||||
AndroidFuture<Bundle> operation = mRemoteService.postAsync(service -> {
|
||||
AndroidFuture<Bundle> future = new AndroidFuture<>();
|
||||
service.isApplicationVisibleForRole(roleName, packageName,
|
||||
new RemoteCallback(future::complete));
|
||||
return future;
|
||||
});
|
||||
propagateCallback(operation, "isApplicationVisibleForRole", executor, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see RoleControllerService#onIsRoleVisible(String)
|
||||
*/
|
||||
|
||||
@@ -152,6 +152,20 @@ public abstract class RoleControllerService extends Service {
|
||||
callback.sendResult(qualified ? Bundle.EMPTY : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void isApplicationVisibleForRole(String roleName, String packageName,
|
||||
RemoteCallback callback) {
|
||||
enforceCallingPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, null);
|
||||
|
||||
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");
|
||||
|
||||
boolean visible = onIsApplicationVisibleForRole(roleName, packageName);
|
||||
callback.sendResult(visible ? Bundle.EMPTY : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void isRoleVisible(String roleName, RemoteCallback callback) {
|
||||
enforceCallingPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, null);
|
||||
@@ -256,10 +270,25 @@ public abstract class RoleControllerService extends Service {
|
||||
* @param packageName package name of the application to check for
|
||||
*
|
||||
* @return whether the application is qualified for the role
|
||||
*
|
||||
* @deprecated Implement {@link #onIsApplicationVisibleForRole(String, String)} instead.
|
||||
*/
|
||||
public abstract boolean onIsApplicationQualifiedForRole(@NonNull String roleName,
|
||||
@NonNull String packageName);
|
||||
|
||||
/**
|
||||
* Check whether an application is visible for a role.
|
||||
*
|
||||
* @param roleName name of the role to check for
|
||||
* @param packageName package name of the application to check for
|
||||
*
|
||||
* @return whether the application is visible for the role
|
||||
*/
|
||||
public boolean onIsApplicationVisibleForRole(@NonNull String roleName,
|
||||
@NonNull String packageName) {
|
||||
return onIsApplicationQualifiedForRole(roleName, packageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a role should be visible to user.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user