diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index ad85d9ed43..05793f14f2 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -121,6 +121,8 @@ public abstract class RecentsView 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 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 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 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 extends PagedView impl removeView(taskView); if (getChildCount() == 0) { onAllTasksRemoved(); - } else { + } else if (!mIsClearAllButtonFullyRevealed) { snapToPageImmediately(pageToSnapTo); } } diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 990132df58..9c146b01f9 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -238,6 +238,12 @@ public abstract class PagedView 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 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 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 extends ViewGrou } if (mScroller.isFinished() && pageScrollChanged) { - setCurrentPage(getNextPage()); + restoreScrollOnLayout(); } }