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

Commit b3469e73 authored by Eugene Susla's avatar Eugene Susla Committed by Android (Google) Code Review
Browse files

Merge "On role revocation, don't revoke appops/perms for other held roles"

parents 33f7f311 a2a80326
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -853,6 +853,7 @@ package android.app.role {
    method public void addRoleHolderAsUser(java.lang.String, java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback);
    method public boolean addRoleHolderFromController(java.lang.String, java.lang.String);
    method public void clearRoleHoldersAsUser(java.lang.String, android.os.UserHandle, java.util.concurrent.Executor, android.app.role.RoleManagerCallback);
    method public java.util.List<java.lang.String> getHeldRolesFromController(java.lang.String);
    method public java.util.List<java.lang.String> getRoleHolders(java.lang.String);
    method public java.util.List<java.lang.String> getRoleHoldersAsUser(java.lang.String, android.os.UserHandle);
    method public void removeOnRoleHoldersChangedListenerAsUser(android.app.role.OnRoleHoldersChangedListener, android.os.UserHandle);
+2 −0
Original line number Diff line number Diff line
@@ -48,4 +48,6 @@ interface IRoleManager {
    boolean addRoleHolderFromController(in String roleName, in String packageName);

    boolean removeRoleHolderFromController(in String roleName, in String packageName);

    List<String> getHeldRolesFromController(in String packageName);
}
+21 −0
Original line number Diff line number Diff line
@@ -542,6 +542,27 @@ public final class RoleManager {
        }
    }


    /**
     * Returns the list of all roles that the given package is currently holding
     *
     * @param packageName the package name
     * @return the list of role names
     *
     * @hide
     */
    @RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
    @SystemApi
    @NonNull
    public List<String> getHeldRolesFromController(@NonNull String packageName) {
        Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
        try {
            return mService.getHeldRolesFromController(packageName);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    private static class RoleManagerCallbackDelegate extends IRoleManagerCallback.Stub {

        @NonNull
+12 −0
Original line number Diff line number Diff line
@@ -503,6 +503,18 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
            return userState.removeRoleHolder(roleName, packageName);
        }

        @Override
        public List<String> getHeldRolesFromController(@NonNull String packageName) {
            Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
            getContext().enforceCallingOrSelfPermission(
                    RoleManager.PERMISSION_MANAGE_ROLES_FROM_CONTROLLER,
                    "getRolesHeldFromController");

            int userId = UserHandle.getCallingUserId();
            RoleUserState userState = getOrCreateUserState(userId);
            return userState.getHeldRoles(packageName);
        }

        @CheckResult
        private int handleIncomingUser(@UserIdInt int userId, @NonNull String name) {
            return ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId,
+3 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.app.role.IRoleManagerCallback;
import android.os.RemoteException;
import android.os.ShellCommand;
import android.os.UserHandle;
import android.util.Log;

import java.io.PrintWriter;
import java.util.concurrent.CompletableFuture;
@@ -47,7 +48,8 @@ class RoleManagerShellCommand extends ShellCommand {
                mResult.get(5, TimeUnit.SECONDS);
                return 0;
            } catch (Exception e) {
                getErrPrintWriter().println("Error: " + e.toString());
                getErrPrintWriter().println("Error: see logcat for details.\n"
                        + Log.getStackTraceString(e));
                return -1;
            }
        }
Loading