From d86f3ffad808f01d4f04f136c63c0e11f135748c Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Wed, 19 Aug 2020 02:08:58 -0400 Subject: [PATCH] Add a custom view change handler, makes it fade only one way --- .../changehandler/OneWayFadeChangeHandler.kt | 43 +++++++++++++++++++ .../ui/base/controller/ConductorExtensions.kt | 6 +-- .../kanade/tachiyomi/ui/main/MainActivity.kt | 4 +- 3 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/base/changehandler/OneWayFadeChangeHandler.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/changehandler/OneWayFadeChangeHandler.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/changehandler/OneWayFadeChangeHandler.kt new file mode 100644 index 000000000..aedc95361 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/changehandler/OneWayFadeChangeHandler.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.ui.base.changehandler + +import android.animation.Animator +import android.animation.AnimatorSet +import android.animation.ObjectAnimator +import android.view.View +import android.view.ViewGroup +import com.bluelinelabs.conductor.ControllerChangeHandler +import com.bluelinelabs.conductor.changehandler.AnimatorChangeHandler + +/** + * An [AnimatorChangeHandler] that will cross fade two views + */ +class OneWayFadeChangeHandler : AnimatorChangeHandler { + constructor() + constructor(removesFromViewOnPush: Boolean) : super(removesFromViewOnPush) + constructor(duration: Long) : super(duration) + constructor(duration: Long, removesFromViewOnPush: Boolean) : super( + duration, + removesFromViewOnPush + ) + + override fun getAnimator(container: ViewGroup, from: View?, to: View?, isPush: Boolean, toAddedToContainer: Boolean): Animator { + val animator = AnimatorSet() + if (to != null) { + val start: Float = if (toAddedToContainer) 0F else to.alpha + animator.play(ObjectAnimator.ofFloat(to, View.ALPHA, start, 1f)) + } + + if (from != null && (!isPush || removesFromViewOnPush())) { + container.removeView(from) + } + return animator + } + + override fun resetFromView(from: View) { + from.alpha = 1f + } + + override fun copy(): ControllerChangeHandler { + return OneWayFadeChangeHandler(animationDuration, removesFromViewOnPush()) + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt index ef4239912..4b9cf2c76 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt @@ -6,7 +6,7 @@ import androidx.core.content.ContextCompat import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.Router import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.FadeChangeHandler +import eu.kanade.tachiyomi.ui.base.changehandler.OneWayFadeChangeHandler fun Router.popControllerWithTag(tag: String): Boolean { val controller = getControllerWithTag(tag) @@ -30,6 +30,6 @@ fun Controller.requestPermissionsSafe(permissions: Array, requestCode: I fun Controller.withFadeTransaction(): RouterTransaction { return RouterTransaction.with(this) - .pushChangeHandler(FadeChangeHandler()) - .popChangeHandler(FadeChangeHandler()) + .pushChangeHandler(OneWayFadeChangeHandler()) + .popChangeHandler(OneWayFadeChangeHandler()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 6b3770fbd..bee547e63 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -16,7 +16,6 @@ import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.Router import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.FadeChangeHandler import com.google.android.material.appbar.AppBarLayout import com.google.android.material.behavior.HideBottomViewOnScrollBehavior import com.google.android.material.tabs.TabLayout @@ -26,6 +25,7 @@ import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.databinding.MainActivityBinding import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi import eu.kanade.tachiyomi.ui.base.activity.BaseActivity +import eu.kanade.tachiyomi.ui.base.changehandler.OneWayFadeChangeHandler import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.FabController import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController @@ -369,7 +369,7 @@ class MainActivity : BaseActivity() { } private fun setRoot(controller: Controller, id: Int) { - router.setRoot(RouterTransaction.with(controller).tag(id.toString()).pushChangeHandler(FadeChangeHandler()).popChangeHandler(FadeChangeHandler())) + router.setRoot(RouterTransaction.with(controller).tag(id.toString()).pushChangeHandler(OneWayFadeChangeHandler()).popChangeHandler(OneWayFadeChangeHandler())) } private fun syncActivityViewWithController(to: Controller?, from: Controller? = null) {