diff options
Diffstat (limited to 'src/com/android/launcher2/CellLayout.java')
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 84 |
1 files changed, 33 insertions, 51 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index da7c2b0ec..26a3ecf34 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -2083,6 +2083,8 @@ public class CellLayout extends ViewGroup { if (info != null) { info.cellX = lp.cellX = lp.tmpCellX; info.cellY = lp.cellY = lp.tmpCellY; + info.spanX = lp.cellHSpan; + info.spanY = lp.cellVSpan; } } mLauncher.getWorkspace().updateItemLocationsInDatabase(this); @@ -2214,6 +2216,37 @@ public class CellLayout extends ViewGroup { setItemPlacementDirty(false); } + boolean createAreaForResize(int cellX, int cellY, int spanX, int spanY, + View dragView, int[] direction, boolean commit) { + int[] pixelXY = new int[2]; + regionToCenterPoint(cellX, cellY, spanX, spanY, pixelXY); + + // First we determine if things have moved enough to cause a different layout + ItemConfiguration swapSolution = simpleSwap(pixelXY[0], pixelXY[1], spanX, spanY, + spanX, spanY, direction, dragView, true, new ItemConfiguration()); + + setUseTempCoords(true); + if (swapSolution != null && swapSolution.isSolution) { + // If we're just testing for a possible location (MODE_ACCEPT_DROP), we don't bother + // committing anything or animating anything as we just want to determine if a solution + // exists + copySolutionToTempState(swapSolution, dragView); + setItemPlacementDirty(true); + animateItemsToSolution(swapSolution, dragView, commit); + + if (commit) { + commitTempPlacement(); + completeAndClearReorderHintAnimations(); + setItemPlacementDirty(false); + } else { + beginOrAdjustHintAnimations(swapSolution, dragView, + REORDER_ANIMATION_DURATION); + } + mShortcutsAndWidgets.requestLayout(); + } + return swapSolution.isSolution; + } + int[] createArea(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, View dragView, int[] result, int resultSpan[], int mode) { // First we determine if things have moved enough to cause a different layout @@ -2235,7 +2268,6 @@ public class CellLayout extends ViewGroup { mPreviousReorderDirection[0] = INVALID_DIRECTION; mPreviousReorderDirection[1] = INVALID_DIRECTION; } - } else { getDirectionVectorForDrop(pixelX, pixelY, spanX, spanY, dragView, mDirectionVector); mPreviousReorderDirection[0] = mDirectionVector[0]; @@ -2694,56 +2726,6 @@ out: for (int i = x; i < x + spanX - 1 && x < xCount; i++) { } } - /** - * Given a view, determines how much that view can be expanded in all directions, in terms of - * whether or not there are other items occupying adjacent cells. Used by the - * AppWidgetResizeFrame to determine how the widget can be resized. - */ - public void getExpandabilityArrayForView(View view, int[] expandability) { - final LayoutParams lp = (LayoutParams) view.getLayoutParams(); - boolean flag; - - expandability[AppWidgetResizeFrame.LEFT] = 0; - for (int x = lp.cellX - 1; x >= 0; x--) { - flag = false; - for (int y = lp.cellY; y < lp.cellY + lp.cellVSpan; y++) { - if (mOccupied[x][y]) flag = true; - } - if (flag) break; - expandability[AppWidgetResizeFrame.LEFT]++; - } - - expandability[AppWidgetResizeFrame.TOP] = 0; - for (int y = lp.cellY - 1; y >= 0; y--) { - flag = false; - for (int x = lp.cellX; x < lp.cellX + lp.cellHSpan; x++) { - if (mOccupied[x][y]) flag = true; - } - if (flag) break; - expandability[AppWidgetResizeFrame.TOP]++; - } - - expandability[AppWidgetResizeFrame.RIGHT] = 0; - for (int x = lp.cellX + lp.cellHSpan; x < mCountX; x++) { - flag = false; - for (int y = lp.cellY; y < lp.cellY + lp.cellVSpan; y++) { - if (mOccupied[x][y]) flag = true; - } - if (flag) break; - expandability[AppWidgetResizeFrame.RIGHT]++; - } - - expandability[AppWidgetResizeFrame.BOTTOM] = 0; - for (int y = lp.cellY + lp.cellVSpan; y < mCountY; y++) { - flag = false; - for (int x = lp.cellX; x < lp.cellX + lp.cellHSpan; x++) { - if (mOccupied[x][y]) flag = true; - } - if (flag) break; - expandability[AppWidgetResizeFrame.BOTTOM]++; - } - } - public void onMove(View view, int newCellX, int newCellY, int newSpanX, int newSpanY) { markCellsAsUnoccupiedForView(view); markCellsForView(newCellX, newCellY, newSpanX, newSpanY, mOccupied, true); |