Extend SfpsEnrollmentFeature for text updating when progress changes

Bug: 341693248
Test: atest SfpsEnrollmentFeatureImplTest
Change-Id: I63576f129f4453d4db088adfaa472df797823514
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 39b1313..795f999 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -264,7 +264,7 @@
 
         mIsSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
         if (mCanAssumeUdfps || mCanAssumeSfps) {
-            updateTitleAndDescription();
+            updateTitleAndDescription(true);
         } else {
             setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
         }
@@ -387,7 +387,7 @@
     protected void onStart() {
         super.onStart();
         updateProgress(false /* animate */);
-        updateTitleAndDescription();
+        updateTitleAndDescription(true);
         if (mRestoring) {
             startIconAnimation();
         }
@@ -491,12 +491,14 @@
         return new Intent(this, FingerprintEnrollFinish.class);
     }
 
-    private void updateTitleAndDescription() {
+    private void updateTitleAndDescription(boolean force) {
         if (mCanAssumeUdfps) {
             updateTitleAndDescriptionForUdfps();
             return;
         } else if (mCanAssumeSfps) {
-            updateTitleAndDescriptionForSfps();
+            if (force || mSfpsEnrollmentFeature.shouldUpdateTitleAndDescription()) {
+                updateTitleAndDescriptionForSfps();
+            }
             return;
         }
 
@@ -814,12 +816,15 @@
     public void onEnrollmentProgressChange(int steps, int remaining) {
         updateProgress(true /* animate */);
         final int percent = (int) (((float) (steps - remaining) / (float) steps) * 100);
-        if (mCanAssumeSfps && mIsAccessibilityEnabled) {
-            CharSequence announcement = getString(
-                    R.string.security_settings_sfps_enroll_progress_a11y_message, percent);
-            announceEnrollmentProgress(announcement);
+        if (mCanAssumeSfps) {
+            mSfpsEnrollmentFeature.handleOnEnrollmentProgressChange(steps, remaining);
+            if (mIsAccessibilityEnabled) {
+                CharSequence announcement = getString(
+                        R.string.security_settings_sfps_enroll_progress_a11y_message, percent);
+                announceEnrollmentProgress(announcement);
+            }
         }
-        updateTitleAndDescription();
+        updateTitleAndDescription(false);
         animateFlash();
         if (mCanAssumeUdfps) {
             if (mIsAccessibilityEnabled) {
@@ -850,6 +855,9 @@
         if (mUdfpsEnrollHelper != null) {
             mUdfpsEnrollHelper.onAcquired(isAcquiredGood);
         }
+        if (mCanAssumeSfps) {
+            mSfpsEnrollmentFeature.handleOnAcquired(isAcquiredGood);
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/biometrics/fingerprint/MessageDisplayController.java b/src/com/android/settings/biometrics/fingerprint/MessageDisplayController.java
index 4dc75b9..639bb3d 100644
--- a/src/com/android/settings/biometrics/fingerprint/MessageDisplayController.java
+++ b/src/com/android/settings/biometrics/fingerprint/MessageDisplayController.java
@@ -177,6 +177,11 @@
         mEnrollmentCallback.onEnrollmentError(errMsgId, errString);
     }
 
+    @Override
+    public void onAcquired(boolean isAcquiredGood) {
+        mEnrollmentCallback.onAcquired(isAcquiredGood);
+    }
+
     private Message getMessageToDisplay(long timeStamp) {
         ProgressMessage progressMessageToDisplay = getProgressMessageToDisplay(timeStamp);
         if (mMustDisplayProgress) {
diff --git a/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeature.java b/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeature.java
index f99d394..bdf9530 100644
--- a/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeature.java
+++ b/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeature.java
@@ -93,4 +93,25 @@
      * @param lottieView the view related to the lottie
      */
     default void handleOnEnrollmentLottieComposition(LottieAnimationView lottieView) {}
+
+    /**
+     * Indicates if the title and description should be updated.
+     * @return true to update the title and description; false otherwise.
+     */
+    default boolean shouldUpdateTitleAndDescription() {
+        return true;
+    }
+
+    /**
+     * Notifies an acquisition happens.
+     * @param isAcquiredGood isAcquiredGood
+     */
+    default void handleOnAcquired(boolean isAcquiredGood) {}
+
+    /**
+     * Notifies an enrollment progress changes event.
+     * @param steps steps
+     * @param remaining remaining
+     */
+    default void handleOnEnrollmentProgressChange(int steps, int remaining) {}
 }