summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Franco <fransebas@google.com>2023-05-08 10:04:44 -0600
committerSebastian Franco <fransebas@google.com>2023-05-18 14:47:47 -0700
commit96c46e7fbaa296bcfe8b0f2ec78a002e9ea9243b (patch)
treef9834db8dcae583bd5548418a76c32cb8afe1d1a /src
parent2e17bcaa0b1371f1a65763d03197b2b007de96ed (diff)
downloadLauncher3-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.java2
-rw-r--r--src/com/android/launcher3/MultipageCellLayout.java42
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);
}