Copy resume callbacks list prior to making callbacks

- Starting a deferred activity can trigger a new callback to be added
  to the list while we are iterating it

Bug: 136613192
Change-Id: I6690ab0695bb73f11bf343fb41e9fc86b4afec1b
This commit is contained in:
Winson Chung
2019-07-09 11:33:50 -07:00
parent 66b1cc9675
commit 940b0ac015
+7 -3
View File
@@ -952,10 +952,14 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
mHandler.removeCallbacks(mHandleDeferredResume);
Utilities.postAsyncCallback(mHandler, mHandleDeferredResume);
for (OnResumeCallback cb : mOnResumeCallbacks) {
cb.onLauncherResume();
if (!mOnResumeCallbacks.isEmpty()) {
final ArrayList<OnResumeCallback> resumeCallbacks = new ArrayList<>(mOnResumeCallbacks);
mOnResumeCallbacks.clear();
for (int i = resumeCallbacks.size() - 1; i >= 0; i--) {
resumeCallbacks.get(i).onLauncherResume();
}
resumeCallbacks.clear();
}
mOnResumeCallbacks.clear();
if (mLauncherCallbacks != null) {
mLauncherCallbacks.onResume();