diff options
-rw-r--r-- | src/com/android/launcher3/AppsCustomizePagedView.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/Folder.java | 21 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 13 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 43 |
4 files changed, 37 insertions, 49 deletions
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 9d86959c4..04426a8f1 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -808,13 +808,8 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen !(target instanceof DeleteDropTarget) && !(target instanceof Folder))) { // Exit spring loaded mode if we have not successfully dropped or have not handled the // drop in Workspace - mLauncher.getWorkspace().removeExtraEmptyScreen(true, new Runnable() { - @Override - public void run() { - mLauncher.exitSpringLoadedDragMode(); - mLauncher.unlockScreenOrientation(false); - } - }); + mLauncher.exitSpringLoadedDragMode(); + mLauncher.unlockScreenOrientation(false); } else { mLauncher.unlockScreenOrientation(false); } diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index dcc55af89..e900c2b5a 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -797,12 +797,6 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } } - // This is kind of hacky, but in general, dropping on the workspace handles removing - // the extra screen, but dropping elsewhere (back to self, or onto delete) doesn't. - if (target != mLauncher.getWorkspace()) { - mLauncher.getWorkspace().removeExtraEmptyScreen(true, null); - } - mDeleteFolderOnDropCompleted = false; mDragInProgress = false; mItemAddedBackToSelfViaIcon = false; @@ -1176,20 +1170,15 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void onDrop(DragObject d) { Runnable cleanUpRunnable = null; - // If we are coming from All Apps space, we need to remove the extra empty screen (which is - // normally done in Workspace#onDropExternal, as well zoom back in. + // If we are coming from All Apps space, we defer removing the extra empty screen + // until the folder closes if (d.dragSource != mLauncher.getWorkspace() && !(d.dragSource instanceof Folder)) { cleanUpRunnable = new Runnable() { @Override public void run() { - mLauncher.getWorkspace().removeExtraEmptyScreen(false, new Runnable() { - @Override - public void run() { - mLauncher.exitSpringLoadedDragModeDelayed(true, - Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT_FOLDER_CLOSE, - null); - } - }, CLOSE_FOLDER_DELAY_MS, false); + mLauncher.exitSpringLoadedDragModeDelayed(true, + Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT, + null); } }; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 01b1cde99..c9dd56041 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -215,7 +215,6 @@ public class Launcher extends Activity static final int APPWIDGET_HOST_ID = 1024; public static final int EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT = 300; - public static final int EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT_FOLDER_CLOSE = 400; private static final int ON_ACTIVITY_RESULT_ANIMATION_DELAY = 500; private static final int ACTIVITY_START_DELAY = 1000; @@ -779,7 +778,7 @@ public class Launcher extends Activity data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1) : -1; if (resultCode == RESULT_CANCELED) { completeTwoStageWidgetDrop(RESULT_CANCELED, appWidgetId); - mWorkspace.removeExtraEmptyScreen(true, exitSpringLoaded, + mWorkspace.removeExtraEmptyScreenDelayed(true, exitSpringLoaded, ON_ACTIVITY_RESULT_ANIMATION_DELAY, false); } else if (resultCode == RESULT_OK) { addAppWidgetImpl(appWidgetId, mPendingAddInfo, null, @@ -833,7 +832,7 @@ public class Launcher extends Activity } }; } - mWorkspace.removeExtraEmptyScreen(true, onComplete, ON_ACTIVITY_RESULT_ANIMATION_DELAY, + mWorkspace.removeExtraEmptyScreenDelayed(true, onComplete, ON_ACTIVITY_RESULT_ANIMATION_DELAY, false); return; } @@ -856,10 +855,10 @@ public class Launcher extends Activity } else { completeAdd(args); } - mWorkspace.removeExtraEmptyScreen(true, exitSpringLoaded, + mWorkspace.removeExtraEmptyScreenDelayed(true, exitSpringLoaded, ON_ACTIVITY_RESULT_ANIMATION_DELAY, false); } else if (resultCode == RESULT_CANCELED) { - mWorkspace.removeExtraEmptyScreen(true, exitSpringLoaded, + mWorkspace.removeExtraEmptyScreenDelayed(true, exitSpringLoaded, ON_ACTIVITY_RESULT_ANIMATION_DELAY, false); } mDragLayer.clearAnimatedView(); @@ -2119,7 +2118,7 @@ public class Launcher extends Activity }; completeAddAppWidget(appWidgetId, info.container, info.screenId, boundWidget, appWidgetInfo); - mWorkspace.removeExtraEmptyScreen(true, onComplete, delay, false); + mWorkspace.removeExtraEmptyScreenDelayed(true, onComplete, delay, false); } } @@ -3924,7 +3923,7 @@ public class Launcher extends Activity } // Remove the extra empty screen - mWorkspace.removeExtraEmptyScreen(false, null); + mWorkspace.removeExtraEmptyScreen(false, false); if (!LauncherAppState.isDisableAllApps() && addedApps != null && mAppsCustomizeContent != null) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9bf2c2343..b3712cde5 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -135,6 +135,7 @@ public class Workspace extends SmoothPagedView private ArrayList<Long> mScreenOrder = new ArrayList<Long>(); private Runnable mRemoveEmptyScreenRunnable; + private boolean mDeferRemoveExtraEmptyScreen = false; /** * CellInfo for the cell that is currently being dragged @@ -397,13 +398,25 @@ public class Workspace extends SmoothPagedView @Override public void run() { if (mIsDragOccuring) { + mDeferRemoveExtraEmptyScreen = false; addExtraEmptyScreenOnDrag(); } } }); } + + public void deferRemoveExtraEmptyScreen() { + mDeferRemoveExtraEmptyScreen = true; + } + public void onDragEnd() { + System.out.println("onDrag end workspace"); + + if (!mDeferRemoveExtraEmptyScreen) { + removeExtraEmptyScreen(true, mDragSourceInternal != null); + } + mIsDragOccuring = false; updateChildrenLayersEnabled(false); mLauncher.unlockScreenOrientation(false); @@ -726,11 +739,11 @@ public class Workspace extends SmoothPagedView } } - public void removeExtraEmptyScreen(final boolean animate, final Runnable onComplete) { - removeExtraEmptyScreen(animate, onComplete, 0, false); + public void removeExtraEmptyScreen(final boolean animate, boolean stripEmptyScreens) { + removeExtraEmptyScreenDelayed(animate, null, 0, stripEmptyScreens); } - public void removeExtraEmptyScreen(final boolean animate, final Runnable onComplete, + public void removeExtraEmptyScreenDelayed(final boolean animate, final Runnable onComplete, final int delay, final boolean stripEmptyScreens) { // Log to disk Launcher.addDumpLog(TAG, "11683562 - removeExtraEmptyScreen()", true); @@ -744,9 +757,8 @@ public class Workspace extends SmoothPagedView postDelayed(new Runnable() { @Override public void run() { - removeExtraEmptyScreen(animate, onComplete, 0, stripEmptyScreens); + removeExtraEmptyScreenDelayed(animate, onComplete, 0, stripEmptyScreens); } - }, delay); return; } @@ -3056,13 +3068,11 @@ public class Workspace extends SmoothPagedView // cell also contains a shortcut, then create a folder with the two shortcuts. if (!mInScrollArea && createUserFolderIfNecessary(cell, container, dropTargetLayout, mTargetCell, distance, false, d.dragView, null)) { - removeExtraEmptyScreen(true, null, 0, true); return; } if (addToExistingFolderIfNecessary(cell, dropTargetLayout, mTargetCell, distance, d, false)) { - removeExtraEmptyScreen(true, null, 0, true); return; } @@ -3168,7 +3178,6 @@ public class Workspace extends SmoothPagedView if (finalResizeRunnable != null) { finalResizeRunnable.run(); } - removeExtraEmptyScreen(true, null, 0, true); } }; mAnimatingViewIntoPlace = true; @@ -3822,13 +3831,8 @@ public class Workspace extends SmoothPagedView final Runnable exitSpringLoadedRunnable = new Runnable() { @Override public void run() { - removeExtraEmptyScreen(false, new Runnable() { - @Override - public void run() { - mLauncher.exitSpringLoadedDragModeDelayed(true, - Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT, null); - } - }); + mLauncher.exitSpringLoadedDragModeDelayed(true, + Launcher.EXIT_SPRINGLOADED_MODE_SHORT_TIMEOUT, null); } }; @@ -3890,6 +3894,11 @@ public class Workspace extends SmoothPagedView Runnable onAnimationCompleteRunnable = new Runnable() { @Override public void run() { + // Normally removeExtraEmptyScreen is called in Workspace#onDragEnd, but when + // adding an item that may not be dropped right away (due to a config activity) + // we defer the removal until the activity returns. + deferRemoveExtraEmptyScreen(); + // When dragging and dropping from customization tray, we deal with creating // widgets/shortcuts/folders in a slightly different way switch (pendingInfo.itemType) { @@ -4190,10 +4199,6 @@ public class Workspace extends SmoothPagedView if (mDragInfo.cell instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mDragInfo.cell); } - // If we move the item to anything not on the Workspace, check if any empty - // screens need to be removed. If we dropped back on the workspace, this will - // be done post drop animation. - removeExtraEmptyScreen(true, null, 0, true); } } else if (mDragInfo != null) { CellLayout cellLayout; |