[go: nahoru, domu]

Add label for transition

This allows android studio to display more meaningful names for
TransitionAnimations.

Relnote: N/A

BUG: 161364640
Test: Ran unit tests
Change-Id: Id6bb2bbd1f0dc2764595e7d33d9742a9c3f9762e
diff --git a/ui/ui-animation-core/api/0.1.0-dev16.txt b/ui/ui-animation-core/api/0.1.0-dev16.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/0.1.0-dev16.txt
+++ b/ui/ui-animation-core/api/0.1.0-dev16.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/api/current.txt b/ui/ui-animation-core/api/current.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/current.txt
+++ b/ui/ui-animation-core/api/current.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-animation-core/api/public_plus_experimental_0.1.0-dev16.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-animation-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/api/public_plus_experimental_current.txt b/ui/ui-animation-core/api/public_plus_experimental_current.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-animation-core/api/public_plus_experimental_current.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/api/restricted_0.1.0-dev16.txt b/ui/ui-animation-core/api/restricted_0.1.0-dev16.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-animation-core/api/restricted_0.1.0-dev16.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/api/restricted_current.txt b/ui/ui-animation-core/api/restricted_current.txt
index 6cb7dcd..4c62184 100644
--- a/ui/ui-animation-core/api/restricted_current.txt
+++ b/ui/ui-animation-core/api/restricted_current.txt
@@ -365,8 +365,9 @@
   }
 
   public final class TransitionAnimation<T> implements androidx.animation.TransitionState {
-    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState);
+    ctor public TransitionAnimation(internal androidx.animation.TransitionDefinition<T> def, androidx.animation.AnimationClockObservable clock, T? initState, String? label);
     method public operator <T, V extends androidx.animation.AnimationVector> T! get(androidx.animation.PropKey<T,V> propKey);
+    method public String? getLabel();
     method public kotlin.jvm.functions.Function1<T,kotlin.Unit>? getOnStateChangeFinished();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnUpdate();
     method public boolean isRunning();
diff --git a/ui/ui-animation-core/src/commonMain/kotlin/androidx/animation/TransitionAnimation.kt b/ui/ui-animation-core/src/commonMain/kotlin/androidx/animation/TransitionAnimation.kt
index 3819229..1c28bd7 100644
--- a/ui/ui-animation-core/src/commonMain/kotlin/androidx/animation/TransitionAnimation.kt
+++ b/ui/ui-animation-core/src/commonMain/kotlin/androidx/animation/TransitionAnimation.kt
@@ -36,13 +36,24 @@
  * Once a [TransitionDefinition] is instantiated, a [TransitionAnimation] can be created via
  * [TransitionDefinition.createAnimation].
  *
+ * @param def Transition definition that defines states and transitions
+ * @param clock Optional animation clock that pulses animations when time changes. By default,
+ *              the system uses a choreographer based clock read from the [AnimationClockAmbient].
+ *              A custom implementation of the [AnimationClockObservable] (such as a
+ *              [androidx.animation.ManualAnimationClock]) can be supplied here if there’s a need to
+ *              manually control the clock (for example in tests).
+ * @param initState Optional initial state for the transition. When undefined, the initial state
+ *                  will be set to the first [toState] seen in the transition.
+ * @param label Optional label for distinguishing different transitions in Android Studio.
+ *
  * @see [androidx.ui.animation.transition]
  */
 @OptIn(InternalAnimationApi::class)
 class TransitionAnimation<T>(
     internal val def: TransitionDefinition<T>,
     private val clock: AnimationClockObservable,
-    initState: T? = null
+    initState: T? = null,
+    val label: String? = null
 ) : TransitionState {
 
     var onUpdate: (() -> Unit)? = null
diff --git a/ui/ui-animation/api/0.1.0-dev16.txt b/ui/ui-animation/api/0.1.0-dev16.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/0.1.0-dev16.txt
+++ b/ui/ui-animation/api/0.1.0-dev16.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/api/current.txt b/ui/ui-animation/api/current.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/current.txt
+++ b/ui/ui-animation/api/current.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/api/public_plus_experimental_current.txt b/ui/ui-animation/api/public_plus_experimental_current.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/public_plus_experimental_current.txt
+++ b/ui/ui-animation/api/public_plus_experimental_current.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/api/restricted_0.1.0-dev16.txt b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/api/restricted_current.txt b/ui/ui-animation/api/restricted_current.txt
index 0d992d7..bdd1adb 100644
--- a/ui/ui-animation/api/restricted_current.txt
+++ b/ui/ui-animation/api/restricted_current.txt
@@ -138,7 +138,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
+    method @androidx.compose.Composable public static <T> androidx.animation.TransitionState transition(androidx.animation.TransitionDefinition<T> definition, T? toState, androidx.animation.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? >
   }
 
 }
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/LegacyTransition.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/LegacyTransition.kt
index 322e3e0..49e3e96 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/LegacyTransition.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/LegacyTransition.kt
@@ -62,7 +62,7 @@
 @Deprecated("Transition has been renamed to transition, which returns a TransitionState instead " +
         "of passing it to children",
     replaceWith = ReplaceWith(
-        "transition(definition, toState, clock, initState, onStateChangeFinished)",
+        "transition(definition, toState, clock, initState, null, onStateChangeFinished)",
         "androidx.ui.animation.transition"))
 @Composable
 fun <T> Transition(
@@ -73,6 +73,6 @@
     onStateChangeFinished: ((T) -> Unit)? = null,
     children: @Composable (state: TransitionState) -> Unit
 ) {
-    val state = transition(definition, toState, clock, initState, onStateChangeFinished)
+    val state = transition(definition, toState, clock, initState, null, onStateChangeFinished)
     children(state)
 }
\ No newline at end of file
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/Transition.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/Transition.kt
index 2b6e100..21707c5 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/Transition.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/ui/animation/Transition.kt
@@ -22,7 +22,6 @@
 import androidx.animation.TransitionAnimation
 import androidx.animation.TransitionDefinition
 import androidx.animation.TransitionState
-import androidx.animation.createAnimation
 import androidx.compose.Composable
 import androidx.compose.Stable
 import androidx.compose.getValue
@@ -61,6 +60,7 @@
  *              manually control the clock (for example in tests).
  * @param initState Optional initial state for the transition. When undefined, the initial state
  *                  will be set to the first [toState] seen in the transition.
+ * @param label Optional label for distinguishing different transitions in Android Studio.
  * @param onStateChangeFinished An optional listener to get notified when state change animation
  *                              has completed
  *
@@ -75,12 +75,13 @@
     toState: T,
     clock: AnimationClockObservable = AnimationClockAmbient.current,
     initState: T = toState,
+    label: String? = null,
     onStateChangeFinished: ((T) -> Unit)? = null
 ): TransitionState {
     if (transitionsEnabled) {
         val disposableClock = clock.asDisposableClock()
         val model = remember(definition, disposableClock) {
-            TransitionModel(definition, initState, disposableClock)
+            TransitionModel(definition, initState, disposableClock, label)
         }
 
         model.anim.>
@@ -107,12 +108,13 @@
 private class TransitionModel<T>(
     transitionDef: TransitionDefinition<T>,
     initState: T,
-    clock: AnimationClockObservable
+    clock: AnimationClockObservable,
+    label: String?
 ) : TransitionState {
 
     private var animationPulse by mutableStateOf(0L)
     internal val anim: TransitionAnimation<T> =
-        transitionDef.createAnimation(clock, initState).apply {
+        TransitionAnimation(transitionDef, clock, initState, label).apply {
             >
                 animationPulse++
             }