diff options
author | Doris Liu <tianliu@google.com> | 2016-08-04 13:20:17 -0700 |
---|---|---|
committer | Doris Liu <tianliu@google.com> | 2016-08-04 22:43:07 +0000 |
commit | 6725d581eb3c13591a4ff276413dbfa0fc13e739 (patch) | |
tree | ce97c8ce9603ec7398683532e8e7e042e2c627dc /libs/hwui/Animator.cpp | |
parent | 6bcf0cdf37cb13aebfaf17b757401d025a4a35e1 (diff) |
Remove animation value change from push staging
This CL ensures that animation values are only updated during
animation pulses.
This CL also includes the revert of
https://googleplex-android-review.git.corp.google.com/#/c/1285913/
BUG: 30659748
Change-Id: Iadc84462dc61157efd3c18a23767bba9faf00f6e
Diffstat (limited to 'libs/hwui/Animator.cpp')
-rw-r--r-- | libs/hwui/Animator.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libs/hwui/Animator.cpp b/libs/hwui/Animator.cpp index dc180188100b..74aa3033ee12 100644 --- a/libs/hwui/Animator.cpp +++ b/libs/hwui/Animator.cpp @@ -123,22 +123,27 @@ void BaseRenderNodeAnimator::resolveStagingRequest(Request request) { mPlayTime = (mPlayState == PlayState::Running || mPlayState == PlayState::Reversing) ? mPlayTime : 0; mPlayState = PlayState::Running; + mPendingActionUponFinish = Action::None; break; case Request::Reverse: mPlayTime = (mPlayState == PlayState::Running || mPlayState == PlayState::Reversing) ? mPlayTime : mDuration; mPlayState = PlayState::Reversing; + mPendingActionUponFinish = Action::None; break; case Request::Reset: mPlayTime = 0; mPlayState = PlayState::Finished; + mPendingActionUponFinish = Action::Reset; break; case Request::Cancel: mPlayState = PlayState::Finished; + mPendingActionUponFinish = Action::None; break; case Request::End: mPlayTime = mPlayState == PlayState::Reversing ? 0 : mDuration; mPlayState = PlayState::Finished; + mPendingActionUponFinish = Action::End; break; default: LOG_ALWAYS_FATAL("Invalid staging request: %d", static_cast<int>(request)); @@ -176,8 +181,6 @@ void BaseRenderNodeAnimator::pushStaging(AnimationContext& context) { mStagingRequests.clear(); if (mStagingPlayState == PlayState::Finished) { - // Set the staging play time and end the animation - updatePlayTime(mPlayTime); callOnFinishedListener(context); } else if (mStagingPlayState == PlayState::Running || mStagingPlayState == PlayState::Reversing) { @@ -236,6 +239,15 @@ bool BaseRenderNodeAnimator::animate(AnimationContext& context) { return false; } if (mPlayState == PlayState::Finished) { + if (mPendingActionUponFinish == Action::Reset) { + // Skip to start. + updatePlayTime(0); + } else if (mPendingActionUponFinish == Action::End) { + // Skip to end. + updatePlayTime(mDuration); + } + // Reset pending action. + mPendingActionUponFinish = Action ::None; return true; } |