Merge "Fixing drag-n-drop for folders in hotseat." into ub-launcher3-burnaby

This commit is contained in:
Sunny Goyal
2015-04-16 22:38:55 +00:00
committed by Android (Google) Code Review
3 changed files with 37 additions and 5 deletions
@@ -377,7 +377,7 @@ public class DragController {
// Only end the drag if we are not deferred // Only end the drag if we are not deferred
if (!isDeferred) { if (!isDeferred) {
for (DragListener listener : mListeners) { for (DragListener listener : new ArrayList<>(mListeners)) {
listener.onDragEnd(); listener.onDragEnd();
} }
} }
@@ -394,7 +394,7 @@ public class DragController {
if (mDragObject.deferDragViewCleanupPostAnimation) { if (mDragObject.deferDragViewCleanupPostAnimation) {
// If we skipped calling onDragEnd() before, do it now // If we skipped calling onDragEnd() before, do it now
for (DragListener listener : mListeners) { for (DragListener listener : new ArrayList<>(mListeners)) {
listener.onDragEnd(); listener.onDragEnd();
} }
} }
+23 -3
View File
@@ -49,6 +49,7 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.android.launcher3.DragController.DragListener;
import com.android.launcher3.FolderInfo.FolderListener; import com.android.launcher3.FolderInfo.FolderListener;
import com.android.launcher3.Workspace.ItemOperator; import com.android.launcher3.Workspace.ItemOperator;
import com.android.launcher3.util.Thunk; import com.android.launcher3.util.Thunk;
@@ -61,7 +62,7 @@ import java.util.Collections;
*/ */
public class Folder extends LinearLayout implements DragSource, View.OnClickListener, public class Folder extends LinearLayout implements DragSource, View.OnClickListener,
View.OnLongClickListener, DropTarget, FolderListener, TextView.OnEditorActionListener, View.OnLongClickListener, DropTarget, FolderListener, TextView.OnEditorActionListener,
View.OnFocusChangeListener { View.OnFocusChangeListener, DragListener {
private static final String TAG = "Launcher.Folder"; private static final String TAG = "Launcher.Folder";
/** /**
@@ -537,6 +538,20 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
mScrollPauseAlarm.setAlarm(SORTED_STICKY_REORDER_DELAY); mScrollPauseAlarm.setAlarm(SORTED_STICKY_REORDER_DELAY);
} }
// Since this folder opened by another controller, it might not get onDrop or
// onDropComplete. Perform cleanup once drag-n-drop ends.
mDragController.addDragListener(this);
}
@Override
public void onDragStart(DragSource source, Object info, int dragAction) { }
@Override
public void onDragEnd() {
if (mIsExternalDrag && mDragInProgress) {
completeDragExit();
}
mDragController.removeDragListener(this);
} }
@Thunk void sendCustomAccessibilityEvent(int type, String text) { @Thunk void sendCustomAccessibilityEvent(int type, String text) {
@@ -678,11 +693,15 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
}; };
public void completeDragExit() { public void completeDragExit() {
mLauncher.closeFolder(); if (mInfo.opened) {
mLauncher.closeFolder();
mRearrangeOnClose = true;
} else {
rearrangeChildren();
}
mCurrentDragInfo = null; mCurrentDragInfo = null;
mCurrentDragView = null; mCurrentDragView = null;
mSuppressOnAdd = false; mSuppressOnAdd = false;
mRearrangeOnClose = true;
mIsExternalDrag = false; mIsExternalDrag = false;
} }
@@ -1124,6 +1143,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
mSuppressOnAdd = false; mSuppressOnAdd = false;
// Clear the drag info, as it is no longer being dragged. // Clear the drag info, as it is no longer being dragged.
mCurrentDragInfo = null; mCurrentDragInfo = null;
mDragInProgress = false;
} }
// This is used so the item doesn't immediately appear in the folder when added. In one case // This is used so the item doesn't immediately appear in the folder when added. In one case
+12
View File
@@ -3112,10 +3112,19 @@ public class Launcher extends Activity
*/ */
public void openFolder(FolderIcon folderIcon) { public void openFolder(FolderIcon folderIcon) {
Folder folder = folderIcon.getFolder(); Folder folder = folderIcon.getFolder();
Folder openFolder = mWorkspace != null ? mWorkspace.getOpenFolder() : null;
if (openFolder != null && openFolder != folder) {
// Close any open folder before opening a folder.
closeFolder();
}
FolderInfo info = folder.mInfo; FolderInfo info = folder.mInfo;
info.opened = true; info.opened = true;
// While the folder is open, the position of the icon cannot change.
((CellLayout.LayoutParams) folderIcon.getLayoutParams()).canReorder = false;
// Just verify that the folder hasn't already been added to the DragLayer. // Just verify that the folder hasn't already been added to the DragLayer.
// There was a one-off crash where the folder had a parent already. // There was a one-off crash where the folder had a parent already.
if (folder.getParent() == null) { if (folder.getParent() == null) {
@@ -3151,6 +3160,9 @@ public class Launcher extends Activity
if (parent != null) { if (parent != null) {
FolderIcon fi = (FolderIcon) mWorkspace.getViewForTag(folder.mInfo); FolderIcon fi = (FolderIcon) mWorkspace.getViewForTag(folder.mInfo);
shrinkAndFadeInFolderIcon(fi); shrinkAndFadeInFolderIcon(fi);
if (fi != null) {
((CellLayout.LayoutParams) fi.getLayoutParams()).canReorder = true;
}
} }
folder.animateClosed(); folder.animateClosed();