Merge "Disable RT animations for header ripple" into mnc-dr-dev

This commit is contained in:
Jorim Jaggi
2015-08-25 22:54:34 +00:00
committed by Android (Google) Code Review
8 changed files with 43 additions and 8 deletions

View File

@ -48,8 +48,8 @@ class RippleBackground extends RippleComponent {
// Software rendering properties. // Software rendering properties.
private float mOpacity = 0; private float mOpacity = 0;
public RippleBackground(RippleDrawable owner, Rect bounds) { public RippleBackground(RippleDrawable owner, Rect bounds, boolean forceSoftware) {
super(owner, bounds); super(owner, bounds, forceSoftware);
} }
public boolean isVisible() { public boolean isVisible() {

View File

@ -52,9 +52,16 @@ abstract class RippleComponent {
/** Screen density used to adjust pixel-based constants. */ /** Screen density used to adjust pixel-based constants. */
protected float mDensity; 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; mOwner = owner;
mBounds = bounds; mBounds = bounds;
mForceSoftware = forceSoftware;
} }
public void onBoundsChange() { public void onBoundsChange() {
@ -143,7 +150,7 @@ abstract class RippleComponent {
* @return {@code true} if something was drawn, {@code false} otherwise * @return {@code true} if something was drawn, {@code false} otherwise
*/ */
public boolean draw(Canvas c, Paint p) { public boolean draw(Canvas c, Paint p) {
final boolean hasDisplayListCanvas = c.isHardwareAccelerated() final boolean hasDisplayListCanvas = !mForceSoftware && c.isHardwareAccelerated()
&& c instanceof DisplayListCanvas; && c instanceof DisplayListCanvas;
if (mHasDisplayListCanvas != hasDisplayListCanvas) { if (mHasDisplayListCanvas != hasDisplayListCanvas) {
mHasDisplayListCanvas = hasDisplayListCanvas; mHasDisplayListCanvas = hasDisplayListCanvas;

View File

@ -165,6 +165,12 @@ public class RippleDrawable extends LayerDrawable {
/** Whether bounds are being overridden. */ /** Whether bounds are being overridden. */
private boolean mOverrideBounds; 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. * Constructor used for drawable inflation.
*/ */
@ -546,7 +552,7 @@ public class RippleDrawable extends LayerDrawable {
*/ */
private void tryBackgroundEnter(boolean focused) { private void tryBackgroundEnter(boolean focused) {
if (mBackground == null) { if (mBackground == null) {
mBackground = new RippleBackground(this, mHotspotBounds); mBackground = new RippleBackground(this, mHotspotBounds, mForceSoftware);
} }
mBackground.setup(mState.mMaxRadius, mDensity); mBackground.setup(mState.mMaxRadius, mDensity);
@ -584,7 +590,7 @@ public class RippleDrawable extends LayerDrawable {
} }
final boolean isBounded = isBounded(); 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); 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 @Override
public ConstantState getConstantState() { public ConstantState getConstantState() {
return mState; return mState;

View File

@ -87,8 +87,8 @@ class RippleForeground extends RippleComponent {
private boolean mHasFinishedExit; private boolean mHasFinishedExit;
public RippleForeground(RippleDrawable owner, Rect bounds, float startingX, float startingY, public RippleForeground(RippleDrawable owner, Rect bounds, float startingX, float startingY,
boolean isBounded) { boolean isBounded, boolean forceSoftware) {
super(owner, bounds); super(owner, bounds, forceSoftware);
mIsBounded = isBounded; mIsBounded = isBounded;
mStartingX = startingX; mStartingX = startingX;

View File

@ -24,6 +24,7 @@ import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.MotionEvent; import android.view.MotionEvent;

View File

@ -86,6 +86,9 @@ public class NotificationBackgroundView extends View {
if (mBackground != null) { if (mBackground != null) {
mBackground.setCallback(this); mBackground.setCallback(this);
} }
if (mBackground instanceof RippleDrawable) {
((RippleDrawable) mBackground).setForceSoftware(true);
}
invalidate(); invalidate();
} }

View File

@ -19,6 +19,7 @@ import android.animation.Animator;
import android.animation.Animator.AnimatorListener; import android.animation.Animator.AnimatorListener;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.RippleDrawable;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.util.AttributeSet; import android.util.AttributeSet;

View File

@ -26,6 +26,7 @@ import android.graphics.Outline;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Animatable; import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.MathUtils; import android.util.MathUtils;
import android.util.TypedValue; import android.util.TypedValue;
@ -184,6 +185,12 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
} }
}); });
requestCaptureValues(); requestCaptureValues();
// RenderThread is doing more harm than good when touching the header (to expand quick
// settings), so disable it for this view
((RippleDrawable) getBackground()).setForceSoftware(true);
((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true);
((RippleDrawable) mSystemIconsSuperContainer.getBackground()).setForceSoftware(true);
} }
@Override @Override