diff options
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() { |