DO NOT MERGE ANYWHERE Skip review permissions if package is installed with -g.

Bug: 34193954

Change-Id: Id744fd190ef78e498e635c2ab9936f12d0bbc917
(cherry picked from commit 6130fb741c)
This commit is contained in:
Svet Ganov
2017-01-17 13:50:46 -08:00
committed by Zheng Zhang
parent 4518d0be16
commit 4a601f972a

View File

@@ -1646,9 +1646,11 @@ public class PackageManagerService extends IPackageManager.Stub {
}
// Now that we successfully installed the package, grant runtime
// permissions if requested before broadcasting the install.
if (grantPermissions && res.pkg.applicationInfo.targetSdkVersion
>= Build.VERSION_CODES.M) {
// permissions if requested before broadcasting the install. Also
// for legacy apps in permission review mode we clear the permission
// review flag which is used to emulate runtime permissions for
// legacy apps.
if (grantPermissions) {
grantRequestedRuntimePermissions(res.pkg, res.newUsers, grantedPermissions);
}
@@ -1885,11 +1887,6 @@ public class PackageManagerService extends IPackageManager.Stub {
for (int userId : userIds) {
grantRequestedRuntimePermissionsForUser(pkg, userId, grantedPermissions);
}
// We could have touched GID membership, so flush out packages.list
synchronized (mPackages) {
mSettings.writePackageListLPr();
}
}
private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId,
@@ -1904,6 +1901,9 @@ public class PackageManagerService extends IPackageManager.Stub {
final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
| PackageManager.FLAG_PERMISSION_POLICY_FIXED;
final boolean supportsRuntimePermissions = pkg.applicationInfo.targetSdkVersion
>= Build.VERSION_CODES.M;
for (String permission : pkg.requestedPermissions) {
final BasePermission bp;
synchronized (mPackages) {
@@ -1913,9 +1913,18 @@ public class PackageManagerService extends IPackageManager.Stub {
&& (grantedPermissions == null
|| ArrayUtils.contains(grantedPermissions, permission))) {
final int flags = permissionsState.getPermissionFlags(permission, userId);
// Installer cannot change immutable permissions.
if ((flags & immutableFlags) == 0) {
grantRuntimePermission(pkg.packageName, permission, userId);
if (supportsRuntimePermissions) {
// Installer cannot change immutable permissions.
if ((flags & immutableFlags) == 0) {
grantRuntimePermission(pkg.packageName, permission, userId);
}
} else if (mPermissionReviewRequired) {
// In permission review mode we clear the review flag when we
// are asked to install the app with all permissions granted.
if ((flags & PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0) {
updatePermissionFlags(permission, pkg.packageName,
PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED, 0 /*value*/, userId);
}
}
}
}