Support calling start() in onAnimationFinished(...) in AVD
am: 679fe6ab6f
Change-Id: I2999f6fc543f56d73cd03fe74b466c033d6c7d1a
This commit is contained in:
@@ -46,8 +46,17 @@ PropertyValuesAnimatorSet::PropertyValuesAnimatorSet()
|
||||
|
||||
void PropertyValuesAnimatorSet::onFinished(BaseRenderNodeAnimator* animator) {
|
||||
if (mOneShotListener.get()) {
|
||||
mOneShotListener->onAnimationFinished(animator);
|
||||
sp<AnimationListener> listener = std::move(mOneShotListener);
|
||||
// Set the listener to nullptr before the onAnimationFinished callback, rather than after,
|
||||
// for two reasons:
|
||||
// 1) We need to prevent changes to mOneShotListener during the onAnimationFinished
|
||||
// callback (specifically in AnimationListenerBridge::onAnimationFinished(...) from
|
||||
// triggering dtor of the bridge and potentially unsafely re-entering
|
||||
// AnimationListenerBridge::onAnimationFinished(...).
|
||||
// 2) It's possible that there are changes to the listener during the callback, therefore
|
||||
// we need to reset the listener before the callback rather than afterwards.
|
||||
mOneShotListener = nullptr;
|
||||
listener->onAnimationFinished(animator);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user