Merge "Fix permission state missing when backup is restored." into sc-dev
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user