[ps] Add helper function to scroll a recycler view to bottom and `resetAndScrollToPrivateSpace`.

Bug: 309522136
Test: manual
Flag: ACONFIG com.google.android.apps.nexuslauncher.inject_private_space_tile DEVELOPMENT
Change-Id: I96a1eed97dd1e4626ddc5ad42c029d94eb174f00
diff --git a/src/com/android/launcher3/FastScrollRecyclerView.java b/src/com/android/launcher3/FastScrollRecyclerView.java
index 67ed55d..01e65ae 100644
--- a/src/com/android/launcher3/FastScrollRecyclerView.java
+++ b/src/com/android/launcher3/FastScrollRecyclerView.java
@@ -192,4 +192,14 @@
         }
         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 7d52cbb..6bc0ca5 100644
--- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
@@ -476,6 +476,30 @@
         }
     }
 
+    /**
+     * 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);