Fix in transition canceling logic
The logic that canceled underlying animations caused a problem
when there were more than one animation in the list (due to removing
items from a list that was currently being processed elsewhere).
Change-Id: Ie207f340b5d7de4ffcf56a26c05ec394abb80224
diff --git a/core/java/android/view/transition/Transition.java b/core/java/android/view/transition/Transition.java
index 4591942..205c825 100644
--- a/core/java/android/view/transition/Transition.java
+++ b/core/java/android/view/transition/Transition.java
@@ -798,7 +798,7 @@
// TODO: how does this work with instances?
// TODO: this doesn't actually do *anything* yet
int numAnimators = mCurrentAnimators.size();
- for (int i = 0; i < numAnimators; ++i) {
+ for (int i = numAnimators - 1; i >= 0; i--) {
Animator animator = mCurrentAnimators.get(i);
animator.cancel();
}
diff --git a/tests/TransitionTests/res/layout/interruption_inner_1.xml b/tests/TransitionTests/res/layout/interruption_inner_1.xml
index 990a7fd..f82dfb0 100644
--- a/tests/TransitionTests/res/layout/interruption_inner_1.xml
+++ b/tests/TransitionTests/res/layout/interruption_inner_1.xml
@@ -9,5 +9,12 @@
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:text="@string/state1"/>
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/button1"
+ android:layout_alignLeft="@+id/button"
+ android:layout_below="@+id/button"
+ android:text="@string/state1"/>
</RelativeLayout>
\ No newline at end of file
diff --git a/tests/TransitionTests/res/layout/interruption_inner_2.xml b/tests/TransitionTests/res/layout/interruption_inner_2.xml
index d18b557..e6821d6 100644
--- a/tests/TransitionTests/res/layout/interruption_inner_2.xml
+++ b/tests/TransitionTests/res/layout/interruption_inner_2.xml
@@ -9,5 +9,12 @@
android:id="@+id/button"
android:layout_alignParentRight="true"
android:text="@string/state2"/>
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/button1"
+ android:layout_alignLeft="@+id/button"
+ android:layout_below="@+id/button"
+ android:text="@string/state2"/>
</RelativeLayout>
\ No newline at end of file
diff --git a/tests/TransitionTests/res/layout/interruption_inner_3.xml b/tests/TransitionTests/res/layout/interruption_inner_3.xml
index 70bd02c..4e40150 100644
--- a/tests/TransitionTests/res/layout/interruption_inner_3.xml
+++ b/tests/TransitionTests/res/layout/interruption_inner_3.xml
@@ -9,5 +9,12 @@
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/state3"/>
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/button1"
+ android:layout_alignLeft="@+id/button"
+ android:layout_above="@+id/button"
+ android:text="@string/state3"/>
</RelativeLayout>
\ No newline at end of file
diff --git a/tests/TransitionTests/res/layout/interruption_inner_4.xml b/tests/TransitionTests/res/layout/interruption_inner_4.xml
index 85265fc..8c3661e 100644
--- a/tests/TransitionTests/res/layout/interruption_inner_4.xml
+++ b/tests/TransitionTests/res/layout/interruption_inner_4.xml
@@ -9,5 +9,12 @@
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="@string/state4"/>
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/button1"
+ android:layout_alignLeft="@+id/button"
+ android:layout_above="@+id/button"
+ android:text="@string/state4"/>
</RelativeLayout>
\ No newline at end of file
diff --git a/tests/TransitionTests/src/com/android/transitiontests/InterruptionTest.java b/tests/TransitionTests/src/com/android/transitiontests/InterruptionTest.java
index 47cf002..b380225 100644
--- a/tests/TransitionTests/src/com/android/transitiontests/InterruptionTest.java
+++ b/tests/TransitionTests/src/com/android/transitiontests/InterruptionTest.java
@@ -35,14 +35,13 @@
private Scene mScene2;
private Scene mScene3;
private Scene mScene4;
- Transition mAutoTransition = new AutoTransition();
+ TransitionGroup mSequencedMove = new TransitionGroup(TransitionGroup.SEQUENTIALLY);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.interruption);
- View container = (View) findViewById(R.id.container);
ViewGroup sceneRoot = (ViewGroup) findViewById(R.id.sceneRoot);
mScene1 = new Scene(sceneRoot, R.layout.interruption_inner_1, this);
@@ -57,18 +56,24 @@
sceneRoot.setCurrentScene(mScene1);
- mAutoTransition.setDuration(1500);
+ Move move1 = new Move();
+ move1.setTargetIds(R.id.button);
+ Move move2 = new Move();
+ move2.setTargetIds(R.id.button1);
+
+ mSequencedMove.addTransitions(move1, move2);
+ mSequencedMove.setDuration(1000);
}
public void onRadioButtonClicked(View clickedButton) {
if (clickedButton == mScene1RB) {
- TransitionManager.go(mScene1, mAutoTransition);
+ TransitionManager.go(mScene1, mSequencedMove);
} else if (clickedButton == mScene2RB) {
- TransitionManager.go(mScene2, mAutoTransition);
+ TransitionManager.go(mScene2, mSequencedMove);
} else if (clickedButton == mScene3RB) {
- TransitionManager.go(mScene3, mAutoTransition);
+ TransitionManager.go(mScene3, mSequencedMove);
} else {
- TransitionManager.go(mScene4, mAutoTransition);
+ TransitionManager.go(mScene4, mSequencedMove);
}
}
}