Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bb558a5 authored by Schneider Victor-tulias's avatar Schneider Victor-tulias
Browse files

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
parent 788f8e09
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -1471,6 +1471,11 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
                ActiveGestureErrorDetector.GestureEvent.SCROLLER_ANIMATION_ABORTED);
    }

    @Override
    protected boolean isPageScrollsInitialized() {
        return super.isPageScrollsInitialized() && mLoadPlanEverApplied;
    }

    protected void applyLoadPlan(ArrayList<GroupTask> taskGroups) {
        if (mPendingAnimation != null) {
            mPendingAnimation.addEndListener(success -> applyLoadPlan(taskGroups));
@@ -1484,6 +1489,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
            // With all tasks removed, touch handling in PagedView is disabled and we need to reset
            // touch state or otherwise values will be obsolete.
            resetTouchState();
            if (isPageScrollsInitialized()) {
                onPageScrollsInitialized();
            }
            return;
        }

@@ -1600,6 +1608,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
        resetTaskVisuals();
        onTaskStackUpdated();
        updateEnabledOverlays();
        if (isPageScrollsInitialized()) {
            onPageScrollsInitialized();
        }
    }

    private boolean isModal() {
@@ -1943,7 +1954,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
        if (!mActivity.getDeviceProfile().isTablet) {
            return super.getDestinationPage(scaledScroll);
        }
        if (!pageScrollsInitialized()) {
        if (!isPageScrollsInitialized()) {
            Log.e(TAG,
                    "Cannot get destination page: RecentsView not properly initialized",
                    new IllegalStateException());
+6 −6
Original line number Diff line number Diff line
@@ -699,7 +699,7 @@ public abstract class PagedView<T extends View & PageIndicator> 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<T extends View & PageIndicator> 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<T extends View & PageIndicator> 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<T extends View & PageIndicator> 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<T extends View & PageIndicator> 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);