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.
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() {

View File

@ -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;

View File

@ -165,6 +165,12 @@ public class RippleDrawable extends LayerDrawable {
/** Whether bounds are being overridden. */
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.
*/
@ -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;

View File

@ -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;

View File

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

View File

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

View File

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

View File

@ -26,6 +26,7 @@ import android.graphics.Outline;
import android.graphics.Rect;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.util.AttributeSet;
import android.util.MathUtils;
import android.util.TypedValue;
@ -184,6 +185,12 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
}
});
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