Merge "[pm] fix missing PACKAGE_CHANGED broadcasts" into tm-dev am: d70fd7a211 am: 5fe1b1fbd6 am: 8bbc439126

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18750072

Change-Id: I53680f91a026737bbf1e7f700578bda8c0f8c1dc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Songchun Fan
2022-06-08 18:06:09 +00:00
committed by Automerger Merge Worker

View File

@@ -2548,28 +2548,31 @@ final class InstallPackageHelper {
public void sendPendingBroadcasts() {
String[] packages;
ArrayList<String>[] components;
int size = 0;
int numBroadcasts = 0, numUsers;
int[] uids;
synchronized (mPm.mLock) {
final SparseArray<ArrayMap<String, ArrayList<String>>> userIdToPackagesToComponents =
mPm.mPendingBroadcasts.copiedMap();
size = userIdToPackagesToComponents.size();
if (size <= 0) {
numUsers = userIdToPackagesToComponents.size();
for (int n = 0; n < numUsers; n++) {
numBroadcasts += userIdToPackagesToComponents.valueAt(n).size();
}
if (numBroadcasts == 0) {
// Nothing to be done. Just return
return;
}
packages = new String[size];
components = new ArrayList[size];
uids = new int[size];
packages = new String[numBroadcasts];
components = new ArrayList[numBroadcasts];
uids = new int[numBroadcasts];
int i = 0; // filling out the above arrays
for (int n = 0; n < size; n++) {
for (int n = 0; n < numUsers; n++) {
final int packageUserId = userIdToPackagesToComponents.keyAt(n);
final ArrayMap<String, ArrayList<String>> componentsToBroadcast =
userIdToPackagesToComponents.valueAt(n);
final int numComponents = CollectionUtils.size(componentsToBroadcast);
for (int index = 0; i < size && index < numComponents; index++) {
for (int index = 0; index < numComponents; index++) {
packages[i] = componentsToBroadcast.keyAt(index);
components[i] = componentsToBroadcast.valueAt(index);
final PackageSetting ps = mPm.mSettings.getPackageLPr(packages[i]);
@@ -2579,12 +2582,12 @@ final class InstallPackageHelper {
i++;
}
}
size = i;
numBroadcasts = i;
mPm.mPendingBroadcasts.clear();
}
final Computer snapshot = mPm.snapshotComputer();
// Send broadcasts
for (int i = 0; i < size; i++) {
for (int i = 0; i < numBroadcasts; i++) {
mPm.sendPackageChangedBroadcast(snapshot, packages[i], true /* dontKillApp */,
components[i], uids[i], null /* reason */);
}