From 1e7b546b7570796dd23fb61552f680291e1493dd Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Wed, 7 Feb 2024 01:29:08 -0600 Subject: [PATCH] fix: extension dragging --- .../InstalledAnimeExtensionsFragment.kt | 28 +++++++++++-------- .../InstalledMangaExtensionsFragment.kt | 28 +++++++++++-------- .../InstalledNovelExtensionsFragment.kt | 27 ++++++++++-------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt b/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt index 699f7321..97bde283 100644 --- a/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt @@ -199,10 +199,19 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder ): Boolean { - extensionsAdapter.onMove( - viewHolder.absoluteAdapterPosition, - target.absoluteAdapterPosition - ) + val newList = extensionsAdapter.currentList.toMutableList() + val fromPosition = viewHolder.absoluteAdapterPosition + val toPosition = target.absoluteAdapterPosition + if (fromPosition < toPosition) { //probably need to switch to a recyclerview adapter + for (i in fromPosition until toPosition) { + Collections.swap(newList, i, i + 1) + } + } else { + for (i in fromPosition downTo toPosition + 1) { + Collections.swap(newList, i, i - 1) + } + } + extensionsAdapter.submitList(newList) return true } @@ -221,6 +230,7 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder ) { super.clearView(recyclerView, viewHolder) + extensionsAdapter.updatePref() viewHolder.itemView.elevation = 0f viewHolder.itemView.translationZ = 0f } @@ -230,7 +240,6 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler { lifecycleScope.launch { animeExtensionManager.installedExtensionsFlow.collect { extensions -> - logger("asdfg: Extensions updated") extensionsAdapter.updateData(sortToAnimeSourcesList(extensions)) } } @@ -267,21 +276,16 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler { ) : ListAdapter( DIFF_CALLBACK_INSTALLED ) { - private val data: MutableList = mutableListOf() fun updateData(newExtensions: List) { submitList(newExtensions) - data.clear() - data.addAll(newExtensions) } - fun onMove(fromPosition: Int, toPosition: Int) { - Collections.swap(data, fromPosition, toPosition) - val map = data.map { it.name }.toList() + fun updatePref() { + val map = currentList.map { it.name } PrefManager.setVal(PrefName.AnimeSourcesOrder, map) AnimeSources.pinnedAnimeSources = map AnimeSources.performReorderAnimeSources() - notifyItemMoved(fromPosition, toPosition) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { diff --git a/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt b/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt index 9eee8e31..a102c76c 100644 --- a/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt @@ -195,10 +195,19 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder ): Boolean { - extensionsAdapter.onMove( - viewHolder.absoluteAdapterPosition, - target.absoluteAdapterPosition - ) + val newList = extensionsAdapter.currentList.toMutableList() + val fromPosition = viewHolder.absoluteAdapterPosition + val toPosition = target.absoluteAdapterPosition + if (fromPosition < toPosition) { //probably need to switch to a recyclerview adapter + for (i in fromPosition until toPosition) { + Collections.swap(newList, i, i + 1) + } + } else { + for (i in fromPosition downTo toPosition + 1) { + Collections.swap(newList, i, i - 1) + } + } + extensionsAdapter.submitList(newList) return true } @@ -217,6 +226,7 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder ) { super.clearView(recyclerView, viewHolder) + extensionsAdapter.updatePref() viewHolder.itemView.elevation = 0f viewHolder.itemView.translationZ = 0f } @@ -262,12 +272,8 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler { DIFF_CALLBACK_INSTALLED ) { - private val data: MutableList = mutableListOf() - fun updateData(newExtensions: List) { submitList(newExtensions) - data.clear() - data.addAll(newExtensions) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { @@ -276,13 +282,11 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler { return ViewHolder(view) } - fun onMove(fromPosition: Int, toPosition: Int) { - Collections.swap(data, fromPosition, toPosition) - val map = data.map { it.name }.toList() + fun updatePref() { + val map = currentList.map { it.name }.toList() PrefManager.setVal(PrefName.MangaSourcesOrder, map) MangaSources.pinnedMangaSources = map MangaSources.performReorderMangaSources() - notifyItemMoved(fromPosition, toPosition) } @SuppressLint("SetTextI18n", "ClickableViewAccessibility") diff --git a/app/src/main/java/ani/dantotsu/settings/InstalledNovelExtensionsFragment.kt b/app/src/main/java/ani/dantotsu/settings/InstalledNovelExtensionsFragment.kt index 0b49f968..8353596d 100644 --- a/app/src/main/java/ani/dantotsu/settings/InstalledNovelExtensionsFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/InstalledNovelExtensionsFragment.kt @@ -124,10 +124,19 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder ): Boolean { - extensionsAdapter.onMove( - viewHolder.absoluteAdapterPosition, - target.absoluteAdapterPosition - ) + val newList = extensionsAdapter.currentList.toMutableList() + val fromPosition = viewHolder.absoluteAdapterPosition + val toPosition = target.absoluteAdapterPosition + if (fromPosition < toPosition) { //probably need to switch to a recyclerview adapter + for (i in fromPosition until toPosition) { + Collections.swap(newList, i, i + 1) + } + } else { + for (i in fromPosition downTo toPosition + 1) { + Collections.swap(newList, i, i - 1) + } + } + extensionsAdapter.submitList(newList) return true } @@ -146,6 +155,7 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler { viewHolder: RecyclerView.ViewHolder ) { super.clearView(recyclerView, viewHolder) + extensionsAdapter.updatePref() viewHolder.itemView.elevation = 0f viewHolder.itemView.translationZ = 0f } @@ -191,21 +201,16 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler { ) : ListAdapter( DIFF_CALLBACK_INSTALLED ) { - private val data: MutableList = mutableListOf() fun updateData(newExtensions: List) { submitList(newExtensions) - data.clear() - data.addAll(newExtensions) } - fun onMove(fromPosition: Int, toPosition: Int) { - Collections.swap(data, fromPosition, toPosition) - val map = data.map { it.name }.toList() + fun updatePref() { + val map = currentList.map { it.name } PrefManager.setVal(PrefName.NovelSourcesOrder, map) NovelSources.pinnedNovelSources = map NovelSources.performReorderNovelSources() - notifyItemMoved(fromPosition, toPosition) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {