diff --git a/res/layout/udfps_enroll_layout.xml b/res/layout/udfps_enroll_layout.xml index 0c432d3ed4a..833858911d2 100644 --- a/res/layout/udfps_enroll_layout.xml +++ b/res/layout/udfps_enroll_layout.xml @@ -40,12 +40,6 @@ android:layout_marginEnd="0dp" android:layout_marginStart="0dp" /> - - - - - - - diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 3015b947c08..d0c4f2853be 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -93,7 +93,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { .build(); private boolean mCanAssumeUdfps; - private ProgressBar mProgressBar; + @Nullable private ProgressBar mProgressBar; private ObjectAnimator mProgressAnim; private TextView mStartMessage; private TextView mRepeatMessage; @@ -162,10 +162,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { mProgressBar = findViewById(R.id.fingerprint_progress_bar); mVibrator = getSystemService(Vibrator.class); - if (mCanAssumeUdfps) { - mProgressBar.setVisibility(View.INVISIBLE); - } - if (getLayout().shouldApplyPartnerHeavyThemeResource()) { DescriptionStyler.applyPartnerCustomizationHeavyStyle(mRepeatMessage); } else if (getLayout().shouldApplyPartnerResource()) { @@ -181,7 +177,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { .build() ); - final LayerDrawable fingerprintDrawable = (LayerDrawable) mProgressBar.getBackground(); + final LayerDrawable fingerprintDrawable = mProgressBar != null + ? (LayerDrawable) mProgressBar.getBackground() : null; if (fingerprintDrawable != null) { mIconAnimationDrawable = (AnimatedVectorDrawable) fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_animation); @@ -196,21 +193,23 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { this, android.R.interpolator.linear_out_slow_in); mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator( this, android.R.interpolator.fast_out_linear_in); - 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); + if (mProgressBar != null) { + 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); + } + } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL + || event.getActionMasked() == MotionEvent.ACTION_UP) { + mProgressBar.removeCallbacks(mShowDialogRunnable); } - } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL - || event.getActionMasked() == MotionEvent.ACTION_UP) { - mProgressBar.removeCallbacks(mShowDialogRunnable); - } - return true; - }); + return true; + }); + } mRestoring = savedInstanceState != null; } @@ -236,9 +235,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { updateDescription(); if (mRestoring) { startIconAnimation(); - if (mCanAssumeUdfps) { - mProgressBar.setVisibility(View.VISIBLE); - } } } @@ -248,8 +244,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { if (mCanAssumeUdfps) { startEnrollment(); - updateProgress(false /* animate */); - mProgressBar.setVisibility(View.VISIBLE); } mAnimationCancelled = false; @@ -276,6 +270,14 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } private void animateProgress(int progress) { + if (mCanAssumeUdfps) { + // UDFPS animations are owned by SystemUI + if (progress >= PROGRESS_BAR_MAX) { + // Wait for any animations in SysUI to finish, then proceed to next page + getMainThreadHandler().postDelayed(mDelayedFinishRunnable, FINISH_DELAY); + } + return; + } if (mProgressAnim != null) { mProgressAnim.cancel(); } @@ -356,7 +358,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { if (animate) { animateProgress(progress); } else { - mProgressBar.setProgress(progress); + if (mProgressBar != null) { + mProgressBar.setProgress(progress); + } if (progress >= PROGRESS_BAR_MAX) { mDelayedFinishRunnable.run(); } diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java index 19079d8dfa4..7923d27a01d 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java @@ -31,45 +31,12 @@ public class UdfpsEnrollLayout extends LinearLayout { 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 - public void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - - final View animation = findViewById(R.id.fingerprint_progress_bar); - final WindowManager wm = getContext().getSystemService(WindowManager.class); - final int statusbarHeight = Math.abs(wm.getCurrentWindowMetrics().getWindowInsets() - .getInsets(WindowInsets.Type.statusBars()).toRect().height()); - - // Calculate the amount of translation required. This is just re-arranged from - // animation.setY(mSensorProps.sensorLocationY-statusbarHeight-mSensorProps.sensorRadius) - // The translationY is the amount of extra height that should be added to the spacer - // above the animation - final int spaceHeight = mSensorProps.sensorLocationY - statusbarHeight - - (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); - - animation.measure(MeasureSpec.makeMeasureSpec(mAnimationDiameter, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(mAnimationDiameter, MeasureSpec.EXACTLY)); } }