summaryrefslogtreecommitdiff
path: root/graphics/java/android
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2021-08-04 11:18:32 -0400
committerJohn Reck <jreck@google.com>2021-08-04 18:22:16 +0000
commita355e904a26f2d863d49bec3e4c2176b8047a48e (patch)
tree22cb169ca0b5a5b1dabea8aea3b78e5c3a55bff0 /graphics/java/android
parentd459da6362b204161af200dcbcc9d1814a9d95aa (diff)
Have RippleDrawable ignore non-attached RenderNodes
Don't try to do a RenderNodeAnimation if the RenderNode isn't attached. Although this isn't strictly speaking a valid state to be in, it's also easy for RippleDrawable to just ignore it. Bug: 186864959 Test: ripples still show up, are still RT accelerated normally Change-Id: I8127f1419508157eb83ac9bb1562745ac53d2ced
Diffstat (limited to 'graphics/java/android')
-rw-r--r--graphics/java/android/graphics/drawable/RippleAnimationSession.java12
1 files changed, 8 insertions, 4 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleAnimationSession.java b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
index 492520910afd..872331c82603 100644
--- a/graphics/java/android/graphics/drawable/RippleAnimationSession.java
+++ b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
@@ -67,7 +67,7 @@ public final class RippleAnimationSession {
@NonNull RippleAnimationSession enter(Canvas canvas) {
mStartTime = AnimationUtils.currentAnimationTimeMillis();
- if (isHwAccelerated(canvas)) {
+ if (useRTAnimations(canvas)) {
enterHardware((RecordingCanvas) canvas);
} else {
enterSoftware();
@@ -82,7 +82,7 @@ public final class RippleAnimationSession {
}
@NonNull RippleAnimationSession exit(Canvas canvas) {
- if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas);
+ if (useRTAnimations(canvas)) exitHardware((RecordingCanvas) canvas);
else exitSoftware();
return this;
}
@@ -102,8 +102,12 @@ public final class RippleAnimationSession {
return this;
}
- private boolean isHwAccelerated(Canvas canvas) {
- return canvas.isHardwareAccelerated() && !mForceSoftware;
+ private boolean useRTAnimations(Canvas canvas) {
+ if (mForceSoftware) return false;
+ if (!canvas.isHardwareAccelerated()) return false;
+ RecordingCanvas hwCanvas = (RecordingCanvas) canvas;
+ if (hwCanvas.mNode == null || !hwCanvas.mNode.isAttached()) return false;
+ return true;
}
private void exitSoftware() {