diff options
author | John Reck <jreck@google.com> | 2021-08-04 11:18:32 -0400 |
---|---|---|
committer | John Reck <jreck@google.com> | 2021-08-04 18:22:16 +0000 |
commit | a355e904a26f2d863d49bec3e4c2176b8047a48e (patch) | |
tree | 22cb169ca0b5a5b1dabea8aea3b78e5c3a55bff0 /graphics/java/android | |
parent | d459da6362b204161af200dcbcc9d1814a9d95aa (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.java | 12 |
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() { |