diff --git a/src/com/android/launcher3/FastScrollRecyclerView.java b/src/com/android/launcher3/FastScrollRecyclerView.java index 67ed55dc4d..01e65ae9b5 100644 --- a/src/com/android/launcher3/FastScrollRecyclerView.java +++ b/src/com/android/launcher3/FastScrollRecyclerView.java @@ -192,4 +192,14 @@ public abstract class FastScrollRecyclerView extends RecyclerView { } scrollToPosition(0); } + + /** + * Scrolls this recycler view to the bottom. + */ + public void scrollToBottom() { + if (mScrollbar != null) { + mScrollbar.reattachThumbToScroll(); + } + smoothScrollToPosition(getAdapter().getItemCount() - 1); + } } diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index bd3740c63c..c9e5b1e429 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -495,6 +495,30 @@ public class ActivityAllAppsContainerView } } + /** + * Exits search and returns to A-Z apps list. Scroll to the bottom. + */ + public void resetAndScrollToBottom() { + if (mTouchHandler != null) { + mTouchHandler.endFastScrolling(); + } + + // Reset the base recycler view after transitioning home. + updateHeaderScroll(0); + + // Animate to A-Z with 0 time to reset the animation with proper state management. + animateToSearchState(false, 0); + + MAIN_EXECUTOR.getHandler().post(() -> { + // Reset the search bar after transitioning home. + mSearchUiManager.resetSearch(); + // Switch to the main tab + switchToTab(ActivityAllAppsContainerView.AdapterHolder.MAIN); + // Scroll to bottom + getActiveRecyclerView().scrollToBottom(); + }); + } + @Override public boolean dispatchKeyEvent(KeyEvent event) { mSearchUiManager.preDispatchKeyEvent(event);