diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarHelper.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarMediator.kt similarity index 55% rename from app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarHelper.kt rename to app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarMediator.kt index 83f99be13..c249dc963 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarHelper.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/util/FadingAppbarMediator.kt @@ -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 } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt index 8b08625be..471e3f173 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -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(), 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(), 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(), 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() } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt index dc4f4bab5..7a5ca06d2 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt @@ -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 diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/sources/catalog/SourcesCatalogActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/sources/catalog/SourcesCatalogActivity.kt index 3377f9c40..bc613b0ea 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/settings/sources/catalog/SourcesCatalogActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/sources/catalog/SourcesCatalogActivity.kt @@ -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(), 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,