summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/Workspace.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/Workspace.java')
-rw-r--r--src/com/android/launcher2/Workspace.java114
1 files changed, 65 insertions, 49 deletions
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 5c8694dcd..d1a111ced 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -198,6 +198,7 @@ public class Workspace extends SmoothPagedView
private FolderRingAnimator mDragFolderRingAnimator = null;
private View mLastDragOverView = null;
private boolean mCreateUserFolderOnDrop = false;
+ private boolean mWillAddToExistingFolder = false;
// Variables relating to touch disambiguation (scrolling workspace vs. scrolling a widget)
private float mXDown;
@@ -375,32 +376,12 @@ public class Workspace extends SmoothPagedView
mIsDragOccuring = true;
updateChildrenLayersEnabled();
mLauncher.lockScreenOrientationOnLargeUI();
-
- // Fade out the workspace slightly to highlight the currently dragging item
- int count = getChildCount();
- for (int i = 0; i < count; i++) {
- CellLayout cl = (CellLayout) getPageAt(i);
- cl.getShortcutsAndWidgets().animate().alpha(mDragFadeOutAlpha)
- .setInterpolator(new AccelerateInterpolator(1.5f))
- .setDuration(mDragFadeOutDuration)
- .start();
- }
}
public void onDragEnd() {
mIsDragOccuring = false;
updateChildrenLayersEnabled();
mLauncher.unlockScreenOrientationOnLargeUI();
-
- // Fade the workspace back in after we have completed dragging
- int count = getChildCount();
- for (int i = 0; i < count; i++) {
- CellLayout cl = (CellLayout) getPageAt(i);
- cl.getShortcutsAndWidgets().animate().alpha(1f)
- .setInterpolator(new DecelerateInterpolator(1.5f))
- .setDuration(mDragFadeOutDuration)
- .start();
- }
}
/**
@@ -429,7 +410,7 @@ public class Workspace extends SmoothPagedView
mWallpaperTravelWidth = (int) (mDisplayWidth *
wallpaperTravelToScreenWidthRatio(mDisplayWidth, mDisplayHeight));
- mMaxDistanceForFolderCreation = (0.5f * res.getDimension(R.dimen.app_icon_size));
+ mMaxDistanceForFolderCreation = (0.5f * res.getDimensionPixelSize(R.dimen.app_icon_size));
mFlingThresholdVelocity = (int) (FLING_THRESHOLD_VELOCITY * mDensity);
}
@@ -1424,9 +1405,8 @@ public class Workspace extends SmoothPagedView
}
private void updateChildrenLayersEnabled() {
- boolean small = isSmall() || mIsSwitchingState;
- boolean dragging = mAnimatingViewIntoPlace || mIsDragOccuring;
- boolean enableChildrenLayers = small || dragging || isPageMoving();
+ boolean small = mState == State.SMALL || mIsSwitchingState;
+ boolean enableChildrenLayers = small || mAnimatingViewIntoPlace || isPageMoving();
if (enableChildrenLayers != mChildrenLayersEnabled) {
mChildrenLayersEnabled = enableChildrenLayers;
@@ -2021,12 +2001,10 @@ public class Workspace extends SmoothPagedView
int spanX = 1;
int spanY = 1;
- View ignoreView = null;
if (mDragInfo != null) {
final CellLayout.CellInfo dragCellInfo = mDragInfo;
spanX = dragCellInfo.spanX;
spanY = dragCellInfo.spanY;
- ignoreView = dragCellInfo.cell;
} else {
final ItemInfo dragInfo = (ItemInfo) d.dragInfo;
spanX = dragInfo.spanX;
@@ -2083,9 +2061,15 @@ public class Workspace extends SmoothPagedView
boolean willCreateUserFolder(ItemInfo info, CellLayout target, int[] targetCell, float
distance, boolean considerTimeout) {
if (distance > mMaxDistanceForFolderCreation) return false;
-
View dropOverView = target.getChildAt(targetCell[0], targetCell[1]);
+ if (dropOverView != null) {
+ CellLayout.LayoutParams lp = (CellLayout.LayoutParams) dropOverView.getLayoutParams();
+ if (lp.useTmpCoords && (lp.tmpCellX != lp.cellX || lp.tmpCellY != lp.tmpCellY)) {
+ return false;
+ }
+ }
+
boolean hasntMoved = false;
if (mDragInfo != null) {
hasntMoved = dropOverView == mDragInfo.cell;
@@ -2106,8 +2090,15 @@ public class Workspace extends SmoothPagedView
boolean willAddToExistingUserFolder(Object dragInfo, CellLayout target, int[] targetCell,
float distance) {
if (distance > mMaxDistanceForFolderCreation) return false;
-
View dropOverView = target.getChildAt(targetCell[0], targetCell[1]);
+
+ if (dropOverView != null) {
+ CellLayout.LayoutParams lp = (CellLayout.LayoutParams) dropOverView.getLayoutParams();
+ if (lp.useTmpCoords && (lp.tmpCellX != lp.cellX || lp.tmpCellY != lp.tmpCellY)) {
+ return false;
+ }
+ }
+
if (dropOverView instanceof FolderIcon) {
FolderIcon fi = (FolderIcon) dropOverView;
if (fi.acceptDrop(dragInfo)) {
@@ -2122,6 +2113,7 @@ public class Workspace extends SmoothPagedView
Runnable postAnimationRunnable) {
if (distance > mMaxDistanceForFolderCreation) return false;
View v = target.getChildAt(targetCell[0], targetCell[1]);
+
boolean hasntMoved = false;
if (mDragInfo != null) {
CellLayout cellParent = getParentCellLayoutForView(mDragInfo.cell);
@@ -2174,6 +2166,9 @@ public class Workspace extends SmoothPagedView
if (distance > mMaxDistanceForFolderCreation) return false;
View dropOverView = target.getChildAt(targetCell[0], targetCell[1]);
+ if (!mWillAddToExistingFolder) return false;
+ mWillAddToExistingFolder = false;
+
if (dropOverView instanceof FolderIcon) {
FolderIcon fi = (FolderIcon) dropOverView;
if (fi.acceptDrop(d.dragInfo)) {
@@ -2283,10 +2278,11 @@ public class Workspace extends SmoothPagedView
// update the item's position after drop
CellLayout.LayoutParams lp = (CellLayout.LayoutParams) cell.getLayoutParams();
- lp.cellX = mTargetCell[0];
- lp.cellY = mTargetCell[1];
+ lp.cellX = lp.tmpCellX = mTargetCell[0];
+ lp.cellY = lp.tmpCellY = mTargetCell[1];
lp.cellHSpan = item.spanX;
lp.cellVSpan = item.spanY;
+ lp.isLockedToGrid = true;
cell.setId(LauncherModel.getCellLayoutChildId(container, mDragInfo.screen,
mTargetCell[0], mTargetCell[1], mDragInfo.spanX, mDragInfo.spanY));
@@ -2782,8 +2778,31 @@ public class Workspace extends SmoothPagedView
minSpanY = item.minSpanY;
}
- if (!folder && !mReorderAlarm.alarmPending() && (mLastReorderX != mTargetCell[0] ||
- mLastReorderY != mTargetCell[1])) {
+ int[] reorderPosition = new int[2];
+ reorderPosition = findNearestArea((int) mDragViewVisualCenter[0],
+ (int) mDragViewVisualCenter[1], item.spanX, item.spanY, mDragTargetLayout,
+ reorderPosition);
+
+ if (!mDragTargetLayout.isNearestDropLocationOccupied((int) mDragViewVisualCenter[0],
+ (int) mDragViewVisualCenter[1], item.spanX, item.spanY, child, mTargetCell)) {
+ // If the current hover area isn't occupied (permanently) by any items, then we
+ // reset all the reordering.
+ mDragTargetLayout.revertTempState();
+ mDragMode = DRAG_MODE_NONE;
+ mLastDragOverView = dragOverView;
+ if (mReorderAlarm != null) {
+ mReorderAlarm.cancelAlarm();
+ }
+ mLastReorderX = -1;
+ mLastReorderY = -1;
+ mDragTargetLayout.visualizeDropLocation(child, mDragOutline,
+ (int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1],
+ mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, false,
+ d.dragView.getDragVisualizeOffset(), d.dragView.getDragRegion());
+ } else if (!folder && !mReorderAlarm.alarmPending() &&
+ (mLastReorderX != reorderPosition[0] || mLastReorderY != reorderPosition[1])) {
+ // Otherwise, if we aren't adding to or creating a folder and there's no pending
+ // reorder, then we schedule a reorder
cancelFolderCreation();
ReorderAlarmListener listener = new ReorderAlarmListener(mDragViewVisualCenter,
minSpanX, minSpanY, item.spanX, item.spanY, d.dragView, child);
@@ -2793,18 +2812,10 @@ public class Workspace extends SmoothPagedView
if (mReorderAlarm != null) {
mReorderAlarm.cancelAlarm();
}
+ mDragTargetLayout.revertTempState();
+ mLastReorderX = -1;
+ mLastReorderY = -1;
}
- // TODO: need to determine what we're going to about visualizing drop locations
- /*
- boolean resize = resultSpan[0] != info.spanX || resultSpan[1] != info.spanY;
- if (!folder) {
- mDragTargetLayout.visualizeDropLocation(child, mDragOutline,
- (int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1],
- mTargetCell[0], mTargetCell[1], resultSpan[0], resultSpan[1], resize,
- d.dragView.getDragVisualizeOffset(), d.dragView.getDragRegion());
-
- }
- */
}
}
@@ -2825,6 +2836,7 @@ public class Workspace extends SmoothPagedView
if (willAddToFolder && mDragMode == DRAG_MODE_NONE) {
FolderIcon fi = ((FolderIcon) dragOverView);
mDragMode = DRAG_MODE_ADD_TO_FOLDER;
+ mWillAddToExistingFolder = true;
fi.onDragEnter(info);
if (targetLayout != null) {
targetLayout.clearDragOutlines();
@@ -2834,12 +2846,13 @@ public class Workspace extends SmoothPagedView
if (dragOverView != lastDragOverView || (mCreateUserFolderOnDrop && !userFolderPending)
|| (!willAddToFolder && mDragMode == DRAG_MODE_ADD_TO_FOLDER)) {
cancelFolderCreation();
+ mWillAddToExistingFolder = false;
if (lastDragOverView != null && lastDragOverView instanceof FolderIcon) {
((FolderIcon) lastDragOverView).onDragExit(info);
}
}
- return willAddToFolder || userFolderPending;
+ return (willAddToFolder || userFolderPending) && mDragMode != DRAG_MODE_REORDER;
}
private void cleanupFolderCreation(DragObject d) {
@@ -2906,25 +2919,28 @@ public class Workspace extends SmoothPagedView
public void onAlarm(Alarm alarm) {
int[] resultSpan = new int[2];
+ mTargetCell = findNearestArea((int) mDragViewVisualCenter[0],
+ (int) mDragViewVisualCenter[1], spanX, spanY, mDragTargetLayout, mTargetCell);
+ mLastReorderX = mTargetCell[0];
+ mLastReorderY = mTargetCell[1];
+
mTargetCell = mDragTargetLayout.createArea((int) mDragViewVisualCenter[0],
(int) mDragViewVisualCenter[1], minSpanX, minSpanY, spanX, spanY,
child, mTargetCell, resultSpan, CellLayout.MODE_DRAG_OVER);
- mLastReorderX = mTargetCell[0];
- mLastReorderY = mTargetCell[1];
+ if (mTargetCell[0] < 0 || mTargetCell[1] < 0) {
+ mDragTargetLayout.revertTempState();
+ }
if (mDragMode == DRAG_MODE_ADD_TO_FOLDER) {
}
mDragMode = DRAG_MODE_REORDER;
- // TODO: need to determine what we're going to about visualizing drop locations
- /*
boolean resize = resultSpan[0] != spanX || resultSpan[1] != spanY;
mDragTargetLayout.visualizeDropLocation(child, mDragOutline,
(int) mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1],
mTargetCell[0], mTargetCell[1], resultSpan[0], resultSpan[1], resize,
dragView.getDragVisualizeOffset(), dragView.getDragRegion());
- */
}
}