From 6c60819f099156251593c742a71784107269de87 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Tue, 23 Aug 2022 14:39:31 +0200 Subject: [PATCH] Install icon packs in 100 icon chunks to avoid OOM --- .../de/mm20/launcher2/icons/IconPackManager.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt b/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt index 9a915eb5..d72f9ee9 100644 --- a/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt +++ b/icons/src/main/java/de/mm20/launcher2/icons/IconPackManager.kt @@ -484,6 +484,9 @@ class UpdateIconPacksWorker(val context: Context) { val icons = mutableListOf() val iconDao = AppDatabase.getInstance(context).iconDao() + iconDao.deleteIconPack(iconPack.toDatabaseEntity()) + iconDao.deleteIcons(iconPack.packageName) + loop@ while (parser.next() != XmlPullParser.END_DOCUMENT) { if (parser.eventType != XmlPullParser.START_TAG) continue when (parser.name) { @@ -577,11 +580,16 @@ class UpdateIconPacksWorker(val context: Context) { iconPack.scale = scale } } + if (icons.size >= 100) { + iconDao.insertAll(icons.map { it.toDatabaseEntity() }) + icons.clear() + } } - iconDao.installIconPack( - iconPack.toDatabaseEntity(), - icons.map { it.toDatabaseEntity() }) + if (icons.isNotEmpty()) { + iconDao.insertAll(icons.map { it.toDatabaseEntity() }) + } + iconDao.installIconPack(iconPack.toDatabaseEntity()) (parser as? XmlResourceParser)?.close() inStream?.close()