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 com.google.android.material.appbar.AppBarLayout
class FadingAppbarHelper(
class FadingAppbarMediator(
private val appBarLayout: AppBarLayout,
private val target: View
) : AppBarLayout.OnOffsetChangedListener {
private var isBound: Boolean = false
fun bind() {
appBarLayout.addOnOffsetChangedListener(this)
if (!isBound) {
appBarLayout.addOnOffsetChangedListener(this)
isBound = true
}
}
fun unBind() {
appBarLayout.removeOnOffsetChangedListener(this)
fun unbind() {
if (isBound) {
appBarLayout.removeOnOffsetChangedListener(this)
isBound = false
}
target.alpha = 1f
}
override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) {
val scrollRange = appBarLayout?.totalScrollRange
if (scrollRange == null || scrollRange == 0) {
val scrollRange = (appBarLayout ?: return).totalScrollRange
if (scrollRange <= 0) {
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.NavItem
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.OptionsMenuBadgeHelper
import org.koitharu.kotatsu.core.ui.widgets.SlidingBottomNavigationView
@@ -89,7 +89,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
private val closeSearchCallback = CloseSearchCallback()
private lateinit var navigationDelegate: MainNavigationDelegate
private lateinit var appUpdateBadge: OptionsMenuBadgeHelper
private lateinit var fadingAppbarHelper: FadingAppbarHelper
private lateinit var fadingAppbarMediator: FadingAppbarMediator
override val appBar: AppBarLayout
get() = viewBinding.appbar
@@ -108,7 +108,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
viewBinding.fab?.setOnClickListener(this)
viewBinding.navRail?.headerView?.setOnClickListener(this)
fadingAppbarHelper = FadingAppbarHelper(viewBinding.appbar, viewBinding.toolbarCard)
fadingAppbarMediator = FadingAppbarMediator(viewBinding.appbar, viewBinding.toolbarCard)
navigationDelegate = MainNavigationDelegate(
navBar = checkNotNull(bottomNav ?: viewBinding.navRail),
@@ -355,10 +355,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), AppBarOwner, BottomNav
private fun adjustAppbar(topFragment: Fragment) {
if (topFragment is FavouritesContainerFragment) {
viewBinding.appbar.fitsSystemWindows = true
fadingAppbarHelper.bind()
fadingAppbarMediator.bind()
} else {
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.textSize = getDimension(R.styleable.ReaderInfoBarView_android_textSize, 16f)
}
val insetStart = getSystemUiDimensionOffset("status_bar_padding_start")
val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end")
val insetStart = getSystemUiDimensionOffset("status_bar_padding_start").coerceAtLeast(0)
val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end").coerceAtLeast(0)
val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL
insetLeftFallback = if (isRtl) insetEnd else insetStart
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.ui.BaseActivity
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.widgets.ChipsView
import org.koitharu.kotatsu.core.ui.widgets.ChipsView.ChipModel
@@ -58,7 +58,7 @@ class SourcesCatalogActivity : BaseActivity<ActivitySourcesCatalogBinding>(),
adapter = sourcesAdapter
}
viewBinding.chipsFilter.onChipClickListener = this
FadingAppbarHelper(viewBinding.appbar, viewBinding.toolbar).bind()
FadingAppbarMediator(viewBinding.appbar, viewBinding.toolbar).bind()
viewModel.content.observe(this, sourcesAdapter)
viewModel.onActionDone.observeEvent(
this,