From 2139e04ab7ea6bb91e98917e3c32d5e70db26986 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sun, 28 Aug 2022 21:12:10 -0400 Subject: [PATCH] fixed elevation for app bar in stats details --- .../stats/details/StatsDetailsController.kt | 45 ++- .../util/view/ControllerExtensions.kt | 17 +- .../res/layout/stats_details_controller.xml | 341 +++++++++--------- 3 files changed, 238 insertions(+), 165 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsController.kt index 758d76dc5b..30ee3eb0c0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/stats/details/StatsDetailsController.kt @@ -1,8 +1,10 @@ package eu.kanade.tachiyomi.ui.more.stats.details +import android.animation.ValueAnimator import android.annotation.SuppressLint import android.content.Context import android.content.res.ColorStateList +import android.graphics.Color import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater @@ -13,6 +15,7 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat +import androidx.core.graphics.ColorUtils import androidx.core.view.isVisible import com.github.mikephil.charting.components.MarkerView import com.github.mikephil.charting.components.XAxis @@ -40,11 +43,14 @@ import eu.kanade.tachiyomi.ui.more.stats.StatsHelper import eu.kanade.tachiyomi.ui.more.stats.StatsHelper.getReadDuration import eu.kanade.tachiyomi.ui.more.stats.details.StatsDetailsPresenter.Stats import eu.kanade.tachiyomi.ui.more.stats.details.StatsDetailsPresenter.StatsSort +import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.contextCompatDrawable import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.materialAlertDialog import eu.kanade.tachiyomi.util.system.toInt import eu.kanade.tachiyomi.util.system.toUtcCalendar +import eu.kanade.tachiyomi.util.view.backgroundColor +import eu.kanade.tachiyomi.util.view.isControllerVisible import eu.kanade.tachiyomi.util.view.liftAppbarWith import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener import eu.kanade.tachiyomi.util.view.setStyle @@ -81,7 +87,8 @@ class StatsDetailsController : @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View) { super.onViewCreated(view) - liftAppbarWith(binding.statsDetailsScrollView, false) + liftAppbarWith(binding.statsDetailsScrollView, false, liftOnScroll = { colorToolbar(it) }) +// scrollViewWith(binding.statsDetailsScrollView, liftOnScroll = { colorToolbar(it) }) setHasOptionsMenu(true) if (presenter.selectedStat == null) { @@ -261,6 +268,42 @@ class StatsDetailsController : } } + var toolbarColorAnim: ValueAnimator? = null + var isToolbarColored = false + private var toolbarIsColored = false + private var colorAnimator: ValueAnimator? = null + + /** Set the toolbar to fully transparent or colored and translucent */ + private fun colorToolbar(isColor: Boolean) { + if (isColor == toolbarIsColored) return + val activity = activity ?: return + toolbarIsColored = isColor + if (isControllerVisible) setTitle() + val scrollingColor = activity.getResourceColor(R.attr.colorPrimaryVariant) + val topColor = activity.getResourceColor(R.attr.colorSurface) + colorAnimator?.cancel() + val percent = ImageUtil.getPercentOfColor( + binding.statsHorizontalScroll.backgroundColor ?: Color.TRANSPARENT, + activity.getResourceColor(R.attr.colorSurface), + activity.getResourceColor(R.attr.colorPrimaryVariant), + ) + val cA = ValueAnimator.ofFloat( + percent, + toolbarIsColored.toInt().toFloat(), + ) + colorAnimator = cA + colorAnimator?.addUpdateListener { animator -> + binding.statsHorizontalScroll.setBackgroundColor( + ColorUtils.blendARGB( + topColor, + scrollingColor, + animator.animatedValue as Float, + ), + ) + } + cA.start() + } + /** * Initialize the chips state */ diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt index 8b484e2b23..e24fe69e84 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ControllerExtensions.kt @@ -125,11 +125,15 @@ fun Controller.removeQueryListener(includeSearchTB: Boolean = true) { ) } -fun Controller.liftAppbarWith(recyclerOrNested: T, padView: Boolean = false) { +fun Controller.liftAppbarWith( + recyclerOrNested: T, + padView: Boolean = false, + liftOnScroll: ((Boolean) -> Unit)? = null, +) { val recycler = recyclerOrNested as? RecyclerView ?: recyclerOrNested as? NestedScrollView ?: return if (padView) { var appBarHeight = ( - if (fullAppBarHeight ?: 0 > 0) fullAppBarHeight!! + if ((fullAppBarHeight ?: 0) > 0) fullAppBarHeight!! else activityBinding?.appBar?.attrToolbarHeight ?: 0 ) activityBinding!!.toolbar.post { @@ -166,6 +170,7 @@ fun Controller.liftAppbarWith(recyclerOrNested: T, padView: Boolean = false) val colorToolbar: (Boolean) -> Unit = f@{ isColored -> isToolbarColored = isColored toolbarColorAnim?.cancel() + liftOnScroll?.invoke(isColored) val floatingBar = !(activityBinding?.toolbar?.isVisible == true || activityBinding?.tabsFrameLayout?.isVisible == true) val percent = ImageUtil.getPercentOfColor( @@ -196,6 +201,14 @@ fun Controller.liftAppbarWith(recyclerOrNested: T, padView: Boolean = false) activityBinding?.appBar?.updateAppBarAfterY(recycler) setAppBarBG(0f) + (recycler as? NestedScrollView)?.setOnScrollChangeListener { _, _, _, _, _ -> + if (router?.backstack?.lastOrNull() + ?.controller == this@liftAppbarWith && activity != null + ) { + val notAtTop = recycler.canScrollVertically(-1) + if (notAtTop != isToolbarColored) colorToolbar(notAtTop) + } + } (recycler as? RecyclerView)?.addOnScrollListener( object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { diff --git a/app/src/main/res/layout/stats_details_controller.xml b/app/src/main/res/layout/stats_details_controller.xml index 31a4c3f404..da2025e015 100644 --- a/app/src/main/res/layout/stats_details_controller.xml +++ b/app/src/main/res/layout/stats_details_controller.xml @@ -1,5 +1,5 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_height="0dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/stats_horizontal_scroll"> - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -308,4 +325,4 @@ - \ No newline at end of file + \ No newline at end of file