From a69673de08057f10b230779efcb9c95193d0bb37 Mon Sep 17 00:00:00 2001 From: minch Date: Wed, 8 Jan 2025 18:38:31 +0000 Subject: [PATCH] Run the given callback only inside `runOnPageScrollsInitialized` Let `PagedView.runOnPageScrollsInitialized` run the given callback only instead of running all the current existing callbacks inside `mOnPageScrollsInitializedCallbacks` once `mPageScrolls` has been initialized. All the existing callbacks will be run by `PagedView.onPageScrollsInitialized` instead. By doing this, we can avoid some unexpected crash while running the pending callbacks in some scenarios. E.g., removeAllViews. Flag: EXEMPT fix a regression Bug: 385612978 Test: Manual Change-Id: I0877cff752aabd1569dd54a9d04001687f90a5f6 --- src/com/android/launcher3/PagedView.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 0ec3b79071..5072e37314 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -718,12 +718,14 @@ public abstract class PagedView extends ViewGrou } /** - * Queues the given callback to be run once {@code mPageScrolls} has been initialized. + * Run the given `callback` immediately once {@code mPageScrolls} has been initialized, + * otherwise queue the callback to `mOnPageScrollsInitializedCallbacks`. */ public void runOnPageScrollsInitialized(Runnable callback) { - mOnPageScrollsInitializedCallbacks.add(callback); if (isPageScrollsInitialized()) { - onPageScrollsInitialized(); + callback.run(); + } else { + mOnPageScrollsInitializedCallbacks.add(callback); } }