From 7bb558a57e17579f1de27d5da6dc1e9da64f733b Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Thu, 15 Dec 2022 05:42:53 -0800 Subject: [PATCH] Add check for loading ever applied in check for page scrolls initialized When "Don't keep activities" is enabled in developer settings, the RecentsView gets re-initialized every home gesture. The home animation can often finish before the load plan ever gets applied, so the page scrolls can be used before the RecentsView has had a chance to add all its TaskViews and recalculate its page scroll. Fixes: 249020573 Test: launched an app and went home Change-Id: I83ca9de60b50693f7a22b08534ec36973cd6a0fc --- .../com/android/quickstep/views/RecentsView.java | 13 ++++++++++++- src/com/android/launcher3/PagedView.java | 12 ++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 8b406ec4f7..1d75360b3e 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1471,6 +1471,11 @@ public abstract class RecentsView taskGroups) { if (mPendingAnimation != null) { mPendingAnimation.addEndListener(success -> applyLoadPlan(taskGroups)); @@ -1484,6 +1489,9 @@ public abstract class RecentsView extends ViewGrou } /** Returns true iff this PagedView's scroll amounts are initialized to each page index. */ - protected boolean pageScrollsInitialized() { + protected boolean isPageScrollsInitialized() { return mPageScrolls != null && mPageScrolls.length == getChildCount(); } @@ -708,12 +708,12 @@ public abstract class PagedView extends ViewGrou */ public void runOnPageScrollsInitialized(Runnable callback) { mOnPageScrollsInitializedCallbacks.add(callback); - if (pageScrollsInitialized()) { + if (isPageScrollsInitialized()) { onPageScrollsInitialized(); } } - private void onPageScrollsInitialized() { + protected void onPageScrollsInitialized() { for (Runnable callback : mOnPageScrollsInitializedCallbacks) { callback.run(); } @@ -727,7 +727,7 @@ public abstract class PagedView extends ViewGrou final int childCount = getChildCount(); int[] pageScrolls = mPageScrolls; boolean pageScrollChanged = false; - if (!pageScrollsInitialized()) { + if (!isPageScrollsInitialized()) { pageScrolls = new int[childCount]; pageScrollChanged = true; } @@ -1199,7 +1199,7 @@ public abstract class PagedView extends ViewGrou } public int getScrollForPage(int index) { - if (!pageScrollsInitialized() || index >= mPageScrolls.length || index < 0) { + if (!isPageScrollsInitialized() || index >= mPageScrolls.length || index < 0) { return 0; } else { return mPageScrolls[index]; @@ -1209,7 +1209,7 @@ public abstract class PagedView extends ViewGrou // While layout transitions are occurring, a child's position may stray from its baseline // position. This method returns the magnitude of this stray at any given time. public int getLayoutTransitionOffsetForPage(int index) { - if (!pageScrollsInitialized() || index >= mPageScrolls.length || index < 0) { + if (!isPageScrollsInitialized() || index >= mPageScrolls.length || index < 0) { return 0; } else { View child = getChildAt(index);