Merge "Have RippleDrawable ignore non-attached RenderNodes" into sc-dev

This commit is contained in:
John Reck
2021-08-04 22:22:21 +00:00
committed by Android (Google) Code Review

View File

@@ -67,7 +67,7 @@ public final class RippleAnimationSession {
@NonNull RippleAnimationSession enter(Canvas canvas) { @NonNull RippleAnimationSession enter(Canvas canvas) {
mStartTime = AnimationUtils.currentAnimationTimeMillis(); mStartTime = AnimationUtils.currentAnimationTimeMillis();
if (isHwAccelerated(canvas)) { if (useRTAnimations(canvas)) {
enterHardware((RecordingCanvas) canvas); enterHardware((RecordingCanvas) canvas);
} else { } else {
enterSoftware(); enterSoftware();
@@ -82,7 +82,7 @@ public final class RippleAnimationSession {
} }
@NonNull RippleAnimationSession exit(Canvas canvas) { @NonNull RippleAnimationSession exit(Canvas canvas) {
if (isHwAccelerated(canvas)) exitHardware((RecordingCanvas) canvas); if (useRTAnimations(canvas)) exitHardware((RecordingCanvas) canvas);
else exitSoftware(); else exitSoftware();
return this; return this;
} }
@@ -102,8 +102,12 @@ public final class RippleAnimationSession {
return this; return this;
} }
private boolean isHwAccelerated(Canvas canvas) { private boolean useRTAnimations(Canvas canvas) {
return canvas.isHardwareAccelerated() && !mForceSoftware; 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() { private void exitSoftware() {