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
diff --git a/PermissionController/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java b/PermissionController/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
index 09539d6..7c0dd3d 100644
--- a/PermissionController/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
+++ b/PermissionController/src/com/android/packageinstaller/permission/service/PermissionControllerServiceImpl.java
@@ -508,6 +508,11 @@
     }
 
     @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) {
         PackageInfo callerPkgInfo = getPkgInfo(callerPackageName);
diff --git a/PermissionController/src/com/android/packageinstaller/role/model/VisibilityMixin.java b/PermissionController/src/com/android/packageinstaller/role/model/VisibilityMixin.java
index 5096c31..4ba9287 100644
--- a/PermissionController/src/com/android/packageinstaller/role/model/VisibilityMixin.java
+++ b/PermissionController/src/com/android/packageinstaller/role/model/VisibilityMixin.java
@@ -38,7 +38,7 @@
      */
     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;
diff --git a/PermissionController/src/com/android/packageinstaller/role/service/PermissionControllerServiceImplRoleMixin.java b/PermissionController/src/com/android/packageinstaller/role/service/PermissionControllerServiceImplRoleMixin.java
index 29c7399..1914c41 100644
--- a/PermissionController/src/com/android/packageinstaller/role/service/PermissionControllerServiceImplRoleMixin.java
+++ b/PermissionController/src/com/android/packageinstaller/role/service/PermissionControllerServiceImplRoleMixin.java
@@ -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 @@
         }
         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);
+    }
 }