mirror of
				https://github.com/SimpleMobileTools/Simple-Launcher.git
				synced 2025-06-05 21:59:15 +02:00 
			
		
		
		
	Merge pull request #119 from esensar/delete-empty-pages
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") |     @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) |     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 |     @Transaction | ||||||
|     fun deleteByPackageName(packageName: String) { |     fun deleteByPackageName(packageName: String) { | ||||||
|         deleteItemByPackageName(packageName) |         deleteItemByPackageName(packageName) | ||||||
|   | |||||||
| @@ -246,6 +246,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|             if (item.type == ITEM_TYPE_WIDGET) { |             if (item.type == ITEM_TYPE_WIDGET) { | ||||||
|                 appWidgetHost.deleteAppWidgetId(item.widgetId) |                 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) { |             if (isDroppingPositionValid) { | ||||||
|                 draggedHomeGridItem?.apply { |                 draggedHomeGridItem?.apply { | ||||||
|  |                     val oldPage = page | ||||||
|                     left = xIndex |                     left = xIndex | ||||||
|                     top = yIndex |                     top = yIndex | ||||||
|                     right = xIndex |                     right = xIndex | ||||||
| @@ -450,6 +455,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|  |  | ||||||
|                     ensureBackgroundThread { |                     ensureBackgroundThread { | ||||||
|                         context.homeScreenGridItemsDB.updateItemPosition(left, top, right, bottom, page, docked, parentId, id!!) |                         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 |                 redrawIcons = true | ||||||
| @@ -604,6 +615,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|             draggedHomeGridItem.apply { |             draggedHomeGridItem.apply { | ||||||
|                 val oldParentId = parentId |                 val oldParentId = parentId | ||||||
|                 val oldLeft = left |                 val oldLeft = left | ||||||
|  |                 val oldPage = page | ||||||
|                 left = finalXIndex |                 left = finalXIndex | ||||||
|                 top = yIndex |                 top = yIndex | ||||||
|                 right = finalXIndex |                 right = finalXIndex | ||||||
| @@ -638,6 +650,12 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|  |  | ||||||
|                         context.homeScreenGridItemsDB.shiftFolderItems(newParentId, left - 1, +1, id) |                         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) { |         } else if (draggedItem != null) { | ||||||
| @@ -734,6 +752,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|  |  | ||||||
|             if (areAllCellsEmpty) { |             if (areAllCellsEmpty) { | ||||||
|                 val widgetItem = draggedItem!!.copy() |                 val widgetItem = draggedItem!!.copy() | ||||||
|  |                 val oldPage = widgetItem.page | ||||||
|                 widgetItem.apply { |                 widgetItem.apply { | ||||||
|                     left = widgetRect.left |                     left = widgetRect.left | ||||||
|                     top = widgetRect.top |                     top = widgetRect.top | ||||||
| @@ -776,7 +795,14 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|                             right = widgetItem.right |                             right = widgetItem.right | ||||||
|                             top = widgetItem.top |                             top = widgetItem.top | ||||||
|                             bottom = widgetItem.bottom |                             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 |         // remove the drawable so that it gets refreshed on long press | ||||||
|         item.drawable = null |         item.drawable = null | ||||||
|  |         // Delete existing windget if it has already been loaded to the list | ||||||
|  |         gridItems.removeIf { it.id == item.id } | ||||||
|         gridItems.add(item) |         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 |     private fun getMaxPage() = gridItems.filter { !it.docked && !it.outOfBounds() }.maxOfOrNull { it.page } ?: 0 | ||||||
|  |  | ||||||
|     fun nextPage(redraw: Boolean = false): Boolean { |     fun nextPage(redraw: Boolean = false): Boolean { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user