Work around a bug in an An app
An app has Animators (NoPauseAnimatorWrapper) that does not check their listeners against null before cloning. The previous implementation of AnimatorSet has masked this issue. But the underlying bug should be fixed in this app. For now, work around the bug by adding a listener to all the child animators. BUG: 34736819 Test: Manual Change-Id: I968450aab62cf5d308e3b64e76dcf018178af67e
This commit is contained in:
@@ -174,6 +174,10 @@ public final class AnimatorSet extends Animator implements AnimationHandler.Anim
|
||||
*/
|
||||
private long mPauseTime = -1;
|
||||
|
||||
// This is to work around a bug in b/34736819. This needs to be removed once play team
|
||||
// fixes their side.
|
||||
private AnimatorListenerAdapter mDummyListener = new AnimatorListenerAdapter() {};
|
||||
|
||||
public AnimatorSet() {
|
||||
super();
|
||||
mNodeMap.put(mDelayAnim, mRootNode);
|
||||
@@ -1018,6 +1022,8 @@ public final class AnimatorSet extends Animator implements AnimationHandler.Anim
|
||||
}
|
||||
|
||||
private void startAnimation() {
|
||||
addDummyListener();
|
||||
|
||||
// Register animation callback
|
||||
addAnimationCallback(mStartDelay);
|
||||
|
||||
@@ -1062,6 +1068,20 @@ public final class AnimatorSet extends Animator implements AnimationHandler.Anim
|
||||
}
|
||||
}
|
||||
|
||||
// This is to work around the issue in b/34736819, as the old behavior in AnimatorSet had
|
||||
// masked a real bug in play movies. TODO: remove this and below once the root cause is fixed.
|
||||
private void addDummyListener() {
|
||||
for (int i = 1; i < mNodes.size(); i++) {
|
||||
mNodes.get(i).mAnimation.addListener(mDummyListener);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDummyListener() {
|
||||
for (int i = 1; i < mNodes.size(); i++) {
|
||||
mNodes.get(i).mAnimation.removeListener(mDummyListener);
|
||||
}
|
||||
}
|
||||
|
||||
private int findLatestEventIdForTime(long currentPlayTime) {
|
||||
int size = mEvents.size();
|
||||
int latestId = mLastEventId;
|
||||
@@ -1107,6 +1127,7 @@ public final class AnimatorSet extends Animator implements AnimationHandler.Anim
|
||||
tmpListeners.get(i).onAnimationEnd(this, mReversing);
|
||||
}
|
||||
}
|
||||
removeDummyListener();
|
||||
mSelfPulse = true;
|
||||
mReversing = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user