mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 23:36:47 +00:00
Merge changes from topic "revert-20479526-revert-20427045-258023561-BPDASTWITO-FBDWZBDEFC" into tm-qpr-dev am: 691c6e511f
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20487426 Change-Id: I186279c0d3a7c8c3a92d83984c298e4687aae60b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1652,8 +1652,19 @@ public class CellLayout extends ViewGroup {
|
||||
}
|
||||
}
|
||||
|
||||
private ItemConfiguration findConfigurationNoShuffle(int pixelX, int pixelY, int minSpanX, int minSpanY,
|
||||
int spanX, int spanY, View dragView, ItemConfiguration solution) {
|
||||
/**
|
||||
* Returns a "reorder" where we simply drop the item in the closest empty space, without moving
|
||||
* any other item in the way.
|
||||
*
|
||||
* @param pixelX X coordinate in pixels in the screen
|
||||
* @param pixelY Y coordinate in pixels in the screen
|
||||
* @param spanX horizontal cell span
|
||||
* @param spanY vertical cell span
|
||||
* @return the configuration that represents the found reorder
|
||||
*/
|
||||
private ItemConfiguration closestEmptySpaceReorder(int pixelX, int pixelY, int minSpanX,
|
||||
int minSpanY, int spanX, int spanY) {
|
||||
ItemConfiguration solution = new ItemConfiguration();
|
||||
int[] result = new int[2];
|
||||
int[] resultSpan = new int[2];
|
||||
findNearestVacantArea(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, result,
|
||||
@@ -1698,7 +1709,7 @@ public class CellLayout extends ViewGroup {
|
||||
|
||||
boolean isNearestDropLocationOccupied(int pixelX, int pixelY, int spanX, int spanY,
|
||||
View dragView, int[] result) {
|
||||
result = findNearestArea(pixelX, pixelY, spanX, spanY, result);
|
||||
result = findNearestAreaIgnoreOccupied(pixelX, pixelY, spanX, spanY, result);
|
||||
getViewsIntersectingRegion(result[0], result[1], spanX, spanY, dragView, null,
|
||||
mIntersectingViews);
|
||||
return !mIntersectingViews.isEmpty();
|
||||
@@ -2248,7 +2259,8 @@ public class CellLayout extends ViewGroup {
|
||||
//TODO(adamcohen) b/151776141 use the items visual center for the direction vector
|
||||
int[] targetDestination = new int[2];
|
||||
|
||||
findNearestArea(dragViewCenterX, dragViewCenterY, spanX, spanY, targetDestination);
|
||||
findNearestAreaIgnoreOccupied(dragViewCenterX, dragViewCenterY, spanX, spanY,
|
||||
targetDestination);
|
||||
Rect dragRect = new Rect();
|
||||
cellToRect(targetDestination[0], targetDestination[1], spanX, spanY, dragRect);
|
||||
dragRect.offset(dragViewCenterX - dragRect.centerX(), dragViewCenterY - dragRect.centerY());
|
||||
@@ -2401,7 +2413,7 @@ public class CellLayout extends ViewGroup {
|
||||
// We find the nearest cell into which we would place the dragged item, assuming there's
|
||||
// nothing in its way.
|
||||
int result[] = new int[2];
|
||||
result = findNearestArea(pixelX, pixelY, spanX, spanY, result);
|
||||
result = findNearestAreaIgnoreOccupied(pixelX, pixelY, spanX, spanY, result);
|
||||
|
||||
boolean success;
|
||||
// First we try the exact nearest position of the item being dragged,
|
||||
@@ -2446,19 +2458,21 @@ public class CellLayout extends ViewGroup {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a "reorder" where we simply drop the item in the closest empty space, without moving
|
||||
* any other item in the way.
|
||||
* Returns a "reorder" if there is empty space without rearranging anything.
|
||||
*
|
||||
* @param pixelX X coordinate in pixels in the screen
|
||||
* @param pixelY Y coordinate in pixels in the screen
|
||||
* @param spanX horizontal cell span
|
||||
* @param spanY vertical cell span
|
||||
* @param dragView view being dragged in reorder
|
||||
* @return the configuration that represents the found reorder
|
||||
*/
|
||||
public ItemConfiguration closestEmptySpaceReorder(int pixelX, int pixelY, int spanX,
|
||||
int spanY) {
|
||||
public ItemConfiguration dropInPlaceSolution(int pixelX, int pixelY, int spanX,
|
||||
int spanY, View dragView) {
|
||||
int[] result = new int[2];
|
||||
result = findNearestArea(pixelX, pixelY, spanX, spanY, result);
|
||||
if (isNearestDropLocationOccupied(pixelX, pixelY, spanX, spanY, dragView, result)) {
|
||||
result[0] = result[1] = -1;
|
||||
}
|
||||
ItemConfiguration solution = new ItemConfiguration();
|
||||
copyCurrentStateToSolution(solution, false);
|
||||
solution.isSolution = result[0] != -1;
|
||||
@@ -2491,25 +2505,25 @@ public class CellLayout extends ViewGroup {
|
||||
int spanX, int spanY, View dragView) {
|
||||
getDirectionVectorForDrop(pixelX, pixelY, spanX, spanY, dragView, mDirectionVector);
|
||||
|
||||
ItemConfiguration closestSpaceSolution = closestEmptySpaceReorder(pixelX, pixelY, spanX,
|
||||
spanY);
|
||||
ItemConfiguration dropInPlaceSolution = dropInPlaceSolution(pixelX, pixelY, spanX, spanY,
|
||||
dragView);
|
||||
|
||||
// Find a solution involving pushing / displacing any items in the way
|
||||
ItemConfiguration swapSolution = findReorderSolution(pixelX, pixelY, minSpanX, minSpanY,
|
||||
spanX, spanY, mDirectionVector, dragView, true, new ItemConfiguration());
|
||||
|
||||
// We attempt the approach which doesn't shuffle views at all
|
||||
ItemConfiguration noShuffleSolution = findConfigurationNoShuffle(pixelX, pixelY, minSpanX,
|
||||
minSpanY, spanX, spanY, dragView, new ItemConfiguration());
|
||||
ItemConfiguration closestSpaceSolution = closestEmptySpaceReorder(pixelX, pixelY, minSpanX,
|
||||
minSpanY, spanX, spanY);
|
||||
|
||||
// If the reorder solution requires resizing (shrinking) the item being dropped, we instead
|
||||
// favor a solution in which the item is not resized, but
|
||||
if (swapSolution.isSolution && swapSolution.area() >= noShuffleSolution.area()) {
|
||||
if (swapSolution.isSolution && swapSolution.area() >= closestSpaceSolution.area()) {
|
||||
return swapSolution;
|
||||
} else if (noShuffleSolution.isSolution) {
|
||||
return noShuffleSolution;
|
||||
} else if (closestSpaceSolution.isSolution) {
|
||||
return closestSpaceSolution;
|
||||
} else if (dropInPlaceSolution.isSolution) {
|
||||
return dropInPlaceSolution;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -2546,8 +2560,8 @@ public class CellLayout extends ViewGroup {
|
||||
result[1] = finalSolution.cellY;
|
||||
resultSpan[0] = finalSolution.spanX;
|
||||
resultSpan[1] = finalSolution.spanY;
|
||||
performReorder(finalSolution, dragView, mode);
|
||||
}
|
||||
performReorder(finalSolution, dragView, mode);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2666,7 +2680,8 @@ public class CellLayout extends ViewGroup {
|
||||
* @return The X, Y cell of a vacant area that can contain this object,
|
||||
* nearest the requested location.
|
||||
*/
|
||||
public int[] findNearestArea(int pixelX, int pixelY, int spanX, int spanY, int[] result) {
|
||||
public int[] findNearestAreaIgnoreOccupied(int pixelX, int pixelY, int spanX, int spanY,
|
||||
int[] result) {
|
||||
return findNearestArea(pixelX, pixelY, spanX, spanY, spanX, spanY, true, result, null);
|
||||
}
|
||||
|
||||
|
||||
@@ -2616,7 +2616,6 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
setDragMode(DRAG_MODE_REORDER);
|
||||
}
|
||||
|
||||
boolean resize = resultSpan[0] != spanX || resultSpan[1] != spanY;
|
||||
mDragTargetLayout.visualizeDropLocation(mTargetCell[0], mTargetCell[1],
|
||||
resultSpan[0], resultSpan[1], dragObject);
|
||||
}
|
||||
@@ -2973,7 +2972,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
*/
|
||||
@Thunk int[] findNearestArea(int pixelX, int pixelY,
|
||||
int spanX, int spanY, CellLayout layout, int[] recycle) {
|
||||
return layout.findNearestArea(
|
||||
return layout.findNearestAreaIgnoreOccupied(
|
||||
pixelX, pixelY, spanX, spanY, recycle);
|
||||
}
|
||||
|
||||
|
||||
@@ -365,7 +365,7 @@ public class FolderPagedView extends PagedView<PageIndicatorDots> implements Cli
|
||||
public int findNearestArea(int pixelX, int pixelY) {
|
||||
int pageIndex = getNextPage();
|
||||
CellLayout page = getPageAt(pageIndex);
|
||||
page.findNearestArea(pixelX, pixelY, 1, 1, sTmpArray);
|
||||
page.findNearestAreaIgnoreOccupied(pixelX, pixelY, 1, 1, sTmpArray);
|
||||
if (mFolder.isLayoutRtl()) {
|
||||
sTmpArray[0] = page.getCountX() - sTmpArray[0] - 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user