diff options
Diffstat (limited to 'com/android/server/pm/permission/BasePermission.java')
-rw-r--r-- | com/android/server/pm/permission/BasePermission.java | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/com/android/server/pm/permission/BasePermission.java b/com/android/server/pm/permission/BasePermission.java index bcf4b07d..1d002efc 100644 --- a/com/android/server/pm/permission/BasePermission.java +++ b/com/android/server/pm/permission/BasePermission.java @@ -411,17 +411,23 @@ public final class BasePermission { } public @NonNull PermissionInfo generatePermissionInfo(int adjustedProtectionLevel, int flags) { - final boolean protectionLevelChanged = protectionLevel != adjustedProtectionLevel; - // if we return different protection level, don't use the cached info - if (perm != null && !protectionLevelChanged) { - return PackageParser.generatePermissionInfo(perm, flags); - } - final PermissionInfo pi = new PermissionInfo(); - pi.name = name; - pi.packageName = sourcePackageName; - pi.nonLocalizedLabel = name; - pi.protectionLevel = protectionLevelChanged ? adjustedProtectionLevel : protectionLevel; - return pi; + PermissionInfo permissionInfo; + if (perm != null) { + final boolean protectionLevelChanged = protectionLevel != adjustedProtectionLevel; + permissionInfo = PackageParser.generatePermissionInfo(perm, flags); + if (protectionLevelChanged && permissionInfo == perm.info) { + // if we return different protection level, don't use the cached info + permissionInfo = new PermissionInfo(permissionInfo); + permissionInfo.protectionLevel = adjustedProtectionLevel; + } + return permissionInfo; + } + permissionInfo = new PermissionInfo(); + permissionInfo.name = name; + permissionInfo.packageName = sourcePackageName; + permissionInfo.nonLocalizedLabel = name; + permissionInfo.protectionLevel = protectionLevel; + return permissionInfo; } public static boolean readLPw(@NonNull Map<String, BasePermission> out, |