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

Commit 71776eec authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge changes I6f314a65,I8020f029 into sc-dev am: e5c0de0d am: 95880e65"

parents 5f766989 aa2aa62e
Loading
Loading
Loading
Loading
+12 −22
Original line number Diff line number Diff line
@@ -7953,12 +7953,9 @@ public class PackageManagerService extends IPackageManager.Stub
                    } catch (PackageManagerException e) {
                        Slog.w(TAG, "updateAllSharedLibrariesLPw failed: ", e);
                    }
                    final int[] userIds = mUserManager.getUserIds();
                    for (final int userId : userIds) {
                    mPermissionManager.onPackageInstalled(pkg,
                            PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT,
                                userId);
                    }
                            UserHandle.USER_ALL);
                    writeSettingsLPrTEMP();
                }
            } catch (PackageManagerException e) {
@@ -19221,12 +19218,7 @@ public class PackageManagerService extends IPackageManager.Stub
                }
                final int autoRevokePermissionsMode = installArgs.autoRevokePermissionsMode;
                permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
                for (int currentUserId : allUsersList) {
                    if (ps.getInstalled(currentUserId)) {
                        mPermissionManager.onPackageInstalled(pkg, permissionParamsBuilder.build(),
                                currentUserId);
                    }
                }
                mPermissionManager.onPackageInstalled(pkg, permissionParamsBuilder.build(), userId);
            }
            res.name = pkgName;
            res.uid = pkg.getUid();
@@ -21870,10 +21862,8 @@ public class PackageManagerService extends IPackageManager.Stub
                        if (sharedUserPkgs == null) {
                            sharedUserPkgs = Collections.emptyList();
                        }
                        for (final int userId : allUserHandles) {
                        mPermissionManager.onPackageUninstalled(packageName, deletedPs.appId,
                                    deletedPs.pkg, sharedUserPkgs, userId);
                        }
                                deletedPs.pkg, sharedUserPkgs, UserHandle.USER_ALL);
                    }
                    clearPackagePreferredActivitiesLPw(
                            deletedPs.name, changedUsers, UserHandle.USER_ALL);
@@ -22090,11 +22080,12 @@ public class PackageManagerService extends IPackageManager.Stub
                }
            }
            for (final int userId : allUserHandles) {
            // The method below will take care of removing obsolete permissions and granting
            // install permissions.
            mPermissionManager.onPackageInstalled(pkg,
                        PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT, userId);
                    PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT,
                    UserHandle.USER_ALL);
            for (final int userId : allUserHandles) {
                if (applyUserRestrictions) {
                    mSettings.writePermissionStateForUserLPr(userId, false);
                }
@@ -22417,10 +22408,9 @@ public class PackageManagerService extends IPackageManager.Stub
            }
            removeKeystoreDataIfNeeded(mInjector.getUserManagerInternal(), nextUserId, ps.appId);
            clearPackagePreferredActivities(ps.name, nextUserId);
            mPermissionManager.onPackageUninstalled(ps.name, ps.appId, pkg, sharedUserPkgs,
                    nextUserId);
            mDomainVerificationManager.clearPackageForUser(ps.name, nextUserId);
        }
        mPermissionManager.onPackageUninstalled(ps.name, ps.appId, pkg, sharedUserPkgs, userId);
        if (outInfo != null) {
            if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
+56 −48
Original line number Diff line number Diff line
@@ -4031,17 +4031,14 @@ public class PermissionManagerService extends IPermissionManager.Stub {
     *
     * @param packageName The package that is updated
     * @param pkg The package that is updated, or {@code null} if package is deleted
     * @param filterUserId If not {@link UserHandle.USER_ALL}, only restore the permission state for
     *                     this particular user
     */
    private void updatePermissions(@NonNull String packageName, @Nullable AndroidPackage pkg,
                                   @UserIdInt int filterUserId) {
    private void updatePermissions(@NonNull String packageName, @Nullable AndroidPackage pkg) {
        // If the package is being deleted, update the permissions of all the apps
        final int flags =
                (pkg == null ? UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG
                        : UPDATE_PERMISSIONS_REPLACE_PKG);
        updatePermissions(packageName, pkg, getVolumeUuidForPackage(pkg), flags,
                mDefaultPermissionCallback, filterUserId);
        updatePermissions(
                packageName, pkg, getVolumeUuidForPackage(pkg), flags, mDefaultPermissionCallback);
    }

    /**
@@ -4063,8 +4060,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                    (fingerprintChanged
                            ? UPDATE_PERMISSIONS_REPLACE_PKG | UPDATE_PERMISSIONS_REPLACE_ALL
                            : 0);
            updatePermissions(null, null, volumeUuid, flags, mDefaultPermissionCallback,
                    UserHandle.USER_ALL);
            updatePermissions(null, null, volumeUuid, flags, mDefaultPermissionCallback);
        } finally {
            PackageManager.uncorkPackageInfoCache();
        }
@@ -4113,14 +4109,12 @@ public class PermissionManagerService extends IPermissionManager.Stub {
     *                          all volumes
     * @param flags Control permission for which apps should be updated
     * @param callback Callback to call after permission changes
     * @param filterUserId If not {@link UserHandle.USER_ALL}, only restore the permission state for
     *                     this particular user
     */
    private void updatePermissions(final @Nullable String changingPkgName,
            final @Nullable AndroidPackage changingPkg,
            final @Nullable String replaceVolumeUuid,
            @UpdatePermissionFlags int flags,
            final @Nullable PermissionCallback callback, @UserIdInt int filterUserId) {
            final @Nullable PermissionCallback callback) {
        // TODO: Most of the methods exposing BasePermission internals [source package name,
        // etc..] shouldn't be needed. Instead, when we've parsed a permission that doesn't
        // have package settings, we should make note of it elsewhere [map between
@@ -4156,7 +4150,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                // Only replace for packages on requested volume
                final String volumeUuid = getVolumeUuidForPackage(pkg);
                final boolean replace = replaceAll && Objects.equals(replaceVolumeUuid, volumeUuid);
                restorePermissionState(pkg, replace, changingPkgName, callback, filterUserId);
                restorePermissionState(pkg, replace, changingPkgName, callback,
                        UserHandle.USER_ALL);
            });
        }

@@ -4165,7 +4160,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            final String volumeUuid = getVolumeUuidForPackage(changingPkg);
            final boolean replace = ((flags & UPDATE_PERMISSIONS_REPLACE_PKG) != 0)
                    && Objects.equals(replaceVolumeUuid, volumeUuid);
            restorePermissionState(changingPkg, replace, changingPkgName, callback, filterUserId);
            restorePermissionState(changingPkg, replace, changingPkgName, callback,
                    UserHandle.USER_ALL);
        }
        Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
    }
@@ -4850,8 +4846,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {

    private void onPackageInstalledInternal(@NonNull AndroidPackage pkg,
            @NonNull PermissionManagerServiceInternal.PackageInstalledParams params,
            @UserIdInt int userId) {
        updatePermissions(pkg.getPackageName(), pkg, userId);
            @UserIdInt int[] userIds) {
        updatePermissions(pkg.getPackageName(), pkg);
        for (final int userId : userIds) {
            addAllowlistedRestrictedPermissionsInternal(pkg,
                    params.getAllowlistedRestrictedPermissions(),
                    FLAG_PERMISSION_WHITELIST_INSTALLER, userId);
@@ -4863,6 +4860,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            }
            grantRequestedRuntimePermissionsInternal(pkg, params.getGrantedPermissions(), userId);
        }
    }

    private void addAllowlistedRestrictedPermissionsInternal(@NonNull AndroidPackage pkg,
            @NonNull List<String> allowlistedRestrictedPermissions,
@@ -4884,7 +4882,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {

    private void onPackageUninstalledInternal(@NonNull String packageName, int appId,
            @Nullable AndroidPackage pkg, @NonNull List<AndroidPackage> sharedUserPkgs,
            @UserIdInt int userId) {
            @UserIdInt int[] userIds) {
        // TODO: Move these checks to check PackageState to be more reliable.
        // System packages should always have an available APK.
        if (pkg != null && pkg.isSystem()
@@ -4895,10 +4893,13 @@ public class PermissionManagerService extends IPermissionManager.Stub {
            // If we are only marking a system package as uninstalled, we need to keep its
            // pregranted permission state so that it still works once it gets reinstalled, thus
            // only reset the user modifications to its permission state.
            for (final int userId : userIds) {
                resetRuntimePermissionsInternal(pkg, userId);
            }
            return;
        }
        updatePermissions(packageName, null, userId);
        updatePermissions(packageName, null);
        for (final int userId : userIds) {
            if (sharedUserPkgs.isEmpty()) {
                removeUidStateAndResetPackageInstallPermissionsFixed(appId, packageName, userId);
            } else {
@@ -4919,6 +4920,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                }
            }
        }
    }

    @NonNull
    private List<LegacyPermission> getLegacyPermissions() {
@@ -5190,8 +5192,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                @NonNull PackageInstalledParams params, @UserIdInt int userId) {
            Objects.requireNonNull(pkg, "pkg");
            Objects.requireNonNull(params, "params");
            Preconditions.checkArgumentNonNegative(userId, "userId");
            onPackageInstalledInternal(pkg, params, userId);
            Preconditions.checkArgument(userId >= UserHandle.USER_SYSTEM
                    || userId == UserHandle.USER_ALL, "userId");
            final int[] userIds = userId == UserHandle.USER_ALL ? getAllUserIds()
                    : new int[] { userId };
            onPackageInstalledInternal(pkg, params, userIds);
        }

        @Override
@@ -5206,8 +5211,11 @@ public class PermissionManagerService extends IPermissionManager.Stub {
                @UserIdInt int userId) {
            Objects.requireNonNull(packageName, "packageName");
            Objects.requireNonNull(sharedUserPkgs, "sharedUserPkgs");
            Preconditions.checkArgumentNonNegative(userId, "userId");
            onPackageUninstalledInternal(packageName, appId, pkg, sharedUserPkgs, userId);
            Preconditions.checkArgument(userId >= UserHandle.USER_SYSTEM
                    || userId == UserHandle.USER_ALL, "userId");
            final int[] userIds = userId == UserHandle.USER_ALL ? getAllUserIds()
                    : new int[] { userId };
            onPackageUninstalledInternal(packageName, appId, pkg, sharedUserPkgs, userIds);
        }

        @NonNull