summaryrefslogtreecommitdiff
path: root/packages/SystemUI/src/com/android/keyguard/LockIconView.java
diff options
context:
space:
mode:
authorBeverly <beverlyt@google.com>2021-07-14 16:01:50 -0400
committerBeverly Tai <beverlyt@google.com>2021-07-15 01:24:22 +0000
commit09923d5eca02486324b55c9f28562d17418fc577 (patch)
tree3d4e808391655e43a4b489617cbce2db0bcaf422 /packages/SystemUI/src/com/android/keyguard/LockIconView.java
parent51c13dcc6ceea54947703917c718246e9256c510 (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.java96
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 + ")");