Fix toolbar title alpha (#5910)

This commit is contained in:
Ivan Iskandar 2021-09-17 04:39:13 +07:00 committed by GitHub
parent d45fefd6f0
commit cfd1b4a6c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -92,10 +92,8 @@ import eu.kanade.tachiyomi.util.view.getCoordinates
import eu.kanade.tachiyomi.util.view.shrinkOnScroll import eu.kanade.tachiyomi.util.view.shrinkOnScroll
import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.util.view.snack
import eu.kanade.tachiyomi.widget.materialdialogs.QuadStateTextView import eu.kanade.tachiyomi.widget.materialdialogs.QuadStateTextView
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.recyclerview.scrollEvents
import reactivecircus.flowbinding.recyclerview.scrollStateChanges import reactivecircus.flowbinding.recyclerview.scrollStateChanges
import reactivecircus.flowbinding.swiperefreshlayout.refreshes import reactivecircus.flowbinding.swiperefreshlayout.refreshes
import timber.log.Timber import timber.log.Timber
@ -181,6 +179,16 @@ class MangaController :
private var dialog: MangaFullCoverDialog? = null private var dialog: MangaFullCoverDialog? = null
/**
* For [recyclerViewUpdatesToolbarTitleAlpha]
*/
private var recyclerViewToolbarTitleAlphaUpdaterAdded = false
private val recyclerViewToolbarTitleAlphaUpdater = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
updateToolbarTitleAlpha()
}
}
init { init {
setHasOptionsMenu(true) setHasOptionsMenu(true)
} }
@ -191,15 +199,12 @@ class MangaController :
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
super.onChangeStarted(handler, type) super.onChangeStarted(handler, type)
// Hide toolbar title on enter // Hide toolbar title on enter
if (type.isEnter) { // No need to update alpha for cover dialog
updateToolbarTitleAlpha() if (dialog == null) {
} else if (!type.isPush) { updateToolbarTitleAlpha(if (type.isEnter) 0F else 1F)
// Cancel listeners early
viewScope.cancel()
updateToolbarTitleAlpha(1F)
} }
recyclerViewUpdatesToolbarTitleAlpha(type.isEnter)
} }
override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) { override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) {
@ -250,19 +255,15 @@ class MangaController :
binding.fullRecycler?.let { binding.fullRecycler?.let {
it.adapter = ConcatAdapter(mangaInfoAdapter, chaptersHeaderAdapter, chaptersAdapter) it.adapter = ConcatAdapter(mangaInfoAdapter, chaptersHeaderAdapter, chaptersAdapter)
it.scrollEvents()
.onEach { updateToolbarTitleAlpha() }
.launchIn(viewScope)
// Skips directly to chapters list if navigated to from the library // Skips directly to chapters list if navigated to from the library
it.post { it.post {
if (!fromSource && preferences.jumpToChapters()) { if (!fromSource && preferences.jumpToChapters()) {
(it.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(1, 0) val mainActivityAppBar = (activity as? MainActivity)?.binding?.appbar
} (it.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(
1,
// Delayed in case we need to jump to chapters mainActivityAppBar?.height ?: 0
it.post { )
updateToolbarTitleAlpha() mainActivityAppBar?.isLifted = true
} }
} }
@ -299,22 +300,10 @@ class MangaController :
} }
} }
} }
// Tablet layout // Tablet layout
binding.infoRecycler?.let { binding.infoRecycler?.adapter = mangaInfoAdapter
it.adapter = mangaInfoAdapter binding.chaptersRecycler?.adapter = ConcatAdapter(chaptersHeaderAdapter, chaptersAdapter)
it.scrollEvents()
.onEach { updateToolbarTitleAlpha() }
.launchIn(viewScope)
// Delayed in case we need to jump to chapters
it.post {
updateToolbarTitleAlpha()
}
}
binding.chaptersRecycler?.let {
it.adapter = ConcatAdapter(chaptersHeaderAdapter, chaptersAdapter)
}
chaptersAdapter?.fastScroller = binding.fastScroller chaptersAdapter?.fastScroller = binding.fastScroller
@ -339,6 +328,20 @@ class MangaController :
trackSheet = TrackSheet(this, manga!!, (activity as MainActivity).supportFragmentManager) trackSheet = TrackSheet(this, manga!!, (activity as MainActivity).supportFragmentManager)
updateFilterIconState() updateFilterIconState()
recyclerViewUpdatesToolbarTitleAlpha(true)
}
private fun recyclerViewUpdatesToolbarTitleAlpha(enable: Boolean) {
val recycler = binding.fullRecycler ?: binding.infoRecycler ?: return
if (enable) {
if (!recyclerViewToolbarTitleAlphaUpdaterAdded) {
recycler.addOnScrollListener(recyclerViewToolbarTitleAlphaUpdater)
recyclerViewToolbarTitleAlphaUpdaterAdded = true
}
} else if (recyclerViewToolbarTitleAlphaUpdaterAdded) {
recycler.removeOnScrollListener(recyclerViewToolbarTitleAlphaUpdater)
recyclerViewToolbarTitleAlphaUpdaterAdded = false
}
} }
private fun updateToolbarTitleAlpha(@FloatRange(from = 0.0, to = 1.0) alpha: Float? = null) { private fun updateToolbarTitleAlpha(@FloatRange(from = 0.0, to = 1.0) alpha: Float? = null) {
@ -399,6 +402,7 @@ class MangaController :
} }
override fun onDestroyView(view: View) { override fun onDestroyView(view: View) {
recyclerViewUpdatesToolbarTitleAlpha(false)
destroyActionModeIfNeeded() destroyActionModeIfNeeded()
binding.actionToolbar.destroy() binding.actionToolbar.destroy()
mangaInfoAdapter = null mangaInfoAdapter = null