Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aedc3ab3 authored by Hai Zhang's avatar Hai Zhang
Browse files

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
parent ce81d325
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1135,7 +1135,8 @@ package android.app.role {
    method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
    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 onClearRoleHolders(@NonNull String, int);
    method @WorkerThread public abstract boolean onGrantDefaultRoles();
    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 public abstract boolean onIsRoleVisible(@NonNull String);
    method @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int);
    method @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int);
    field public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService";
    field public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService";
+3 −0
Original line number Original line Diff line number Diff line
@@ -36,5 +36,8 @@ oneway interface IRoleController {
    void isApplicationQualifiedForRole(in String roleName, in String packageName,
    void isApplicationQualifiedForRole(in String roleName, in String packageName,
            in RemoteCallback callback);
            in RemoteCallback callback);


    void isApplicationVisibleForRole(in String roleName, in String packageName,
            in RemoteCallback callback);

    void isRoleVisible(in String roleName, in RemoteCallback callback);
    void isRoleVisible(in String roleName, in RemoteCallback callback);
}
}
+18 −0
Original line number Original line Diff line number Diff line
@@ -183,6 +183,9 @@ public class RoleControllerManager {


    /**
    /**
     * @see RoleControllerService#onIsApplicationQualifiedForRole(String, String)
     * @see RoleControllerService#onIsApplicationQualifiedForRole(String, String)
     *
     * @deprecated Use {@link #isApplicationVisibleForRole(String, String, Executor, Consumer)}
     *             instead.
     */
     */
    @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
    @RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
    public void isApplicationQualifiedForRole(@NonNull String roleName, @NonNull String packageName,
    public void isApplicationQualifiedForRole(@NonNull String roleName, @NonNull String packageName,
@@ -196,6 +199,21 @@ public class RoleControllerManager {
        propagateCallback(operation, "isApplicationQualifiedForRole", executor, callback);
        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)
     * @see RoleControllerService#onIsRoleVisible(String)
     */
     */
+29 −0
Original line number Original line Diff line number Diff line
@@ -152,6 +152,20 @@ public abstract class RoleControllerService extends Service {
                callback.sendResult(qualified ? Bundle.EMPTY : null);
                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
            @Override
            public void isRoleVisible(String roleName, RemoteCallback callback) {
            public void isRoleVisible(String roleName, RemoteCallback callback) {
                enforceCallingPermission(Manifest.permission.MANAGE_ROLE_HOLDERS, null);
                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
     * @param packageName package name of the application to check for
     *
     *
     * @return whether the application is qualified for the role
     * @return whether the application is qualified for the role
     *
     * @deprecated Implement {@link #onIsApplicationVisibleForRole(String, String)} instead.
     */
     */
    public abstract boolean onIsApplicationQualifiedForRole(@NonNull String roleName,
    public abstract boolean onIsApplicationQualifiedForRole(@NonNull String roleName,
            @NonNull String packageName);
            @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.
     * Check whether a role should be visible to user.
     *
     *