Simulating a split screen CellLayout using one CellLayout

Test: atest ReorderWidget
Fix: 188081026
Change-Id: I8eda5f77c11dc2625ae1f028d07539c28018fb55
This commit is contained in:
Sebastian Franco
2023-02-07 17:03:22 -08:00
parent 8baae80cdf
commit 09589326db
7 changed files with 347 additions and 78 deletions
+24 -17
View File
@@ -99,9 +99,9 @@ public class CellLayout extends ViewGroup {
private Point mBorderSpace;
@ViewDebug.ExportedProperty(category = "launcher")
private int mCountX;
protected int mCountX;
@ViewDebug.ExportedProperty(category = "launcher")
private int mCountY;
protected int mCountY;
private boolean mDropPending = false;
@@ -111,8 +111,8 @@ public class CellLayout extends ViewGroup {
@Thunk final int[] mTempLocation = new int[2];
final PointF mTmpPointF = new PointF();
private GridOccupancy mOccupied;
private GridOccupancy mTmpOccupied;
protected GridOccupancy mOccupied;
protected GridOccupancy mTmpOccupied;
private OnTouchListener mInterceptTouchListener;
@@ -121,7 +121,7 @@ public class CellLayout extends ViewGroup {
private static final int[] BACKGROUND_STATE_ACTIVE = new int[] { android.R.attr.state_active };
private static final int[] BACKGROUND_STATE_DEFAULT = EMPTY_STATE_SET;
private final Drawable mBackground;
protected final Drawable mBackground;
// These values allow a fixed measurement to be set on the CellLayout.
private int mFixedWidth = -1;
@@ -154,7 +154,7 @@ public class CellLayout extends ViewGroup {
private int mGridVisualizationRoundingRadius;
private float mGridAlpha = 0f;
private int mGridColor = 0;
private float mSpringLoadedProgress = 0f;
protected float mSpringLoadedProgress = 0f;
private float mScrollProgress = 0f;
// When a drag operation is in progress, holds the nearest cell to the touch point
@@ -164,7 +164,7 @@ public class CellLayout extends ViewGroup {
private boolean mDragging = false;
private final TimeInterpolator mEaseOutInterpolator;
private final ShortcutAndWidgetContainer mShortcutsAndWidgets;
protected final ShortcutAndWidgetContainer mShortcutsAndWidgets;
@Retention(RetentionPolicy.SOURCE)
@IntDef({WORKSPACE, HOTSEAT, FOLDER})
@@ -565,7 +565,7 @@ public class CellLayout extends ViewGroup {
return mSpringLoadedProgress;
}
private void updateBgAlpha() {
protected void updateBgAlpha() {
mBackground.setAlpha((int) (mSpringLoadedProgress * 255));
}
@@ -1662,7 +1662,7 @@ public class CellLayout extends ViewGroup {
* @param spanY vertical cell span
* @return the configuration that represents the found reorder
*/
private ItemConfiguration closestEmptySpaceReorder(int pixelX, int pixelY, int minSpanX,
ItemConfiguration closestEmptySpaceReorder(int pixelX, int pixelY, int minSpanX,
int minSpanY, int spanX, int spanY) {
ItemConfiguration solution = new ItemConfiguration();
int[] result = new int[2];
@@ -2402,8 +2402,15 @@ public class CellLayout extends ViewGroup {
return true;
}
private ItemConfiguration findReorderSolution(int pixelX, int pixelY, int minSpanX, int minSpanY,
int spanX, int spanY, int[] direction, View dragView, boolean decX,
protected ItemConfiguration findReorderSolution(int pixelX, int pixelY, int minSpanX,
int minSpanY, int spanX, int spanY, int[] direction, View dragView, boolean decX,
ItemConfiguration solution) {
return findReorderSolutionRecursive(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY,
direction, dragView, decX, solution);
}
protected ItemConfiguration findReorderSolutionRecursive(int pixelX, int pixelY, int minSpanX,
int minSpanY, int spanX, int spanY, int[] direction, View dragView, boolean decX,
ItemConfiguration solution) {
// Copy the current state into the solution. This solution will be manipulated as necessary.
copyCurrentStateToSolution(solution, false);
@@ -2426,11 +2433,11 @@ public class CellLayout extends ViewGroup {
// We try shrinking the widget down to size in an alternating pattern, shrink 1 in
// x, then 1 in y etc.
if (spanX > minSpanX && (minSpanY == spanY || decX)) {
return findReorderSolution(pixelX, pixelY, minSpanX, minSpanY, spanX - 1, spanY,
direction, dragView, false, solution);
return findReorderSolutionRecursive(pixelX, pixelY, minSpanX, minSpanY, spanX - 1,
spanY, direction, dragView, false, solution);
} else if (spanY > minSpanY) {
return findReorderSolution(pixelX, pixelY, minSpanX, minSpanY, spanX, spanY - 1,
direction, dragView, true, solution);
return findReorderSolutionRecursive(pixelX, pixelY, minSpanX, minSpanY, spanX,
spanY - 1, direction, dragView, true, solution);
}
solution.isSolution = false;
} else {
@@ -2443,7 +2450,7 @@ public class CellLayout extends ViewGroup {
return solution;
}
private void copyCurrentStateToSolution(ItemConfiguration solution, boolean temp) {
protected void copyCurrentStateToSolution(ItemConfiguration solution, boolean temp) {
int childCount = mShortcutsAndWidgets.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = mShortcutsAndWidgets.getChildAt(i);
@@ -2624,7 +2631,7 @@ public class CellLayout extends ViewGroup {
return mItemPlacementDirty;
}
private static class ItemConfiguration extends CellAndSpan {
static class ItemConfiguration extends CellAndSpan {
final ArrayMap<View, CellAndSpan> map = new ArrayMap<>();
private final ArrayMap<View, CellAndSpan> savedMap = new ArrayMap<>();
final ArrayList<View> sortedViews = new ArrayList<>();