Merge "Fixing drag-n-drop for folders in hotseat." into ub-launcher3-burnaby
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user