--wip-- [skip ci]
diff --git a/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt b/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
index 2bed7c9..f8f8001 100644
--- a/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
+++ b/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
@@ -119,7 +119,7 @@
             val animationView = fragment.requireView().findViewById<LottieAnimationView>(R.id.animation_view)
             // Wait for the animation view.
             // We have to use a property reference because the Fragment isn't resumed.
-            assertTrue(fragment.animationView.isAnimating)
+            assertTrue(animationView.isAnimating)
         }
     }
 
@@ -331,8 +331,6 @@
                                     animationWasPlayed = true
                                     IdlingRegistry.getInstance().register(LottieIdlingResource(this, name = "Lottie ${Random.nextFloat()}"))
                                 }
-                            } else {
-                                IdlingRegistry.getInstance().register(LottieIdlingAnimationResource(animationView, name = "Lottie finished animation ${Random.nextFloat()}"))
                             }
                         }
 
@@ -352,7 +350,10 @@
         scenario.onFragment { it.requireView().scrollBy(0, -10_000) }
         scenario.onFragment { assertTrue(it.animationView!!.isAnimating) }
         onView(withId(R.id.animation_view)).check(matches(isDisplayed()))
-        scenario.onFragment { assertFalse(it.animationView!!.isAnimating) }
+        scenario.onAnimationEnded()
+        scenario.onFragment { fragment ->
+            assertFalse(fragment.animationView!!.isAnimating)
+        }
     }
 
     @Test
@@ -395,8 +396,6 @@
                                     animationWasPlayed = true
                                     IdlingRegistry.getInstance().register(LottieIdlingResource(this, name = "Lottie ${Random.nextFloat()}"))
                                 }
-                            } else {
-                                IdlingRegistry.getInstance().register(LottieIdlingAnimationResource(animationView, name = "Lottie finished animation ${Random.nextFloat()}"))
                             }
                         }
 
@@ -415,7 +414,7 @@
         scenario.onFragment { assertFalse(it.animationView!!.isAnimating) }
         scenario.onFragment { it.requireView().scrollBy(0, -10_000) }
         scenario.onFragment { assertTrue(it.animationView!!.isAnimating) }
-        onView(withId(R.id.animation_view)).check(matches(isDisplayed()))
+        scenario.onAnimationEnded()
         scenario.onFragment { assertFalse(it.animationView!!.isAnimating) }
         scenario.onFragment { it.requireView().scrollBy(0, 10_000) }
         scenario.onFragment { it.requireView().scrollBy(0, -10_000) }
@@ -460,5 +459,12 @@
         }
     }
 
+    private fun <T : Fragment> FragmentScenario<T>.onAnimationEnded() {
+        onFragment { fragment ->
+            IdlingRegistry.getInstance().register(LottieIdlingAnimationResource(fragment.animationView!!, name = "Lottie finished animation ${Random.nextFloat()}"))
+        }
+        onIdle()
+    }
+
     private val Fragment.animationView get() = requireView().findViewById<LottieAnimationView>(R.id.animation_view)
 }
\ No newline at end of file
diff --git a/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieIdlingAnimationResource.kt b/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieIdlingAnimationResource.kt
index 1cac096..073ee80 100644
--- a/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieIdlingAnimationResource.kt
+++ b/sample/src/androidTest/java/com/airbnb/lottie/samples/LottieIdlingAnimationResource.kt
@@ -5,16 +5,15 @@
 import androidx.test.espresso.IdlingResource
 import com.airbnb.lottie.LottieAnimationView
 
-class LottieIdlingAnimationResource(animationView: LottieAnimationView?, private val name: String = "Lottie") : IdlingResource {
+class LottieIdlingAnimationResource(animationView: LottieAnimationView, private val name: String = "Lottie") : IdlingResource {
+
+    private var hasEnded = false
+    private var callback: IdlingResource.ResourceCallback? = null
 
     init {
-        animationView?.addAnimatorListener(object : AnimatorListenerAdapter() {
-            override fun onAnimationStart(animation: Animator) {
-                isIdle = false
-            }
-
+        animationView.addAnimatorListener(object : AnimatorListenerAdapter() {
             override fun onAnimationEnd(animation: Animator) {
-                isIdle = true
+                hasEnded = true
                 callback?.onTransitionToIdle()
                 animationView.removeAllAnimatorListeners()
                 IdlingRegistry.getInstance().unregister(this@LottieIdlingAnimationResource)
@@ -22,16 +21,13 @@
         })
     }
 
-    private var callback: IdlingResource.ResourceCallback? = null
-    private var isIdle = animationView?.isAnimating?.not() ?: true
-
 
     override fun getName() = name
 
-    override fun isIdleNow() = isIdle
+    override fun isIdleNow() = hasEnded
 
     override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) {
         this.callback = callback
-        if (isIdle) callback?.onTransitionToIdle()
+        if (isIdleNow) callback?.onTransitionToIdle()
     }
 }
\ No newline at end of file