Skip to content

Commit 63a61df

Browse files
committed
Remove empty home screen pages after moving or deleting items
1 parent 60a4c31 commit 63a61df

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

app/src/main/kotlin/com/simplemobiletools/launcher/interfaces/HomeScreenGridItemsDao.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ interface HomeScreenGridItemsDao {
4747
@Query("UPDATE home_screen_grid_items SET `left` = `left` + :shiftBy WHERE parent_id == :folderId AND `left` > :shiftFrom AND id != :excludingId")
4848
fun shiftFolderItems(folderId: Long, shiftFrom: Int, shiftBy: Int, excludingId: Long? = null)
4949

50+
@Query("UPDATE home_screen_grid_items SET `page` = `page` + :shiftBy WHERE `page` > :shiftFrom")
51+
fun shiftPage(shiftFrom: Int, shiftBy: Int)
52+
5053
@Transaction
5154
fun deleteByPackageName(packageName: String) {
5255
deleteItemByPackageName(packageName)

app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
246246
if (item.type == ITEM_TYPE_WIDGET) {
247247
appWidgetHost.deleteAppWidgetId(item.widgetId)
248248
}
249+
250+
if (item.page != 0 && gridItems.none { it.page == item.page && it.id != item.id && it.parentId == null }) {
251+
deletePage(item.page)
252+
}
249253
}
250254
}
251255

@@ -441,6 +445,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
441445

442446
if (isDroppingPositionValid) {
443447
draggedHomeGridItem?.apply {
448+
val oldPage = page
444449
left = xIndex
445450
top = yIndex
446451
right = xIndex
@@ -450,6 +455,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
450455

451456
ensureBackgroundThread {
452457
context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, parentId, id!!)
458+
459+
if (page != oldPage && oldPage != 0) {
460+
if (gridItems.none { it.page == oldPage && it.parentId == null }) {
461+
deletePage(oldPage)
462+
}
463+
}
453464
}
454465
}
455466
redrawIcons = true
@@ -604,6 +615,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
604615
draggedHomeGridItem.apply {
605616
val oldParentId = parentId
606617
val oldLeft = left
618+
val oldPage = page
607619
left = finalXIndex
608620
top = yIndex
609621
right = finalXIndex
@@ -638,6 +650,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
638650

639651
context.homeScreenGridItemsDB.shiftFolderItems(newParentId, left - 1, +1, id)
640652
}
653+
654+
if (page != oldPage && oldPage != 0) {
655+
if (gridItems.none { it.page == oldPage && it.parentId == null }) {
656+
deletePage(oldPage)
657+
}
658+
}
641659
}
642660
}
643661
} else if (draggedItem != null) {
@@ -734,6 +752,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
734752

735753
if (areAllCellsEmpty) {
736754
val widgetItem = draggedItem!!.copy()
755+
val oldPage = widgetItem.page
737756
widgetItem.apply {
738757
left = widgetRect.left
739758
top = widgetRect.top
@@ -776,7 +795,14 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
776795
right = widgetItem.right
777796
top = widgetItem.top
778797
bottom = widgetItem.bottom
779-
page = widgetItem.page
798+
page = pager.getCurrentPage()
799+
}
800+
801+
802+
if (widgetItem.page != oldPage && oldPage != 0) {
803+
if (gridItems.none { it.page == oldPage && it.parentId == null }) {
804+
deletePage(oldPage)
805+
}
780806
}
781807
}
782808
}
@@ -848,6 +874,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
848874

849875
// remove the drawable so that it gets refreshed on long press
850876
item.drawable = null
877+
// Delete existing windget if it has already been loaded to the list
878+
gridItems.removeIf { it.id == item.id }
851879
gridItems.add(item)
852880
}
853881

@@ -1317,6 +1345,19 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
13171345
}
13181346
}
13191347

1348+
private fun deletePage(page: Int) {
1349+
gridItems.filter { it.page > page }.forEach {
1350+
it.page -= 1
1351+
}
1352+
context.homeScreenGridItemsDB.shiftPage(page, -1)
1353+
1354+
if (pager.isOutsideOfPageRange()) {
1355+
post {
1356+
prevPage()
1357+
}
1358+
}
1359+
}
1360+
13201361
private fun getMaxPage() = gridItems.filter { !it.docked && !it.outOfBounds() }.maxOfOrNull { it.page } ?: 0
13211362

13221363
fun nextPage(redraw: Boolean = false): Boolean {

0 commit comments

Comments
 (0)