@@ -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