Moving finishBindingItems to ModelCallbacks

Changes are part of go/launcher_SoR .

Flag: NA
Bug: 301108526
Test: TaplWorkspace
Change-Id: I4c35b540511c9655de1aa1fd0a808a75e7295c1b
diff --git a/src/com/android/launcher3/ModelCallbacks.kt b/src/com/android/launcher3/ModelCallbacks.kt
index 51d7690..c05158b 100644
--- a/src/com/android/launcher3/ModelCallbacks.kt
+++ b/src/com/android/launcher3/ModelCallbacks.kt
@@ -14,7 +14,6 @@
 import com.android.launcher3.popup.PopupContainerWithArrow
 import com.android.launcher3.util.ComponentKey
 import com.android.launcher3.util.IntArray as LIntArray
-import com.android.launcher3.util.IntArray
 import com.android.launcher3.util.IntSet as LIntSet
 import com.android.launcher3.util.IntSet
 import com.android.launcher3.util.PackageUserKey
@@ -66,6 +65,38 @@
     }
 
     /**
+     * Callback saying that there aren't any more items to bind.
+     *
+     * Implementation of the method from LauncherModel.Callbacks.
+     */
+    override fun finishBindingItems(pagesBoundFirst: LIntSet?) {
+        TraceHelper.INSTANCE.beginSection("finishBindingItems")
+        val deviceProfile = launcher.deviceProfile
+        launcher.workspace.restoreInstanceStateForRemainingPages()
+        workspaceLoading = false
+        launcher.processActivityResult()
+        val currentPage =
+            if (pagesBoundFirst != null && !pagesBoundFirst.isEmpty)
+                launcher.workspace.getPageIndexForScreenId(pagesBoundFirst.array[0])
+            else PagedView.INVALID_PAGE
+        // When undoing the removal of the last item on a page, return to that page.
+        // Since we are just resetting the current page without user interaction,
+        // override the previous page so we don't log the page switch.
+        launcher.workspace.setCurrentPage(currentPage, currentPage /* overridePrevPage */)
+        pagesToBindSynchronously = IntSet()
+
+        // Cache one page worth of icons
+        launcher.viewCache.setCacheSize(
+            R.layout.folder_application,
+            deviceProfile.inv.numFolderColumns * deviceProfile.inv.numFolderRows
+        )
+        launcher.viewCache.setCacheSize(R.layout.folder_page, 2)
+        TraceHelper.INSTANCE.endSection()
+        launcher.workspace.removeExtraEmptyScreen(/* stripEmptyScreens= */ true)
+        launcher.workspace.pageIndicator.setAreScreensBinding(false, deviceProfile.isTwoPanels)
+    }
+
+    /**
      * Clear any pending bind callbacks. This is called when is loader is planning to perform a full
      * rebind from scratch.
      */
@@ -225,7 +256,7 @@
         )
     }
 
-    override fun bindScreens(orderedScreenIds: IntArray) {
+    override fun bindScreens(orderedScreenIds: LIntArray) {
         launcher.workspace.pageIndicator.setAreScreensBinding(
             true,
             launcher.deviceProfile.isTwoPanels
@@ -255,7 +286,7 @@
     }
 
     override fun bindAppsAdded(
-        newScreens: IntArray?,
+        newScreens: LIntArray?,
         addNotAnimated: java.util.ArrayList<ItemInfo?>?,
         addAnimated: java.util.ArrayList<ItemInfo?>?
     ) {
@@ -280,7 +311,7 @@
         launcher.workspace.removeExtraEmptyScreen(false)
     }
 
-    private fun bindAddScreens(orderedScreenIdsArg: IntArray) {
+    private fun bindAddScreens(orderedScreenIdsArg: LIntArray) {
         var orderedScreenIds = orderedScreenIdsArg
         if (launcher.deviceProfile.isTwoPanels) {
             if (FeatureFlags.FOLDABLE_SINGLE_PAGE.get()) {
@@ -311,7 +342,7 @@
      * Remove odd number because they are already included when isTwoPanels and add the pair screen
      * if not present.
      */
-    private fun filterTwoPanelScreenIds(orderedScreenIds: IntArray): IntArray {
+    private fun filterTwoPanelScreenIds(orderedScreenIds: LIntArray): LIntArray {
         val screenIds = IntSet.wrap(orderedScreenIds)
         orderedScreenIds
             .filter { screenId -> screenId % 2 == 1 }