This commit is contained in:
Koitharu
2024-08-13 08:20:06 +03:00
parent de18324798
commit 62ed8705e8
4 changed files with 23 additions and 15 deletions

View File

@@ -3,23 +3,31 @@ package org.koitharu.kotatsu.core.ui.util
import android.view.View import android.view.View
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
class FadingAppbarHelper( class FadingAppbarMediator(
private val appBarLayout: AppBarLayout, private val appBarLayout: AppBarLayout,
private val target: View private val target: View
) : AppBarLayout.OnOffsetChangedListener { ) : AppBarLayout.OnOffsetChangedListener {
private var isBound: Boolean = false
fun bind() { fun bind() {
appBarLayout.addOnOffsetChangedListener(this) if (!isBound) {
appBarLayout.addOnOffsetChangedListener(this)
isBound = true
}
} }
fun unBind() { fun unbind() {
appBarLayout.removeOnOffsetChangedListener(this) if (isBound) {
appBarLayout.removeOnOffsetChangedListener(this)
isBound = false
}
target.alpha = 1f target.alpha = 1f
} }
override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) { override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) {
val scrollRange = appBarLayout?.totalScrollRange val scrollRange = (appBarLayout ?: return).totalScrollRange
if (scrollRange == null || scrollRange == 0) { if (scrollRange <= 0) {
return return
} }

View File

@@ -42,7 +42,7 @@ import org.koitharu.kotatsu.core.exceptions.resolve.SnackbarErrorObserver
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.prefs.NavItem import org.koitharu.kotatsu.core.prefs.NavItem
import org.koitharu.kotatsu.core.ui.BaseActivity import org.koitharu.kotatsu.core.ui.BaseActivity
import org.koitharu.kotatsu.core.ui.util.FadingAppbarHelper import org.koitharu.kotatsu.core.ui.util.FadingAppbarMediator
import org.koitharu.kotatsu.core.ui.util.MenuInvalidator import org.koitharu.kotatsu.core.ui.util.MenuInvalidator
import org.koitharu.kotatsu.core.ui.util.OptionsMenuBadgeHelper import org.koitharu.kotatsu.core.ui.util.OptionsMenuBadgeHelper
import org.koitharu.kotatsu.core.ui.widgets.SlidingBottomNavigationView import org.koitharu.kotatsu.core.ui.widgets.SlidingBottomNavigationView
@@ -89,7 +89,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
private val closeSearchCallback = CloseSearchCallback() private val closeSearchCallback = CloseSearchCallback()
private lateinit var navigationDelegate: MainNavigationDelegate private lateinit var navigationDelegate: MainNavigationDelegate
private lateinit var appUpdateBadge: OptionsMenuBadgeHelper private lateinit var appUpdateBadge: OptionsMenuBadgeHelper
private lateinit var fadingAppbarHelper: FadingAppbarHelper private lateinit var fadingAppbarMediator: FadingAppbarMediator
override val appBar: AppBarLayout override val appBar: AppBarLayout
get() = viewBinding.appbar get() = viewBinding.appbar
@@ -108,7 +108,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
viewBinding.fab?.setOnClickListener(this) viewBinding.fab?.setOnClickListener(this)
viewBinding.navRail?.headerView?.setOnClickListener(this) viewBinding.navRail?.headerView?.setOnClickListener(this)
fadingAppbarHelper = FadingAppbarHelper(viewBinding.appbar, viewBinding.toolbarCard) fadingAppbarMediator = FadingAppbarMediator(viewBinding.appbar, viewBinding.toolbarCard)
navigationDelegate = MainNavigationDelegate( navigationDelegate = MainNavigationDelegate(
navBar = checkNotNull(bottomNav ?: viewBinding.navRail), navBar = checkNotNull(bottomNav ?: viewBinding.navRail),
@@ -355,10 +355,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
private fun adjustAppbar(topFragment: Fragment) { private fun adjustAppbar(topFragment: Fragment) {
if (topFragment is FavouritesContainerFragment) { if (topFragment is FavouritesContainerFragment) {
viewBinding.appbar.fitsSystemWindows = true viewBinding.appbar.fitsSystemWindows = true
fadingAppbarHelper.bind() fadingAppbarMediator.bind()
} else { } else {
viewBinding.appbar.fitsSystemWindows = false viewBinding.appbar.fitsSystemWindows = false
fadingAppbarHelper.unBind() fadingAppbarMediator.unbind()
} }
} }

View File

@@ -84,8 +84,8 @@ class ReaderInfoBarView @JvmOverloads constructor(
paint.strokeWidth = getDimension(R.styleable.ReaderInfoBarView_android_strokeWidth, 2f) paint.strokeWidth = getDimension(R.styleable.ReaderInfoBarView_android_strokeWidth, 2f)
paint.textSize = getDimension(R.styleable.ReaderInfoBarView_android_textSize, 16f) paint.textSize = getDimension(R.styleable.ReaderInfoBarView_android_textSize, 16f)
} }
val insetStart = getSystemUiDimensionOffset("status_bar_padding_start") val insetStart = getSystemUiDimensionOffset("status_bar_padding_start").coerceAtLeast(0)
val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end") val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end").coerceAtLeast(0)
val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL
insetLeftFallback = if (isRtl) insetEnd else insetStart insetLeftFallback = if (isRtl) insetEnd else insetStart
insetRightFallback = if (isRtl) insetStart else insetEnd insetRightFallback = if (isRtl) insetStart else insetEnd

View File

@@ -18,7 +18,7 @@ import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.titleResId import org.koitharu.kotatsu.core.model.titleResId
import org.koitharu.kotatsu.core.ui.BaseActivity import org.koitharu.kotatsu.core.ui.BaseActivity
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
import org.koitharu.kotatsu.core.ui.util.FadingAppbarHelper import org.koitharu.kotatsu.core.ui.util.FadingAppbarMediator
import org.koitharu.kotatsu.core.ui.util.ReversibleActionObserver import org.koitharu.kotatsu.core.ui.util.ReversibleActionObserver
import org.koitharu.kotatsu.core.ui.widgets.ChipsView import org.koitharu.kotatsu.core.ui.widgets.ChipsView
import org.koitharu.kotatsu.core.ui.widgets.ChipsView.ChipModel import org.koitharu.kotatsu.core.ui.widgets.ChipsView.ChipModel
@@ -58,7 +58,7 @@ class SourcesCatalogActivity : BaseActivity<ActivitySourcesCatalogBinding>(),
adapter = sourcesAdapter adapter = sourcesAdapter
} }
viewBinding.chipsFilter.onChipClickListener = this viewBinding.chipsFilter.onChipClickListener = this
FadingAppbarHelper(viewBinding.appbar, viewBinding.toolbar).bind() FadingAppbarMediator(viewBinding.appbar, viewBinding.toolbar).bind()
viewModel.content.observe(this, sourcesAdapter) viewModel.content.observe(this, sourcesAdapter)
viewModel.onActionDone.observeEvent( viewModel.onActionDone.observeEvent(
this, this,