Files
lawnchair/src/com/android/launcher3/util/GridOccupancy.java
Shikha Malhotra e957b600d3 Refactor code to be used in LauncherLily features
Refactor add to workspace code to be used in Lily Launcher.
Also utilising code swap feature to swap out functionality of sorting
items on workspaces and finding next vacant space.

Bug: b/218186705
Test: Manually tested Launcher3 works.
Change-Id: I42a44eabeb307e1d23ef333e0a169437f9062bb6
2022-04-20 07:22:20 +00:00

85 lines
2.4 KiB
Java

package com.android.launcher3.util;
import android.graphics.Rect;
import com.android.launcher3.model.data.ItemInfo;
/**
* Utility object to manage the occupancy in a grid.
*/
public class GridOccupancy extends AbsGridOccupancy {
private final int mCountX;
private final int mCountY;
public final boolean[][] cells;
public GridOccupancy(int countX, int countY) {
mCountX = countX;
mCountY = countY;
cells = new boolean[countX][countY];
}
/**
* Find the first vacant cell, if there is one.
*
* @param vacantOut Holds the x and y coordinate of the vacant cell
* @param spanX Horizontal cell span.
* @param spanY Vertical cell span.
*
* @return true if a vacant cell was found
*/
public boolean findVacantCell(int[] vacantOut, int spanX, int spanY) {
return super.findVacantCell(vacantOut, cells, mCountX, mCountY, spanX, spanY);
}
public void copyTo(GridOccupancy dest) {
for (int i = 0; i < mCountX; i++) {
for (int j = 0; j < mCountY; j++) {
dest.cells[i][j] = cells[i][j];
}
}
}
public boolean isRegionVacant(int x, int y, int spanX, int spanY) {
int x2 = x + spanX - 1;
int y2 = y + spanY - 1;
if (x < 0 || y < 0 || x2 >= mCountX || y2 >= mCountY) {
return false;
}
for (int i = x; i <= x2; i++) {
for (int j = y; j <= y2; j++) {
if (cells[i][j]) {
return false;
}
}
}
return true;
}
public void markCells(int cellX, int cellY, int spanX, int spanY, boolean value) {
if (cellX < 0 || cellY < 0) return;
for (int x = cellX; x < cellX + spanX && x < mCountX; x++) {
for (int y = cellY; y < cellY + spanY && y < mCountY; y++) {
cells[x][y] = value;
}
}
}
public void markCells(Rect r, boolean value) {
markCells(r.left, r.top, r.width(), r.height(), value);
}
public void markCells(CellAndSpan cell, boolean value) {
markCells(cell.cellX, cell.cellY, cell.spanX, cell.spanY, value);
}
public void markCells(ItemInfo item, boolean value) {
markCells(item.cellX, item.cellY, item.spanX, item.spanY, value);
}
public void clear() {
markCells(0, 0, mCountX, mCountY, false);
}
}