Update FragmentVisibilityTests (#1980)

No behavior changes but in an upcoming PR, pausing/resuming on attach/detach will happen in LottieDrawable instead of LottieAnimationView. The drawable gets notified slightly later than the view so I've changed the idle resource lifecycle to make it work with both.
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