summaryrefslogtreecommitdiff
path: root/graphics/java/android
diff options
context:
space:
mode:
authorScott Lobdell <slobdell@google.com>2021-08-04 03:02:11 +0000
committerScott Lobdell <slobdell@google.com>2021-08-06 17:25:21 +0000
commit9d10272031d3f400d399db45927abf3be739b074 (patch)
treeb9a3f179cf0abb8f6986f4c2268a617a34d663c8 /graphics/java/android
parent22fd7d8dfaf39ca6b15bd360409f3fa580adf2f6 (diff)
parentb3abfad71a54152026b023b831ddd1793f361fa8 (diff)
Merge SP1A.210803.001
Change-Id: I09253f8614e9ee85a59460f3ef25f17dd98cac80
Diffstat (limited to 'graphics/java/android')
-rw-r--r--graphics/java/android/graphics/drawable/RippleAnimationSession.java13
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java12
2 files changed, 23 insertions, 2 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleAnimationSession.java b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
index 74fb618f8fd7..492520910afd 100644
--- a/graphics/java/android/graphics/drawable/RippleAnimationSession.java
+++ b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
@@ -53,6 +53,7 @@ public final class RippleAnimationSession {
private long mStartTime;
private boolean mForceSoftware;
private Animator mLoopAnimation;
+ private Animator mCurrentAnimation;
RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties,
boolean forceSoftware) {
@@ -74,6 +75,12 @@ public final class RippleAnimationSession {
return this;
}
+ void end() {
+ if (mCurrentAnimation != null) {
+ mCurrentAnimation.end();
+ }
+ }
+
@NonNull RippleAnimationSession exit(Canvas canvas) {
if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas);
else exitSoftware();
@@ -114,10 +121,12 @@ public final class RippleAnimationSession {
if (mLoopAnimation != null) mLoopAnimation.cancel();
Consumer<RippleAnimationSession> onEnd = mOnSessionEnd;
if (onEnd != null) onEnd.accept(RippleAnimationSession.this);
+ if (mCurrentAnimation == expand) mCurrentAnimation = null;
}
});
expand.setInterpolator(LINEAR_INTERPOLATOR);
expand.start();
+ mCurrentAnimation = expand;
}
private long computeDelay() {
@@ -147,6 +156,7 @@ public final class RippleAnimationSession {
if (mLoopAnimation != null) mLoopAnimation.cancel();
Consumer<RippleAnimationSession> onEnd = mOnSessionEnd;
if (onEnd != null) onEnd.accept(RippleAnimationSession.this);
+ if (mCurrentAnimation == exit) mCurrentAnimation = null;
}
});
exit.setTarget(canvas);
@@ -155,6 +165,7 @@ public final class RippleAnimationSession {
long delay = computeDelay();
exit.setStartDelay(delay);
exit.start();
+ mCurrentAnimation = exit;
}
private void enterHardware(RecordingCanvas canvas) {
@@ -167,6 +178,7 @@ public final class RippleAnimationSession {
mStartTime + MAX_NOISE_PHASE);
loop.setTarget(canvas);
startAnimation(expand, loop);
+ mCurrentAnimation = expand;
}
private void startAnimation(Animator expand, Animator loop) {
@@ -200,6 +212,7 @@ public final class RippleAnimationSession {
mProperties.getShader().setNoisePhase((float) loop.getAnimatedValue());
});
startAnimation(expand, loop);
+ mCurrentAnimation = expand;
}
void setRadius(float radius) {
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index b994ad20320b..d3cff5cb81ff 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -278,6 +278,15 @@ public class RippleDrawable extends LayerDrawable {
}
cancelExitingRipples();
+ endPatternedAnimations();
+ }
+
+ private void endPatternedAnimations() {
+ for (int i = 0; i < mRunningAnimations.size(); i++) {
+ RippleAnimationSession session = mRunningAnimations.get(i);
+ session.end();
+ }
+ mRunningAnimations.clear();
}
private void cancelExitingRipples() {
@@ -291,7 +300,6 @@ public class RippleDrawable extends LayerDrawable {
Arrays.fill(ripples, 0, count, null);
}
mExitingRipplesCount = 0;
- mExitingAnimation = true;
// Always draw an additional "clean" frame after canceling animations.
invalidateSelf(false);
}
@@ -714,7 +722,7 @@ public class RippleDrawable extends LayerDrawable {
}
cancelExitingRipples();
- exitPatternedAnimation();
+ endPatternedAnimations();
}
@Override