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")
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.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<IconPack>()
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<IconPack>) {
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,