From 2f2104ccdfd0f47d20e959982c52d36dfc7760ff Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Thu, 30 Jun 2016 12:07:33 -0700 Subject: [PATCH] Fix some issues with shortcut containers opened inside folders. - Dragging a shortcut from a container inside a folder was buggy because the folder assumes that all drags are removing an item (so it marks the cell as unoccupied, etc.). So we just close the folder when dragging a shortcut. - When the shortcuts container opened outside of a folder, touches on it were incercepted by DragLayer to close the folder. So we move the container intercept check first, and return false if the touch is over the container so it can handle the touch. Change-Id: I8c5814513e99910b2930e05d9a62dfe0a0a60f3e --- .../launcher3/dragndrop/DragLayer.java | 41 ++++++++++--------- .../shortcuts/DeepShortcutsContainer.java | 2 + 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index aebb1fd108..ce9753666b 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -230,6 +230,28 @@ public class DragLayer extends InsettableFrameLayout { } } + // Remove the shortcuts container when touching outside of it. + DeepShortcutsContainer deepShortcutsContainer = (DeepShortcutsContainer) + findViewById(R.id.deep_shortcuts_container); + if (deepShortcutsContainer != null) { + if (isEventOverView(deepShortcutsContainer, ev)) { + // Let the container handle the event. + return false; + } else { + if (isInAccessibleDrag()) { + // Do not close the container if in drag and drop. + if (!isEventOverDropTargetBar(ev)) { + return true; + } + } else { + removeView(deepShortcutsContainer); + // We let touches on the original icon go through so that users can launch + // the app with one tap if they don't find a shortcut they want. + return !isEventOverView(deepShortcutsContainer.getDeferredDragIcon(), ev); + } + } + } + Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); if (currentFolder != null && intercept) { if (currentFolder.isEditingName()) { @@ -251,25 +273,6 @@ public class DragLayer extends InsettableFrameLayout { } } } - - // Remove the shortcuts container when touching outside of it. - DeepShortcutsContainer deepShortcutsContainer = (DeepShortcutsContainer) - findViewById(R.id.deep_shortcuts_container); - if (deepShortcutsContainer != null) { - if (!isEventOverView(deepShortcutsContainer, ev)) { - if (isInAccessibleDrag()) { - // Do not close the container if in drag and drop. - if (!isEventOverDropTargetBar(ev)) { - return true; - } - } else { - removeView(deepShortcutsContainer); - // We let touches on the original icon go through so that users can launch - // the app with one tap if they don't find a shortcut they want. - return !isEventOverView(deepShortcutsContainer.getDeferredDragIcon(), ev); - } - } - } return false; } diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java index 008b2653f5..6f3875cade 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java @@ -359,6 +359,8 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnClic mLauncher.getDragLayer().setController(mLauncher.getDragController()); mLauncher.getWorkspace().beginDragShared(v, mIconLastTouchPos, this, false); ((DragLayer) getParent()).removeView(this); + // TODO: support dragging from within folder without having to close it + mLauncher.closeFolder(); return false; }