[BiometricsV2] Refine fingerprint activities

Seperate FingerprintEnrollmentActivity to another InternalActivity and
SetupActivity. InternalActivity is used for FingerprintSettings.
SetupActivity is used for setupwizard flow.

Bug: 284248001
Test: atest FingerprintEnrollmentActivityTest
Test: atest for biometrics/biometrics2 in unit tests
Test: settingRoboTest for biometrics
Change-Id: I9fb5dc34300060b9ccf857a3335b81a5d4bf5c7b
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6fcaf71..d1af75d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2529,8 +2529,17 @@
 
         <activity android:name=".biometrics2.ui.view.FingerprintEnrollmentActivity"
             android:exported="true"
+            android:theme="@style/GlifTheme.Light" />
+
+        <activity android:name=".biometrics2.ui.view.FingerprintEnrollmentActivity$InternalActivity"
+            android:exported="false"
+            android:theme="@style/GlifTheme.Light"
+            android:taskAffinity="com.android.settings.root" />
+
+        <activity android:name=".biometrics2.ui.view.FingerprintEnrollmentActivity$SetupActivity"
+            android:exported="true"
             android:permission="android.permission.MANAGE_FINGERPRINT"
-            android:theme="@style/GlifTheme.Light"/>
+            android:theme="@style/GlifTheme.Light" />
 
         <activity android:name=".biometrics.fingerprint.FingerprintEnrollIntroductionInternal"
                   android:exported="false"
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index 993787b..e0b38dd 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -251,6 +251,7 @@
             addActivityFilter(activityFilters, searchIntent);
         }
         addActivityFilter(activityFilters, FingerprintEnrollmentActivity.class);
+        addActivityFilter(activityFilters, FingerprintEnrollmentActivity.InternalActivity.class);
         addActivityFilter(activityFilters, FingerprintEnrollIntroduction.class);
         addActivityFilter(activityFilters, FingerprintEnrollIntroductionInternal.class);
         addActivityFilter(activityFilters, FingerprintEnrollEnrolling.class);
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index 3356dfa..5cd7405 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.biometrics;
 
+import static android.util.FeatureFlagUtils.SETTINGS_BIOMETRICS2_ENROLLMENT;
+
 import android.annotation.IntDef;
 import android.app.Activity;
 import android.app.PendingIntent;
@@ -249,20 +251,22 @@
      */
     public static Intent getFingerprintFindSensorIntent(@NonNull Context context,
             @NonNull Intent activityIntent) {
-        if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_BIOMETRICS2_ENROLLMENT)) {
-            final Intent intent = new Intent(context, FingerprintEnrollmentActivity.class);
+        final boolean isSuw =  WizardManagerHelper.isAnySetupWizard(activityIntent);
+        final Intent intent;
+        if (FeatureFlagUtils.isEnabled(context, SETTINGS_BIOMETRICS2_ENROLLMENT)) {
+            intent = new Intent(context, isSuw
+                    ? FingerprintEnrollmentActivity.SetupActivity.class
+                    : FingerprintEnrollmentActivity.class);
             intent.putExtra(BiometricEnrollActivity.EXTRA_SKIP_INTRO, true);
-            if (WizardManagerHelper.isAnySetupWizard(activityIntent)) {
-                SetupWizardUtils.copySetupExtras(activityIntent, intent);
-            }
-            return intent;
-        } else if (WizardManagerHelper.isAnySetupWizard(activityIntent)) {
-            Intent intent = new Intent(context, SetupFingerprintEnrollFindSensor.class);
-            SetupWizardUtils.copySetupExtras(activityIntent, intent);
-            return intent;
         } else {
-            return new Intent(context, FingerprintEnrollFindSensor.class);
+            intent = new Intent(context, isSuw
+                    ? SetupFingerprintEnrollFindSensor.class
+                    : FingerprintEnrollFindSensor.class);
         }
+        if (isSuw) {
+            SetupWizardUtils.copySetupExtras(activityIntent, intent);
+        }
+        return intent;
     }
 
     /**
@@ -272,19 +276,21 @@
      */
     public static Intent getFingerprintIntroIntent(@NonNull Context context,
             @NonNull Intent activityIntent) {
-        if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_BIOMETRICS2_ENROLLMENT)) {
-            final Intent intent = new Intent(context, FingerprintEnrollmentActivity.class);
-            if (WizardManagerHelper.isAnySetupWizard(activityIntent)) {
-                WizardManagerHelper.copyWizardManagerExtras(activityIntent, intent);
-            }
-            return intent;
-        } else if (WizardManagerHelper.isAnySetupWizard(activityIntent)) {
-            Intent intent = new Intent(context, SetupFingerprintEnrollIntroduction.class);
-            WizardManagerHelper.copyWizardManagerExtras(activityIntent, intent);
-            return intent;
+        final boolean isSuw = WizardManagerHelper.isAnySetupWizard(activityIntent);
+        final Intent intent;
+        if (FeatureFlagUtils.isEnabled(context, SETTINGS_BIOMETRICS2_ENROLLMENT)) {
+            intent = new Intent(context, isSuw
+                    ? FingerprintEnrollmentActivity.SetupActivity.class
+                    : FingerprintEnrollmentActivity.class);
         } else {
-            return new Intent(context, FingerprintEnrollIntroduction.class);
+            intent = new Intent(context, isSuw
+                    ? SetupFingerprintEnrollIntroduction.class
+                    : FingerprintEnrollIntroduction.class);
         }
+        if (isSuw) {
+            WizardManagerHelper.copyWizardManagerExtras(activityIntent, intent);
+        }
+        return intent;
     }
 
     /**
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index be090e3..9c42fc8 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -751,7 +751,7 @@
                 if (FeatureFlagUtils.isEnabled(getContext(),
                         FeatureFlagUtils.SETTINGS_BIOMETRICS2_ENROLLMENT)) {
                     intent.setClassName(SETTINGS_PACKAGE_NAME,
-                            FingerprintEnrollmentActivity.class.getName());
+                            FingerprintEnrollmentActivity.InternalActivity.class.getName());
                     intent.putExtra(EnrollmentRequest.EXTRA_SKIP_FIND_SENSOR, true);
                 } else {
                     intent.setClassName(SETTINGS_PACKAGE_NAME,
@@ -1025,7 +1025,7 @@
             intent.setClassName(SETTINGS_PACKAGE_NAME,
                     FeatureFlagUtils.isEnabled(getActivity(),
                             FeatureFlagUtils.SETTINGS_BIOMETRICS2_ENROLLMENT)
-                            ? FingerprintEnrollmentActivity.class.getName()
+                            ? FingerprintEnrollmentActivity.InternalActivity.class.getName()
                             : FingerprintEnrollIntroductionInternal.class.getName()
             );
 
diff --git a/src/com/android/settings/biometrics2/ui/model/EnrollmentRequest.java b/src/com/android/settings/biometrics2/ui/model/EnrollmentRequest.java
index 4849b5e..0c3f08d 100644
--- a/src/com/android/settings/biometrics2/ui/model/EnrollmentRequest.java
+++ b/src/com/android/settings/biometrics2/ui/model/EnrollmentRequest.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.biometrics2.ui.model;
 
-import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY;
-
 import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW;
 
 import android.content.Context;
@@ -47,19 +45,20 @@
 
     private final boolean mIsSuw;
     private final boolean mIsAfterSuwOrSuwSuggestedAction;
-    private final boolean mIsFromSettingsSummery;
     private final boolean mIsSkipIntro;
     private final boolean mIsSkipFindSensor;
     private final int mTheme;
     private final Bundle mSuwExtras;
 
-    public EnrollmentRequest(@NonNull Intent intent, @NonNull Context context) {
-        mIsSuw = WizardManagerHelper.isAnySetupWizard(intent);
-        mIsAfterSuwOrSuwSuggestedAction = WizardManagerHelper.isDeferredSetupWizard(intent)
+    public EnrollmentRequest(@NonNull Intent intent, @NonNull Context context,
+                             boolean isSetupActivity) {
+        // Only allow mIsSuw to be enabled through SetupActivity for security reason
+        mIsSuw = isSetupActivity && WizardManagerHelper.isAnySetupWizard(intent);
+        mIsAfterSuwOrSuwSuggestedAction = isSetupActivity
+                && (WizardManagerHelper.isDeferredSetupWizard(intent)
                 || WizardManagerHelper.isPortalSetupWizard(intent)
-                || intent.getBooleanExtra(EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW, false);
+                || intent.getBooleanExtra(EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW, false));
         mSuwExtras = getSuwExtras(mIsSuw, intent);
-        mIsFromSettingsSummery = intent.getBooleanExtra(EXTRA_FROM_SETTINGS_SUMMARY, false);
         mIsSkipIntro = intent.getBooleanExtra(BiometricEnrollActivity.EXTRA_SKIP_INTRO, false);
         mIsSkipFindSensor = intent.getBooleanExtra(EXTRA_SKIP_FIND_SENSOR, false);
         mTheme = SetupWizardUtils.getTheme(context, intent);
@@ -73,10 +72,6 @@
         return mIsAfterSuwOrSuwSuggestedAction;
     }
 
-    public boolean isFromSettingsSummery() {
-        return mIsFromSettingsSummery;
-    }
-
     public boolean isSkipIntro() {
         return mIsSkipIntro;
     }
@@ -101,7 +96,6 @@
     public String toString() {
         return getClass().getSimpleName() + ":{isSuw:" + mIsSuw
                 + ", isAfterSuwOrSuwSuggestedAction:" + mIsAfterSuwOrSuwSuggestedAction
-                + ", isFromSettingsSummery:" + mIsFromSettingsSummery
                 + "}";
     }
 
diff --git a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivity.java b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivity.java
index 1ed164a..76c9e95 100644
--- a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivity.java
+++ b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivity.java
@@ -97,6 +97,16 @@
  */
 public class FingerprintEnrollmentActivity extends FragmentActivity {
 
+    /**
+     * Setupwizard activity
+     */
+    public static class SetupActivity extends FingerprintEnrollmentActivity {}
+
+    /**
+     * Internal activity for FingerprintSettings
+     */
+    public static class InternalActivity extends FingerprintEnrollmentActivity {}
+
     private static final boolean DEBUG = false;
     private static final String TAG = "FingerprintEnrollmentActivity";
 
@@ -583,8 +593,8 @@
                 .getBiometricsRepositoryProvider().getFingerprintRepository(application);
         ret.set(CHALLENGE_GENERATOR_KEY, new FingerprintChallengeGenerator(repository));
 
-        ret.set(ENROLLMENT_REQUEST_KEY, new EnrollmentRequest(getIntent(),
-                getApplicationContext()));
+        ret.set(ENROLLMENT_REQUEST_KEY, new EnrollmentRequest(getIntent(), getApplicationContext(),
+                this instanceof SetupActivity));
 
         Bundle extras = getIntent().getExtras();
         final CredentialModel credentialModel = new CredentialModel(extras,
diff --git a/tests/uitests/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivityTest.java b/tests/uitests/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivityTest.java
index 3cd0009..0a84c15 100644
--- a/tests/uitests/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivityTest.java
+++ b/tests/uitests/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollmentActivityTest.java
@@ -32,6 +32,7 @@
 import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.UiObject2;
 import android.support.test.uiautomator.Until;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.test.InstrumentationRegistry;
@@ -47,18 +48,21 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.IOException;
 import java.util.List;
 
 @RunWith(AndroidJUnit4.class)
 public class FingerprintEnrollmentActivityTest {
 
+    private static final String TAG = "FingerprintEnrollmentActivityTest";
+
     private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
     private static final String ACTIVITY_CLASS_NAME =
             "com.android.settings.biometrics2.ui.view.FingerprintEnrollmentActivity";
+    private static final String SUW_ACTIVITY_CLASS_NAME = ACTIVITY_CLASS_NAME + "$SetupActivity";
     private static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow";
     private static final String EXTRA_SKIP_INTRO = "skip_intro";
     private static final String EXTRA_SKIP_FIND_SENSOR = "skip_find_sensor";
-    private static final String EXTRA_FROM_SETTINGS_SUMMARY = "from_settings_summary";
     private static final String EXTRA_PAGE_TRANSITION_TYPE = "page_transition_type";
     private static final String EXTRA_KEY_GK_PW_HANDLE = "gk_pw_handle";
     private static final String TEST_PIN = "1234";
@@ -83,7 +87,6 @@
     @Before
     public void setUp() throws InterruptedException {
         mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-
         mContext = InstrumentationRegistry.getContext();
 
         // Stop every test if it is not a fingerprint device
@@ -121,6 +124,13 @@
         assertThat(mFingerprintPropCallbackLaunched).isTrue();
 
         mDevice.pressHome();
+
+        // Stop settings before performing test
+        try {
+            mDevice.executeShellCommand("am force-stop " + SETTINGS_PACKAGE_NAME);
+        } catch (IOException e) {
+            Log.e(TAG, "Fail to stop settings app", e);
+        }
     }
 
     @After
@@ -131,7 +141,7 @@
 
     @Test
     public void testIntroChooseLock() {
-        final Intent intent = newActivityIntent();
+        final Intent intent = newActivityIntent(false);
         mContext.startActivity(intent);
         assertThat(mDevice.wait(Until.hasObject(By.text("Choose your backup screen lock method")),
                 IDLE_TIMEOUT)).isTrue();
@@ -371,7 +381,7 @@
     @Test
     public void testIntroCheckPin() {
         LockScreenUtil.setLockscreen(LockScreenUtil.LockscreenType.PIN, TEST_PIN, true);
-        final Intent intent = newActivityIntent();
+        final Intent intent = newActivityIntent(false);
         mContext.startActivity(intent);
         assertThat(mDevice.wait(Until.hasObject(By.text("Enter your device PIN to continue")),
                 IDLE_TIMEOUT)).isTrue();
@@ -552,7 +562,7 @@
 
         // Back to home
         mDevice.waitForWindowUpdate("com.android.settings", IDLE_TIMEOUT);
-        assertThat(mDevice.findObject(By.text(DO_IT_LATER))).isNull();
+        assertThat(mDevice.wait(Until.gone(By.text(DO_IT_LATER)), IDLE_TIMEOUT)).isTrue();
     }
 
     private void launchIntroWithGkPwHandle(boolean isSuw) {
@@ -560,10 +570,7 @@
         final LockscreenCredential lockscreenCredential = LockscreenCredential.createPin(TEST_PIN);
         final int userId = UserHandle.myUserId();
         final LockPatternChecker.OnVerifyCallback onVerifyCallback = (response, timeoutMs) -> {
-            final Intent intent = newActivityIntent();
-            if (isSuw) {
-                intent.putExtra(EXTRA_IS_SETUP_FLOW, true);
-            }
+            final Intent intent = newActivityIntent(isSuw);
             intent.putExtra(EXTRA_KEY_GK_PW_HANDLE, response.getGatekeeperPasswordHandle());
             mContext.startActivity(intent);
         };
@@ -576,7 +583,7 @@
         final LockscreenCredential lockscreenCredential = LockscreenCredential.createPin(TEST_PIN);
         final int userId = UserHandle.myUserId();
         final LockPatternChecker.OnVerifyCallback onVerifyCallback = (response, timeoutMs) -> {
-            final Intent intent = newActivityIntent();
+            final Intent intent = newActivityIntent(false);
             intent.putExtra(EXTRA_SKIP_INTRO, true);
             intent.putExtra(EXTRA_KEY_GK_PW_HANDLE, response.getGatekeeperPasswordHandle());
             mContext.startActivity(intent);
@@ -590,7 +597,7 @@
         final LockscreenCredential lockscreenCredential = LockscreenCredential.createPin(TEST_PIN);
         final int userId = UserHandle.myUserId();
         final LockPatternChecker.OnVerifyCallback onVerifyCallback = (response, timeoutMs) -> {
-            final Intent intent = newActivityIntent();
+            final Intent intent = newActivityIntent(false);
             intent.putExtra(EXTRA_SKIP_FIND_SENSOR, true);
             intent.putExtra(EXTRA_KEY_GK_PW_HANDLE, response.getGatekeeperPasswordHandle());
             mContext.startActivity(intent);
@@ -600,14 +607,16 @@
     }
 
     @NonNull
-    private Intent newActivityIntent() {
+    private Intent newActivityIntent(boolean isSuw) {
         Intent intent = new Intent();
-        intent.setClassName(SETTINGS_PACKAGE_NAME, ACTIVITY_CLASS_NAME);
-        intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, true);
+        intent.setClassName(SETTINGS_PACKAGE_NAME,
+                isSuw ? SUW_ACTIVITY_CLASS_NAME : ACTIVITY_CLASS_NAME);
+        if (isSuw) {
+            intent.putExtra(EXTRA_IS_SETUP_FLOW, true);
+        }
         intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, 1);
         intent.putExtra(Intent.EXTRA_USER_ID, mContext.getUserId());
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
         return intent;
-
     }
 }
diff --git a/tests/unit/src/com/android/settings/biometrics2/ui/model/EnrollmentRequestTest.java b/tests/unit/src/com/android/settings/biometrics2/ui/model/EnrollmentRequestTest.java
new file mode 100644
index 0000000..f060815
--- /dev/null
+++ b/tests/unit/src/com/android/settings/biometrics2/ui/model/EnrollmentRequestTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics2.ui.model;
+
+import static com.android.settings.biometrics.BiometricEnrollActivity.EXTRA_SKIP_INTRO;
+import static com.android.settings.biometrics2.ui.model.EnrollmentRequest.EXTRA_SKIP_FIND_SENSOR;
+
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_DEFERRED_SETUP;
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_PORTAL_SETUP;
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_SETUP_FLOW;
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW;
+import static com.google.common.truth.Truth.assertThat;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class EnrollmentRequestTest {
+
+    @NonNull
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Test
+    public void testIsSuw() {
+        // Default false
+        assertThat(new EnrollmentRequest(new Intent(), mContext, true).isSuw()).isFalse();
+        assertThat(new EnrollmentRequest(new Intent(), mContext, false).isSuw()).isFalse();
+
+        final Intent trueIntent = new Intent();
+        trueIntent.putExtra(EXTRA_IS_SETUP_FLOW, true);
+        assertThat(new EnrollmentRequest(trueIntent, mContext, true).isSuw()).isTrue();
+        assertThat(new EnrollmentRequest(trueIntent, mContext, false).isSuw()).isFalse();
+
+        final Intent falseIntent = new Intent();
+        trueIntent.putExtra(EXTRA_IS_SETUP_FLOW, false);
+        assertThat(new EnrollmentRequest(falseIntent, mContext, true).isSuw()).isFalse();
+        assertThat(new EnrollmentRequest(falseIntent, mContext, false).isSuw()).isFalse();
+    }
+
+    @Test
+    public void testIsAfterSuwOrSuwSuggestedAction() {
+        // Default false
+        assertThat(new EnrollmentRequest(new Intent(), mContext, true)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+        assertThat(new EnrollmentRequest(new Intent(), mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent deferredTrueIntent = new Intent();
+        deferredTrueIntent.putExtra(EXTRA_IS_DEFERRED_SETUP, true);
+        assertThat(new EnrollmentRequest(deferredTrueIntent, mContext, true)
+                .isAfterSuwOrSuwSuggestedAction()).isTrue();
+        assertThat(new EnrollmentRequest(deferredTrueIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent deferredFalseIntent = new Intent();
+        deferredFalseIntent.putExtra(EXTRA_IS_DEFERRED_SETUP, false);
+        assertThat(new EnrollmentRequest(deferredFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+        assertThat(new EnrollmentRequest(deferredFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent portalTrueIntent = new Intent();
+        portalTrueIntent.putExtra(EXTRA_IS_PORTAL_SETUP, true);
+        assertThat(new EnrollmentRequest(portalTrueIntent, mContext, true)
+                .isAfterSuwOrSuwSuggestedAction()).isTrue();
+        assertThat(new EnrollmentRequest(portalTrueIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent portalFalseIntent = new Intent();
+        portalFalseIntent.putExtra(EXTRA_IS_PORTAL_SETUP, false);
+        assertThat(new EnrollmentRequest(portalFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+        assertThat(new EnrollmentRequest(portalFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent suggestedTrueIntent = new Intent();
+        suggestedTrueIntent.putExtra(EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW, true);
+        assertThat(new EnrollmentRequest(suggestedTrueIntent, mContext, true)
+                .isAfterSuwOrSuwSuggestedAction()).isTrue();
+        assertThat(new EnrollmentRequest(suggestedTrueIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+
+        final Intent suggestedFalseIntent = new Intent();
+        suggestedFalseIntent.putExtra(EXTRA_IS_SUW_SUGGESTED_ACTION_FLOW, false);
+        assertThat(new EnrollmentRequest(suggestedFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+        assertThat(new EnrollmentRequest(suggestedFalseIntent, mContext, false)
+                .isAfterSuwOrSuwSuggestedAction()).isFalse();
+    }
+
+    @Test
+    public void testGetSuwExtras_inSuw() {
+        final Intent suwIntent = new Intent();
+        suwIntent.putExtra(EXTRA_IS_SETUP_FLOW, true);
+        final EnrollmentRequest setupRequest = new EnrollmentRequest(suwIntent, mContext, true);
+
+        final Bundle bundle = setupRequest.getSuwExtras();
+        assertThat(bundle).isNotNull();
+        assertThat(bundle.size()).isAtLeast(1);
+        assertThat(bundle.getBoolean(EXTRA_IS_SETUP_FLOW)).isTrue();
+    }
+
+    @Test
+    public void testGetSuwExtras_notInSuw() {
+        final Intent suwIntent = new Intent();
+        suwIntent.putExtra(EXTRA_IS_SETUP_FLOW, true);
+        final EnrollmentRequest setupRequest = new EnrollmentRequest(suwIntent, mContext, false);
+
+        final Bundle bundle = setupRequest.getSuwExtras();
+        assertThat(bundle).isNotNull();
+        assertThat(bundle.size()).isEqualTo(0);
+    }
+
+    @Test
+    public void testIsSkipIntro() {
+        // Default false
+        assertThat(new EnrollmentRequest(new Intent(), mContext, true).isSkipIntro()).isFalse();
+        assertThat(new EnrollmentRequest(new Intent(), mContext, false).isSkipIntro()).isFalse();
+
+        final Intent trueIntent = new Intent();
+        trueIntent.putExtra(EXTRA_SKIP_INTRO, true);
+        assertThat(new EnrollmentRequest(trueIntent, mContext, true).isSkipIntro()).isTrue();
+        assertThat(new EnrollmentRequest(trueIntent, mContext, false).isSkipIntro()).isTrue();
+
+        final Intent falseIntent = new Intent();
+        falseIntent.putExtra(EXTRA_SKIP_INTRO, false);
+        assertThat(new EnrollmentRequest(falseIntent, mContext, false).isSkipIntro()).isFalse();
+        assertThat(new EnrollmentRequest(falseIntent, mContext, false).isSkipIntro()).isFalse();
+    }
+
+    @Test
+    public void testIsSkipFindSensor() {
+        // Default false
+        assertThat(new EnrollmentRequest(new Intent(), mContext, true).isSkipFindSensor())
+                .isFalse();
+        assertThat(new EnrollmentRequest(new Intent(), mContext, false).isSkipFindSensor())
+                .isFalse();
+
+        final Intent trueIntent = new Intent();
+        trueIntent.putExtra(EXTRA_SKIP_FIND_SENSOR, true);
+        assertThat(new EnrollmentRequest(trueIntent, mContext, true).isSkipFindSensor()).isTrue();
+        assertThat(new EnrollmentRequest(trueIntent, mContext, false).isSkipFindSensor()).isTrue();
+
+        final Intent falseIntent = new Intent();
+        falseIntent.putExtra(EXTRA_SKIP_FIND_SENSOR, false);
+        assertThat(new EnrollmentRequest(falseIntent, mContext, false).isSkipFindSensor())
+                .isFalse();
+        assertThat(new EnrollmentRequest(falseIntent, mContext, false).isSkipFindSensor())
+                .isFalse();
+    }
+
+}
diff --git a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollFinishViewModelTest.java b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollFinishViewModelTest.java
index 34ef801..ac97e72 100644
--- a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollFinishViewModelTest.java
+++ b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollFinishViewModelTest.java
@@ -64,7 +64,7 @@
     @Before
     public void setUp() {
         mApplication = ApplicationProvider.getApplicationContext();
-        mRequest = new EnrollmentRequest(new Intent(), mApplication);
+        mRequest = new EnrollmentRequest(new Intent(), mApplication, true);
         mViewModel = new FingerprintEnrollFinishViewModel(mApplication, USER_ID, mRequest,
                 newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, MAX_ENROLLABLE));
     }
diff --git a/tests/unit/src/com/android/settings/biometrics2/utils/EnrollmentRequestUtils.java b/tests/unit/src/com/android/settings/biometrics2/utils/EnrollmentRequestUtils.java
index ced6deb..a97f223 100644
--- a/tests/unit/src/com/android/settings/biometrics2/utils/EnrollmentRequestUtils.java
+++ b/tests/unit/src/com/android/settings/biometrics2/utils/EnrollmentRequestUtils.java
@@ -75,7 +75,7 @@
         if (!TextUtils.isEmpty(theme)) {
             i.putExtra(EXTRA_THEME, theme);
         }
-        return new EnrollmentRequest(i, context);
+        return new EnrollmentRequest(i, context, true);
     }
 
 }