diff options
| author | 2013-09-10 18:44:21 +0000 | |
|---|---|---|
| committer | 2013-09-10 18:44:21 +0000 | |
| commit | 59b7a4ec9ce6e9af3afc5a3e66c7e2f36bd74ab7 (patch) | |
| tree | 066409adf334c96163f82008de00eeead89d0690 | |
| parent | 6a221b3f85fbe7cbfbd11b9eeb672baca27faec2 (diff) | |
| parent | a56205c485deb5a95c1e4f79ef2b09d14cbc9524 (diff) | |
Merge "Fix for transition layout suppression" into klp-dev
| -rw-r--r-- | core/java/android/transition/Transition.java | 60 |
1 files changed, 35 insertions, 25 deletions
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index 59df183c0528..8ea9d4873ba0 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -122,6 +122,10 @@ public abstract class Transition implements Cloneable { // Whether this transition is currently paused, due to a call to pause() boolean mPaused = false; + // Whether this transition has ended. Used to avoid pause/resume on transitions + // that have completed + private boolean mEnded = false; + // The set of listeners to be sent transition lifecycle events. ArrayList<TransitionListener> mListeners = null; @@ -914,21 +918,23 @@ public abstract class Transition implements Cloneable { * @hide */ public void pause() { - ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators(); - int numOldAnims = runningAnimators.size(); - for (int i = numOldAnims - 1; i >= 0; i--) { - Animator anim = runningAnimators.keyAt(i); - anim.pause(); - } - if (mListeners != null && mListeners.size() > 0) { - ArrayList<TransitionListener> tmpListeners = - (ArrayList<TransitionListener>) mListeners.clone(); - int numListeners = tmpListeners.size(); - for (int i = 0; i < numListeners; ++i) { - tmpListeners.get(i).onTransitionPause(this); + if (!mEnded) { + ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators(); + int numOldAnims = runningAnimators.size(); + for (int i = numOldAnims - 1; i >= 0; i--) { + Animator anim = runningAnimators.keyAt(i); + anim.pause(); + } + if (mListeners != null && mListeners.size() > 0) { + ArrayList<TransitionListener> tmpListeners = + (ArrayList<TransitionListener>) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onTransitionPause(this); + } } + mPaused = true; } - mPaused = true; } /** @@ -940,18 +946,20 @@ public abstract class Transition implements Cloneable { */ public void resume() { if (mPaused) { - ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators(); - int numOldAnims = runningAnimators.size(); - for (int i = numOldAnims - 1; i >= 0; i--) { - Animator anim = runningAnimators.keyAt(i); - anim.resume(); - } - if (mListeners != null && mListeners.size() > 0) { - ArrayList<TransitionListener> tmpListeners = - (ArrayList<TransitionListener>) mListeners.clone(); - int numListeners = tmpListeners.size(); - for (int i = 0; i < numListeners; ++i) { - tmpListeners.get(i).onTransitionResume(this); + if (!mEnded) { + ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators(); + int numOldAnims = runningAnimators.size(); + for (int i = numOldAnims - 1; i >= 0; i--) { + Animator anim = runningAnimators.keyAt(i); + anim.resume(); + } + if (mListeners != null && mListeners.size() > 0) { + ArrayList<TransitionListener> tmpListeners = + (ArrayList<TransitionListener>) mListeners.clone(); + int numListeners = tmpListeners.size(); + for (int i = 0; i < numListeners; ++i) { + tmpListeners.get(i).onTransitionResume(this); + } } } mPaused = false; @@ -1071,6 +1079,7 @@ public abstract class Transition implements Cloneable { tmpListeners.get(i).onTransitionStart(this); } } + mEnded = false; } mNumInstances++; } @@ -1111,6 +1120,7 @@ public abstract class Transition implements Cloneable { v.setHasTransientState(false); } } + mEnded = true; } } |