From 4463925201f4fa5617205c7432f0e4d241081cda Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Thu, 3 Nov 2022 08:47:54 +0000 Subject: [PATCH] Update the fingerprint enrollment color when device dark/light theme color changes To change the fingerprint enrollment page color accordingly when device dark/light theme color changes Bug: 250037527 Test: manual Test: atest SystemUITests Change-Id: I4e85bfca6cc7e0679571f0afe006fb52c145e26e (cherry picked from commit 1478326b6421794840bfbaf542b24d6face3fec5) --- packages/SystemUI/res/values-night/colors.xml | 12 +++-- packages/SystemUI/res/values/attrs.xml | 10 ++++ packages/SystemUI/res/values/colors.xml | 10 ++-- packages/SystemUI/res/values/styles.xml | 14 +++++- .../biometrics/UdfpsEnrollDrawable.java | 26 ++++++++-- .../UdfpsEnrollProgressBarDrawable.java | 39 ++++++++++++--- .../systemui/biometrics/UdfpsEnrollView.java | 4 +- .../biometrics/UdfpsEnrollViewTest.java | 50 +++++++++++++++++++ 8 files changed, 143 insertions(+), 22 deletions(-) create mode 100644 packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsEnrollViewTest.java diff --git a/packages/SystemUI/res/values-night/colors.xml b/packages/SystemUI/res/values-night/colors.xml index 16152f80308af..08e1bf22089e4 100644 --- a/packages/SystemUI/res/values-night/colors.xml +++ b/packages/SystemUI/res/values-night/colors.xml @@ -78,9 +78,6 @@ @color/material_dynamic_primary70 #fff28b82 - - #7DA7F1 - #FF41Af6A #5195EA #E25142 @@ -103,4 +100,13 @@ @*android:color/primary_text_default_material_dark @color/material_dynamic_secondary20 + + + #7DA7F1 + #475670 + + #80475670 + #7DA7F1 + #607DA7F1 + #FFEE675C diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 44ba3f6e6d86c..5b6c9d3643e01 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -209,5 +209,15 @@ + + + + + + + + + + diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 6b4bea190977f..92ec85519c9e3 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -134,12 +134,12 @@ #ffd93025 - #7DA7F1 - #475670 + #699FF3 + #C2D7F7 - #80475670 - #7DA7F1 - #607DA7F1 + #80C2D7F7 + #699FF3 + #70699FF3 #FFEE675C diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index fe4f639c307ea..0c91ced7ab4d1 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -314,6 +314,10 @@ false + + + @style/BiometricsEnrollStyle + - + + diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java index 1e359584ceec5..3e1c4e543779e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollDrawable.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PointF; @@ -28,6 +29,7 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; +import android.util.AttributeSet; import android.view.animation.AccelerateDecelerateInterpolator; import androidx.annotation.NonNull; @@ -68,25 +70,29 @@ public class UdfpsEnrollDrawable extends UdfpsDrawable { private boolean mShouldShowTipHint = false; private boolean mShouldShowEdgeHint = false; - UdfpsEnrollDrawable(@NonNull Context context) { + private int mEnrollIcon; + private int mMovingTargetFill; + + UdfpsEnrollDrawable(@NonNull Context context, @Nullable AttributeSet attrs) { super(context); + loadResources(context, attrs); mSensorOutlinePaint = new Paint(0 /* flags */); mSensorOutlinePaint.setAntiAlias(true); - mSensorOutlinePaint.setColor(context.getColor(R.color.udfps_moving_target_fill)); + mSensorOutlinePaint.setColor(mMovingTargetFill); mSensorOutlinePaint.setStyle(Paint.Style.FILL); mBlueFill = new Paint(0 /* flags */); mBlueFill.setAntiAlias(true); - mBlueFill.setColor(context.getColor(R.color.udfps_moving_target_fill)); + mBlueFill.setColor(mMovingTargetFill); mBlueFill.setStyle(Paint.Style.FILL); mMovingTargetFpIcon = context.getResources() .getDrawable(R.drawable.ic_kg_fingerprint, null); - mMovingTargetFpIcon.setTint(context.getColor(R.color.udfps_enroll_icon)); + mMovingTargetFpIcon.setTint(mEnrollIcon); mMovingTargetFpIcon.mutate(); - getFingerprintDrawable().setTint(context.getColor(R.color.udfps_enroll_icon)); + getFingerprintDrawable().setTint(mEnrollIcon); mTargetAnimListener = new Animator.AnimatorListener() { @Override @@ -105,6 +111,16 @@ public class UdfpsEnrollDrawable extends UdfpsDrawable { }; } + void loadResources(Context context, @Nullable AttributeSet attrs) { + final TypedArray ta = context.obtainStyledAttributes(attrs, + R.styleable.BiometricsEnrollView, R.attr.biometricsEnrollStyle, + R.style.BiometricsEnrollStyle); + mEnrollIcon = ta.getColor(R.styleable.BiometricsEnrollView_biometricsEnrollIcon, 0); + mMovingTargetFill = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsMovingTargetFill, 0); + ta.recycle(); + } + void setEnrollHelper(@NonNull UdfpsEnrollHelper helper) { mEnrollHelper = helper; } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java index af7e0b6244dfa..66a84245c16ca 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollProgressBarDrawable.java @@ -18,6 +18,7 @@ package com.android.systemui.biometrics; import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; @@ -26,6 +27,7 @@ import android.os.Process; import android.os.VibrationAttributes; import android.os.VibrationEffect; import android.os.Vibrator; +import android.util.AttributeSet; import android.view.accessibility.AccessibilityManager; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; @@ -93,17 +95,25 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { @Nullable private ValueAnimator mCheckmarkAnimator; @NonNull private final ValueAnimator.AnimatorUpdateListener mCheckmarkUpdateListener; - public UdfpsEnrollProgressBarDrawable(@NonNull Context context) { + private int mMovingTargetFill; + private int mMovingTargetFillError; + private int mEnrollProgress; + private int mEnrollProgressHelp; + private int mEnrollProgressHelpWithTalkback; + + public UdfpsEnrollProgressBarDrawable(@NonNull Context context, @Nullable AttributeSet attrs) { mContext = context; + + loadResources(context, attrs); mStrokeWidthPx = Utils.dpToPixels(context, STROKE_WIDTH_DP); - mProgressColor = context.getColor(R.color.udfps_enroll_progress); + mProgressColor = mEnrollProgress; final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); mIsAccessibilityEnabled = am.isTouchExplorationEnabled(); - mOnFirstBucketFailedColor = context.getColor(R.color.udfps_moving_target_fill_error); + mOnFirstBucketFailedColor = mMovingTargetFillError; if (!mIsAccessibilityEnabled) { - mHelpColor = context.getColor(R.color.udfps_enroll_progress_help); + mHelpColor = mEnrollProgressHelp; } else { - mHelpColor = context.getColor(R.color.udfps_enroll_progress_help_with_talkback); + mHelpColor = mEnrollProgressHelpWithTalkback; } mCheckmarkDrawable = context.getDrawable(R.drawable.udfps_enroll_checkmark); mCheckmarkDrawable.mutate(); @@ -111,7 +121,7 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { mBackgroundPaint = new Paint(); mBackgroundPaint.setStrokeWidth(mStrokeWidthPx); - mBackgroundPaint.setColor(context.getColor(R.color.udfps_moving_target_fill)); + mBackgroundPaint.setColor(mMovingTargetFill); mBackgroundPaint.setAntiAlias(true); mBackgroundPaint.setStyle(Paint.Style.STROKE); mBackgroundPaint.setStrokeCap(Paint.Cap.ROUND); @@ -147,6 +157,23 @@ public class UdfpsEnrollProgressBarDrawable extends Drawable { }; } + void loadResources(Context context, @Nullable AttributeSet attrs) { + final TypedArray ta = context.obtainStyledAttributes(attrs, + R.styleable.BiometricsEnrollView, R.attr.biometricsEnrollStyle, + R.style.BiometricsEnrollStyle); + mMovingTargetFill = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsMovingTargetFill, 0); + mMovingTargetFillError = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsMovingTargetFillError, 0); + mEnrollProgress = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsEnrollProgress, 0); + mEnrollProgressHelp = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsEnrollProgressHelp, 0); + mEnrollProgressHelpWithTalkback = ta.getColor( + R.styleable.BiometricsEnrollView_biometricsEnrollProgressHelpWithTalkback, 0); + ta.recycle(); + } + void onEnrollmentProgress(int remaining, int totalSteps) { mAfterFirstTouch = true; updateState(remaining, totalSteps, false /* showingHelp */); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java index 87be42c3426e5..1cc4141508352 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollView.java @@ -47,8 +47,8 @@ public class UdfpsEnrollView extends UdfpsAnimationView { public UdfpsEnrollView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); - mFingerprintDrawable = new UdfpsEnrollDrawable(mContext); - mFingerprintProgressDrawable = new UdfpsEnrollProgressBarDrawable(context); + mFingerprintDrawable = new UdfpsEnrollDrawable(mContext, attrs); + mFingerprintProgressDrawable = new UdfpsEnrollProgressBarDrawable(context, attrs); mHandler = new Handler(Looper.getMainLooper()); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsEnrollViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsEnrollViewTest.java new file mode 100644 index 0000000000000..60a02582269c0 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsEnrollViewTest.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.biometrics; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.res.Configuration; +import android.graphics.Color; +import android.testing.AndroidTestingRunner; + +import androidx.test.filters.SmallTest; + +import com.android.systemui.R; +import com.android.systemui.SysuiTestCase; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@SmallTest +@RunWith(AndroidTestingRunner.class) +public class UdfpsEnrollViewTest extends SysuiTestCase { + + private static String ENROLL_PROGRESS_COLOR_LIGHT = "#699FF3"; + private static String ENROLL_PROGRESS_COLOR_DARK = "#7DA7F1"; + + @Test + public void fingerprintUdfpsEnroll_usesCorrectThemeCheckmarkFillColor() { + final Configuration config = mContext.getResources().getConfiguration(); + final boolean isDarkThemeOn = (config.uiMode & Configuration.UI_MODE_NIGHT_MASK) + == Configuration.UI_MODE_NIGHT_YES; + final int currentColor = mContext.getColor(R.color.udfps_enroll_progress); + + assertThat(currentColor).isEqualTo(Color.parseColor(isDarkThemeOn + ? ENROLL_PROGRESS_COLOR_DARK : ENROLL_PROGRESS_COLOR_LIGHT)); + } +}