Merge "Update FingerprintEnrollEnrolling for UDFPS"
diff --git a/res/layout/udfps_enroll_layout.xml b/res/layout/udfps_enroll_layout.xml
index 51c788b..0c432d3 100644
--- a/res/layout/udfps_enroll_layout.xml
+++ b/res/layout/udfps_enroll_layout.xml
@@ -87,10 +87,12 @@
android:layout_height="0dp"
android:layout_weight="1" />
- <include
- layout="@layout/fingerprint_enroll_enrolling_content"
+ <com.android.settings.widget.RingProgressBar
+ android:id="@+id/fingerprint_progress_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_gravity="center" />
+ android:minHeight="@dimen/fingerprint_progress_bar_min_size"
+ android:progress="0"
+ android:layout_gravity="center"/>
</com.android.settings.biometrics.fingerprint.UdfpsEnrollLayout>
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index b33113b..3015b94 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -18,6 +18,7 @@
import android.animation.Animator;
import android.animation.ObjectAnimator;
+import android.annotation.Nullable;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
@@ -102,8 +103,8 @@
private Interpolator mFastOutLinearInInterpolator;
private int mIconTouchCount;
private boolean mAnimationCancelled;
- private AnimatedVectorDrawable mIconAnimationDrawable;
- private AnimatedVectorDrawable mIconBackgroundBlinksDrawable;
+ @Nullable private AnimatedVectorDrawable mIconAnimationDrawable;
+ @Nullable private AnimatedVectorDrawable mIconBackgroundBlinksDrawable;
private boolean mRestoring;
private Vibrator mVibrator;
@@ -181,34 +182,34 @@
);
final LayerDrawable fingerprintDrawable = (LayerDrawable) mProgressBar.getBackground();
- mIconAnimationDrawable = (AnimatedVectorDrawable)
- fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_animation);
- mIconBackgroundBlinksDrawable = (AnimatedVectorDrawable)
- fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_background);
- mIconAnimationDrawable.registerAnimationCallback(mIconAnimationCallback);
+ if (fingerprintDrawable != null) {
+ mIconAnimationDrawable = (AnimatedVectorDrawable)
+ fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_animation);
+ mIconBackgroundBlinksDrawable = (AnimatedVectorDrawable)
+ fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_background);
+ mIconAnimationDrawable.registerAnimationCallback(mIconAnimationCallback);
+ }
+
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_slow_in);
mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.linear_out_slow_in);
mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_linear_in);
- mProgressBar.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
- mIconTouchCount++;
- if (mIconTouchCount == ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN) {
- showIconTouchDialog();
- } else {
- mProgressBar.postDelayed(mShowDialogRunnable,
- ICON_TOUCH_DURATION_UNTIL_DIALOG_SHOWN);
- }
- } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL
- || event.getActionMasked() == MotionEvent.ACTION_UP) {
- mProgressBar.removeCallbacks(mShowDialogRunnable);
+ mProgressBar.setOnTouchListener((v, event) -> {
+ if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
+ mIconTouchCount++;
+ if (mIconTouchCount == ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN) {
+ showIconTouchDialog();
+ } else {
+ mProgressBar.postDelayed(mShowDialogRunnable,
+ ICON_TOUCH_DURATION_UNTIL_DIALOG_SHOWN);
}
- return true;
+ } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL
+ || event.getActionMasked() == MotionEvent.ACTION_UP) {
+ mProgressBar.removeCallbacks(mShowDialogRunnable);
}
+ return true;
});
mRestoring = savedInstanceState != null;
}
@@ -220,7 +221,12 @@
@Override
protected boolean shouldStartAutomatically() {
- return !mCanAssumeUdfps;
+ if (mCanAssumeUdfps) {
+ // Continue enrollment if restoring (e.g. configuration changed). Otherwise, wait
+ // for the entry animation to complete before starting.
+ return mRestoring;
+ }
+ return true;
}
@Override
@@ -230,6 +236,9 @@
updateDescription();
if (mRestoring) {
startIconAnimation();
+ if (mCanAssumeUdfps) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
}
}
@@ -239,6 +248,7 @@
if (mCanAssumeUdfps) {
startEnrollment();
+ updateProgress(false /* animate */);
mProgressBar.setVisibility(View.VISIBLE);
}
@@ -247,7 +257,9 @@
}
private void startIconAnimation() {
- mIconAnimationDrawable.start();
+ if (mIconAnimationDrawable != null) {
+ mIconAnimationDrawable.start();
+ }
}
private void stopIconAnimation() {
@@ -277,7 +289,9 @@
}
private void animateFlash() {
- mIconBackgroundBlinksDrawable.start();
+ if (mIconBackgroundBlinksDrawable != null) {
+ mIconBackgroundBlinksDrawable.start();
+ }
}
protected Intent getFinishIntent() {
diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java
index ca27e84..19079d8 100644
--- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java
+++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java
@@ -17,11 +17,9 @@
package com.android.settings.biometrics.fingerprint;
import android.content.Context;
-import android.graphics.Rect;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.View;
import android.view.WindowInsets;
import android.view.WindowManager;
@@ -34,11 +32,17 @@
private static final String TAG = "UdfpsEnrollLayout";
private final FingerprintSensorPropertiesInternal mSensorProps;
+ private final int mSensorDiameter;
+ private final int mAnimationDiameter;
public UdfpsEnrollLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mSensorProps = context.getSystemService(FingerprintManager.class)
.getSensorPropertiesInternal().get(0);
+ mSensorDiameter = mSensorProps.sensorRadius * 2;
+ // Multiply the progress bar size slightly so that the progress bar is outside the UDFPS
+ // affordance, which is shown by SystemUI
+ mAnimationDiameter = (int) (mSensorDiameter * 2);
}
@Override
@@ -55,22 +59,17 @@
// The translationY is the amount of extra height that should be added to the spacer
// above the animation
final int spaceHeight = mSensorProps.sensorLocationY - statusbarHeight
- - mSensorProps.sensorRadius - animation.getTop();
+ - (mAnimationDiameter / 2) - animation.getTop();
animation.setTranslationY(spaceHeight);
}
-
-
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final View animation = findViewById(R.id.fingerprint_progress_bar);
- final int sensorDiameter = mSensorProps.sensorRadius * 2;
- // Multiply it slightly so that the progress bar is outside the UDFPS affordance, and that
- // the animation is within the UDFPS affordance.
- final int animationDiameter = (int) (sensorDiameter * 1);
- animation.measure(MeasureSpec.makeMeasureSpec(animationDiameter, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(animationDiameter, MeasureSpec.EXACTLY));
+
+ animation.measure(MeasureSpec.makeMeasureSpec(mAnimationDiameter, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mAnimationDiameter, MeasureSpec.EXACTLY));
}
}