Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9793a678 authored by Hai Zhang's avatar Hai Zhang Committed by Android (Google) Code Review
Browse files

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

parents e9e56074 416a04e4
Loading
Loading
Loading
Loading
+35 −41
Original line number Diff line number Diff line
@@ -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();