Merge "[pm] fix missing PACKAGE_CHANGED broadcasts" into tm-dev

This commit is contained in:
Songchun Fan
2022-06-08 16:46:38 +00:00
committed by Android (Google) Code Review

View File

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