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

Commit 5f4e5290 authored by Hai Zhang's avatar Hai Zhang
Browse files

Add PermissionControllerService.isRoleVisible() for app info shortcut.

The default app shortcut in app info inside Settings needs to know if
a role is visible, and whether it is visible is controlled logic in
PermissionController, hence add this API.
Also fixed a bug where the visibility config is not properly
retrieved.

Bug: 124452117
Bug: 124457823
Test: manual
Change-Id: I9888696dd36de91044c4fb9658f1c60c94d1801a
parent b27c7ed3
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -507,6 +507,11 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
                packageName, this);
    }

    @Override
    public boolean onIsRoleVisible(@NonNull String roleName) {
        return PermissionControllerServiceImplRoleMixin.onIsRoleVisible(roleName, this);
    }

    @Override
    public boolean onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String callerPackageName,
            @NonNull String packageName, @NonNull String unexpandedPermission, int grantState) {
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ public class VisibilityMixin {
     */
    public static boolean isVisible(@NonNull String resourceName, @NonNull Context context) {
        Resources resources = context.getResources();
        int resourceId = resources.getIdentifier(resourceName, "boolean", "android");
        int resourceId = resources.getIdentifier(resourceName, "bool", "android");
        if (resourceId == 0) {
            Log.w(LOG_TAG, "Cannot find resource for visibility: " + resourceName);
            return true;
+15 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.packageinstaller.role.service;

import android.content.Context;
import android.os.Process;

import androidx.annotation.NonNull;

@@ -46,4 +47,18 @@ public class PermissionControllerServiceImplRoleMixin {
        }
        return role.isPackageQualified(packageName, context);
    }

    /**
     * @see android.permission.PermissionControllerService#onIsRoleVisible(String)
     */
    public static boolean onIsRoleVisible(@NonNull String roleName, @NonNull Context context) {
        Role role = Roles.get(context).get(roleName);
        if (role == null) {
            return false;
        }
        if (!role.isAvailable(context)) {
            return false;
        }
        return role.isVisibleAsUser(Process.myUserHandle(), context);
    }
}