Fix folder opening and closing issues
This commit is contained in:
parent
1863a9e6a9
commit
3dd78cc911
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue