Fix multi-select phantom anchor bug in manga chapters and library (#4201)

* Fix phantom anchor bug in manga chapters list when multi-selecting

* Fix phantom bug when long pressing selected items not at top of stack

* Fix phantom anchor bug in library page
This commit is contained in:
Clarence Castillo
2021-01-23 06:35:51 +08:00
committed by GitHub
parent 441fc6e45b
commit 496a476c13
2 changed files with 35 additions and 9 deletions
@@ -82,6 +82,7 @@ import timber.log.Timber
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.util.ArrayDeque
import kotlin.math.min
class MangaController :
@@ -154,7 +155,7 @@ class MangaController :
private val isLocalSource by lazy { presenter.source.id == LocalSource.ID }
private var lastClickPosition = -1
private var lastClickPositionStack = ArrayDeque(listOf(-1))
private var isRefreshingInfo = false
private var isRefreshingChapters = false
@@ -727,7 +728,12 @@ class MangaController :
val adapter = chaptersAdapter ?: return false
val item = adapter.getItem(position) ?: return false
return if (actionMode != null && adapter.mode == SelectableAdapter.Mode.MULTI) {
lastClickPosition = position
if (adapter.isSelected(position)) {
lastClickPositionStack.remove(position) // possible that it's not there, but no harm
} else {
lastClickPositionStack.push(position)
}
toggleSelection(position)
true
} else {
@@ -738,6 +744,7 @@ class MangaController :
override fun onItemLongClick(position: Int) {
createActionModeIfNeeded()
val lastClickPosition = lastClickPositionStack.peek()!!
when {
lastClickPosition == -1 -> setSelection(position)
lastClickPosition > position ->
@@ -748,7 +755,10 @@ class MangaController :
setSelection(i)
else -> setSelection(position)
}
lastClickPosition = position
if (lastClickPosition != position) {
lastClickPositionStack.remove(position) // move to top if already exists
lastClickPositionStack.push(position)
}
chaptersAdapter?.notifyDataSetChanged()
}
@@ -797,7 +807,8 @@ class MangaController :
}
private fun destroyActionModeIfNeeded() {
lastClickPosition = -1
lastClickPositionStack.clear()
lastClickPositionStack.push(-1)
actionMode?.finish()
}