diff options
author | Sebastian Franco <fransebas@google.com> | 2023-05-08 10:04:44 -0600 |
---|---|---|
committer | Sebastian Franco <fransebas@google.com> | 2023-05-18 14:47:47 -0700 |
commit | 96c46e7fbaa296bcfe8b0f2ec78a002e9ea9243b (patch) | |
tree | f9834db8dcae583bd5548418a76c32cb8afe1d1a /src | |
parent | 2e17bcaa0b1371f1a65763d03197b2b007de96ed (diff) | |
download | Launcher3-96c46e7fbaa296bcfe8b0f2ec78a002e9ea9243b.tar.gz |
Add seam space for performReorder in MultipageCellLayout
In the other method createAreaForResize we add 1 to the cellX
to account for the seam in the Multipace CellLayout but we don't
account for that on performReorder and we need to add a cellWidth
Also, some methods are not running when the seam is added so their
result are wrong. Now all methods are being accounted for.
Fix: 277709417
Test: atest ReorderAlgorithm
Test: atest MulticellReorderAlgorithm
Change-Id: I7a4ca55f7b9cd7cf94481c880fe152e0a3bb3cf3
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/CellLayout.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/MultipageCellLayout.java | 42 |
2 files changed, 40 insertions, 4 deletions
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 5163ede509..75c1da01fe 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -1269,7 +1269,7 @@ public class CellLayout extends ViewGroup { * @return The X, Y cell of a vacant area that can contain this object, * nearest the requested location. */ - private int[] findNearestArea(int relativeXPos, int relativeYPos, int minSpanX, int minSpanY, + protected int[] findNearestArea(int relativeXPos, int relativeYPos, int minSpanX, int minSpanY, int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { // For items with a spanX / spanY > 1, the passed in point (relativeXPos, relativeYPos) // corresponds to the center of the item, but we are searching based on the top-left cell, diff --git a/src/com/android/launcher3/MultipageCellLayout.java b/src/com/android/launcher3/MultipageCellLayout.java index 20e9f600eb..44a1414d21 100644 --- a/src/com/android/launcher3/MultipageCellLayout.java +++ b/src/com/android/launcher3/MultipageCellLayout.java @@ -24,7 +24,6 @@ import android.view.View; import com.android.launcher3.celllayout.CellLayoutLayoutParams; import com.android.launcher3.celllayout.MulticellReorderAlgorithm; -import com.android.launcher3.celllayout.ReorderAlgorithm; import com.android.launcher3.util.CellAndSpan; import com.android.launcher3.util.GridOccupancy; @@ -46,6 +45,33 @@ public class MultipageCellLayout extends CellLayout { this(context, attrs, 0); } + @Override + protected int[] findNearestArea(int relativeXPos, int relativeYPos, int minSpanX, int minSpanY, + int spanX, int spanY, boolean ignoreOccupied, int[] result, int[] resultSpan) { + return createReorderAlgorithm().simulateSeam( + () -> super.findNearestArea(relativeXPos, relativeYPos, minSpanX, minSpanY, spanX, + spanY, ignoreOccupied, result, resultSpan)); + } + + @Override + public void getDirectionVectorForDrop(int dragViewCenterX, int dragViewCenterY, int spanX, + int spanY, View dragView, int[] resultDirection) { + createReorderAlgorithm().simulateSeam( + () -> { + super.getDirectionVectorForDrop(dragViewCenterX, dragViewCenterY, spanX, spanY, + dragView, resultDirection); + return 0; + }); + } + + @Override + public boolean isNearestDropLocationOccupied(int pixelX, int pixelY, int spanX, int spanY, + View dragView, int[] result) { + return createReorderAlgorithm().simulateSeam( + () -> super.isNearestDropLocationOccupied(pixelX, pixelY, spanX, spanY, dragView, + result)); + } + public MultipageCellLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mLeftBackground = getContext().getDrawable(R.drawable.bg_celllayout); @@ -71,13 +97,23 @@ public class MultipageCellLayout extends CellLayout { cellX++; } int finalCellX = cellX; - return ((MulticellReorderAlgorithm) createReorderAlgorithm()).simulateSeam( + return createReorderAlgorithm().simulateSeam( () -> super.createAreaForResize(finalCellX, cellY, spanX, spanY, dragView, direction, commit)); } @Override - public ReorderAlgorithm createReorderAlgorithm() { + int[] performReorder(int pixelX, int pixelY, int minSpanX, int minSpanY, int spanX, int spanY, + View dragView, int[] result, int[] resultSpan, int mode) { + if (pixelX >= getWidth() / 2) { + pixelX += getCellWidth(); + } + return super.performReorder(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY, dragView, + result, resultSpan, mode); + } + + @Override + public MulticellReorderAlgorithm createReorderAlgorithm() { return new MulticellReorderAlgorithm(this); } |