summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorDoris Liu <tianliu@google.com>2016-08-06 01:07:14 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-08-06 01:07:15 +0000
commit7ae119ebff1389d97fb0fb85871922b56d97970f (patch)
treee16813113270195a33a559b9a84fe52a28230849 /libs
parent26d4ab07d57d4bc9cc9e873b9030ee0aa607229e (diff)
parent6725d581eb3c13591a4ff276413dbfa0fc13e739 (diff)
downloadandroid-frameworks-base-7ae119ebff1389d97fb0fb85871922b56d97970f.tar.gz
android-frameworks-base-7ae119ebff1389d97fb0fb85871922b56d97970f.tar.xz
Merge "Remove animation value change from push staging" into nyc-mr1-dev
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/Animator.cpp16
-rw-r--r--libs/hwui/Animator.h13
-rw-r--r--libs/hwui/AnimatorManager.cpp7
3 files changed, 28 insertions, 8 deletions
diff --git a/libs/hwui/Animator.cpp b/libs/hwui/Animator.cpp
index dc18018..74aa303 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;
}
diff --git a/libs/hwui/Animator.h b/libs/hwui/Animator.h
index 259f21b..72bac6c 100644
--- a/libs/hwui/Animator.h
+++ b/libs/hwui/Animator.h
@@ -165,6 +165,17 @@ private:
Cancel,
End
};
+
+ // Defines different actions upon finish.
+ enum class Action {
+ // For animations that got canceled or finished normally. no more action needs to be done.
+ None,
+ // For animations that get reset, the reset will happen in the next animation pulse.
+ Reset,
+ // For animations being ended, in the next animation pulse the animation will skip to end.
+ End
+ };
+
inline void checkMutable();
virtual void transitionToRunning(AnimationContext& context);
void doSetStartValue(float value);
@@ -172,7 +183,7 @@ private:
void resolveStagingRequest(Request request);
std::vector<Request> mStagingRequests;
-
+ Action mPendingActionUponFinish = Action::None;
};
class RenderPropertyAnimator : public BaseRenderNodeAnimator {
diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp
index 8d5f1a8..f170e9c 100644
--- a/libs/hwui/AnimatorManager.cpp
+++ b/libs/hwui/AnimatorManager.cpp
@@ -83,11 +83,8 @@ void AnimatorManager::pushStaging() {
}
mNewAnimators.clear();
}
- if (mAnimators.size()) {
- for (auto& animator : mAnimators) {
- animator->pushStaging(mAnimationHandle->context());
- }
- mParent.mProperties.updateMatrix();
+ for (auto& animator : mAnimators) {
+ animator->pushStaging(mAnimationHandle->context());
}
}