From c040076ce9f2844c203527769a15ae19950e8bec Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Fri, 3 Mar 2023 14:19:22 +0100 Subject: [PATCH] Remove uninstalled icon packs from database --- .../java/de/mm20/launcher2/database/IconDao.kt | 6 ++++++ .../de/mm20/launcher2/icons/IconPackManager.kt | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/core/database/src/main/java/de/mm20/launcher2/database/IconDao.kt b/core/database/src/main/java/de/mm20/launcher2/database/IconDao.kt index d0cd0b27..0cb17589 100644 --- a/core/database/src/main/java/de/mm20/launcher2/database/IconDao.kt +++ b/core/database/src/main/java/de/mm20/launcher2/database/IconDao.kt @@ -53,4 +53,10 @@ interface IconDao { @Query("SELECT scale FROM IconPack WHERE packageName = :pack") suspend fun getScale(pack: String): Float? + + @Query("DELETE FROM Icons WHERE iconPack NOT IN (:keep)") + suspend fun deleteIconsNotIn(keep: List) + + @Query("DELETE FROM IconPack WHERE packageName NOT IN (:keep)") + suspend fun deleteIconPacksNotIn(keep: List) } \ No newline at end of file diff --git a/services/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt b/services/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt index 98d30429..873c64bb 100644 --- a/services/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt +++ b/services/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt @@ -14,15 +14,14 @@ import android.graphics.drawable.AdaptiveIconDrawable import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable -import android.graphics.drawable.RotateDrawable import android.util.Log import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toBitmap +import androidx.room.withTransaction import de.mm20.launcher2.database.AppDatabase import de.mm20.launcher2.icons.loaders.AppFilterIconPackInstaller import de.mm20.launcher2.icons.loaders.GrayscaleMapIconPackInstaller import de.mm20.launcher2.ktx.isAtLeastApiLevel -import de.mm20.launcher2.ktx.obtainTypedArrayOrNull import de.mm20.launcher2.ktx.randomElementOrNull import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.sync.Mutex @@ -58,6 +57,7 @@ class IconPackManager( AppFilterIconPackInstaller(context, appDatabase), GrayscaleMapIconPackInstaller(context, appDatabase), ) + val installedPacks = mutableListOf() for (installer in installers) { val iconPacks = installer.getInstalledIconPacks() for (pack in iconPacks) { @@ -68,11 +68,21 @@ class IconPackManager( Log.d("MM20", "Icon pack ${pack.packageName} is up to date") } } + installedPacks.addAll(iconPacks) } + uninstallAllIconPacksExcept(installedPacks) updateIconPacksMutex.unlock() return iconsHaveBeenUpdated } + private suspend fun uninstallAllIconPacksExcept(keep: List) { + val dao = appDatabase.iconDao() + appDatabase.withTransaction { + dao.deleteIconsNotIn(keep.map { it.packageName }) + dao.deleteIconPacksNotIn(keep.map { it.packageName }) + } + } + suspend fun getIcon( iconPack: String, packageName: String,