From 113107e05c889fd8377e76234b31c6d4f6b5f87f Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 5 May 2020 01:02:06 -0400 Subject: [PATCH] Fixed #326 --- .../util/view/ControllerExtensions.kt | 52 ++++++++++--------- .../res/layout/browse_source_controller.xml | 4 +- 2 files changed, 29 insertions(+), 27 deletions(-) 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 5fa6447ead..3d9111fdb8 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 @@ -1,12 +1,15 @@ package eu.kanade.tachiyomi.util.view -import android.R import android.animation.ValueAnimator import android.content.Context import android.content.pm.PackageManager +import android.os.Build +import android.view.View import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.WindowInsets import android.view.inputmethod.InputMethodManager +import androidx.annotation.RequiresApi import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.core.math.MathUtils @@ -17,9 +20,11 @@ import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeType import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.changehandler.FadeChangeHandler +import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.main.BottomSheetController import eu.kanade.tachiyomi.ui.manga.MangaDetailsController import eu.kanade.tachiyomi.util.system.dpToPx +import eu.kanade.tachiyomi.util.system.getResourceColor import kotlinx.android.synthetic.main.main_activity.* import kotlin.math.abs import kotlin.random.Random @@ -52,6 +57,7 @@ fun Controller.setOnQueryTextChangeListener( }) } +@RequiresApi(Build.VERSION_CODES.N_MR1) fun Controller.scrollViewWith( recycler: RecyclerView, padBottom: Boolean = false, @@ -77,7 +83,7 @@ fun Controller.scrollViewWith( val randomTag = Random.nextLong() var headerHeight = 0 var lastY = 0f - + var fakeToolbarView: View? = null recycler.doOnApplyWindowInsets { view, insets, _ -> headerHeight = insets.systemWindowInsetTop + appBarHeight if (!customPadding) view.updatePaddingRelative( @@ -116,15 +122,10 @@ fun Controller.scrollViewWith( super.onChangeStart(controller, changeHandler, changeType) if (changeType.isEnter) { elevateFunc(elevate) - if (!customPadding && changeType == ControllerChangeType.POP_ENTER && - recycler.marginTop > 0) { - recycler.updatePaddingRelative( - top = headerHeight - ) - recycler.updateLayoutParams { - topMargin = 0 - } - recycler.scrollBy(0, -headerHeight) + if (fakeToolbarView?.parent != null) { + val parent = recycler.parent as ViewGroup + parent.removeView(fakeToolbarView) + fakeToolbarView = null } lastY = 0f activity!!.toolbar.tag = randomTag @@ -136,20 +137,21 @@ fun Controller.scrollViewWith( } } } else { - if (!customPadding && lastY == 0f && - router.backstack.lastOrNull()?.controller() is MangaDetailsController - ) { - recycler.updatePaddingRelative( - top = 0 - ) - recycler.updateLayoutParams { - topMargin = headerHeight - } - recycler.scrollBy(0, headerHeight) + if (!customPadding && lastY == 0f && router.backstack.lastOrNull() + ?.controller() is MangaDetailsController + ) { + val v = View(activity) + fakeToolbarView = v + val parent = recycler.parent as ViewGroup + parent.addView(v, parent.indexOfChild(recycler) + 1) + val params = fakeToolbarView?.layoutParams + params?.height = recycler.paddingTop + params?.width = MATCH_PARENT + v.setBackgroundColor(v.context.getResourceColor(R.attr.colorSecondary)) + v.layoutParams = params } elevationAnim?.cancel() - if (activity!!.toolbar.tag == randomTag) - activity!!.toolbar.setOnClickListener(null) + if (activity!!.toolbar.tag == randomTag) activity!!.toolbar.setOnClickListener(null) } } }) @@ -164,7 +166,7 @@ fun Controller.scrollViewWith( ) { if (!recycler.canScrollVertically(-1)) { val shortAnimationDuration = resources?.getInteger( - R.integer.config_shortAnimTime + android.R.integer.config_shortAnimTime ) ?: 0 activity!!.appbar.animate().y(0f).setDuration(shortAnimationDuration.toLong()) .start() @@ -193,7 +195,7 @@ fun Controller.scrollViewWith( ) { val halfWay = abs((-activity!!.appbar.height.toFloat()) / 2) val shortAnimationDuration = resources?.getInteger( - R.integer.config_shortAnimTime + android.R.integer.config_shortAnimTime ) ?: 0 val closerToTop = abs(activity!!.appbar.y) - halfWay > 0 val atTop = !recycler.canScrollVertically(-1) diff --git a/app/src/main/res/layout/browse_source_controller.xml b/app/src/main/res/layout/browse_source_controller.xml index 1f4db30c4d..c70c8843b1 100644 --- a/app/src/main/res/layout/browse_source_controller.xml +++ b/app/src/main/res/layout/browse_source_controller.xml @@ -7,7 +7,7 @@ android:id="@+id/source_layout" android:layout_height="match_parent"> - - +