diff options
author | Beverly <beverlyt@google.com> | 2021-07-14 16:01:50 -0400 |
---|---|---|
committer | Beverly Tai <beverlyt@google.com> | 2021-07-15 01:24:22 +0000 |
commit | 09923d5eca02486324b55c9f28562d17418fc577 (patch) | |
tree | 3d4e808391655e43a4b489617cbce2db0bcaf422 /packages/SystemUI/src/com/android/keyguard/LockIconView.java | |
parent | 51c13dcc6ceea54947703917c718246e9256c510 (diff) |
Animate in a background for kg unlock icon
- to indicate it is tappable
- update background drawable on color change to update
color
Test: manual
Fixes: 192403524
Change-Id: I34255e3f7cc7b1dfc246c4e2441822129abdf819
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/LockIconView.java')
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/LockIconView.java | 96 |
1 files changed, 94 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconView.java b/packages/SystemUI/src/com/android/keyguard/LockIconView.java index c1d448db1e63..867e3ae6ae8c 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconView.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconView.java @@ -16,16 +16,29 @@ package com.android.keyguard; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.ColorStateList; import android.graphics.PointF; import android.graphics.RectF; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.view.View; +import android.view.animation.Interpolator; +import android.view.animation.PathInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; import androidx.annotation.NonNull; +import com.android.settingslib.Utils; import com.android.systemui.Dumpable; +import com.android.systemui.R; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -33,16 +46,96 @@ import java.io.PrintWriter; /** * A view positioned under the notification shade. */ -public class LockIconView extends ImageView implements Dumpable { +public class LockIconView extends FrameLayout implements Dumpable { @NonNull private final RectF mSensorRect; @NonNull private PointF mLockIconCenter = new PointF(0f, 0f); private int mRadius; + private ImageView mLockIcon; + private ImageView mUnlockBgView; + + private AnimatorSet mBgAnimator; + private int mLockIconColor; + private int mUnlockStartColor; + private int mUnlockEndColor; + public LockIconView(Context context, AttributeSet attrs) { super(context, attrs); mSensorRect = new RectF(); } + @Override + public void onFinishInflate() { + super.onFinishInflate(); + mLockIcon = findViewById(R.id.lock_icon); + mUnlockBgView = findViewById(R.id.lock_icon_bg); + } + + void updateColor() { + mLockIconColor = Utils.getColorAttrDefaultColor(getContext(), + R.attr.wallpaperTextColorAccent); + mUnlockStartColor = mLockIconColor; + mUnlockEndColor = Utils.getColorAttrDefaultColor(getContext(), + android.R.attr.textColorPrimary); + mUnlockBgView.setBackground(getContext().getDrawable(R.drawable.fingerprint_bg)); + } + + void setImageDrawable(Drawable drawable) { + mLockIcon.setImageDrawable(drawable); + } + + void hideBg() { + mUnlockBgView.setVisibility(View.INVISIBLE); + mLockIcon.setImageTintList(ColorStateList.valueOf(mLockIconColor)); + } + + void animateBg() { + ValueAnimator bgAlphaAnimator = ObjectAnimator.ofFloat(mUnlockBgView, View.ALPHA, 0f, 1f); + bgAlphaAnimator.setDuration(133); + + Interpolator interpolator = new PathInterpolator(0f, 0f, 0f, 1f); + Animator scaleXAnimator = ObjectAnimator.ofFloat(mUnlockBgView, View.SCALE_X, .9f, 1f); + scaleXAnimator.setInterpolator(interpolator); + scaleXAnimator.setDuration(300); + Animator scaleYAnimator = ObjectAnimator.ofFloat(mUnlockBgView, View.SCALE_Y, .9f, 1f); + scaleYAnimator.setDuration(300); + scaleYAnimator.setInterpolator(interpolator); + + ValueAnimator lockIconColorAnimator = + ValueAnimator.ofObject(new ArgbEvaluator(), mUnlockStartColor, mUnlockEndColor); + lockIconColorAnimator.addUpdateListener( + animation -> mLockIcon.setImageTintList( + ColorStateList.valueOf((int) animation.getAnimatedValue()))); + lockIconColorAnimator.setDuration(150); + + if (mBgAnimator != null) { + if (mBgAnimator.isRunning()) { + return; + } + mBgAnimator.cancel(); + } + mBgAnimator = new AnimatorSet(); + mBgAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + mBgAnimator = null; + } + }); + mBgAnimator.playTogether( + bgAlphaAnimator, + scaleYAnimator, + scaleXAnimator, + lockIconColorAnimator); + mBgAnimator.setStartDelay(167); + mUnlockBgView.setAlpha(0f); + mUnlockBgView.setScaleX(0); + mUnlockBgView.setScaleY(0); + mUnlockBgView.setVisibility(View.VISIBLE); + + mBgAnimator.start(); + } + void setCenterLocation(@NonNull PointF center, int radius) { mLockIconCenter = center; mRadius = radius; @@ -70,7 +163,6 @@ public class LockIconView extends ImageView implements Dumpable { return mLockIconCenter.y - mRadius; } - @Override public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { pw.println("Center in px (x, y)= (" + mLockIconCenter.x + ", " + mLockIconCenter.y + ")"); |