diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconCustomFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconCustomFragment.kt index 4b3d0ade7..4a17c3c07 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconCustomFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconCustomFragment.kt @@ -31,8 +31,10 @@ class IconCustomFragment : IconFragment() { return R.layout.fragment_icon_grid } - override fun defineIconList(): List { - return mDatabase?.getCustomIconList() ?: listOf() + override fun defineIconList() { + mDatabase?.doForEachCustomIcons { customIcon -> + iconPickerAdapter.addIcon(customIcon, false) + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconFragment.kt index 95027d6bd..6f067c3cc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconFragment.kt @@ -51,7 +51,7 @@ abstract class IconFragment : StylishFragment(), abstract fun retrieveMainLayoutId(): Int - abstract fun defineIconList(): List + abstract fun defineIconList() override fun onAttach(context: Context) { super.onAttach(context) @@ -69,7 +69,8 @@ abstract class IconFragment : StylishFragment(), CoroutineScope(Dispatchers.IO).launch { val populateList = launch { - iconPickerAdapter.setList(defineIconList()) + iconPickerAdapter.clear() + defineIconList() } withContext(Dispatchers.Main) { populateList.join() diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconStandardFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconStandardFragment.kt index e7c4fefb6..62807e174 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconStandardFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/IconStandardFragment.kt @@ -29,8 +29,10 @@ class IconStandardFragment : IconFragment() { return R.layout.fragment_icon_grid } - override fun defineIconList(): List { - return mDatabase?.getStandardIconList() ?: listOf() + override fun defineIconList() { + mDatabase?.doForEachStandardIcons { standardIcon -> + iconPickerAdapter.addIcon(standardIcon, false) + } } override fun onIconClickListener(icon: IconImageStandard) { diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/IconPickerAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/IconPickerAdapter.kt index cd702d00a..4508f5c21 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/IconPickerAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/IconPickerAdapter.kt @@ -23,10 +23,12 @@ class IconPickerAdapter(val context: Context, private val tint val lastPosition: Int get() = iconList.lastIndex - fun addIcon(icon: I) { + fun addIcon(icon: I, notify: Boolean = true) { if (!iconList.contains(icon)) { iconList.add(icon) - notifyItemInserted(iconList.indexOf(icon)) + if (notify) { + notifyItemInserted(iconList.indexOf(icon)) + } } } @@ -74,6 +76,10 @@ class IconPickerAdapter(val context: Context, private val tint return iconList.filter { it.selected } } + fun clear() { + iconList.clear() + } + fun setList(icons: List) { iconList.clear() icons.forEach { iconImage -> diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index 2f194731c..711cf4bd6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -103,8 +103,8 @@ class Database { return mDatabaseKDB?.iconsManager ?: mDatabaseKDBX?.iconsManager ?: IconsManager() } - fun getStandardIconList(): List { - return iconsManager.getStandardIconList() + fun doForEachStandardIcons(action: (IconImageStandard) -> Unit) { + return iconsManager.doForEachStandardIcon(action) } fun getStandardIcon(iconId: Int): IconImageStandard { @@ -114,8 +114,8 @@ class Database { val allowCustomIcons: Boolean get() = mDatabaseKDBX != null - fun getCustomIconList(): List { - return iconsManager.getCustomIconList() + fun doForEachCustomIcons(action: (IconImageCustom) -> Unit) { + return iconsManager.doForEachCustomIcon(action) } fun getCustomIcon(iconId: UUID): IconImageCustom { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/icon/IconsManager.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/icon/IconsManager.kt index 9eea8f0b5..81a792167 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/icon/IconsManager.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/icon/IconsManager.kt @@ -39,8 +39,10 @@ class IconsManager { return standardCache[searchIconId] } - fun getStandardIconList(): List { - return standardCache + fun doForEachStandardIcon(action: (IconImageStandard) -> Unit) { + standardCache.forEach { icon -> + action.invoke(icon) + } } /* @@ -73,14 +75,6 @@ class IconsManager { } } - fun getCustomIconList(): List { - val list = ArrayList() - customCache.doForEachBinary { key, binary -> - list.add(IconImageCustom(key, binary)) - } - return list - } - fun doForEachCustomIcon(action: (IconImageCustom) -> Unit) { customCache.doForEachBinary { key, binary -> action.invoke(IconImageCustom(key, binary))