Merge "Fix a outer loop iterates on item that is removed by inner loop problem." into udc-dev am: dab1a6309b

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

Change-Id: I4c638d7e334ee142621bb8b3d8fc0c0bdab4845f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Hui Yu
2023-02-24 04:52:50 +00:00
committed by Automerger Merge Worker

View File

@@ -522,6 +522,7 @@ public final class ActiveServices {
final ArrayList<ServiceRecord> mStartingBackground = new ArrayList<>();
final ArrayMap<String, ActiveForegroundApp> mActiveForegroundApps = new ArrayMap<>();
final ArrayList<String> mPendingRemoveForegroundApps = new ArrayList<>();
boolean mActiveForegroundAppsChanged;
@@ -1687,13 +1688,14 @@ public final class ActiveServices {
if (smap != null) {
if (DEBUG_FOREGROUND_SERVICE) Slog.d(TAG, "Updating foreground apps for user "
+ smap.mUserId);
smap.mPendingRemoveForegroundApps.clear();
for (int i = smap.mActiveForegroundApps.size()-1; i >= 0; i--) {
ActiveForegroundApp aa = smap.mActiveForegroundApps.valueAt(i);
if (aa.mEndTime != 0) {
boolean canRemove = foregroundAppShownEnoughLocked(aa, now);
if (canRemove) {
// This was up for longer than the timeout, so just remove immediately.
smap.mActiveForegroundApps.removeAt(i);
smap.mPendingRemoveForegroundApps.add(smap.mActiveForegroundApps.keyAt(i));
smap.mActiveForegroundAppsChanged = true;
continue;
}
@@ -1718,6 +1720,9 @@ public final class ActiveServices {
}
}
}
for(int i = smap.mPendingRemoveForegroundApps.size() - 1; i >= 0; i--) {
smap.mActiveForegroundApps.remove(smap.mPendingRemoveForegroundApps.get(i));
}
smap.removeMessages(ServiceMap.MSG_UPDATE_FOREGROUND_APPS);
if (nextUpdateTime < Long.MAX_VALUE) {
if (DEBUG_FOREGROUND_SERVICE) Slog.d(TAG, "Next update time in: "