Loading src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +40 −22 Original line number Diff line number Diff line Loading @@ -184,6 +184,31 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> */ public static AppPermissionGroup create(Context context, PackageInfo packageInfo, PackageItemInfo groupInfo, List<PermissionInfo> permissionInfos, boolean delayChanges) { PackageManager packageManager = context.getPackageManager(); CharSequence groupLabel = groupInfo.loadLabel(packageManager); CharSequence fullGroupLabel = groupInfo.loadSafeLabel(packageManager, 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); return create(context, packageInfo, groupInfo, permissionInfos, groupLabel, fullGroupLabel, delayChanges); } /** * Create the app permission group. * * @param context the {@code Context} to retrieve system services. * @param packageInfo package information about the app. * @param groupInfo the information about the group created. * @param permissionInfos the information about the permissions belonging to the group. * @param groupLabel the label of the group. * @param fullGroupLabel the untruncated label of the group. * @param delayChanges whether to delay changes until {@link #persistChanges} is called. * * @return the AppPermissionGroup. */ public static AppPermissionGroup create(Context context, PackageInfo packageInfo, PackageItemInfo groupInfo, List<PermissionInfo> permissionInfos, CharSequence groupLabel, CharSequence fullGroupLabel, boolean delayChanges) { PackageManager packageManager = context.getPackageManager(); UserHandle userHandle = UserHandle.getUserHandleForUid(packageInfo.applicationInfo.uid); if (groupInfo instanceof PermissionInfo) { Loading @@ -195,20 +220,14 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> return null; } CharSequence groupLabel = groupInfo.loadLabel(context.getPackageManager()); String[] permissionNames = new String[permissionInfos.size()]; int numPermissionInfos = permissionInfos.size(); for (int i = 0; i < numPermissionInfos; i++) { permissionNames[i] = permissionInfos.get(i).name; } CharSequence fullGroupLabel = groupInfo.loadSafeLabel(context.getPackageManager(), 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class); AppPermissionGroup group = new AppPermissionGroup(context, packageInfo, groupInfo.name, groupInfo.packageName, groupLabel, fullGroupLabel, loadGroupDescription(context, groupInfo), getRequest(groupInfo), loadGroupDescription(context, groupInfo, packageManager), getRequest(groupInfo), getRequestDetail(groupInfo), getBackgroundRequest(groupInfo), getBackgroundRequestDetail(groupInfo), groupInfo.packageName, groupInfo.icon, userHandle, delayChanges); userHandle, delayChanges, appOpsManager); // Parse and create permissions reqested by the app ArrayMap<String, Permission> allPermissions = new ArrayMap<>(); Loading Loading @@ -253,12 +272,12 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> if (appOp == null) { appOpAllowed = false; } else { int appOpsMode = context.getSystemService(AppOpsManager.class).unsafeCheckOpRaw( appOp, packageInfo.applicationInfo.uid, packageName); int appOpsMode = appOpsManager.unsafeCheckOpRaw(appOp, packageInfo.applicationInfo.uid, packageName); appOpAllowed = appOpsMode == MODE_ALLOWED || appOpsMode == MODE_FOREGROUND; } final int flags = context.getPackageManager().getPermissionFlags( final int flags = packageManager.getPermissionFlags( requestedPermission, packageName, userHandle); Permission permission = new Permission(requestedPermission, requestedPermissionInfo, Loading Loading @@ -313,7 +332,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> group.getRequest(), group.getRequestDetail(), group.getBackgroundRequest(), group.getBackgroundRequestDetail(), group.getIconPkg(), group.getIconResId(), group.getUser(), delayChanges); delayChanges, appOpsManager); } group.getBackgroundPermissions().addPermission(permission); Loading Loading @@ -352,14 +371,13 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> } } private static CharSequence loadGroupDescription(Context context, PackageItemInfo group) { private static CharSequence loadGroupDescription(Context context, PackageItemInfo group, @NonNull PackageManager packageManager) { CharSequence description = null; if (group instanceof PermissionGroupInfo) { description = ((PermissionGroupInfo) group).loadDescription( context.getPackageManager()); description = ((PermissionGroupInfo) group).loadDescription(packageManager); } else if (group instanceof PermissionInfo) { description = ((PermissionInfo) group).loadDescription( context.getPackageManager()); description = ((PermissionInfo) group).loadDescription(packageManager); } if (description == null || description.length() <= 0) { Loading @@ -373,8 +391,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> String declaringPackage, CharSequence label, CharSequence fullLabel, CharSequence description, @StringRes int request, @StringRes int requestDetail, @StringRes int backgroundRequest, @StringRes int backgroundRequestDetail, String iconPkg, int iconResId, UserHandle userHandle, boolean delayChanges) { String iconPkg, int iconResId, UserHandle userHandle, boolean delayChanges, @NonNull AppOpsManager appOpsManager) { int targetSDK = packageInfo.applicationInfo.targetSdkVersion; mContext = context; Loading @@ -383,7 +401,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> mPackageInfo = packageInfo; mAppSupportsRuntimePermissions = targetSDK > Build.VERSION_CODES.LOLLIPOP_MR1; mIsEphemeralApp = packageInfo.applicationInfo.isInstantApp(); mAppOps = context.getSystemService(AppOpsManager.class); mAppOps = appOpsManager; mActivityManager = context.getSystemService(ActivityManager.class); mDeclaringPackage = declaringPackage; mName = name; Loading src/com/android/packageinstaller/permission/model/PermissionApps.java +18 −12 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; import android.util.Pair; Loading Loading @@ -210,6 +211,21 @@ public class PermissionApps { if (groupPermInfos == null) { return Collections.emptyList(); } List<PermissionInfo> targetPermInfos = new ArrayList<PermissionInfo>(groupPermInfos.size()); for (int i = 0; i < groupPermInfos.size(); i++) { PermissionInfo permInfo = groupPermInfos.get(i); if ((permInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) == PermissionInfo.PROTECTION_DANGEROUS && (permInfo.flags & PermissionInfo.FLAG_INSTALLED) != 0 && (permInfo.flags & PermissionInfo.FLAG_REMOVED) == 0) { targetPermInfos.add(permInfo); } } PackageManager packageManager = mContext.getPackageManager(); CharSequence groupLabel = groupInfo.loadLabel(packageManager); CharSequence fullGroupLabel = groupInfo.loadSafeLabel(packageManager, 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); ArrayList<PermissionApp> permApps = new ArrayList<>(); Loading @@ -228,7 +244,7 @@ public class PermissionApps { PermissionInfo requestedPermissionInfo = null; for (PermissionInfo groupPermInfo : groupPermInfos) { for (PermissionInfo groupPermInfo : targetPermInfos) { if (requestedPerm.equals(groupPermInfo.name)) { requestedPermissionInfo = groupPermInfo; break; Loading @@ -239,18 +255,8 @@ public class PermissionApps { continue; } if ((requestedPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) != PermissionInfo.PROTECTION_DANGEROUS || (requestedPermissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0 || (requestedPermissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0) { continue; } AppPermissionGroup group = AppPermissionGroup.create(mContext, app, groupInfo, groupPermInfos, false); app, groupInfo, groupPermInfos, groupLabel, fullGroupLabel, false); if (group == null) { continue; Loading Loading
src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +40 −22 Original line number Diff line number Diff line Loading @@ -184,6 +184,31 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> */ public static AppPermissionGroup create(Context context, PackageInfo packageInfo, PackageItemInfo groupInfo, List<PermissionInfo> permissionInfos, boolean delayChanges) { PackageManager packageManager = context.getPackageManager(); CharSequence groupLabel = groupInfo.loadLabel(packageManager); CharSequence fullGroupLabel = groupInfo.loadSafeLabel(packageManager, 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); return create(context, packageInfo, groupInfo, permissionInfos, groupLabel, fullGroupLabel, delayChanges); } /** * Create the app permission group. * * @param context the {@code Context} to retrieve system services. * @param packageInfo package information about the app. * @param groupInfo the information about the group created. * @param permissionInfos the information about the permissions belonging to the group. * @param groupLabel the label of the group. * @param fullGroupLabel the untruncated label of the group. * @param delayChanges whether to delay changes until {@link #persistChanges} is called. * * @return the AppPermissionGroup. */ public static AppPermissionGroup create(Context context, PackageInfo packageInfo, PackageItemInfo groupInfo, List<PermissionInfo> permissionInfos, CharSequence groupLabel, CharSequence fullGroupLabel, boolean delayChanges) { PackageManager packageManager = context.getPackageManager(); UserHandle userHandle = UserHandle.getUserHandleForUid(packageInfo.applicationInfo.uid); if (groupInfo instanceof PermissionInfo) { Loading @@ -195,20 +220,14 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> return null; } CharSequence groupLabel = groupInfo.loadLabel(context.getPackageManager()); String[] permissionNames = new String[permissionInfos.size()]; int numPermissionInfos = permissionInfos.size(); for (int i = 0; i < numPermissionInfos; i++) { permissionNames[i] = permissionInfos.get(i).name; } CharSequence fullGroupLabel = groupInfo.loadSafeLabel(context.getPackageManager(), 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class); AppPermissionGroup group = new AppPermissionGroup(context, packageInfo, groupInfo.name, groupInfo.packageName, groupLabel, fullGroupLabel, loadGroupDescription(context, groupInfo), getRequest(groupInfo), loadGroupDescription(context, groupInfo, packageManager), getRequest(groupInfo), getRequestDetail(groupInfo), getBackgroundRequest(groupInfo), getBackgroundRequestDetail(groupInfo), groupInfo.packageName, groupInfo.icon, userHandle, delayChanges); userHandle, delayChanges, appOpsManager); // Parse and create permissions reqested by the app ArrayMap<String, Permission> allPermissions = new ArrayMap<>(); Loading Loading @@ -253,12 +272,12 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> if (appOp == null) { appOpAllowed = false; } else { int appOpsMode = context.getSystemService(AppOpsManager.class).unsafeCheckOpRaw( appOp, packageInfo.applicationInfo.uid, packageName); int appOpsMode = appOpsManager.unsafeCheckOpRaw(appOp, packageInfo.applicationInfo.uid, packageName); appOpAllowed = appOpsMode == MODE_ALLOWED || appOpsMode == MODE_FOREGROUND; } final int flags = context.getPackageManager().getPermissionFlags( final int flags = packageManager.getPermissionFlags( requestedPermission, packageName, userHandle); Permission permission = new Permission(requestedPermission, requestedPermissionInfo, Loading Loading @@ -313,7 +332,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> group.getRequest(), group.getRequestDetail(), group.getBackgroundRequest(), group.getBackgroundRequestDetail(), group.getIconPkg(), group.getIconResId(), group.getUser(), delayChanges); delayChanges, appOpsManager); } group.getBackgroundPermissions().addPermission(permission); Loading Loading @@ -352,14 +371,13 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> } } private static CharSequence loadGroupDescription(Context context, PackageItemInfo group) { private static CharSequence loadGroupDescription(Context context, PackageItemInfo group, @NonNull PackageManager packageManager) { CharSequence description = null; if (group instanceof PermissionGroupInfo) { description = ((PermissionGroupInfo) group).loadDescription( context.getPackageManager()); description = ((PermissionGroupInfo) group).loadDescription(packageManager); } else if (group instanceof PermissionInfo) { description = ((PermissionInfo) group).loadDescription( context.getPackageManager()); description = ((PermissionInfo) group).loadDescription(packageManager); } if (description == null || description.length() <= 0) { Loading @@ -373,8 +391,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> String declaringPackage, CharSequence label, CharSequence fullLabel, CharSequence description, @StringRes int request, @StringRes int requestDetail, @StringRes int backgroundRequest, @StringRes int backgroundRequestDetail, String iconPkg, int iconResId, UserHandle userHandle, boolean delayChanges) { String iconPkg, int iconResId, UserHandle userHandle, boolean delayChanges, @NonNull AppOpsManager appOpsManager) { int targetSDK = packageInfo.applicationInfo.targetSdkVersion; mContext = context; Loading @@ -383,7 +401,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> mPackageInfo = packageInfo; mAppSupportsRuntimePermissions = targetSDK > Build.VERSION_CODES.LOLLIPOP_MR1; mIsEphemeralApp = packageInfo.applicationInfo.isInstantApp(); mAppOps = context.getSystemService(AppOpsManager.class); mAppOps = appOpsManager; mActivityManager = context.getSystemService(ActivityManager.class); mDeclaringPackage = declaringPackage; mName = name; Loading
src/com/android/packageinstaller/permission/model/PermissionApps.java +18 −12 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; import android.util.Pair; Loading Loading @@ -210,6 +211,21 @@ public class PermissionApps { if (groupPermInfos == null) { return Collections.emptyList(); } List<PermissionInfo> targetPermInfos = new ArrayList<PermissionInfo>(groupPermInfos.size()); for (int i = 0; i < groupPermInfos.size(); i++) { PermissionInfo permInfo = groupPermInfos.get(i); if ((permInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) == PermissionInfo.PROTECTION_DANGEROUS && (permInfo.flags & PermissionInfo.FLAG_INSTALLED) != 0 && (permInfo.flags & PermissionInfo.FLAG_REMOVED) == 0) { targetPermInfos.add(permInfo); } } PackageManager packageManager = mContext.getPackageManager(); CharSequence groupLabel = groupInfo.loadLabel(packageManager); CharSequence fullGroupLabel = groupInfo.loadSafeLabel(packageManager, 0, TextUtils.SAFE_STRING_FLAG_TRIM | TextUtils.SAFE_STRING_FLAG_FIRST_LINE); ArrayList<PermissionApp> permApps = new ArrayList<>(); Loading @@ -228,7 +244,7 @@ public class PermissionApps { PermissionInfo requestedPermissionInfo = null; for (PermissionInfo groupPermInfo : groupPermInfos) { for (PermissionInfo groupPermInfo : targetPermInfos) { if (requestedPerm.equals(groupPermInfo.name)) { requestedPermissionInfo = groupPermInfo; break; Loading @@ -239,18 +255,8 @@ public class PermissionApps { continue; } if ((requestedPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) != PermissionInfo.PROTECTION_DANGEROUS || (requestedPermissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0 || (requestedPermissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0) { continue; } AppPermissionGroup group = AppPermissionGroup.create(mContext, app, groupInfo, groupPermInfos, false); app, groupInfo, groupPermInfos, groupLabel, fullGroupLabel, false); if (group == null) { continue; Loading