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

Commit 3154cd16 authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

Keep clear-all button revealed after dismiss

If it was visible before the dismiss, it will be visible after that.
As a nice side effect, it will preserve visibility on any layout, say,
after a rotation.

Bug: 79117932
Test: Manual
Change-Id: Ia8a544af1326458d4e2d7a07ae2b668f604bc0b3
parent c14adabe
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -121,6 +121,8 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
    // Keeps track of the previously known visible tasks for purposes of loading/unloading task data
    private final SparseBooleanArray mHasVisibleTaskData = new SparseBooleanArray();

    private boolean mIsClearAllButtonFullyRevealed;

    /**
     * TODO: Call reloadIdNeeded in onTaskStackChanged.
     */
@@ -337,11 +339,15 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
        }
    }

    private int getScrollEnd() {
        return mIsRtl ? 0 : mMaxScrollX;
    }

    private float calculateClearAllButtonAlpha() {
        final int childCount = getChildCount();
        if (mShowEmptyMessage || childCount == 0) return 0;

        final int scrollEnd = mIsRtl ? 0 : mMaxScrollX;
        final int scrollEnd = getScrollEnd();
        final int oldestChildScroll = getScrollForPage(childCount - 1);

        return Utilities.boundToRange(
@@ -352,6 +358,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
    private void updateClearAllButtonAlpha() {
        if (mClearAllButton != null) {
            final float alpha = calculateClearAllButtonAlpha();
            mIsClearAllButtonFullyRevealed = alpha == 1;
            mClearAllButton.setAlpha(alpha * mContentAlpha);
        }
    }
@@ -362,10 +369,19 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
        updateClearAllButtonAlpha();
    }

    @Override
    protected void restoreScrollOnLayout() {
        if (mIsClearAllButtonFullyRevealed) {
            scrollAndForceFinish(getScrollEnd());
        } else {
            super.restoreScrollOnLayout();
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN && mTouchState == TOUCH_STATE_REST
                && mScroller.isFinished() && mClearAllButton.getAlpha() > 0) {
                && mScroller.isFinished() && mIsClearAllButtonFullyRevealed) {
            mClearAllButton.getHitRect(mTempRect);
            mTempRect.offset(-getLeft(), -getTop());
            if (mTempRect.contains((int) ev.getX(), (int) ev.getY())) {
@@ -829,7 +845,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
               removeView(taskView);
               if (getChildCount() == 0) {
                   onAllTasksRemoved();
               } else {
               } else if (!mIsClearAllButtonFullyRevealed) {
                   snapToPageImmediately(pageToSnapTo);
               }
           }
+12 −4
Original line number Diff line number Diff line
@@ -238,6 +238,12 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
        return index;
    }

    protected void scrollAndForceFinish(int scrollX) {
        scrollTo(scrollX, 0);
        mScroller.setFinalX(scrollX);
        forceFinishScroller(true);
    }

    /**
     * Updates the scroll of the current page immediately to its final scroll position.  We use this
     * in CustomizePagedView to allow tabs to share the same PagedView while resetting the scroll of
@@ -249,9 +255,7 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
        if (0 <= mCurrentPage && mCurrentPage < getPageCount()) {
            newX = getScrollForPage(mCurrentPage);
        }
        scrollTo(newX, 0);
        mScroller.setFinalX(newX);
        forceFinishScroller(true);
        scrollAndForceFinish(newX);
    }

    private void abortScrollerAnimation(boolean resetNextPage) {
@@ -538,6 +542,10 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
        setMeasuredDimension(widthSize, heightSize);
    }

    protected void restoreScrollOnLayout() {
        setCurrentPage(getNextPage());
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
@@ -589,7 +597,7 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
        }

        if (mScroller.isFinished() && pageScrollChanged) {
            setCurrentPage(getNextPage());
            restoreScrollOnLayout();
        }
    }