fix: extension dragging

This commit is contained in:
rebelonion 2024-02-07 01:29:08 -06:00
parent d53781e75a
commit 1e7b546b75
3 changed files with 48 additions and 35 deletions

View file

@ -199,10 +199,19 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder target: RecyclerView.ViewHolder
): Boolean { ): Boolean {
extensionsAdapter.onMove( val newList = extensionsAdapter.currentList.toMutableList()
viewHolder.absoluteAdapterPosition, val fromPosition = viewHolder.absoluteAdapterPosition
target.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 return true
} }
@ -221,6 +230,7 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder viewHolder: RecyclerView.ViewHolder
) { ) {
super.clearView(recyclerView, viewHolder) super.clearView(recyclerView, viewHolder)
extensionsAdapter.updatePref()
viewHolder.itemView.elevation = 0f viewHolder.itemView.elevation = 0f
viewHolder.itemView.translationZ = 0f viewHolder.itemView.translationZ = 0f
} }
@ -230,7 +240,6 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler {
lifecycleScope.launch { lifecycleScope.launch {
animeExtensionManager.installedExtensionsFlow.collect { extensions -> animeExtensionManager.installedExtensionsFlow.collect { extensions ->
logger("asdfg: Extensions updated")
extensionsAdapter.updateData(sortToAnimeSourcesList(extensions)) extensionsAdapter.updateData(sortToAnimeSourcesList(extensions))
} }
} }
@ -267,21 +276,16 @@ class InstalledAnimeExtensionsFragment : Fragment(), SearchQueryHandler {
) : ListAdapter<AnimeExtension.Installed, AnimeExtensionsAdapter.ViewHolder>( ) : ListAdapter<AnimeExtension.Installed, AnimeExtensionsAdapter.ViewHolder>(
DIFF_CALLBACK_INSTALLED DIFF_CALLBACK_INSTALLED
) { ) {
private val data: MutableList<AnimeExtension.Installed> = mutableListOf()
fun updateData(newExtensions: List<AnimeExtension.Installed>) { fun updateData(newExtensions: List<AnimeExtension.Installed>) {
submitList(newExtensions) submitList(newExtensions)
data.clear()
data.addAll(newExtensions)
} }
fun onMove(fromPosition: Int, toPosition: Int) { fun updatePref() {
Collections.swap(data, fromPosition, toPosition) val map = currentList.map { it.name }
val map = data.map { it.name }.toList()
PrefManager.setVal(PrefName.AnimeSourcesOrder, map) PrefManager.setVal(PrefName.AnimeSourcesOrder, map)
AnimeSources.pinnedAnimeSources = map AnimeSources.pinnedAnimeSources = map
AnimeSources.performReorderAnimeSources() AnimeSources.performReorderAnimeSources()
notifyItemMoved(fromPosition, toPosition)
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

View file

@ -195,10 +195,19 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder target: RecyclerView.ViewHolder
): Boolean { ): Boolean {
extensionsAdapter.onMove( val newList = extensionsAdapter.currentList.toMutableList()
viewHolder.absoluteAdapterPosition, val fromPosition = viewHolder.absoluteAdapterPosition
target.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 return true
} }
@ -217,6 +226,7 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder viewHolder: RecyclerView.ViewHolder
) { ) {
super.clearView(recyclerView, viewHolder) super.clearView(recyclerView, viewHolder)
extensionsAdapter.updatePref()
viewHolder.itemView.elevation = 0f viewHolder.itemView.elevation = 0f
viewHolder.itemView.translationZ = 0f viewHolder.itemView.translationZ = 0f
} }
@ -262,12 +272,8 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler {
DIFF_CALLBACK_INSTALLED DIFF_CALLBACK_INSTALLED
) { ) {
private val data: MutableList<MangaExtension.Installed> = mutableListOf()
fun updateData(newExtensions: List<MangaExtension.Installed>) { fun updateData(newExtensions: List<MangaExtension.Installed>) {
submitList(newExtensions) submitList(newExtensions)
data.clear()
data.addAll(newExtensions)
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@ -276,13 +282,11 @@ class InstalledMangaExtensionsFragment : Fragment(), SearchQueryHandler {
return ViewHolder(view) return ViewHolder(view)
} }
fun onMove(fromPosition: Int, toPosition: Int) { fun updatePref() {
Collections.swap(data, fromPosition, toPosition) val map = currentList.map { it.name }.toList()
val map = data.map { it.name }.toList()
PrefManager.setVal(PrefName.MangaSourcesOrder, map) PrefManager.setVal(PrefName.MangaSourcesOrder, map)
MangaSources.pinnedMangaSources = map MangaSources.pinnedMangaSources = map
MangaSources.performReorderMangaSources() MangaSources.performReorderMangaSources()
notifyItemMoved(fromPosition, toPosition)
} }
@SuppressLint("SetTextI18n", "ClickableViewAccessibility") @SuppressLint("SetTextI18n", "ClickableViewAccessibility")

View file

@ -124,10 +124,19 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder target: RecyclerView.ViewHolder
): Boolean { ): Boolean {
extensionsAdapter.onMove( val newList = extensionsAdapter.currentList.toMutableList()
viewHolder.absoluteAdapterPosition, val fromPosition = viewHolder.absoluteAdapterPosition
target.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 return true
} }
@ -146,6 +155,7 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler {
viewHolder: RecyclerView.ViewHolder viewHolder: RecyclerView.ViewHolder
) { ) {
super.clearView(recyclerView, viewHolder) super.clearView(recyclerView, viewHolder)
extensionsAdapter.updatePref()
viewHolder.itemView.elevation = 0f viewHolder.itemView.elevation = 0f
viewHolder.itemView.translationZ = 0f viewHolder.itemView.translationZ = 0f
} }
@ -191,21 +201,16 @@ class InstalledNovelExtensionsFragment : Fragment(), SearchQueryHandler {
) : ListAdapter<NovelExtension.Installed, NovelExtensionsAdapter.ViewHolder>( ) : ListAdapter<NovelExtension.Installed, NovelExtensionsAdapter.ViewHolder>(
DIFF_CALLBACK_INSTALLED DIFF_CALLBACK_INSTALLED
) { ) {
private val data: MutableList<NovelExtension.Installed> = mutableListOf()
fun updateData(newExtensions: List<NovelExtension.Installed>) { fun updateData(newExtensions: List<NovelExtension.Installed>) {
submitList(newExtensions) submitList(newExtensions)
data.clear()
data.addAll(newExtensions)
} }
fun onMove(fromPosition: Int, toPosition: Int) { fun updatePref() {
Collections.swap(data, fromPosition, toPosition) val map = currentList.map { it.name }
val map = data.map { it.name }.toList()
PrefManager.setVal(PrefName.NovelSourcesOrder, map) PrefManager.setVal(PrefName.NovelSourcesOrder, map)
NovelSources.pinnedNovelSources = map NovelSources.pinnedNovelSources = map
NovelSources.performReorderNovelSources() NovelSources.performReorderNovelSources()
notifyItemMoved(fromPosition, toPosition)
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {