Remove UDFPS ProgressBar from Settings
Moving it to SystemUI, which handles rotation and position calculation
much easier.
Bug: 177965281
Test: manual
Change-Id: I9b7aadce95aae26330192074295d91283e49a24d
diff --git a/res/layout/udfps_enroll_layout.xml b/res/layout/udfps_enroll_layout.xml
index 0c432d3..8338589 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" />
- <Space
- android:id="@+id/space_below_title"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
<FrameLayout
android:id="@+id/description_area"
android:layout_width="match_parent"
@@ -80,19 +74,4 @@
android:paddingEnd="5dp"
android:paddingStart="5dp"
android:visibility="invisible" />
-
- <Space
- android:id="@+id/space_above_animation"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <com.android.settings.widget.RingProgressBar
- android:id="@+id/fingerprint_progress_bar"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- 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 3015b94..d0c4f28 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -93,7 +93,7 @@
.build();
private boolean mCanAssumeUdfps;
- private ProgressBar mProgressBar;
+ @Nullable private ProgressBar mProgressBar;
private ObjectAnimator mProgressAnim;
private TextView mStartMessage;
private TextView mRepeatMessage;
@@ -162,10 +162,6 @@
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 @@
.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 @@
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 @@
updateDescription();
if (mRestoring) {
startIconAnimation();
- if (mCanAssumeUdfps) {
- mProgressBar.setVisibility(View.VISIBLE);
- }
}
}
@@ -248,8 +244,6 @@
if (mCanAssumeUdfps) {
startEnrollment();
- updateProgress(false /* animate */);
- mProgressBar.setVisibility(View.VISIBLE);
}
mAnimationCancelled = false;
@@ -276,6 +270,14 @@
}
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 @@
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 19079d8..7923d27 100644
--- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java
+++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollLayout.java
@@ -31,45 +31,12 @@
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));
}
}