Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java +51 −17 Original line number Original line Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.graphics.PixelFormat; import android.graphics.RecordingCanvas; import android.graphics.RecordingCanvas; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Handler; import android.util.Log; import android.os.Trace; import android.view.RenderNodeAnimator; import android.view.RenderNodeAnimator; import android.view.View; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewConfiguration; Loading Loading @@ -74,6 +74,11 @@ public class KeyButtonRipple extends Drawable { private final HashSet<Animator> mRunningAnimations = new HashSet<>(); private final HashSet<Animator> mRunningAnimations = new HashSet<>(); private final ArrayList<Animator> mTmpArray = new ArrayList<>(); private final ArrayList<Animator> mTmpArray = new ArrayList<>(); private final TraceAnimatorListener mExitHwTraceAnimator = new TraceAnimatorListener("exitHardware"); private final TraceAnimatorListener mEnterHwTraceAnimator = new TraceAnimatorListener("enterHardware"); public enum Type { public enum Type { OVAL, OVAL, ROUNDED_RECT ROUNDED_RECT Loading Loading @@ -221,7 +226,7 @@ public class KeyButtonRipple extends Drawable { @Override @Override public void jumpToCurrentState() { public void jumpToCurrentState() { cancelAnimations("jumpToCurrentState"); endAnimations("jumpToCurrentState", false /* cancel */); } } @Override @Override Loading @@ -235,7 +240,6 @@ public class KeyButtonRipple extends Drawable { } } public void setPressed(boolean pressed) { public void setPressed(boolean pressed) { Log.d("b/63783866", "KeyButtonRipple.setPressed: pressed=" + pressed); if (mDark != mLastDark && pressed) { if (mDark != mLastDark && pressed) { mRipplePaint = null; mRipplePaint = null; mLastDark = mDark; mLastDark = mDark; Loading @@ -255,14 +259,19 @@ public class KeyButtonRipple extends Drawable { mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null); } } private void cancelAnimations(String reason) { private void endAnimations(String reason, boolean cancel) { Log.d("b/63783866", "KeyButtonRipple.cancelAnimations: reason=" + reason); Trace.beginSection("KeyButtonRipple.endAnim: reason=" + reason + " cancel=" + cancel); Trace.endSection(); mVisible = false; mVisible = false; mTmpArray.addAll(mRunningAnimations); mTmpArray.addAll(mRunningAnimations); int size = mTmpArray.size(); int size = mTmpArray.size(); for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) { Animator a = mTmpArray.get(i); Animator a = mTmpArray.get(i); if (cancel) { a.cancel(); a.cancel(); } else { a.end(); } } } mTmpArray.clear(); mTmpArray.clear(); mRunningAnimations.clear(); mRunningAnimations.clear(); Loading @@ -287,7 +296,7 @@ public class KeyButtonRipple extends Drawable { } } private void enterSoftware() { private void enterSoftware() { cancelAnimations("enterSoftware"); endAnimations("enterSoftware", true /* cancel */); mVisible = true; mVisible = true; mGlowAlpha = getMaxGlowAlpha(); mGlowAlpha = getMaxGlowAlpha(); ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", Loading Loading @@ -373,8 +382,7 @@ public class KeyButtonRipple extends Drawable { } } private void enterHardware() { private void enterHardware() { Log.d("b/63783866", "enterHardware"); endAnimations("enterHardware", true /* cancel */); cancelAnimations("enterHardware"); mVisible = true; mVisible = true; mDrawingHardwareGlow = true; mDrawingHardwareGlow = true; setExtendStart(CanvasProperty.createFloat(getExtendSize() / 2)); setExtendStart(CanvasProperty.createFloat(getExtendSize() / 2)); Loading @@ -391,6 +399,7 @@ public class KeyButtonRipple extends Drawable { endAnim.setDuration(ANIMATION_DURATION_SCALE); endAnim.setDuration(ANIMATION_DURATION_SCALE); endAnim.setInterpolator(mInterpolator); endAnim.setInterpolator(mInterpolator); endAnim.addListener(mAnimatorListener); endAnim.addListener(mAnimatorListener); endAnim.addListener(mEnterHwTraceAnimator); endAnim.setTarget(mTargetView); endAnim.setTarget(mTargetView); if (isHorizontal()) { if (isHorizontal()) { Loading Loading @@ -426,13 +435,13 @@ public class KeyButtonRipple extends Drawable { } } private void exitHardware() { private void exitHardware() { Log.d("b/63783866", "exitHardware"); mPaintProp = CanvasProperty.createPaint(getRipplePaint()); mPaintProp = CanvasProperty.createPaint(getRipplePaint()); final RenderNodeAnimator opacityAnim = new RenderNodeAnimator(mPaintProp, final RenderNodeAnimator opacityAnim = new RenderNodeAnimator(mPaintProp, RenderNodeAnimator.PAINT_ALPHA, 0); RenderNodeAnimator.PAINT_ALPHA, 0); opacityAnim.setDuration(ANIMATION_DURATION_FADE); opacityAnim.setDuration(ANIMATION_DURATION_FADE); opacityAnim.setInterpolator(Interpolators.ALPHA_OUT); opacityAnim.setInterpolator(Interpolators.ALPHA_OUT); opacityAnim.addListener(mAnimatorListener); opacityAnim.addListener(mAnimatorListener); opacityAnim.addListener(mExitHwTraceAnimator); opacityAnim.setTarget(mTargetView); opacityAnim.setTarget(mTargetView); opacityAnim.start(); opacityAnim.start(); Loading @@ -454,6 +463,31 @@ public class KeyButtonRipple extends Drawable { } } }; }; private static final class TraceAnimatorListener extends AnimatorListenerAdapter { private final String mName; TraceAnimatorListener(String name) { mName = name; } @Override public void onAnimationStart(Animator animation) { Trace.beginSection("KeyButtonRipple.start." + mName); Trace.endSection(); } @Override public void onAnimationCancel(Animator animation) { Trace.beginSection("KeyButtonRipple.cancel." + mName); Trace.endSection(); } @Override public void onAnimationEnd(Animator animation) { Trace.beginSection("KeyButtonRipple.end." + mName); Trace.endSection(); } } /** /** * Interpolator with a smooth log deceleration * Interpolator with a smooth log deceleration */ */ Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java +51 −17 Original line number Original line Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.graphics.PixelFormat; import android.graphics.RecordingCanvas; import android.graphics.RecordingCanvas; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Handler; import android.util.Log; import android.os.Trace; import android.view.RenderNodeAnimator; import android.view.RenderNodeAnimator; import android.view.View; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewConfiguration; Loading Loading @@ -74,6 +74,11 @@ public class KeyButtonRipple extends Drawable { private final HashSet<Animator> mRunningAnimations = new HashSet<>(); private final HashSet<Animator> mRunningAnimations = new HashSet<>(); private final ArrayList<Animator> mTmpArray = new ArrayList<>(); private final ArrayList<Animator> mTmpArray = new ArrayList<>(); private final TraceAnimatorListener mExitHwTraceAnimator = new TraceAnimatorListener("exitHardware"); private final TraceAnimatorListener mEnterHwTraceAnimator = new TraceAnimatorListener("enterHardware"); public enum Type { public enum Type { OVAL, OVAL, ROUNDED_RECT ROUNDED_RECT Loading Loading @@ -221,7 +226,7 @@ public class KeyButtonRipple extends Drawable { @Override @Override public void jumpToCurrentState() { public void jumpToCurrentState() { cancelAnimations("jumpToCurrentState"); endAnimations("jumpToCurrentState", false /* cancel */); } } @Override @Override Loading @@ -235,7 +240,6 @@ public class KeyButtonRipple extends Drawable { } } public void setPressed(boolean pressed) { public void setPressed(boolean pressed) { Log.d("b/63783866", "KeyButtonRipple.setPressed: pressed=" + pressed); if (mDark != mLastDark && pressed) { if (mDark != mLastDark && pressed) { mRipplePaint = null; mRipplePaint = null; mLastDark = mDark; mLastDark = mDark; Loading @@ -255,14 +259,19 @@ public class KeyButtonRipple extends Drawable { mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null); } } private void cancelAnimations(String reason) { private void endAnimations(String reason, boolean cancel) { Log.d("b/63783866", "KeyButtonRipple.cancelAnimations: reason=" + reason); Trace.beginSection("KeyButtonRipple.endAnim: reason=" + reason + " cancel=" + cancel); Trace.endSection(); mVisible = false; mVisible = false; mTmpArray.addAll(mRunningAnimations); mTmpArray.addAll(mRunningAnimations); int size = mTmpArray.size(); int size = mTmpArray.size(); for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) { Animator a = mTmpArray.get(i); Animator a = mTmpArray.get(i); if (cancel) { a.cancel(); a.cancel(); } else { a.end(); } } } mTmpArray.clear(); mTmpArray.clear(); mRunningAnimations.clear(); mRunningAnimations.clear(); Loading @@ -287,7 +296,7 @@ public class KeyButtonRipple extends Drawable { } } private void enterSoftware() { private void enterSoftware() { cancelAnimations("enterSoftware"); endAnimations("enterSoftware", true /* cancel */); mVisible = true; mVisible = true; mGlowAlpha = getMaxGlowAlpha(); mGlowAlpha = getMaxGlowAlpha(); ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", Loading Loading @@ -373,8 +382,7 @@ public class KeyButtonRipple extends Drawable { } } private void enterHardware() { private void enterHardware() { Log.d("b/63783866", "enterHardware"); endAnimations("enterHardware", true /* cancel */); cancelAnimations("enterHardware"); mVisible = true; mVisible = true; mDrawingHardwareGlow = true; mDrawingHardwareGlow = true; setExtendStart(CanvasProperty.createFloat(getExtendSize() / 2)); setExtendStart(CanvasProperty.createFloat(getExtendSize() / 2)); Loading @@ -391,6 +399,7 @@ public class KeyButtonRipple extends Drawable { endAnim.setDuration(ANIMATION_DURATION_SCALE); endAnim.setDuration(ANIMATION_DURATION_SCALE); endAnim.setInterpolator(mInterpolator); endAnim.setInterpolator(mInterpolator); endAnim.addListener(mAnimatorListener); endAnim.addListener(mAnimatorListener); endAnim.addListener(mEnterHwTraceAnimator); endAnim.setTarget(mTargetView); endAnim.setTarget(mTargetView); if (isHorizontal()) { if (isHorizontal()) { Loading Loading @@ -426,13 +435,13 @@ public class KeyButtonRipple extends Drawable { } } private void exitHardware() { private void exitHardware() { Log.d("b/63783866", "exitHardware"); mPaintProp = CanvasProperty.createPaint(getRipplePaint()); mPaintProp = CanvasProperty.createPaint(getRipplePaint()); final RenderNodeAnimator opacityAnim = new RenderNodeAnimator(mPaintProp, final RenderNodeAnimator opacityAnim = new RenderNodeAnimator(mPaintProp, RenderNodeAnimator.PAINT_ALPHA, 0); RenderNodeAnimator.PAINT_ALPHA, 0); opacityAnim.setDuration(ANIMATION_DURATION_FADE); opacityAnim.setDuration(ANIMATION_DURATION_FADE); opacityAnim.setInterpolator(Interpolators.ALPHA_OUT); opacityAnim.setInterpolator(Interpolators.ALPHA_OUT); opacityAnim.addListener(mAnimatorListener); opacityAnim.addListener(mAnimatorListener); opacityAnim.addListener(mExitHwTraceAnimator); opacityAnim.setTarget(mTargetView); opacityAnim.setTarget(mTargetView); opacityAnim.start(); opacityAnim.start(); Loading @@ -454,6 +463,31 @@ public class KeyButtonRipple extends Drawable { } } }; }; private static final class TraceAnimatorListener extends AnimatorListenerAdapter { private final String mName; TraceAnimatorListener(String name) { mName = name; } @Override public void onAnimationStart(Animator animation) { Trace.beginSection("KeyButtonRipple.start." + mName); Trace.endSection(); } @Override public void onAnimationCancel(Animator animation) { Trace.beginSection("KeyButtonRipple.cancel." + mName); Trace.endSection(); } @Override public void onAnimationEnd(Animator animation) { Trace.beginSection("KeyButtonRipple.end." + mName); Trace.endSection(); } } /** /** * Interpolator with a smooth log deceleration * Interpolator with a smooth log deceleration */ */ Loading