Loading core/java/com/android/internal/content/PackageMonitor.java +0 −3 Original line number Diff line number Diff line Loading @@ -70,9 +70,6 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { mPackageFilt = new IntentFilter(); // Settings app sends the broadcast mPackageFilt.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART); // AMS sends the broadcast mPackageFilt.addAction(Intent.ACTION_PACKAGE_RESTARTED); mPackageFilt.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED); mPackageFilt.addDataScheme("package"); if (isCore) { mPackageFilt.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); Loading services/core/java/android/content/pm/PackageManagerInternal.java +7 −1 Original line number Diff line number Diff line Loading @@ -1421,7 +1421,7 @@ public abstract class PackageManagerInternal { @UserIdInt int userId); /** * Sends the PACKAGE_RESTARTED broadcast on the package manager handler thread. * Sends the PACKAGE_RESTARTED broadcast. */ public abstract void sendPackageRestartedBroadcast(@NonNull String packageName, int uid, @Intent.Flags int flags); Loading @@ -1431,4 +1431,10 @@ public abstract class PackageManagerInternal { */ public abstract ParceledListSlice<PackageInstaller.SessionInfo> getHistoricalSessions( int userId); /** * Sends the ACTION_PACKAGE_DATA_CLEARED broadcast. */ public abstract void sendPackageDataClearedBroadcast(@NonNull String packageName, int uid, int userId, boolean isRestore, boolean isInstantApp); } services/core/java/com/android/server/am/ActivityManagerService.java +5 −47 Original line number Diff line number Diff line Loading @@ -3634,30 +3634,10 @@ public class ActivityManagerService extends IActivityManager.Stub } if (succeeded) { final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED, Uri.fromParts("package", packageName, null /* fragment */)); intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(Intent.EXTRA_UID, (appInfo != null) ? appInfo.uid : INVALID_UID); intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId); if (isRestore) { intent.putExtra(Intent.EXTRA_IS_RESTORE, true); } if (isInstantApp) { intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); } final int[] visibilityAllowList = mPackageManagerInt.getVisibilityAllowList( packageName, resolvedUserId); broadcastIntentInPackage("android", null /* featureId */, SYSTEM_UID, uid, pid, intent, null /* resolvedType */, null /* resultToApp */, null /* resultTo */, 0 /* resultCode */, null /* resultData */, null /* resultExtras */, isInstantApp ? permission.ACCESS_INSTANT_APPS : null, null /* bOptions */, false /* serialized */, false /* sticky */, resolvedUserId, BackgroundStartPrivileges.NONE, visibilityAllowList); mPackageManagerInt.sendPackageDataClearedBroadcast(packageName, ((appInfo != null) ? appInfo.uid : INVALID_UID), resolvedUserId, isRestore, isInstantApp); } if (observer != null) { Loading Loading @@ -4178,29 +4158,7 @@ public class ActivityManagerService extends IActivityManager.Stub flags = Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND; } if (android.content.pm.Flags.stayStopped()) { // Sent async using the PM handler, to maintain ordering with PACKAGE_UNSTOPPED mPackageManagerInt.sendPackageRestartedBroadcast(packageName, uid, flags); } else { Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED, Uri.fromParts("package", packageName, null)); intent.addFlags(flags); final int userId = UserHandle.getUserId(uid); final int[] broadcastAllowList = getPackageManagerInternal().getVisibilityAllowList(packageName, userId); intent.putExtra(Intent.EXTRA_UID, uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); broadcastIntentLocked(null /* callerApp */, null /* callerPackage */, null /* callerFeatureId */, intent, null /* resolvedType */, null /* resultToApp */, null /* resultTo */, 0 /* resultCode */, null /* resultData */, null /* resultExtras */, null /* requiredPermissions */, null /* excludedPermissions */, null /* excludedPackages */, OP_NONE, null /* bOptions */, false /* ordered */, false /* sticky */, MY_PID, SYSTEM_UID, Binder.getCallingUid(), Binder.getCallingPid(), userId, BackgroundStartPrivileges.NONE, broadcastAllowList, null /* filterExtrasForReceiver */); } mPackageManagerInt.sendPackageRestartedBroadcast(packageName, uid, flags); } private void cleanupDisabledPackageComponentsLocked( Loading services/core/java/com/android/server/pm/BroadcastHelper.java +47 −22 Original line number Diff line number Diff line Loading @@ -100,6 +100,22 @@ public final class BroadcastHelper { mAppsFilter = injector.getAppsFilter(); } /** * Sends a broadcast to registered clients on userId for the given Intent. */ void sendPackageBroadcastWithIntent(Intent intent, int userId, boolean isInstantApp, @Intent.Flags int flags, int[] visibilityAllowList, final IIntentReceiver finishedReceiver, @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver, @Nullable Bundle bOptions) { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT | flags); SparseArray<int[]> broadcastAllowList = new SparseArray<>(); broadcastAllowList.put(userId, visibilityAllowList); broadcastIntent(intent, finishedReceiver, isInstantApp, userId, broadcastAllowList, filterExtrasForReceiver, bOptions); } void sendPackageBroadcast(final String action, final String pkg, final Bundle extras, final int flags, final String targetPkg, final IIntentReceiver finishedReceiver, final int[] userIds, int[] instantUserIds, Loading Loading @@ -152,8 +168,6 @@ public final class BroadcastHelper { for (int userId : userIds) { final Intent intent = new Intent(action, pkg != null ? Uri.fromParts(PACKAGE_SCHEME, pkg, null) : null); final String[] requiredPermissions = isInstantApp ? INSTANT_APP_BROADCAST_PERMISSION : null; if (extras != null) { intent.putExtras(extras); } Loading @@ -172,6 +186,18 @@ public final class BroadcastHelper { } intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT | flags); broadcastIntent(intent, finishedReceiver, isInstantApp, userId, broadcastAllowList, filterExtrasForReceiver, bOptions); } } private void broadcastIntent(Intent intent, IIntentReceiver finishedReceiver, boolean isInstantApp, int userId, @Nullable SparseArray<int[]> broadcastAllowList, @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver, @Nullable Bundle bOptions) { final String[] requiredPermissions = isInstantApp ? INSTANT_APP_BROADCAST_PERMISSION : null; if (DEBUG_BROADCASTS) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); Loading @@ -194,7 +220,6 @@ public final class BroadcastHelper { broadcastAllowList == null ? null : broadcastAllowList.get(userId), filterExtrasForReceiver, bOptions); } } void sendResourcesChangedBroadcast(@NonNull Computer snapshot, boolean mediaStatus, Loading services/core/java/com/android/server/pm/PackageManagerService.java +39 −3 Original line number Diff line number Diff line Loading @@ -6972,7 +6972,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService final Bundle extras = new Bundle(); extras.putInt(Intent.EXTRA_UID, uid); extras.putInt(Intent.EXTRA_USER_HANDLE, userId); if (android.content.pm.Flags.stayStopped()) { extras.putLong(Intent.EXTRA_TIME, SystemClock.elapsedRealtime()); // Sent async using the PM handler, to maintain ordering with PACKAGE_UNSTOPPED mHandler.post(() -> { mBroadcastHelper.sendPackageBroadcast(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, Loading @@ -6980,6 +6982,40 @@ public class PackageManagerService implements PackageSender, TestUtilityService userIds, null, broadcastAllowList, null, null); }); } else { mBroadcastHelper.sendPackageBroadcast(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, flags, null, null, userIds, null, broadcastAllowList, null, null); } mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, userIds, null /* instantUserIds */, broadcastAllowList, mHandler); } @Override public void sendPackageDataClearedBroadcast(@NonNull String packageName, int uid, int userId, boolean isRestore, boolean isInstantApp) { int[] visibilityAllowList = snapshotComputer().getVisibilityAllowList(packageName, userId); final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED, Uri.fromParts("package", packageName, null /* fragment */)); intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(Intent.EXTRA_UID, uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); if (isRestore) { intent.putExtra(Intent.EXTRA_IS_RESTORE, true); } if (isInstantApp) { intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); } mBroadcastHelper.sendPackageBroadcastWithIntent(intent, userId, isInstantApp, 0 /* flags */, visibilityAllowList, null /* finishedReceiver */, null /* filterExtrasForReceiver */, null /* bOptions */); mPackageMonitorCallbackHelper.notifyPackageMonitorWithIntent(intent, userId, visibilityAllowList, mHandler); } } Loading Loading
core/java/com/android/internal/content/PackageMonitor.java +0 −3 Original line number Diff line number Diff line Loading @@ -70,9 +70,6 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { mPackageFilt = new IntentFilter(); // Settings app sends the broadcast mPackageFilt.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART); // AMS sends the broadcast mPackageFilt.addAction(Intent.ACTION_PACKAGE_RESTARTED); mPackageFilt.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED); mPackageFilt.addDataScheme("package"); if (isCore) { mPackageFilt.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); Loading
services/core/java/android/content/pm/PackageManagerInternal.java +7 −1 Original line number Diff line number Diff line Loading @@ -1421,7 +1421,7 @@ public abstract class PackageManagerInternal { @UserIdInt int userId); /** * Sends the PACKAGE_RESTARTED broadcast on the package manager handler thread. * Sends the PACKAGE_RESTARTED broadcast. */ public abstract void sendPackageRestartedBroadcast(@NonNull String packageName, int uid, @Intent.Flags int flags); Loading @@ -1431,4 +1431,10 @@ public abstract class PackageManagerInternal { */ public abstract ParceledListSlice<PackageInstaller.SessionInfo> getHistoricalSessions( int userId); /** * Sends the ACTION_PACKAGE_DATA_CLEARED broadcast. */ public abstract void sendPackageDataClearedBroadcast(@NonNull String packageName, int uid, int userId, boolean isRestore, boolean isInstantApp); }
services/core/java/com/android/server/am/ActivityManagerService.java +5 −47 Original line number Diff line number Diff line Loading @@ -3634,30 +3634,10 @@ public class ActivityManagerService extends IActivityManager.Stub } if (succeeded) { final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED, Uri.fromParts("package", packageName, null /* fragment */)); intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(Intent.EXTRA_UID, (appInfo != null) ? appInfo.uid : INVALID_UID); intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId); if (isRestore) { intent.putExtra(Intent.EXTRA_IS_RESTORE, true); } if (isInstantApp) { intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); } final int[] visibilityAllowList = mPackageManagerInt.getVisibilityAllowList( packageName, resolvedUserId); broadcastIntentInPackage("android", null /* featureId */, SYSTEM_UID, uid, pid, intent, null /* resolvedType */, null /* resultToApp */, null /* resultTo */, 0 /* resultCode */, null /* resultData */, null /* resultExtras */, isInstantApp ? permission.ACCESS_INSTANT_APPS : null, null /* bOptions */, false /* serialized */, false /* sticky */, resolvedUserId, BackgroundStartPrivileges.NONE, visibilityAllowList); mPackageManagerInt.sendPackageDataClearedBroadcast(packageName, ((appInfo != null) ? appInfo.uid : INVALID_UID), resolvedUserId, isRestore, isInstantApp); } if (observer != null) { Loading Loading @@ -4178,29 +4158,7 @@ public class ActivityManagerService extends IActivityManager.Stub flags = Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND; } if (android.content.pm.Flags.stayStopped()) { // Sent async using the PM handler, to maintain ordering with PACKAGE_UNSTOPPED mPackageManagerInt.sendPackageRestartedBroadcast(packageName, uid, flags); } else { Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED, Uri.fromParts("package", packageName, null)); intent.addFlags(flags); final int userId = UserHandle.getUserId(uid); final int[] broadcastAllowList = getPackageManagerInternal().getVisibilityAllowList(packageName, userId); intent.putExtra(Intent.EXTRA_UID, uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); broadcastIntentLocked(null /* callerApp */, null /* callerPackage */, null /* callerFeatureId */, intent, null /* resolvedType */, null /* resultToApp */, null /* resultTo */, 0 /* resultCode */, null /* resultData */, null /* resultExtras */, null /* requiredPermissions */, null /* excludedPermissions */, null /* excludedPackages */, OP_NONE, null /* bOptions */, false /* ordered */, false /* sticky */, MY_PID, SYSTEM_UID, Binder.getCallingUid(), Binder.getCallingPid(), userId, BackgroundStartPrivileges.NONE, broadcastAllowList, null /* filterExtrasForReceiver */); } mPackageManagerInt.sendPackageRestartedBroadcast(packageName, uid, flags); } private void cleanupDisabledPackageComponentsLocked( Loading
services/core/java/com/android/server/pm/BroadcastHelper.java +47 −22 Original line number Diff line number Diff line Loading @@ -100,6 +100,22 @@ public final class BroadcastHelper { mAppsFilter = injector.getAppsFilter(); } /** * Sends a broadcast to registered clients on userId for the given Intent. */ void sendPackageBroadcastWithIntent(Intent intent, int userId, boolean isInstantApp, @Intent.Flags int flags, int[] visibilityAllowList, final IIntentReceiver finishedReceiver, @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver, @Nullable Bundle bOptions) { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT | flags); SparseArray<int[]> broadcastAllowList = new SparseArray<>(); broadcastAllowList.put(userId, visibilityAllowList); broadcastIntent(intent, finishedReceiver, isInstantApp, userId, broadcastAllowList, filterExtrasForReceiver, bOptions); } void sendPackageBroadcast(final String action, final String pkg, final Bundle extras, final int flags, final String targetPkg, final IIntentReceiver finishedReceiver, final int[] userIds, int[] instantUserIds, Loading Loading @@ -152,8 +168,6 @@ public final class BroadcastHelper { for (int userId : userIds) { final Intent intent = new Intent(action, pkg != null ? Uri.fromParts(PACKAGE_SCHEME, pkg, null) : null); final String[] requiredPermissions = isInstantApp ? INSTANT_APP_BROADCAST_PERMISSION : null; if (extras != null) { intent.putExtras(extras); } Loading @@ -172,6 +186,18 @@ public final class BroadcastHelper { } intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT | flags); broadcastIntent(intent, finishedReceiver, isInstantApp, userId, broadcastAllowList, filterExtrasForReceiver, bOptions); } } private void broadcastIntent(Intent intent, IIntentReceiver finishedReceiver, boolean isInstantApp, int userId, @Nullable SparseArray<int[]> broadcastAllowList, @Nullable BiFunction<Integer, Bundle, Bundle> filterExtrasForReceiver, @Nullable Bundle bOptions) { final String[] requiredPermissions = isInstantApp ? INSTANT_APP_BROADCAST_PERMISSION : null; if (DEBUG_BROADCASTS) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); Loading @@ -194,7 +220,6 @@ public final class BroadcastHelper { broadcastAllowList == null ? null : broadcastAllowList.get(userId), filterExtrasForReceiver, bOptions); } } void sendResourcesChangedBroadcast(@NonNull Computer snapshot, boolean mediaStatus, Loading
services/core/java/com/android/server/pm/PackageManagerService.java +39 −3 Original line number Diff line number Diff line Loading @@ -6972,7 +6972,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService final Bundle extras = new Bundle(); extras.putInt(Intent.EXTRA_UID, uid); extras.putInt(Intent.EXTRA_USER_HANDLE, userId); if (android.content.pm.Flags.stayStopped()) { extras.putLong(Intent.EXTRA_TIME, SystemClock.elapsedRealtime()); // Sent async using the PM handler, to maintain ordering with PACKAGE_UNSTOPPED mHandler.post(() -> { mBroadcastHelper.sendPackageBroadcast(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, Loading @@ -6980,6 +6982,40 @@ public class PackageManagerService implements PackageSender, TestUtilityService userIds, null, broadcastAllowList, null, null); }); } else { mBroadcastHelper.sendPackageBroadcast(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, flags, null, null, userIds, null, broadcastAllowList, null, null); } mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_RESTARTED, packageName, extras, userIds, null /* instantUserIds */, broadcastAllowList, mHandler); } @Override public void sendPackageDataClearedBroadcast(@NonNull String packageName, int uid, int userId, boolean isRestore, boolean isInstantApp) { int[] visibilityAllowList = snapshotComputer().getVisibilityAllowList(packageName, userId); final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED, Uri.fromParts("package", packageName, null /* fragment */)); intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(Intent.EXTRA_UID, uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, userId); if (isRestore) { intent.putExtra(Intent.EXTRA_IS_RESTORE, true); } if (isInstantApp) { intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); } mBroadcastHelper.sendPackageBroadcastWithIntent(intent, userId, isInstantApp, 0 /* flags */, visibilityAllowList, null /* finishedReceiver */, null /* filterExtrasForReceiver */, null /* bOptions */); mPackageMonitorCallbackHelper.notifyPackageMonitorWithIntent(intent, userId, visibilityAllowList, mHandler); } } Loading