Don't hide menu when scrolling through with ReaderSeekBar (#5611)

(cherry picked from commit 7660751f7f85112d6c03872b5a3dc13148f425e0)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
This commit is contained in:
Andreas 2021-07-31 18:04:13 +02:00 committed by Jobobby04
parent 52a0aa9d47
commit 2b4adc0c7d
4 changed files with 42 additions and 22 deletions

View File

@ -180,6 +180,9 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
private val windowInsetsController by lazy { WindowInsetsControllerCompat(window, binding.root) }
var isScrollingThroughPages = false
private set
/**
* Called when the activity is created. Initializes the presenter and configuration.
*/
@ -424,6 +427,16 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
// SY -->
// Init listeners on bottom menu
val listener = object : SimpleSeekBarListener() {
override fun onStartTrackingTouch(seekBar: SeekBar) {
super.onStartTrackingTouch(seekBar)
isScrollingThroughPages = true
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
super.onStopTrackingTouch(seekBar)
isScrollingThroughPages = false
}
override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
if (viewer != null && fromUser) {
moveToPageIndex(value)

View File

@ -118,22 +118,21 @@ class PagerPageHolder(
*/
private var readImageHeaderSubscription: Subscription? = null
val stateChangedListener = object : SubsamplingScaleImageView.OnStateChangedListener {
override fun onScaleChanged(newScale: Float, origin: Int) {
viewer.activity.hideMenu()
}
override fun onCenterChanged(newCenter: PointF?, origin: Int) {
viewer.activity.hideMenu()
}
}
private var visibilityListener = ActionBar.OnMenuVisibilityListener { isVisible ->
if (isVisible.not()) {
subsamplingImageView?.setOnStateChangedListener(null)
return@OnMenuVisibilityListener
}
subsamplingImageView?.setOnStateChangedListener(
object : SubsamplingScaleImageView.OnStateChangedListener {
override fun onScaleChanged(newScale: Float, origin: Int) {
viewer.activity.hideMenu()
}
override fun onCenterChanged(newCenter: PointF?, origin: Int) {
viewer.activity.hideMenu()
}
}
)
subsamplingImageView?.setOnStateChangedListener(stateChangedListener)
}
// SY -->
@ -150,6 +149,10 @@ class PagerPageHolder(
scope = CoroutineScope(Job() + Dispatchers.Default)
observeStatus()
viewer.activity.addOnMenuVisibilityListener(visibilityListener)
if (viewer.activity.menuVisible) {
// Listener will not be available if user changed page with seek bar
subsamplingImageView?.setOnStateChangedListener(stateChangedListener)
}
}
/**

View File

@ -74,6 +74,9 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
private var pagerListener = object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
if (activity.isScrollingThroughPages.not()) {
activity.hideMenu()
}
onPageChange(position)
}
@ -101,6 +104,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
val pos = PointF(event.rawX / pager.width, event.rawY / pager.height)
val navigator = config.navigator
when (navigator.getAction(pos)) {
NavigationRegion.MENU -> activity.toggleMenu()
NavigationRegion.NEXT -> moveToNext()
@ -163,7 +167,6 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
* Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active
*/
private fun onPageChange(position: Int) {
activity.hideMenu()
val page = adapter.joinedItems.getOrNull(position)
if (page != null && currentPage != page) {
val allowPreload = checkAllowPreload(page.first as? ReaderPage)

View File

@ -81,6 +81,10 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
onScrolled()
if ((dy > 37 || dy < -37) && activity.menuVisible) {
activity.hideMenu()
}
if (dy < 0) {
val firstIndex = layoutManager.findFirstVisibleItemPosition()
val firstItem = adapter.items.getOrNull(firstIndex)
@ -98,14 +102,12 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
}
val pos = PointF(event.rawX / recycler.width, event.rawY / recycler.height)
if (!config.tappingEnabled) activity.toggleMenu()
else {
val navigator = config.navigator
when (navigator.getAction(pos)) {
NavigationRegion.MENU -> activity.toggleMenu()
NavigationRegion.NEXT, NavigationRegion.RIGHT -> scrollDown()
NavigationRegion.PREV, NavigationRegion.LEFT -> scrollUp()
}
val navigator = config.navigator
when (navigator.getAction(pos)) {
NavigationRegion.MENU -> activity.toggleMenu()
NavigationRegion.NEXT, NavigationRegion.RIGHT -> scrollDown()
NavigationRegion.PREV, NavigationRegion.LEFT -> scrollUp()
}
}
recycler.longTapListener = f@{ event ->
@ -241,7 +243,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
if (position != -1) {
recycler.scrollToPosition(position)
if (layoutManager.findLastEndVisibleItemPosition() == -1) {
onScrolled(position)
onScrolled(pos = position)
}
} else {
Timber.d("Page $page not found in adapter")
@ -249,7 +251,6 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
}
fun onScrolled(pos: Int? = null) {
activity.hideMenu()
val position = pos ?: layoutManager.findLastEndVisibleItemPosition()
val item = adapter.items.getOrNull(position)
val allowPreload = checkAllowPreload(item as? ReaderPage)