Remove uninstalled icon packs from database

This commit is contained in:
MM20 2023-03-03 14:19:22 +01:00
parent 473ecf8875
commit c040076ce9
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 18 additions and 2 deletions

View File

@ -53,4 +53,10 @@ interface IconDao {
@Query("SELECT scale FROM IconPack WHERE packageName = :pack") @Query("SELECT scale FROM IconPack WHERE packageName = :pack")
suspend fun getScale(pack: String): Float? suspend fun getScale(pack: String): Float?
@Query("DELETE FROM Icons WHERE iconPack NOT IN (:keep)")
suspend fun deleteIconsNotIn(keep: List<String>)
@Query("DELETE FROM IconPack WHERE packageName NOT IN (:keep)")
suspend fun deleteIconPacksNotIn(keep: List<String>)
} }

View File

@ -14,15 +14,14 @@ import android.graphics.drawable.AdaptiveIconDrawable
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.LayerDrawable import android.graphics.drawable.LayerDrawable
import android.graphics.drawable.RotateDrawable
import android.util.Log import android.util.Log
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toBitmap import androidx.core.graphics.drawable.toBitmap
import androidx.room.withTransaction
import de.mm20.launcher2.database.AppDatabase import de.mm20.launcher2.database.AppDatabase
import de.mm20.launcher2.icons.loaders.AppFilterIconPackInstaller import de.mm20.launcher2.icons.loaders.AppFilterIconPackInstaller
import de.mm20.launcher2.icons.loaders.GrayscaleMapIconPackInstaller import de.mm20.launcher2.icons.loaders.GrayscaleMapIconPackInstaller
import de.mm20.launcher2.ktx.isAtLeastApiLevel import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.ktx.obtainTypedArrayOrNull
import de.mm20.launcher2.ktx.randomElementOrNull import de.mm20.launcher2.ktx.randomElementOrNull
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
@ -58,6 +57,7 @@ class IconPackManager(
AppFilterIconPackInstaller(context, appDatabase), AppFilterIconPackInstaller(context, appDatabase),
GrayscaleMapIconPackInstaller(context, appDatabase), GrayscaleMapIconPackInstaller(context, appDatabase),
) )
val installedPacks = mutableListOf<IconPack>()
for (installer in installers) { for (installer in installers) {
val iconPacks = installer.getInstalledIconPacks() val iconPacks = installer.getInstalledIconPacks()
for (pack in iconPacks) { for (pack in iconPacks) {
@ -68,11 +68,21 @@ class IconPackManager(
Log.d("MM20", "Icon pack ${pack.packageName} is up to date") Log.d("MM20", "Icon pack ${pack.packageName} is up to date")
} }
} }
installedPacks.addAll(iconPacks)
} }
uninstallAllIconPacksExcept(installedPacks)
updateIconPacksMutex.unlock() updateIconPacksMutex.unlock()
return iconsHaveBeenUpdated return iconsHaveBeenUpdated
} }
private suspend fun uninstallAllIconPacksExcept(keep: List<IconPack>) {
val dao = appDatabase.iconDao()
appDatabase.withTransaction {
dao.deleteIconsNotIn(keep.map { it.packageName })
dao.deleteIconPacksNotIn(keep.map { it.packageName })
}
}
suspend fun getIcon( suspend fun getIcon(
iconPack: String, iconPack: String,
packageName: String, packageName: String,