From 3441a84d025e0724badfb6dd886e3a4d00235c99 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 22 Sep 2022 22:19:18 +0200 Subject: [PATCH] add a new menu button for removing icons from the home screen --- .../launcher/activities/MainActivity.kt | 20 ++++++++++--------- .../launcher/fragments/AllAppsFragment.kt | 2 +- .../interfaces/HomeScreenGridItemsDao.kt | 5 ++++- .../launcher/views/HomeScreenGrid.kt | 8 ++++++++ app/src/main/res/menu/menu_app_icon.xml | 5 +++++ app/src/main/res/values/dimens.xml | 2 +- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt index 50d8cc8..efc0a0e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt @@ -177,7 +177,7 @@ class MainActivity : SimpleActivity(), FlingListener { if (!launchers.map { it.packageName }.contains(packageName)) { hasDeletedAnything = true launchersDB.deleteApp(packageName) - homeScreenGridItemsDB.deleteItem(packageName) + homeScreenGridItemsDB.deleteByPackageName(packageName) } } @@ -235,7 +235,7 @@ class MainActivity : SimpleActivity(), FlingListener { main_holder.performHapticFeedback() val clickedGridItem = home_screen_grid.isClickingGridItem(getGridTouchedX(x), getGridTouchedY(y)) if (clickedGridItem != null) { - showHomeIconMenu(x, y - resources.getDimension(R.dimen.icon_long_press_anchor_offset_y), clickedGridItem) + showHomeIconMenu(x, y - resources.getDimension(R.dimen.icon_long_press_anchor_offset_y), clickedGridItem, false) return } @@ -251,15 +251,15 @@ class MainActivity : SimpleActivity(), FlingListener { } } - private fun getGridTouchedX(x: Float) = Math.min(Math.max(x.toInt() - home_screen_grid.marginLeft, 0), home_screen_grid.width).toInt() + private fun getGridTouchedX(x: Float) = Math.min(Math.max(x.toInt() - home_screen_grid.marginLeft, 0), home_screen_grid.width) - private fun getGridTouchedY(y: Float) = Math.min(Math.max(y.toInt() - home_screen_grid.marginTop, 0), home_screen_grid.height).toInt() + private fun getGridTouchedY(y: Float) = Math.min(Math.max(y.toInt() - home_screen_grid.marginTop, 0), home_screen_grid.height) - fun showHomeIconMenu(x: Float, y: Float, gridItem: HomeScreenGridItem) { + fun showHomeIconMenu(x: Float, y: Float, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean) { mLongPressedIcon = gridItem home_screen_popup_menu_anchor.x = x home_screen_popup_menu_anchor.y = y - mOpenPopupMenu = handleGridItemPopupMenu(home_screen_popup_menu_anchor, gridItem.packageName) + mOpenPopupMenu = handleGridItemPopupMenu(home_screen_popup_menu_anchor, gridItem, isOnAllAppsFragment) } private fun showMainLongPressMenu(x: Float, y: Float) { @@ -278,15 +278,17 @@ class MainActivity : SimpleActivity(), FlingListener { } } - private fun handleGridItemPopupMenu(anchorView: View, appPackageName: String): PopupMenu { + private fun handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean): PopupMenu { val contextTheme = ContextThemeWrapper(this, getPopupMenuTheme()) return PopupMenu(contextTheme, anchorView, Gravity.TOP or Gravity.END).apply { inflate(R.menu.menu_app_icon) + menu.findItem(R.id.remove).isVisible = !isOnAllAppsFragment setOnMenuItemClickListener { item -> (all_apps_fragment as AllAppsFragment).ignoreTouches = false when (item.itemId) { - R.id.app_info -> launchAppInfo(appPackageName) - R.id.uninstall -> uninstallApp(appPackageName) + R.id.app_info -> launchAppInfo(gridItem.packageName) + R.id.remove -> home_screen_grid.removeAppIcon(gridItem.id!!) + R.id.uninstall -> uninstallApp(gridItem.packageName) } true } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt index e0dfdf4..9f9a89c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt @@ -128,7 +128,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment override fun onAppLauncherLongPressed(x: Float, y: Float, appLauncher: AppLauncher) { val gridItem = HomeScreenGridItem(null, -1, -1, -1, 1, appLauncher.packageName, appLauncher.title) - activity?.showHomeIconMenu(x, y, gridItem) + activity?.showHomeIconMenu(x, y, gridItem, true) ignoreTouches = true } } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/interfaces/HomeScreenGridItemsDao.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/interfaces/HomeScreenGridItemsDao.kt index 51b86c7..a10911f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/interfaces/HomeScreenGridItemsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/interfaces/HomeScreenGridItemsDao.kt @@ -23,6 +23,9 @@ interface HomeScreenGridItemsDao { @Query("UPDATE home_screen_grid_items SET `left` = :left, `top` = :top, `right` = :right, `bottom` = :bottom WHERE id = :id") fun updateAppPosition(left: Int, top: Int, right: Int, bottom: Int, id: Long) + @Query("DELETE FROM home_screen_grid_items WHERE id = :id") + fun deleteById(id: Long) + @Query("DELETE FROM home_screen_grid_items WHERE package_name = :packageName") - fun deleteItem(packageName: String) + fun deleteByPackageName(packageName: String) } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt index 09a2ad8..cc35c5b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt @@ -64,6 +64,14 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie } } + fun removeAppIcon(iconId: Long) { + ensureBackgroundThread { + context.homeScreenGridItemsDB.deleteById(iconId) + gridItems.removeIf { it.id == iconId } + invalidate() + } + } + fun itemDraggingStarted(draggedGridItem: HomeScreenGridItem) { draggedItem = draggedGridItem invalidate() diff --git a/app/src/main/res/menu/menu_app_icon.xml b/app/src/main/res/menu/menu_app_icon.xml index b6822bd..732a8d7 100644 --- a/app/src/main/res/menu/menu_app_icon.xml +++ b/app/src/main/res/menu/menu_app_icon.xml @@ -6,6 +6,11 @@ android:icon="@drawable/ic_info_vector" android:title="@string/app_info" app:showAsAction="always" /> + 55dp - 100dp + 150dp 50dp 140dp 10dp