diff options
author | Jorim Jaggi <jjaggi@google.com> | 2015-08-19 16:51:36 -0700 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2015-08-21 15:21:12 -0700 |
commit | b7303a36baf8d0ac3efdeeee3310ef5974ba9cea (patch) | |
tree | 849198070694eacf05379994925381764f57b22b | |
parent | 5eb67c22489f5fda22770d1fc824e7a8013ec025 (diff) | |
download | frameworks_base-b7303a36baf8d0ac3efdeeee3310ef5974ba9cea.zip frameworks_base-b7303a36baf8d0ac3efdeeee3310ef5974ba9cea.tar.gz frameworks_base-b7303a36baf8d0ac3efdeeee3310ef5974ba9cea.tar.bz2 |
Disable RT animations for header ripple
Bug: 22208997
Change-Id: I10a890d4f8f70c7c786940ffdb86cf4d21bdaf05
8 files changed, 43 insertions, 8 deletions
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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 0aa4f6c..5f01306 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java index 01aa8d1..8688c28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java @@ -86,6 +86,9 @@ public class NotificationBackgroundView extends View { if (mBackground != null) { mBackground.setCallback(this); } + if (mBackground instanceof RippleDrawable) { + ((RippleDrawable) mBackground).setForceSoftware(true); + } invalidate(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsButton.java index a1e9ece..18db5b8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsButton.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsButton.java @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 7ee47df..e9c4e49 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -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 |