Skip to content
This repository was archived by the owner on Dec 27, 2024. It is now read-only.

Commit 8a453cd

Browse files
committed
[Compose] Reduce public API of compose Transition
Done with the internal subclass: TransitionImpl.
1 parent 697556b commit 8a453cd

File tree

1 file changed

+54
-38
lines changed
  • constraintlayout/compose/src/main/java/androidx/constraintlayout/compose

1 file changed

+54
-38
lines changed

constraintlayout/compose/src/main/java/androidx/constraintlayout/compose/MotionLayout.kt

+54-38
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import androidx.compose.ui.unit.sp
6363
import androidx.compose.ui.util.fastAny
6464
import androidx.compose.ui.util.fastForEach
6565
import androidx.constraintlayout.core.motion.Motion
66+
import androidx.constraintlayout.core.parser.CLObject
6667
import androidx.constraintlayout.core.parser.CLParser
6768
import androidx.constraintlayout.core.parser.CLParsingException
6869
import androidx.constraintlayout.core.state.ConstraintSetParser.parseMotionSceneJSON
@@ -184,7 +185,7 @@ inline fun MotionLayout(
184185
MotionLayoutCore(
185186
start = start,
186187
end = end,
187-
transition = transition,
188+
transition = transition as? TransitionImpl,
188189
progress = progress,
189190
debug = debug,
190191
informationReceiver = informationReceiver,
@@ -368,7 +369,7 @@ internal inline fun MotionLayoutCore(
368369
MotionLayoutCore(
369370
start = start,
370371
end = end,
371-
transition = transition,
372+
transition = transition as? TransitionImpl,
372373
progress = usedProgress,
373374
debug = usedDebugMode,
374375
informationReceiver = motionScene as? LayoutInformationReceiver,
@@ -384,7 +385,7 @@ internal inline fun MotionLayoutCore(
384385
internal inline fun MotionLayoutCore(
385386
start: ConstraintSet,
386387
end: ConstraintSet,
387-
transition: androidx.constraintlayout.compose.Transition? = null,
388+
transition: TransitionImpl? = null,
388389
progress: Float,
389390
debug: EnumSet<MotionLayoutDebugFlags> = EnumSet.of(MotionLayoutDebugFlags.NONE),
390391
informationReceiver: LayoutInformationReceiver? = null,
@@ -506,7 +507,7 @@ internal inline fun MotionLayoutCore(
506507
motionScene,
507508
start,
508509
end,
509-
transition,
510+
transition as? TransitionImpl,
510511
motionLayoutState.progressState,
511512
measurer
512513
)
@@ -722,12 +723,52 @@ class MotionLayoutScope @PublishedApi internal constructor(
722723
*/
723724
@Immutable
724725
interface Transition {
725-
fun applyAllTo(transition: Transition, type: Int)
726-
fun applyKeyFramesTo(transition: Transition)
727726
fun getStartConstraintSetId(): String
728727
fun getEndConstraintSetId(): String
729728
}
730729

730+
/**
731+
* Subclass of [Transition] for internal use.
732+
*
733+
* Used to reduced the exposed API from [Transition].
734+
*/
735+
internal class TransitionImpl(
736+
private val parsedTransition: CLObject,
737+
private val pixelDp: CorePixelDp
738+
) : androidx.constraintlayout.compose.Transition {
739+
740+
/**
741+
* Applies all Transition properties to [transition].
742+
*/
743+
fun applyAllTo(transition: Transition, type: Int) {
744+
try {
745+
TransitionParser.parse(parsedTransition, transition, pixelDp)
746+
} catch (e: CLParsingException) {
747+
Log.e("CML", "Error parsing JSON $e")
748+
}
749+
}
750+
751+
/**
752+
* Applies only the KeyFrame related properties (KeyCycles, KeyAttributes, KeyPositions) to
753+
* [transition], which effectively sets the respective parameters for each WidgetState.
754+
*/
755+
fun applyKeyFramesTo(transition: Transition) {
756+
try {
757+
TransitionParser.parseKeyFrames(parsedTransition, transition)
758+
} catch (e: CLParsingException) {
759+
Log.e("CML", "Error parsing JSON $e")
760+
}
761+
}
762+
763+
override fun getStartConstraintSetId(): String {
764+
return parsedTransition.getStringOrNull("from") ?: "start"
765+
}
766+
767+
override fun getEndConstraintSetId(): String {
768+
return parsedTransition.getStringOrNull("to") ?: "end"
769+
}
770+
}
771+
731772
/**
732773
* Parses the given JSON5 into a [Transition].
733774
*
@@ -746,33 +787,8 @@ fun Transition(@Language("json5") content: String): androidx.constraintlayout.co
746787
}
747788
mutableStateOf(
748789
if (parsed != null) {
749-
object : androidx.constraintlayout.compose.Transition {
750-
val pixelDp = CorePixelDp { dpValue -> dpValue * dpToPixel }
751-
752-
override fun applyAllTo(transition: Transition, type: Int) {
753-
try {
754-
TransitionParser.parse(parsed, transition, pixelDp)
755-
} catch (e: CLParsingException) {
756-
Log.e("CML", "Error parsing JSON $e")
757-
}
758-
}
759-
760-
override fun applyKeyFramesTo(transition: Transition) {
761-
try {
762-
TransitionParser.parseKeyFrames(parsed, transition)
763-
} catch (e: CLParsingException) {
764-
Log.e("CML", "Error parsing JSON $e")
765-
}
766-
}
767-
768-
override fun getStartConstraintSetId(): String {
769-
return parsed.getStringOrNull("from") ?: "start"
770-
}
771-
772-
override fun getEndConstraintSetId(): String {
773-
return parsed.getStringOrNull("to") ?: "end"
774-
}
775-
}
790+
val pixelDp = CorePixelDp { dpValue -> dpValue * dpToPixel }
791+
TransitionImpl(parsed, pixelDp)
776792
} else {
777793
null
778794
}
@@ -800,7 +816,7 @@ internal fun rememberMotionLayoutMeasurePolicy(
800816
needsUpdate: Long,
801817
constraintSetStart: ConstraintSet,
802818
constraintSetEnd: ConstraintSet,
803-
transition: androidx.constraintlayout.compose.Transition?,
819+
transition: TransitionImpl?,
804820
progress: MutableState<Float>,
805821
measurer: MotionMeasurer
806822
) = remember(
@@ -840,7 +856,7 @@ internal fun rememberMotionLayoutMeasurePolicy(
840856
motionScene: MotionScene,
841857
constraintSetStart: ConstraintSet,
842858
constraintSetEnd: ConstraintSet,
843-
transition: androidx.constraintlayout.compose.Transition?,
859+
transition: TransitionImpl?,
844860
progress: State<Float>,
845861
measurer: MotionMeasurer
846862
) = remember(
@@ -921,7 +937,7 @@ internal class MotionMeasurer : Measurer() {
921937
layoutDirection: LayoutDirection,
922938
constraintSetStart: ConstraintSet,
923939
constraintSetEnd: ConstraintSet,
924-
transition: androidx.constraintlayout.compose.Transition?,
940+
transition: TransitionImpl?,
925941
measurables: List<Measurable>,
926942
optimizationLevel: Int,
927943
progress: Float,
@@ -999,7 +1015,7 @@ internal class MotionMeasurer : Measurer() {
9991015
layoutDirection: LayoutDirection,
10001016
constraintSetStart: ConstraintSet,
10011017
constraintSetEnd: ConstraintSet,
1002-
transition: androidx.constraintlayout.compose.Transition?,
1018+
transition: TransitionImpl?,
10031019
measurables: List<Measurable>,
10041020
optimizationLevel: Int,
10051021
progress: Float,
@@ -1335,7 +1351,7 @@ internal class MotionMeasurer : Measurer() {
13351351
fun initWith(
13361352
start: ConstraintSet,
13371353
end: ConstraintSet,
1338-
transition: androidx.constraintlayout.compose.Transition?,
1354+
transition: TransitionImpl?,
13391355
progress: Float
13401356
) {
13411357
clearConstraintSets()

0 commit comments

Comments
 (0)