From b7303a36baf8d0ac3efdeeee3310ef5974ba9cea Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 19 Aug 2015 16:51:36 -0700 Subject: Disable RT animations for header ripple Bug: 22208997 Change-Id: I10a890d4f8f70c7c786940ffdb86cf4d21bdaf05 --- .../android/graphics/drawable/RippleBackground.java | 4 ++-- .../android/graphics/drawable/RippleComponent.java | 11 +++++++++-- .../android/graphics/drawable/RippleDrawable.java | 20 ++++++++++++++++++-- .../android/graphics/drawable/RippleForeground.java | 4 ++-- 4 files changed, 31 insertions(+), 8 deletions(-) (limited to 'graphics') diff --git a/graphics/java/android/graphics/drawable/RippleBackground.java b/graphics/java/android/graphics/drawable/RippleBackground.java index 1c14e2f..c7aa8c3 100644 --- a/graphics/java/android/graphics/drawable/RippleBackground.java +++ b/graphics/java/android/graphics/drawable/RippleBackground.java @@ -48,8 +48,8 @@ class RippleBackground extends RippleComponent { // Software rendering properties. private float mOpacity = 0; - public RippleBackground(RippleDrawable owner, Rect bounds) { - super(owner, bounds); + public RippleBackground(RippleDrawable owner, Rect bounds, boolean forceSoftware) { + super(owner, bounds, forceSoftware); } public boolean isVisible() { diff --git a/graphics/java/android/graphics/drawable/RippleComponent.java b/graphics/java/android/graphics/drawable/RippleComponent.java index 23a3ee3..2d378c6 100644 --- a/graphics/java/android/graphics/drawable/RippleComponent.java +++ b/graphics/java/android/graphics/drawable/RippleComponent.java @@ -52,9 +52,16 @@ abstract class RippleComponent { /** Screen density used to adjust pixel-based constants. */ protected float mDensity; - public RippleComponent(RippleDrawable owner, Rect bounds) { + /** + * If set, force all ripple animations to not run on RenderThread, even if it would be + * available. + */ + private final boolean mForceSoftware; + + public RippleComponent(RippleDrawable owner, Rect bounds, boolean forceSoftware) { mOwner = owner; mBounds = bounds; + mForceSoftware = forceSoftware; } public void onBoundsChange() { @@ -143,7 +150,7 @@ abstract class RippleComponent { * @return {@code true} if something was drawn, {@code false} otherwise */ public boolean draw(Canvas c, Paint p) { - final boolean hasDisplayListCanvas = c.isHardwareAccelerated() + final boolean hasDisplayListCanvas = !mForceSoftware && c.isHardwareAccelerated() && c instanceof DisplayListCanvas; if (mHasDisplayListCanvas != hasDisplayListCanvas) { mHasDisplayListCanvas = hasDisplayListCanvas; diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java index 464f3de..2690223 100644 --- a/graphics/java/android/graphics/drawable/RippleDrawable.java +++ b/graphics/java/android/graphics/drawable/RippleDrawable.java @@ -166,6 +166,12 @@ public class RippleDrawable extends LayerDrawable { private boolean mOverrideBounds; /** + * If set, force all ripple animations to not run on RenderThread, even if it would be + * available. + */ + private boolean mForceSoftware; + + /** * Constructor used for drawable inflation. */ RippleDrawable() { @@ -546,7 +552,7 @@ public class RippleDrawable extends LayerDrawable { */ private void tryBackgroundEnter(boolean focused) { if (mBackground == null) { - mBackground = new RippleBackground(this, mHotspotBounds); + mBackground = new RippleBackground(this, mHotspotBounds, mForceSoftware); } mBackground.setup(mState.mMaxRadius, mDensity); @@ -584,7 +590,7 @@ public class RippleDrawable extends LayerDrawable { } final boolean isBounded = isBounded(); - mRipple = new RippleForeground(this, mHotspotBounds, x, y, isBounded); + mRipple = new RippleForeground(this, mHotspotBounds, x, y, isBounded, mForceSoftware); } mRipple.setup(mState.mMaxRadius, mDensity); @@ -949,6 +955,16 @@ public class RippleDrawable extends LayerDrawable { } } + /** + * Sets whether to disable RenderThread animations for this ripple. + * + * @param forceSoftware true if RenderThread animations should be disabled, false otherwise + * @hide + */ + public void setForceSoftware(boolean forceSoftware) { + mForceSoftware = forceSoftware; + } + @Override public ConstantState getConstantState() { return mState; diff --git a/graphics/java/android/graphics/drawable/RippleForeground.java b/graphics/java/android/graphics/drawable/RippleForeground.java index 4853b04..c660846 100644 --- a/graphics/java/android/graphics/drawable/RippleForeground.java +++ b/graphics/java/android/graphics/drawable/RippleForeground.java @@ -87,8 +87,8 @@ class RippleForeground extends RippleComponent { private boolean mHasFinishedExit; public RippleForeground(RippleDrawable owner, Rect bounds, float startingX, float startingY, - boolean isBounded) { - super(owner, bounds); + boolean isBounded, boolean forceSoftware) { + super(owner, bounds, forceSoftware); mIsBounded = isBounded; mStartingX = startingX; -- cgit v1.1