From a56073a038ede97931b66b55cfeb2e46860d519f Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 12 Mar 2021 10:03:40 -0500 Subject: [PATCH] PIN view - Tweak animation It was running a bit too fast, producing an ugly wobbly effect Bug: 172360102 Test: manual Change-Id: I0b6a1b700f151382af04c01c7e7b727efae1dd7b --- .../com/android/keyguard/NumPadAnimator.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java index 97d6e9750716e..14b96913ea49a 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java @@ -15,6 +15,7 @@ */ package com.android.keyguard; +import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.ColorStateList; @@ -34,7 +35,9 @@ import com.android.systemui.R; * Provides background color and radius animations for key pad buttons. */ class NumPadAnimator { - private ValueAnimator mAnimator; + private AnimatorSet mAnimator; + private ValueAnimator mExpandAnimator; + private ValueAnimator mContractAnimator; private GradientDrawable mBackground; private RippleDrawable mRipple; private GradientDrawable mRippleMask; @@ -55,18 +58,28 @@ class NumPadAnimator { mMargin = context.getResources().getDimensionPixelSize(R.dimen.num_pad_key_margin); // Actual values will be updated later, usually during an onLayout() call - mAnimator = ValueAnimator.ofFloat(0f); - mAnimator.setDuration(100); - mAnimator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN); - mAnimator.setRepeatMode(ValueAnimator.REVERSE); - mAnimator.setRepeatCount(1); - mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + mAnimator = new AnimatorSet(); + mExpandAnimator = ValueAnimator.ofFloat(0f, 1f); + mExpandAnimator.setDuration(50); + mExpandAnimator.setInterpolator(Interpolators.LINEAR); + mExpandAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator anim) { mBackground.setCornerRadius((float) anim.getAnimatedValue()); mRippleMask.setCornerRadius((float) anim.getAnimatedValue()); } }); + mContractAnimator = ValueAnimator.ofFloat(1f, 0f); + mContractAnimator.setStartDelay(33); + mContractAnimator.setDuration(417); + mContractAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); + mContractAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + public void onAnimationUpdate(ValueAnimator anim) { + mBackground.setCornerRadius((float) anim.getAnimatedValue()); + mRippleMask.setCornerRadius((float) anim.getAnimatedValue()); + } + }); + mAnimator.playSequentially(mExpandAnimator, mContractAnimator); } void updateMargin(ViewGroup.MarginLayoutParams lp) { @@ -77,7 +90,8 @@ class NumPadAnimator { float startRadius = height / 2f; float endRadius = height / 4f; mBackground.setCornerRadius(startRadius); - mAnimator.setFloatValues(startRadius, endRadius); + mExpandAnimator.setFloatValues(startRadius, endRadius); + mContractAnimator.setFloatValues(endRadius, startRadius); } void start() {