mirror of
				https://github.com/SimpleMobileTools/Simple-Launcher.git
				synced 2025-06-05 21:59:15 +02:00 
			
		
		
		
	Remove empty home screen pages after moving or deleting items
This commit is contained in:
		| @@ -47,6 +47,9 @@ interface HomeScreenGridItemsDao { | ||||
|     @Query("UPDATE home_screen_grid_items SET `left` = `left` + :shiftBy WHERE parent_id == :folderId AND `left` > :shiftFrom AND id != :excludingId") | ||||
|     fun shiftFolderItems(folderId: Long, shiftFrom: Int, shiftBy: Int, excludingId: Long? = null) | ||||
|  | ||||
|     @Query("UPDATE home_screen_grid_items SET `page` = `page` + :shiftBy WHERE `page` > :shiftFrom") | ||||
|     fun shiftPage(shiftFrom: Int, shiftBy: Int) | ||||
|  | ||||
|     @Transaction | ||||
|     fun deleteByPackageName(packageName: String) { | ||||
|         deleteItemByPackageName(packageName) | ||||
|   | ||||
| @@ -246,6 +246,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|             if (item.type == ITEM_TYPE_WIDGET) { | ||||
|                 appWidgetHost.deleteAppWidgetId(item.widgetId) | ||||
|             } | ||||
|  | ||||
|             if (item.page != 0 && gridItems.none { it.page == item.page && it.id != item.id && it.parentId == null }) { | ||||
|                 deletePage(item.page) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -441,6 +445,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|             if (isDroppingPositionValid) { | ||||
|                 draggedHomeGridItem?.apply { | ||||
|                     val oldPage = page | ||||
|                     left = xIndex | ||||
|                     top = yIndex | ||||
|                     right = xIndex | ||||
| @@ -450,6 +455,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|                     ensureBackgroundThread { | ||||
|                         context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, parentId, id!!) | ||||
|  | ||||
|                         if (page != oldPage && oldPage != 0) { | ||||
|                             if (gridItems.none { it.page == oldPage && it.parentId == null }) { | ||||
|                                 deletePage(oldPage) | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 redrawIcons = true | ||||
| @@ -604,6 +615,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|             draggedHomeGridItem.apply { | ||||
|                 val oldParentId = parentId | ||||
|                 val oldLeft = left | ||||
|                 val oldPage = page | ||||
|                 left = finalXIndex | ||||
|                 top = yIndex | ||||
|                 right = finalXIndex | ||||
| @@ -638,6 +650,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|                         context.homeScreenGridItemsDB.shiftFolderItems(newParentId, left - 1, +1, id) | ||||
|                     } | ||||
|  | ||||
|                     if (page != oldPage && oldPage != 0) { | ||||
|                         if (gridItems.none { it.page == oldPage && it.parentId == null }) { | ||||
|                             deletePage(oldPage) | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } else if (draggedItem != null) { | ||||
| @@ -734,6 +752,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|             if (areAllCellsEmpty) { | ||||
|                 val widgetItem = draggedItem!!.copy() | ||||
|                 val oldPage = widgetItem.page | ||||
|                 widgetItem.apply { | ||||
|                     left = widgetRect.left | ||||
|                     top = widgetRect.top | ||||
| @@ -776,7 +795,14 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|                             right = widgetItem.right | ||||
|                             top = widgetItem.top | ||||
|                             bottom = widgetItem.bottom | ||||
|                             page = widgetItem.page | ||||
|                             page = pager.getCurrentPage() | ||||
|                         } | ||||
|  | ||||
|  | ||||
|                         if (widgetItem.page != oldPage && oldPage != 0) { | ||||
|                             if (gridItems.none { it.page == oldPage && it.parentId == null }) { | ||||
|                                 deletePage(oldPage) | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @@ -848,6 +874,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|  | ||||
|         // remove the drawable so that it gets refreshed on long press | ||||
|         item.drawable = null | ||||
|         // Delete existing windget if it has already been loaded to the list | ||||
|         gridItems.removeIf { it.id == item.id } | ||||
|         gridItems.add(item) | ||||
|     } | ||||
|  | ||||
| @@ -1317,6 +1345,19 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun deletePage(page: Int) { | ||||
|         gridItems.filter { it.page > page }.forEach { | ||||
|             it.page -= 1 | ||||
|         } | ||||
|         context.homeScreenGridItemsDB.shiftPage(page, -1) | ||||
|  | ||||
|         if (pager.isOutsideOfPageRange()) { | ||||
|             post { | ||||
|                 prevPage() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun getMaxPage() = gridItems.filter { !it.docked && !it.outOfBounds() }.maxOfOrNull { it.page } ?: 0 | ||||
|  | ||||
|     fun nextPage(redraw: Boolean = false): Boolean { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user