diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ec424f03ed75..a4c06557ca8e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -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(); |