Loading services/core/java/com/android/server/pm/PackageManagerService.java +12 −22 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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) { services/core/java/com/android/server/pm/permission/PermissionManagerService.java +56 −48 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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(); } Loading Loading @@ -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 Loading Loading @@ -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); }); } Loading @@ -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); } Loading Loading @@ -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); Loading @@ -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, Loading @@ -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() Loading @@ -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 { Loading @@ -4919,6 +4920,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } @NonNull private List<LegacyPermission> getLegacyPermissions() { Loading Loading @@ -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 Loading @@ -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 Loading Loading
services/core/java/com/android/server/pm/PackageManagerService.java +12 −22 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -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); } Loading Loading @@ -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) {
services/core/java/com/android/server/pm/permission/PermissionManagerService.java +56 −48 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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(); } Loading Loading @@ -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 Loading Loading @@ -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); }); } Loading @@ -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); } Loading Loading @@ -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); Loading @@ -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, Loading @@ -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() Loading @@ -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 { Loading @@ -4919,6 +4920,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { } } } } @NonNull private List<LegacyPermission> getLegacyPermissions() { Loading Loading @@ -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 Loading @@ -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 Loading