diff options
| author | 2021-08-25 15:54:45 -0700 | |
|---|---|---|
| committer | 2021-08-25 16:00:45 -0700 | |
| commit | 3edacaabdc6129d643b0d9fa21661422083b907d (patch) | |
| tree | 72b413dbbcf7cd3417257cb7f1387594b104fdea | |
| parent | 519749f60cb832d1ba33ab053611bcfcaecea210 (diff) | |
Add visual feedback on UDFPS enrollment help.
Fix: 191700407
Test: manual (enroll and verify progress bar turns red when help message is displayed)
Change-Id: Ifda20133f1ee90c9e1612e9066c19efbb6ffc9cd
6 files changed, 76 insertions, 4 deletions
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index bbbaf65f861b..4bbfd8ff97de 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -187,7 +187,8 @@ <!-- UDFPS colors --> <color name="udfps_enroll_icon">#000000</color> <!-- 100% black --> <color name="udfps_moving_target_fill">#cc4285f4</color> <!-- 80% blue --> - <color name="udfps_enroll_progress">#ff669DF6</color> <!-- 100% blue --> + <color name="udfps_enroll_progress">#ff669DF6</color> <!-- blue 400 --> + <color name="udfps_enroll_progress_help">#ffEE675C</color> <!-- red 400 --> <!-- Logout button --> <color name="logout_button_bg_color">#ccffffff</color> diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java index ea69b1d626ae..b5273abd868d 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java @@ -143,6 +143,10 @@ public class UdfpsEnrollDrawable extends UdfpsDrawable { mProgressDrawable.onLastStepAcquired(); } + void onEnrollmentHelp() { + mProgressDrawable.onEnrollmentHelp(); + } + @Override public void draw(@NonNull Canvas canvas) { mProgressDrawable.draw(canvas); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java index 6a918a6c8d39..19148e383005 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java @@ -50,6 +50,7 @@ public class UdfpsEnrollHelper { interface Listener { void onEnrollmentProgress(int remaining, int totalSteps); void onLastStepAcquired(); + void onEnrollmentHelp(); } @NonNull private final Context mContext; @@ -138,7 +139,9 @@ public class UdfpsEnrollHelper { } void onEnrollmentHelp() { - + if (mListener != null) { + mListener.onEnrollmentHelp(); + } } void setListener(Listener listener) { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java index 4195009937c2..9c486b9ac1b4 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java @@ -16,7 +16,9 @@ package com.android.systemui.biometrics; +import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; +import android.annotation.ColorInt; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; @@ -46,6 +48,11 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { @NonNull private final Paint mProgressPaint; @Nullable private ValueAnimator mProgressAnimator; + @Nullable private ValueAnimator mProgressShowingHelpAnimator; + @Nullable private ValueAnimator mProgressHidingHelpAnimator; + @ColorInt private final int mProgressColor; + @ColorInt private final int mProgressHelpColor; + private final int mShortAnimationDuration; private float mProgress; private int mRotation; // After last step, rotate the progress bar once private boolean mLastStepAcquired; @@ -55,6 +62,11 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { mContext = context; mParent = parent; + mShortAnimationDuration = context.getResources() + .getInteger(com.android.internal.R.integer.config_shortAnimTime); + mProgressColor = context.getColor(R.color.udfps_enroll_progress); + mProgressHelpColor = context.getColor(R.color.udfps_enroll_progress_help); + mBackgroundCirclePaint = new Paint(); mBackgroundCirclePaint.setStrokeWidth(Utils.dpToPixels(context, PROGRESS_BAR_THICKNESS_DP)); mBackgroundCirclePaint.setColor(context.getColor(R.color.white_disabled)); @@ -74,7 +86,7 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { // Progress should not be color extracted mProgressPaint = new Paint(); mProgressPaint.setStrokeWidth(Utils.dpToPixels(context, PROGRESS_BAR_THICKNESS_DP)); - mProgressPaint.setColor(context.getColor(R.color.udfps_enroll_progress)); + mProgressPaint.setColor(mProgressColor); mProgressPaint.setAntiAlias(true); mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeCap(Paint.Cap.ROUND); @@ -92,7 +104,9 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { return; } - long animationDuration = 150; + long animationDuration = mShortAnimationDuration; + + hideEnrollmentHelp(); if (progress == 1.f) { animationDuration = 400; @@ -128,6 +142,47 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { mLastStepAcquired = true; } + void onEnrollmentHelp() { + if (mProgressShowingHelpAnimator != null || mProgressAnimator == null) { + return; // already showing or at 0% (no progress bar visible) + } + + if (mProgressHidingHelpAnimator != null && mProgressHidingHelpAnimator.isRunning()) { + mProgressHidingHelpAnimator.cancel(); + } + mProgressHidingHelpAnimator = null; + + mProgressShowingHelpAnimator = getProgressColorAnimator( + mProgressPaint.getColor(), mProgressHelpColor); + mProgressShowingHelpAnimator.start(); + } + + private void hideEnrollmentHelp() { + if (mProgressHidingHelpAnimator != null || mProgressShowingHelpAnimator == null) { + return; // already hidden or help never shown + } + + if (mProgressShowingHelpAnimator != null && mProgressShowingHelpAnimator.isRunning()) { + mProgressShowingHelpAnimator.cancel(); + } + mProgressShowingHelpAnimator = null; + + mProgressHidingHelpAnimator = getProgressColorAnimator( + mProgressPaint.getColor(), mProgressColor); + mProgressHidingHelpAnimator.start(); + } + + private ValueAnimator getProgressColorAnimator(@ColorInt int from, @ColorInt int to) { + final ValueAnimator animator = ValueAnimator.ofObject( + ArgbEvaluator.getInstance(), from, to); + animator.setDuration(mShortAnimationDuration); + animator.addUpdateListener(animation -> { + mProgressPaint.setColor((int) animation.getAnimatedValue()); + mParent.invalidateSelf(); + }); + return animator; + } + @Override public void draw(@NonNull Canvas canvas) { canvas.save(); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java index 2cdf49d6fc3c..56d5b317029f 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java @@ -64,4 +64,8 @@ public class UdfpsEnrollView extends UdfpsAnimationView { void onLastStepAcquired() { mHandler.post(mFingerprintDrawable::onLastStepAcquired); } + + void onEnrollmentHelp() { + mHandler.post(mFingerprintDrawable::onEnrollmentHelp); + } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollViewController.java index 3dab010d917c..61534a5a83d1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollViewController.java @@ -42,6 +42,11 @@ public class UdfpsEnrollViewController extends UdfpsAnimationViewController<Udfp public void onLastStepAcquired() { mView.onLastStepAcquired(); } + + @Override + public void onEnrollmentHelp() { + mView.onEnrollmentHelp(); + } }; protected UdfpsEnrollViewController( |