Fix folder opening and closing issues

This commit is contained in:
Ensar Sarajčić 2023-08-24 13:18:46 +02:00
parent 1863a9e6a9
commit 3dd78cc911
1 changed files with 27 additions and 25 deletions

View File

@ -270,7 +270,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
} }
currentlyOpenFolder?.also { folder -> currentlyOpenFolder?.also { folder ->
if (folder.getDrawingRect().contains(x.toFloat(), y.toFloat())) { if (folder.getDrawingRect(overrideScale = 1f).contains(x.toFloat(), y.toFloat())) {
draggingLeftFolderAt = null draggingLeftFolderAt = null
} else { } else {
draggingLeftFolderAt.also { draggingLeftFolderAt.also {
@ -296,32 +296,34 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
draggedItemCurrentCoords = Pair(x, y) draggedItemCurrentCoords = Pair(x, y)
val center = gridCenters.minBy { if (draggedItem?.type != ITEM_TYPE_FOLDER && draggedItem?.type != ITEM_TYPE_WIDGET) {
abs(it.x - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.y - draggedItemCurrentCoords.second + sideMargins.top) val center = gridCenters.minBy {
} abs(it.x - draggedItemCurrentCoords.first + sideMargins.left) + abs(it.y - draggedItemCurrentCoords.second + sideMargins.top)
val coveredCell = getClosestGridCells(center) }
if (coveredCell != null) { val coveredCell = getClosestGridCells(center)
val coveredFolder = gridItems.firstOrNull { it.type == ITEM_TYPE_FOLDER && it.left == coveredCell.x && it.top == coveredCell.y } if (coveredCell != null) {
if (coveredFolder != null && coveredFolder.id != draggedItem?.id) { val coveredFolder = gridItems.firstOrNull { it.type == ITEM_TYPE_FOLDER && it.left == coveredCell.x && it.top == coveredCell.y }
draggingEnteredNewFolderAt.also { if (coveredFolder != null && coveredFolder.id != draggedItem?.id) {
if (it == null) { draggingEnteredNewFolderAt.also {
draggingEnteredNewFolderAt = System.currentTimeMillis() if (it == null) {
} else if (System.currentTimeMillis() - it > FOLDER_OPEN_HOLD_THRESHOLD) { draggingEnteredNewFolderAt = System.currentTimeMillis()
if (coveredFolder.toFolder().getItems() } else if (System.currentTimeMillis() - it > FOLDER_OPEN_HOLD_THRESHOLD) {
.count() >= HomeScreenGridItem.FOLDER_MAX_CAPACITY && draggedItem?.parentId != coveredFolder.id if (coveredFolder.toFolder().getItems()
) { .count() >= HomeScreenGridItem.FOLDER_MAX_CAPACITY && draggedItem?.parentId != coveredFolder.id
performHapticFeedback() ) {
draggingEnteredNewFolderAt = null performHapticFeedback()
} else { draggingEnteredNewFolderAt = null
openFolder(coveredFolder) } else {
openFolder(coveredFolder)
}
} }
} }
} else {
draggingEnteredNewFolderAt = null
} }
} else { } else {
draggingEnteredNewFolderAt = null draggingEnteredNewFolderAt = null
} }
} else {
draggingEnteredNewFolderAt = null
} }
pager.handleItemMovement(x, y) pager.handleItemMovement(x, y)
@ -492,7 +494,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
// check if the destination cell is empty or a folder // check if the destination cell is empty or a folder
isDroppingPositionValid = true isDroppingPositionValid = true
val wantedCell = Pair(xIndex, yIndex) val wantedCell = Pair(xIndex, yIndex)
gridItems.filterVisibleOnCurrentPageOnly().forEach { item -> gridItems.filterVisibleOnCurrentPageOnly().filter { it.id != draggedItem?.id }.forEach { item ->
for (xCell in item.left..item.right) { for (xCell in item.left..item.right) {
for (yCell in item.getDockAdjustedTop(rowCount)..item.getDockAdjustedBottom(rowCount)) { for (yCell in item.getDockAdjustedTop(rowCount)..item.getDockAdjustedBottom(rowCount)) {
val cell = Pair(xCell, yCell) val cell = Pair(xCell, yCell)
@ -626,7 +628,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
context.homeScreenGridItemsDB.shiftFolderItems(oldParentId, oldLeft, -1, id) context.homeScreenGridItemsDB.shiftFolderItems(oldParentId, oldLeft, -1, id)
} }
if (newParentId != null && gridItems.any { it.parentId == newParentId && it.left == left }) { if (newParentId != null && gridItems.any { it.parentId == newParentId && it.left == left } && (newParentId != oldParentId || left != oldLeft)) {
gridItems.filter { it.parentId == newParentId && it.left >= left && it.id != id }.forEach { gridItems.filter { it.parentId == newParentId && it.left >= left && it.id != id }.forEach {
it.left += 1 it.left += 1
} }
@ -989,7 +991,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
} }
val folder = currentlyOpenFolder val folder = currentlyOpenFolder
if (folder != null) { if (folder != null && folder.getItems().isNotEmpty()) {
val items = folder.getItems() val items = folder.getItems()
val folderRect = folder.getDrawingRect() val folderRect = folder.getDrawingRect()
val folderItemsRect = folder.getItemsDrawingRect() val folderItemsRect = folder.getItemsDrawingRect()
@ -1344,7 +1346,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
if (currentlyOpenFolder == null) { if (currentlyOpenFolder == null) {
currentlyOpenFolder = folder.toFolder(animateOpening = true) currentlyOpenFolder = folder.toFolder(animateOpening = true)
redrawGrid() redrawGrid()
} else { } else if (currentlyOpenFolder?.item?.id != folder.id ){
closeFolder() closeFolder()
} }
} }