diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index c80f96bb80..d60dc87e4a 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -113,10 +113,11 @@ public class DeleteDropTarget extends ButtonDropTarget { public void completeDrop(DragObject d) { ItemInfo item = d.dragInfo; if (canRemove(item)) { + int itemPage = mLauncher.getWorkspace().getCurrentPage(); onAccessibilityDrop(null, item); ModelWriter modelWriter = mLauncher.getModelWriter(); Snackbar.show(mLauncher, R.string.item_removed, R.string.undo, - modelWriter::commitDelete, modelWriter::abortDelete); + modelWriter::commitDelete, () -> modelWriter.abortDelete(itemPage)); } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9125a98433..f09b6e852d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2112,7 +2112,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, * * Implementation of the method from LauncherModel.Callbacks. */ - public void finishBindingItems(int currentScreen) { + public void finishBindingItems(int pageBoundFirst) { TraceHelper.beginSection("finishBindingItems"); mWorkspace.restoreInstanceStateForRemainingPages(); @@ -2127,7 +2127,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, InstallShortcutReceiver.disableAndFlushInstallQueue( InstallShortcutReceiver.FLAG_LOADER_RUNNING, this); - mWorkspace.setCurrentPage(currentScreen); + // When undoing the removal of the last item on a page, return to that page. + mWorkspace.setCurrentPage(pageBoundFirst); TraceHelper.endSection("finishBindingItems"); } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 9b4c5fd095..ebca2eaf45 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -142,7 +142,7 @@ public class LauncherModel extends BroadcastReceiver public void bindItems(List shortcuts, boolean forceAnimateIcons); public void bindScreens(IntArray orderedScreenIds); public void finishFirstPageBind(ViewOnDrawExecutor executor); - public void finishBindingItems(int currentScreen); + public void finishBindingItems(int pageBoundFirst); public void bindAllApplications(ArrayList apps); public void bindAppsAddedOrUpdated(ArrayList apps); public void preAddApps(); @@ -372,11 +372,16 @@ public class LauncherModel extends BroadcastReceiver } } + public void forceReload() { + forceReload(-1); + } + /** * Reloads the workspace items from the DB and re-binds the workspace. This should generally * not be called as DB updates are automatically followed by UI update + * @param synchronousBindPage The page to bind first. Can pass -1 to use the current page. */ - public void forceReload() { + public void forceReload(int synchronousBindPage) { synchronized (mLock) { // Stop any existing loaders first, so they don't set mModelLoaded to true later stopLoader(); @@ -387,7 +392,10 @@ public class LauncherModel extends BroadcastReceiver // the next time launcher starts Callbacks callbacks = getCallback(); if (callbacks != null) { - startLoader(callbacks.getCurrentWorkspaceScreen()); + if (synchronousBindPage < 0) { + synchronousBindPage = callbacks.getCurrentWorkspaceScreen(); + } + startLoader(synchronousBindPage); } } diff --git a/src/com/android/launcher3/model/BaseLoaderResults.java b/src/com/android/launcher3/model/BaseLoaderResults.java index d3dc91f3be..d9d0a4fd03 100644 --- a/src/com/android/launcher3/model/BaseLoaderResults.java +++ b/src/com/android/launcher3/model/BaseLoaderResults.java @@ -177,7 +177,7 @@ public abstract class BaseLoaderResults { public void run() { Callbacks callbacks = mCallbacks.get(); if (callbacks != null) { - callbacks.finishBindingItems(currentScreen); + callbacks.finishBindingItems(mPageToBindFirst); } } }; diff --git a/src/com/android/launcher3/model/ModelWriter.java b/src/com/android/launcher3/model/ModelWriter.java index ca5428d94d..d8d99308e2 100644 --- a/src/com/android/launcher3/model/ModelWriter.java +++ b/src/com/android/launcher3/model/ModelWriter.java @@ -349,12 +349,12 @@ public class ModelWriter { mDeleteRunnables.clear(); } - public void abortDelete() { + public void abortDelete(int pageToBindFirst) { mPreparingToUndo = false; mDeleteRunnables.clear(); // We do a full reload here instead of just a rebind because Folders change their internal // state when dragging an item out, which clobbers the rebind unless we load from the DB. - mModel.forceReload(); + mModel.forceReload(pageToBindFirst); } private class UpdateItemRunnable extends UpdateItemBaseRunnable {