Merge "Fix permission state missing when backup is restored." into sc-dev

This commit is contained in:
Hai Zhang
2021-02-26 21:59:42 +00:00
committed by Android (Google) Code Review

View File

@@ -5104,23 +5104,12 @@ public class PackageManagerService extends IPackageManager.Stub
InstallArgs args = data.args;
PackageInstalledInfo parentRes = data.res;
final boolean grantPermissions = (args.installFlags
& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
final boolean killApp = (args.installFlags
& PackageManager.INSTALL_DONT_KILL_APP) == 0;
final boolean virtualPreload = ((args.installFlags
& PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
final String[] grantedPermissions = args.installGrantPermissions;
final List<String> whitelistedRestrictedPermissions = ((args.installFlags
& PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS) != 0
&& parentRes.pkg != null)
? parentRes.pkg.getRequestedPermissions()
: args.whitelistedRestrictedPermissions;
int autoRevokePermissionsMode = args.autoRevokePermissionsMode;
handlePackagePostInstall(parentRes, grantPermissions,
killApp, virtualPreload, grantedPermissions,
whitelistedRestrictedPermissions, autoRevokePermissionsMode,
handlePackagePostInstall(parentRes, killApp, virtualPreload,
didRestore, args.installSource.installerPackageName, args.observer,
args.mDataLoaderType);
@@ -5399,11 +5388,8 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
private void handlePackagePostInstall(PackageInstalledInfo res, boolean grantPermissions,
boolean killApp, boolean virtualPreload,
String[] grantedPermissions, List<String> allowlistedRestrictedPermissions,
int autoRevokePermissionsMode,
boolean launchedForRestore, String installerPackage,
private void handlePackagePostInstall(PackageInstalledInfo res, boolean killApp,
boolean virtualPreload, boolean launchedForRestore, String installerPackage,
IPackageInstallObserver2 installObserver, int dataLoaderType) {
boolean succeeded = res.returnCode == PackageManager.INSTALL_SUCCEEDED;
final boolean update = res.removedInfo != null && res.removedInfo.removedPackage != null;
@@ -5434,29 +5420,6 @@ public class PackageManagerService extends IPackageManager.Stub
res.removedInfo.sendPackageRemovedBroadcasts(killApp, false /*removedBySystem*/);
}
final PermissionManagerServiceInternal.PackageInstalledParams.Builder
permissionParamsBuilder =
new PermissionManagerServiceInternal.PackageInstalledParams.Builder();
final List<String> grantedPermissionsList;
if (grantPermissions) {
if (grantedPermissions != null) {
permissionParamsBuilder.setGrantedPermissions(Arrays.asList(
grantedPermissions));
} else {
permissionParamsBuilder.setGrantedPermissions(
res.pkg.getRequestedPermissions());
}
}
if (allowlistedRestrictedPermissions != null) {
permissionParamsBuilder.setAllowlistedRestrictedPermissions(
allowlistedRestrictedPermissions);
}
permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
for (final int userId : res.newUsers) {
mPermissionManager.onPackageInstalled(res.pkg, permissionParamsBuilder.build(),
userId);
}
final String installerPackageName =
res.installerPackageName != null
? res.installerPackageName
@@ -18457,6 +18420,37 @@ public class PackageManagerService extends IPackageManager.Stub
}
mSettings.writeKernelMappingLPr(ps);
final PermissionManagerServiceInternal.PackageInstalledParams.Builder
permissionParamsBuilder =
new PermissionManagerServiceInternal.PackageInstalledParams.Builder();
final boolean grantPermissions = (installArgs.installFlags
& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
if (grantPermissions) {
final List<String> grantedPermissions =
installArgs.installGrantPermissions != null
? Arrays.asList(installArgs.installGrantPermissions)
: pkg.getRequestedPermissions();
permissionParamsBuilder.setGrantedPermissions(grantedPermissions);
}
final boolean allowlistAllRestrictedPermissions =
(installArgs.installFlags
& PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS) != 0;
final List<String> allowlistedRestrictedPermissions =
allowlistAllRestrictedPermissions ? pkg.getRequestedPermissions()
: installArgs.whitelistedRestrictedPermissions;
if (allowlistedRestrictedPermissions != null) {
permissionParamsBuilder.setAllowlistedRestrictedPermissions(
allowlistedRestrictedPermissions);
}
final int autoRevokePermissionsMode = installArgs.autoRevokePermissionsMode;
permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
for (int currentUserId : allUsersList) {
if (ps.getInstalled(currentUserId)) {
mPermissionManager.onPackageInstalled(pkg, permissionParamsBuilder.build(),
currentUserId);
}
}
}
res.name = pkgName;
res.uid = pkg.getUid();