Add wrapper around androidTransitionMutator to support generic blueprint.TransitionInfo

Make the TransitionMutator interface use a generic T to pass a
typesafe object that implements blueprint.TransitionInfo as the
transition configuration.  Add VariationTransitionMutator as a
verison of TransitionMutator that uses a string as the info object.

Bug: 372543712
Test: all soong tests pass
Change-Id: I6e5e17f0e272665bc2e9a46d0ac6f0011b9f5d59
diff --git a/android/mutator.go b/android/mutator.go
index 393fba1..1b0700a 100644
--- a/android/mutator.go
+++ b/android/mutator.go
@@ -70,7 +70,8 @@
 	TopDown(name string, m TopDownMutator) MutatorHandle
 	BottomUp(name string, m BottomUpMutator) MutatorHandle
 	BottomUpBlueprint(name string, m blueprint.BottomUpMutator) MutatorHandle
-	Transition(name string, m TransitionMutator) TransitionMutatorHandle
+	Transition(name string, m VariationTransitionMutator) TransitionMutatorHandle
+	InfoBasedTransition(name string, m androidTransitionMutator) TransitionMutatorHandle
 }
 
 type RegisterMutatorFunc func(RegisterMutatorsContext)
@@ -337,7 +338,7 @@
 	return mutator
 }
 
-func (x *registerMutatorsContext) Transition(name string, m TransitionMutator) TransitionMutatorHandle {
+func (x *registerMutatorsContext) Transition(name string, m VariationTransitionMutator) TransitionMutatorHandle {
 	atm := &androidTransitionMutatorAdapter{
 		finalPhase: x.finalPhase,
 		mutator:    variationTransitionMutatorAdapter{m},
@@ -351,6 +352,20 @@
 	return mutator
 }
 
+func (x *registerMutatorsContext) InfoBasedTransition(name string, m androidTransitionMutator) TransitionMutatorHandle {
+	atm := &androidTransitionMutatorAdapter{
+		finalPhase: x.finalPhase,
+		mutator:    m,
+		name:       name,
+	}
+	mutator := &mutator{
+		name:              name,
+		transitionMutator: atm,
+	}
+	x.mutators = append(x.mutators, mutator)
+	return mutator
+}
+
 func (x *registerMutatorsContext) mutatorName(name string) string {
 	return name
 }