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));
     }
 }