Check permission via PermissionManagerService in PackageManagerService.
As the first step towards moving PermissionsState out of package Setting. The usages for GIDs and installing a system package after uninstalling its update will be addressed in another change. Bug: 158736025 Test: presubmit Test: System boots Change-Id: Ic45a97eabb6957836d691ac1d3c9092648b0b523
This commit is contained in:
@@ -4206,13 +4206,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
Iterator<ResolveInfo> iter = matches.iterator();
|
||||
while (iter.hasNext()) {
|
||||
final ResolveInfo rInfo = iter.next();
|
||||
final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName);
|
||||
if (ps != null) {
|
||||
final PermissionsState permissionsState = ps.getPermissionsState();
|
||||
if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0)
|
||||
|| Build.IS_ENG) {
|
||||
continue;
|
||||
}
|
||||
if (checkPermission(Manifest.permission.INSTALL_PACKAGES,
|
||||
rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED || Build.IS_ENG) {
|
||||
continue;
|
||||
}
|
||||
iter.remove();
|
||||
}
|
||||
@@ -8592,10 +8588,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps,
|
||||
String[] permissions, boolean[] tmp, int flags, int userId) {
|
||||
int numMatch = 0;
|
||||
final PermissionsState permissionsState = ps.getPermissionsState();
|
||||
for (int i=0; i<permissions.length; i++) {
|
||||
final String permission = permissions[i];
|
||||
if (permissionsState.hasPermission(permission, userId)) {
|
||||
if (checkPermission(permission, ps.name, userId) == PERMISSION_GRANTED) {
|
||||
tmp[i] = true;
|
||||
numMatch++;
|
||||
} else {
|
||||
@@ -19222,6 +19217,13 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final int flags = action.flags;
|
||||
final boolean systemApp = isSystemApp(ps);
|
||||
|
||||
// We need to get the permission state before package state is (potentially) destroyed.
|
||||
final SparseBooleanArray hadSuspendAppsPermission = new SparseBooleanArray();
|
||||
for (int userId : allUserHandles) {
|
||||
hadSuspendAppsPermission.put(userId, checkPermission(Manifest.permission.SUSPEND_APPS,
|
||||
packageName, userId) == PERMISSION_GRANTED);
|
||||
}
|
||||
|
||||
final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
|
||||
|
||||
if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0)
|
||||
@@ -19288,8 +19290,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
affectedUserIds = resolveUserIds(userId);
|
||||
}
|
||||
for (final int affectedUserId : affectedUserIds) {
|
||||
if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS,
|
||||
affectedUserId)) {
|
||||
if (hadSuspendAppsPermission.get(affectedUserId)) {
|
||||
unsuspendForSuspendingPackage(packageName, affectedUserId);
|
||||
removeAllDistractingPackageRestrictions(affectedUserId);
|
||||
}
|
||||
@@ -21062,8 +21063,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
pkgSetting.setEnabled(newState, userId, callingPackage);
|
||||
if ((newState == COMPONENT_ENABLED_STATE_DISABLED_USER
|
||||
|| newState == COMPONENT_ENABLED_STATE_DISABLED)
|
||||
&& pkgSetting.getPermissionsState().hasPermission(
|
||||
Manifest.permission.SUSPEND_APPS, userId)) {
|
||||
&& checkPermission(Manifest.permission.SUSPEND_APPS, packageName, userId)
|
||||
== PERMISSION_GRANTED) {
|
||||
// This app should not generally be allowed to get disabled by the UI, but if it
|
||||
// ever does, we don't want to end up with some of the user's apps permanently
|
||||
// suspended.
|
||||
|
||||
Reference in New Issue
Block a user