From 5bcb31fbd8e7bd00fa2a2e9e074bba457873c396 Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Tue, 7 Dec 2021 19:02:30 -0800 Subject: [PATCH 1/7] Update DefaultTransition from a slide to a fade + zoom --- buildSrc/src/main/kotlin/Dependencies.kt | 2 + buildSrc/src/main/kotlin/Versions.kt | 3 +- magellan-library/build.gradle | 1 + .../magellan/transitions/DefaultTransition.kt | 101 ++++++++++++------ 4 files changed, 75 insertions(+), 32 deletions(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 7f82a739..22ccaf56 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,5 +1,6 @@ import Versions.androidXCoreVersion import Versions.archVersion +import Versions.blendVersion import Versions.butterKnifeVersion import Versions.constraintLayoutVersion import Versions.coroutinesVersion @@ -46,6 +47,7 @@ object Dependencies { const val androidXCore = "androidx.core:core-ktx:$androidXCoreVersion" const val material = "com.google.android.material:material:$materialVersion" + const val blend = "com.wealthfront:blend-library:$blendVersion" const val junit = "junit:junit:$junitVersion" const val junitTestExt = "androidx.test.ext:junit-ktx:$junitTestExtVersion" const val truth = "com.google.truth:truth:$truthVersion" diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 38d9e3a5..f9a01e52 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -1,6 +1,6 @@ object Versions { const val compileSdkVersion = 30 - const val minSdkVersion = 18 + const val minSdkVersion = 21 const val targetSdkVersion = 30 const val kotlinVersion = "1.5.20" @@ -26,6 +26,7 @@ object Versions { const val okhttpVersion = "4.4.0" const val javaInjectVersion = "1" const val materialVersion = "1.4.0" + const val blendVersion = "0.2.2" const val coroutinesVersion = "1.4.3" const val testCoreVersion = "1.4.0" diff --git a/magellan-library/build.gradle b/magellan-library/build.gradle index aeb01f04..0a86398e 100644 --- a/magellan-library/build.gradle +++ b/magellan-library/build.gradle @@ -56,6 +56,7 @@ dependencies { implementation Dependencies.inject implementation Dependencies.coroutines implementation Dependencies.coroutinesAndroid + api Dependencies.blend testImplementation project(':internal-test-support') testImplementation Dependencies.testCore diff --git a/magellan-library/src/main/java/com/wealthfront/magellan/transitions/DefaultTransition.kt b/magellan-library/src/main/java/com/wealthfront/magellan/transitions/DefaultTransition.kt index 86ce2d86..1293b81a 100644 --- a/magellan-library/src/main/java/com/wealthfront/magellan/transitions/DefaultTransition.kt +++ b/magellan-library/src/main/java/com/wealthfront/magellan/transitions/DefaultTransition.kt @@ -1,22 +1,28 @@ package com.wealthfront.magellan.transitions -import android.animation.Animator -import android.animation.AnimatorListenerAdapter -import android.animation.AnimatorSet -import android.animation.ObjectAnimator -import android.util.Property import android.view.View -import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import android.view.ViewGroup +import com.wealthfront.blend.Blend +import com.wealthfront.blend.dsl.AnimatorBuilder +import com.wealthfront.blend.dsl.fadeIn +import com.wealthfront.blend.dsl.fadeOut +import com.wealthfront.blend.dsl.scale import com.wealthfront.magellan.Direction import com.wealthfront.magellan.navigation.NavigationEvent +private const val ENTER_TRANSITION_LENGTH_MILLIS = 300L +private const val EXIT_TRANSITION_LENGTH_MILLIS = 250L +private const val SCALE_UP_FACTOR = 1.15f +private const val SCALE_DOWN_FACTOR = 0.85f + /** * The default transition for all [NavigationEvent]s where another [MagellanTransition] isn't - * defined. Performs a right-to-left slide on entrance and a left-to-right slide on exit. Uses a - * [FastOutSlowInInterpolator] for both per + * defined. Performs a fade and zoom (similar to Android 12 settings) on entrance and exit. Uses + * [AnimatorBuilder.emphasizeEase] for both per * [the Material Design guidelines](https://material.io/design/motion/speed.html#easing). + * The exit animation is also slightly shorter than the entrance, per the guidelines. */ -public class DefaultTransition : MagellanTransition { +public class DefaultTransition(private val blend: Blend = Blend()) : MagellanTransition { override fun animate( from: View?, @@ -24,30 +30,63 @@ public class DefaultTransition : MagellanTransition { direction: Direction, onAnimationEndCallback: () -> Unit ) { - val animator = createAnimator(from, to, direction) - animator.addListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - onAnimationEndCallback() + when (direction) { + Direction.FORWARD -> animateForward(from, to, onAnimationEndCallback) + Direction.BACKWARD -> animateBackward(from, to, onAnimationEndCallback) + }.let { } + } + + private fun animateForward(from: View?, to: View, onAnimationEndCallback: () -> Unit) { + blend { + immediate() + target(to).animations { + fadeOut() + scale(SCALE_DOWN_FACTOR) + } + doOnStart { + // Put `to` behind `from` + val parent = to.parent as ViewGroup + parent.removeView(to) + parent.addView(to, 0) + } + }.then { + emphasizeEase() + duration(ENTER_TRANSITION_LENGTH_MILLIS) + from?.let { fromView -> + target(fromView).animations { + fadeOut() + scale(SCALE_UP_FACTOR) + } + } + target(to).animations { + fadeIn() + scale(1f) } - }) - animator.start() + doOnFinishedEvenIfInterrupted(onAnimationEndCallback) + }.start() } - private fun createAnimator( - from: View?, - to: View, - direction: Direction - ): AnimatorSet { - val sign = direction.sign() - val axis: Property = View.TRANSLATION_X - val toTranslation = sign * to.width - val set = AnimatorSet() - if (from != null) { - val fromTranslation = sign * -from.width - set.play(ObjectAnimator.ofFloat(from, axis, 0f, fromTranslation.toFloat())) - } - set.play(ObjectAnimator.ofFloat(to, axis, toTranslation.toFloat(), 0f)) - set.interpolator = FastOutSlowInInterpolator() - return set + private fun animateBackward(from: View?, to: View, onAnimationEndCallback: () -> Unit) { + blend { + immediate() + target(to).animations { + fadeOut() + scale(SCALE_UP_FACTOR) + } + }.then { + emphasizeEase() + duration(EXIT_TRANSITION_LENGTH_MILLIS) + from?.let { fromView -> + target(fromView).animations { + fadeOut() + scale(SCALE_DOWN_FACTOR) + } + } + target(to).animations { + fadeIn() + scale(1f) + } + doOnFinishedEvenIfInterrupted(onAnimationEndCallback) + }.start() } } From c1f9e778a02a05ea5135dec18c635b85dcfd18f5 Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Tue, 7 Dec 2021 19:02:49 -0800 Subject: [PATCH 2/7] Update ShowTransition from a slide to a fade + zoom --- .../magellan/transitions/ShowTransition.kt | 101 ++++++++++++------ 1 file changed, 71 insertions(+), 30 deletions(-) diff --git a/magellan-library/src/main/java/com/wealthfront/magellan/transitions/ShowTransition.kt b/magellan-library/src/main/java/com/wealthfront/magellan/transitions/ShowTransition.kt index 2422c1f3..e9f38cf2 100644 --- a/magellan-library/src/main/java/com/wealthfront/magellan/transitions/ShowTransition.kt +++ b/magellan-library/src/main/java/com/wealthfront/magellan/transitions/ShowTransition.kt @@ -1,22 +1,29 @@ package com.wealthfront.magellan.transitions -import android.animation.Animator -import android.animation.AnimatorListenerAdapter -import android.animation.AnimatorSet -import android.animation.ObjectAnimator -import android.util.Property import android.view.View -import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import android.view.ViewGroup +import com.wealthfront.blend.Blend +import com.wealthfront.blend.dsl.AnimatorBuilder +import com.wealthfront.blend.dsl.fadeIn +import com.wealthfront.blend.dsl.fadeOut +import com.wealthfront.blend.dsl.scale +import com.wealthfront.blend.dsl.translationY import com.wealthfront.magellan.Direction import com.wealthfront.magellan.Direction.BACKWARD import com.wealthfront.magellan.Direction.FORWARD +private const val ENTER_TRANSITION_LENGTH_MILLIS = 300L +private const val EXIT_TRANSITION_LENGTH_MILLIS = 250L +private const val SCALE_DOWN_FACTOR = 0.85f +private const val HEIGHT_OFFSET_FACTOR = 0.2f + /** - * A vertical version of [DefaultTransition]. Performs a bottom-to-top slide on entrance and a - * top-to-bottom slide on exit. Uses a [FastOutSlowInInterpolator] for both per + * A vertical version of [DefaultTransition]. Performs an upward slide and fade in on entrance and a + * downward slide and fade out on exit. Uses [AnimatorBuilder.emphasizeEase] for both per * [the Material Design guidelines](https://material.io/design/motion/speed.html#easing). + * The exit animation is also slightly shorter than the entrance, per the guidelines. */ -public class ShowTransition : MagellanTransition { +public class ShowTransition(private val blend: Blend = Blend()) : MagellanTransition { override fun animate( from: View?, @@ -24,29 +31,63 @@ public class ShowTransition : MagellanTransition { direction: Direction, onAnimationEndCallback: () -> Unit ) { - val animator = createAnimator(from, to, direction) - animator.addListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - onAnimationEndCallback() + when (direction) { + FORWARD -> animateForward(from, to, onAnimationEndCallback) + BACKWARD -> animateBackward(from, to, onAnimationEndCallback) + }.let { } + } + + private fun animateForward(from: View?, to: View, onAnimationEndCallback: () -> Unit) { + blend { + immediate() + target(to).animations { + fadeOut() + translationY(to.height * HEIGHT_OFFSET_FACTOR) } - }) - animator.start() + }.then { + emphasizeEase() + duration(ENTER_TRANSITION_LENGTH_MILLIS) + from?.let { fromView -> + target(fromView).animations { + fadeOut() + scale(SCALE_DOWN_FACTOR) + } + } + target(to).animations { + fadeIn() + translationY(0f) + } + doOnFinishedEvenIfInterrupted(onAnimationEndCallback) + }.start() } - private fun createAnimator( - from: View?, - to: View, - direction: Direction - ): AnimatorSet { - val axis: Property = View.TRANSLATION_Y - val fromTranslation: Int = if (direction == FORWARD) 0 else from!!.height - val toTranslation: Int = if (direction == BACKWARD) 0 else to.height - val set = AnimatorSet() - if (from != null) { - set.play(ObjectAnimator.ofFloat(from, axis, 0f, fromTranslation.toFloat())) - } - set.play(ObjectAnimator.ofFloat(to, axis, toTranslation.toFloat(), 0f)) - set.interpolator = FastOutSlowInInterpolator() - return set + private fun animateBackward(from: View?, to: View, onAnimationEndCallback: () -> Unit) { + blend { + immediate() + target(to).animations { + fadeOut() + scale(SCALE_DOWN_FACTOR) + } + doOnStart { + // Put `to` behind `from` + val parent = to.parent as ViewGroup + parent.removeView(to) + parent.addView(to, 0) + } + }.then { + emphasizeEase() + duration(EXIT_TRANSITION_LENGTH_MILLIS) + from?.let { fromView -> + target(fromView).animations { + fadeOut() + translationY(fromView.height * HEIGHT_OFFSET_FACTOR) + } + } + target(to).animations { + fadeIn() + scale(1f) + } + doOnFinishedEvenIfInterrupted(onAnimationEndCallback) + }.start() } } From be9a8b943c7a71e0ad6333b54e36bdafbcf6e38a Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Wed, 8 Dec 2021 10:15:55 -0800 Subject: [PATCH 3/7] Rename .java to .kt --- .../{DefaultTransitionTest.java => DefaultTransitionTest.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename magellan-library/src/test/java/com/wealthfront/magellan/transitions/{DefaultTransitionTest.java => DefaultTransitionTest.kt} (100%) diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.java b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt similarity index 100% rename from magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.java rename to magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt From 274c8d237b7460ee1ce3dd65d571839a4d78e964 Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Wed, 8 Dec 2021 10:15:55 -0800 Subject: [PATCH 4/7] Fix tests --- buildSrc/src/main/kotlin/Dependencies.kt | 1 + magellan-library/build.gradle | 1 + .../transitions/DefaultTransitionTest.kt | 95 +++++++++++-------- 3 files changed, 57 insertions(+), 40 deletions(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 22ccaf56..c67bcba0 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -48,6 +48,7 @@ object Dependencies { const val material = "com.google.android.material:material:$materialVersion" const val blend = "com.wealthfront:blend-library:$blendVersion" + const val blendTest = "com.wealthfront:blend-test:$blendVersion" const val junit = "junit:junit:$junitVersion" const val junitTestExt = "androidx.test.ext:junit-ktx:$junitTestExtVersion" const val truth = "com.google.truth:truth:$truthVersion" diff --git a/magellan-library/build.gradle b/magellan-library/build.gradle index 0a86398e..ac901ae6 100644 --- a/magellan-library/build.gradle +++ b/magellan-library/build.gradle @@ -68,6 +68,7 @@ dependencies { testImplementation Dependencies.archTesting testImplementation Dependencies.robolectric testImplementation Dependencies.coroutinesTest + testImplementation Dependencies.blendTest // Bug in AGP: Follow this issue - https://issuetracker.google.com/issues/141840950 // lintPublish project(':magellan-lint') diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt index 5c0d3c2f..7f550ada 100644 --- a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt +++ b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt @@ -1,54 +1,69 @@ -package com.wealthfront.magellan.transitions; +package com.wealthfront.magellan.transitions -import android.view.View; +import android.view.View +import android.widget.FrameLayout +import androidx.test.core.app.ApplicationProvider.getApplicationContext +import com.google.common.truth.Truth.assertThat +import com.wealthfront.blend.mock.ImmediateBlend +import com.wealthfront.magellan.Direction.BACKWARD +import com.wealthfront.magellan.Direction.FORWARD +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner -import com.wealthfront.magellan.Direction; +@RunWith(RobolectricTestRunner::class) +internal class DefaultTransitionTest { -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.LooperMode; - -import kotlin.Unit; - -import static androidx.test.core.app.ApplicationProvider.getApplicationContext; -import static com.google.common.truth.Truth.assertThat; -import static com.wealthfront.magellan.Direction.BACKWARD; -import static com.wealthfront.magellan.Direction.FORWARD; -import static org.robolectric.Robolectric.flushForegroundThreadScheduler; -import static org.robolectric.Robolectric.getForegroundThreadScheduler; - -@RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) -public class DefaultTransitionTest { - - private boolean onAnimationEndCalled; + private lateinit var transition: DefaultTransition + private val blend = ImmediateBlend() + private var onAnimationEndCalled = false @Before - public void setUp() { - onAnimationEndCalled = false; - getForegroundThreadScheduler().pause(); + fun setUp() { + transition = DefaultTransition(blend) + onAnimationEndCalled = false } @Test - public void animateGoTo() throws Exception { - checkAnimate(FORWARD); + fun animateGoTo() { + val parent = FrameLayout(getApplicationContext()) + val from = View(getApplicationContext()) + val to = View(getApplicationContext()) + parent.addView(from) + parent.addView(to) + + transition.animate( + from = from, + to = to, + direction = FORWARD, + onAnimationEndCallback = { onAnimationEndCalled = true } + ) + + assertThat(to.scaleX).isWithin(0.01f).of(1f) + assertThat(to.scaleY).isWithin(0.01f).of(1f) + assertThat(to.alpha).isWithin(0.01f).of(1f) + assertThat(onAnimationEndCalled).isTrue() } @Test - public void animateGoBack() throws Exception { - checkAnimate(BACKWARD); - } + fun animateGoBack() { + val parent = FrameLayout(getApplicationContext()) + val from = View(getApplicationContext()) + val to = View(getApplicationContext()) + parent.addView(from) + parent.addView(to) - private void checkAnimate(Direction direction) { - new DefaultTransition().animate(new View(getApplicationContext()), - new View(getApplicationContext()), direction, () -> { - onAnimationEndCalled = true; - return Unit.INSTANCE; - }); - flushForegroundThreadScheduler(); - assertThat(onAnimationEndCalled).isTrue(); - } + transition.animate( + from = from, + to = to, + direction = BACKWARD, + onAnimationEndCallback = { onAnimationEndCalled = true } + ) + assertThat(to.scaleX).isWithin(0.01f).of(1f) + assertThat(to.scaleY).isWithin(0.01f).of(1f) + assertThat(to.alpha).isWithin(0.01f).of(1f) + assertThat(onAnimationEndCalled).isTrue() + } } \ No newline at end of file From 2424a68c05c6a079ef1d4efa9376507b49e70706 Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Wed, 8 Dec 2021 10:58:58 -0800 Subject: [PATCH 5/7] Rename .java to .kt --- .../{ShowTransitionTest.java => ShowTransitionTest.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename magellan-library/src/test/java/com/wealthfront/magellan/transitions/{ShowTransitionTest.java => ShowTransitionTest.kt} (100%) diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.java b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt similarity index 100% rename from magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.java rename to magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt From 887fa5425f9f2c1e377b713157b411c71b4791f9 Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Wed, 8 Dec 2021 10:58:58 -0800 Subject: [PATCH 6/7] Fix ShowTransitionTest --- .../transitions/ShowTransitionTest.kt | 96 +++++++++++-------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt index 22e4d106..072e9029 100644 --- a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt +++ b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt @@ -1,54 +1,70 @@ -package com.wealthfront.magellan.transitions; +package com.wealthfront.magellan.transitions -import android.view.View; +import android.view.View +import android.widget.FrameLayout +import androidx.test.core.app.ApplicationProvider +import com.google.common.truth.Truth +import com.wealthfront.blend.mock.ImmediateBlend +import com.wealthfront.magellan.Direction +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner -import com.wealthfront.magellan.Direction; +@RunWith(RobolectricTestRunner::class) +internal class ShowTransitionTest { -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.LooperMode; - -import kotlin.Unit; - -import static androidx.test.core.app.ApplicationProvider.getApplicationContext; -import static com.google.common.truth.Truth.assertThat; -import static com.wealthfront.magellan.Direction.BACKWARD; -import static com.wealthfront.magellan.Direction.FORWARD; -import static org.robolectric.Robolectric.flushForegroundThreadScheduler; -import static org.robolectric.Robolectric.getForegroundThreadScheduler; - -@RunWith(RobolectricTestRunner.class) -@LooperMode(LooperMode.Mode.LEGACY) -public class ShowTransitionTest { - - private boolean onAnimationEndCalled; + private lateinit var transition: ShowTransition + private val blend = ImmediateBlend() + private var onAnimationEndCalled = false @Before - public void setUp() { - onAnimationEndCalled = false; - getForegroundThreadScheduler().pause(); + fun setUp() { + transition = ShowTransition(blend) + onAnimationEndCalled = false } @Test - public void animateGoTo() throws Exception { - checkAnimate(FORWARD); + fun animateGoTo() { + val parent = FrameLayout(ApplicationProvider.getApplicationContext()) + val from = View(ApplicationProvider.getApplicationContext()) + val to = View(ApplicationProvider.getApplicationContext()) + parent.addView(from) + parent.addView(to) + + transition.animate( + from = from, + to = to, + direction = Direction.FORWARD, + onAnimationEndCallback = { onAnimationEndCalled = true } + ) + + Truth.assertThat(to.scaleX).isWithin(0.01f).of(1f) + Truth.assertThat(to.scaleY).isWithin(0.01f).of(1f) + Truth.assertThat(to.translationY).isWithin(0.01f).of(0f) + Truth.assertThat(to.alpha).isWithin(0.01f).of(1f) + Truth.assertThat(onAnimationEndCalled).isTrue() } @Test - public void animateGoBack() throws Exception { - checkAnimate(BACKWARD); - } + fun animateGoBack() { + val parent = FrameLayout(ApplicationProvider.getApplicationContext()) + val from = View(ApplicationProvider.getApplicationContext()) + val to = View(ApplicationProvider.getApplicationContext()) + parent.addView(from) + parent.addView(to) - private void checkAnimate(Direction direction) { - new ShowTransition().animate(new View(getApplicationContext()), new View(getApplicationContext()), direction, - () -> { - onAnimationEndCalled = true; - return Unit.INSTANCE; - }); - flushForegroundThreadScheduler(); - assertThat(onAnimationEndCalled).isTrue(); - } + transition.animate( + from = from, + to = to, + direction = Direction.BACKWARD, + onAnimationEndCallback = { onAnimationEndCalled = true } + ) + Truth.assertThat(to.scaleX).isWithin(0.01f).of(1f) + Truth.assertThat(to.scaleY).isWithin(0.01f).of(1f) + Truth.assertThat(to.translationY).isWithin(0.01f).of(0f) + Truth.assertThat(to.alpha).isWithin(0.01f).of(1f) + Truth.assertThat(onAnimationEndCalled).isTrue() + } } \ No newline at end of file From 747e52cab5e7a1334f1726ec577d4b1faa91e1bc Mon Sep 17 00:00:00 2001 From: Ryan Moelter Date: Thu, 16 Dec 2021 22:01:38 -0800 Subject: [PATCH 7/7] Lint --- .../wealthfront/magellan/transitions/DefaultTransitionTest.kt | 2 +- .../com/wealthfront/magellan/transitions/ShowTransitionTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt index 7f550ada..9d182dd2 100644 --- a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt +++ b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/DefaultTransitionTest.kt @@ -66,4 +66,4 @@ internal class DefaultTransitionTest { assertThat(to.alpha).isWithin(0.01f).of(1f) assertThat(onAnimationEndCalled).isTrue() } -} \ No newline at end of file +} diff --git a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt index 072e9029..8407753d 100644 --- a/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt +++ b/magellan-library/src/test/java/com/wealthfront/magellan/transitions/ShowTransitionTest.kt @@ -67,4 +67,4 @@ internal class ShowTransitionTest { Truth.assertThat(to.alpha).isWithin(0.01f).of(1f) Truth.assertThat(onAnimationEndCalled).isTrue() } -} \ No newline at end of file +}