Merge "Change reordering parameter from boolean to sealed class" into androidx-master-dev
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt
index 53624aed..800e19e 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt
@@ -30,6 +30,16 @@
 import java.lang.ref.WeakReference
 import java.util.ArrayList
 
+fun FragmentTransaction.setReorderingAllowed(
+    reorderingAllowed: ReorderingAllowed
+) = setReorderingAllowed(reorderingAllowed is Reordered)
+
+sealed class ReorderingAllowed {
+    override fun toString(): String = this.javaClass.simpleName
+}
+object Reordered : ReorderingAllowed()
+object Ordered : ReorderingAllowed()
+
 @Suppress("DEPRECATION")
 fun androidx.test.rule.ActivityTestRule<out FragmentActivity>.executePendingTransactions(
     fm: FragmentManager = activity.supportFragmentManager
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt
index eba4c38e..98eae5e 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionAnimTest.kt
@@ -41,7 +41,7 @@
 @LargeTest
 @RunWith(Parameterized::class)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
-class FragmentTransitionAnimTest(private val reorderingAllowed: Boolean) {
+class FragmentTransitionAnimTest(private val reorderingAllowed: ReorderingAllowed) {
     private var onBackStackChangedTimes: Int = 0
 
     @Before
@@ -309,9 +309,9 @@
 
     companion object {
         @JvmStatic
-        @Parameterized.Parameters
-        fun data(): Array<Boolean> {
-            return arrayOf(false, true)
+        @Parameterized.Parameters(name = "ordering={0}")
+        fun data(): Array<ReorderingAllowed> {
+            return arrayOf(Ordered, Reordered)
         }
 
         @AnimRes
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
index c89d582..c214354f 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt
@@ -47,7 +47,7 @@
 @MediumTest
 @RunWith(Parameterized::class)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
-class FragmentTransitionTest(private val reorderingAllowed: Boolean) {
+class FragmentTransitionTest(private val reorderingAllowed: ReorderingAllowed) {
 
     @Suppress("DEPRECATION")
     @get:Rule
@@ -145,7 +145,7 @@
 
         // If reordering is allowed, the remove is ignored and the transaction is just added to the
         // back stack
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             assertThat(onBackStackChangedTimes).isEqualTo(2)
             assertThat(fragment.requireView()).isEqualTo(view1)
         } else {
@@ -782,7 +782,7 @@
 
         // FragmentStateManager is able to build the correct transition
         // whether you use reordering or not
-        if (FragmentManager.USE_STATE_MANAGER || reorderingAllowed) {
+        if (FragmentManager.USE_STATE_MANAGER || reorderingAllowed is Reordered) {
             fragment1.exitTransition.verifyAndClearTransition {
                 exitingViews += listOf(startGreen, startBlue)
             }
@@ -836,7 +836,7 @@
     // Test that invisible fragment views don't participate in transitions
     @Test
     fun invisibleNoTransitions() {
-        if (!reorderingAllowed) {
+        if (reorderingAllowed is Ordered) {
             return // only reordered transitions can avoid interaction
         }
         // enter transition
@@ -927,7 +927,7 @@
 
         fragment2.waitForTransition()
         // It does not transition properly for ordered transactions, though.
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             // reordering allowed fragment3 to get a transition so we should wait for it to finish
             fragment3.waitForTransition()
             if (FragmentManager.USE_STATE_MANAGER) {
@@ -987,7 +987,7 @@
         activityRule.executePendingTransactions()
 
         // It does not transition properly for ordered transactions, though.
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             // reordering allowed fragment3 to get a transition so we should wait for it to finish
             fragment2.waitForTransition()
 
@@ -1012,11 +1012,11 @@
                 enteringViews += endGreen
             }
             fragment2.sharedElementEnter.verifyAndClearTransition {
-                if (FragmentManager.USE_STATE_MANAGER) {
-                    epicenter = endGreenBounds
+                epicenter = if (FragmentManager.USE_STATE_MANAGER) {
+                    endGreenBounds
                 } else {
                     // In this case, we can't find an epicenter
-                    epicenter = Rect()
+                    Rect()
                 }
                 exitingViews += startBlue
                 enteringViews += endBlue
@@ -1058,7 +1058,7 @@
 
         // FragmentStateManager is able to build the correct transition
         // whether you use reordering or not
-        if (FragmentManager.USE_STATE_MANAGER || reorderingAllowed) {
+        if (FragmentManager.USE_STATE_MANAGER || reorderingAllowed is Reordered) {
             fragment2.sharedElementEnter.verifyAndClearTransition {
                 epicenter = startGreenBounds
                 exitingViews += startGreen
@@ -1164,7 +1164,7 @@
         from2: TransitionFragment
     ) {
         val startNumOnBackStackChanged = onBackStackChangedTimes
-        val changesPerOperation = if (reorderingAllowed) 1 else 2
+        val changesPerOperation = if (reorderingAllowed is Reordered) 1 else 2
 
         val to1 = TransitionFragment(R.layout.scene2)
         val to2 = TransitionFragment(R.layout.scene2)
@@ -1405,9 +1405,9 @@
 
     companion object {
         @JvmStatic
-        @Parameterized.Parameters
-        fun data(): Array<Boolean> {
-            return arrayOf(false, true)
+        @Parameterized.Parameters(name = "ordering={0}")
+        fun data(): Array<ReorderingAllowed> {
+            return arrayOf(Ordered, Reordered)
         }
     }
 }
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTestUtil.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTestUtil.kt
index 794a637..448ec19 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTestUtil.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTestUtil.kt
@@ -23,6 +23,7 @@
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentActivity
 import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentTransaction
 import androidx.fragment.app.TargetTracking
 import androidx.transition.test.R
 import androidx.test.platform.app.InstrumentationRegistry
@@ -32,6 +33,16 @@
 import java.lang.ref.WeakReference
 import java.util.ArrayList
 
+fun FragmentTransaction.setReorderingAllowed(
+    reorderingAllowed: ReorderingAllowed
+) = setReorderingAllowed(reorderingAllowed is Reordered)
+
+sealed class ReorderingAllowed {
+    override fun toString(): String = this.javaClass.simpleName
+}
+object Reordered : ReorderingAllowed()
+object Ordered : ReorderingAllowed()
+
 @Suppress("DEPRECATION")
 fun androidx.test.rule.ActivityTestRule<out FragmentActivity>.executePendingTransactions(
     fm: FragmentManager = activity.supportFragmentManager
diff --git a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
index f5cd778..a3cddd3 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
+++ b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.kt
@@ -47,7 +47,7 @@
 @MediumTest
 @RunWith(Parameterized::class)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.LOLLIPOP)
-class FragmentTransitionTest(private val reorderingAllowed: Boolean) {
+class FragmentTransitionTest(private val reorderingAllowed: ReorderingAllowed) {
 
     @Suppress("DEPRECATION")
     @get:Rule
@@ -146,7 +146,7 @@
 
         // If reordering is allowed, the remove is ignored and the transaction is just added to the
         // back stack
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             assertThat(onBackStackChangedTimes).isEqualTo(2)
             assertThat(fragment.requireView()).isEqualTo(view1)
         } else {
@@ -791,7 +791,7 @@
         val endBlue = activityRule.findBlue()
         val endGreen = activityRule.findGreen()
 
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             fragment1.exitTransition.verifyAndClearTransition {
                 exitingViews += listOf(startGreen, startBlue)
             }
@@ -845,7 +845,7 @@
     // Test that invisible fragment views don't participate in transitions
     @Test
     fun invisibleNoTransitions() {
-        if (!reorderingAllowed) {
+        if (reorderingAllowed is Ordered) {
             return // only reordered transitions can avoid interaction
         }
         // enter transition
@@ -936,7 +936,7 @@
 
         fragment2.waitForTransition()
         // It does not transition properly for ordered transactions, though.
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             // reordering allowed fragment3 to get a transition so we should wait for it to finish
             fragment3.waitForTransition()
             fragment2.returnTransition.verifyAndClearTransition {
@@ -988,7 +988,7 @@
         activityRule.executePendingTransactions()
 
         // It does not transition properly for ordered transactions, though.
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             fragment1.returnTransition.verifyAndClearTransition {
                 exitingViews += startGreen
             }
@@ -1038,7 +1038,7 @@
         val midBlue = activityRule.findBlue()
         val midRed = activityRule.findRed()
         val midGreenBounds = midGreen.boundsOnScreen
-        if (reorderingAllowed) {
+        if (reorderingAllowed is Reordered) {
             fragment2.sharedElementEnter.verifyAndClearTransition {
                 epicenter = startGreenBounds
                 exitingViews += startGreen
@@ -1144,7 +1144,7 @@
         from2: TransitionFragment
     ) {
         val startNumOnBackStackChanged = onBackStackChangedTimes
-        val changesPerOperation = if (reorderingAllowed) 1 else 2
+        val changesPerOperation = if (reorderingAllowed is Reordered) 1 else 2
 
         val to1 = TransitionFragment(R.layout.fragment_scene2)
         val to2 = TransitionFragment(R.layout.fragment_scene2)
@@ -1385,9 +1385,9 @@
 
     companion object {
         @JvmStatic
-        @Parameterized.Parameters
-        fun data(): Array<Boolean> {
-            return arrayOf(false, true)
+        @Parameterized.Parameters(name = "ordering={0}")
+        fun data(): Array<ReorderingAllowed> {
+            return arrayOf(Ordered, Reordered)
         }
     }
 }