From cfd1b4a6c6ae55118a985ec5cb1f7858cc3a3e87 Mon Sep 17 00:00:00 2001 From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com> Date: Fri, 17 Sep 2021 04:39:13 +0700 Subject: [PATCH] Fix toolbar title alpha (#5910) --- .../tachiyomi/ui/manga/MangaController.kt | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index 838d8f91f..b70ad5525 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -92,10 +92,8 @@ import eu.kanade.tachiyomi.util.view.getCoordinates import eu.kanade.tachiyomi.util.view.shrinkOnScroll import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.widget.materialdialogs.QuadStateTextView -import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import reactivecircus.flowbinding.recyclerview.scrollEvents import reactivecircus.flowbinding.recyclerview.scrollStateChanges import reactivecircus.flowbinding.swiperefreshlayout.refreshes import timber.log.Timber @@ -181,6 +179,16 @@ class MangaController : 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 { setHasOptionsMenu(true) } @@ -191,15 +199,12 @@ class MangaController : override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { super.onChangeStarted(handler, type) - // Hide toolbar title on enter - if (type.isEnter) { - updateToolbarTitleAlpha() - } else if (!type.isPush) { - // Cancel listeners early - viewScope.cancel() - updateToolbarTitleAlpha(1F) + // No need to update alpha for cover dialog + if (dialog == null) { + updateToolbarTitleAlpha(if (type.isEnter) 0F else 1F) } + recyclerViewUpdatesToolbarTitleAlpha(type.isEnter) } override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) { @@ -250,19 +255,15 @@ class MangaController : binding.fullRecycler?.let { it.adapter = ConcatAdapter(mangaInfoAdapter, chaptersHeaderAdapter, chaptersAdapter) - it.scrollEvents() - .onEach { updateToolbarTitleAlpha() } - .launchIn(viewScope) - // Skips directly to chapters list if navigated to from the library it.post { if (!fromSource && preferences.jumpToChapters()) { - (it.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(1, 0) - } - - // Delayed in case we need to jump to chapters - it.post { - updateToolbarTitleAlpha() + val mainActivityAppBar = (activity as? MainActivity)?.binding?.appbar + (it.layoutManager as LinearLayoutManager).scrollToPositionWithOffset( + 1, + mainActivityAppBar?.height ?: 0 + ) + mainActivityAppBar?.isLifted = true } } @@ -299,22 +300,10 @@ class MangaController : } } } + // Tablet layout - binding.infoRecycler?.let { - it.adapter = mangaInfoAdapter - - 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) - } + binding.infoRecycler?.adapter = mangaInfoAdapter + binding.chaptersRecycler?.adapter = ConcatAdapter(chaptersHeaderAdapter, chaptersAdapter) chaptersAdapter?.fastScroller = binding.fastScroller @@ -339,6 +328,20 @@ class MangaController : trackSheet = TrackSheet(this, manga!!, (activity as MainActivity).supportFragmentManager) 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) { @@ -399,6 +402,7 @@ class MangaController : } override fun onDestroyView(view: View) { + recyclerViewUpdatesToolbarTitleAlpha(false) destroyActionModeIfNeeded() binding.actionToolbar.destroy() mangaInfoAdapter = null