Merge "[ToA] Metrics in Settings" into main
diff --git a/tests/unit/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeatureImplTest.kt b/tests/unit/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeatureImplTest.kt
new file mode 100644
index 0000000..794cfec
--- /dev/null
+++ b/tests/unit/src/com/android/settings/biometrics/fingerprint/feature/SfpsEnrollmentFeatureImplTest.kt
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2024 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.biometrics.fingerprint.feature
+
+import android.animation.Animator
+import android.content.Context
+import android.hardware.fingerprint.FingerprintManager
+import android.view.View
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_CENTER
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_FINGERTIP
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_LEFT_EDGE
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_NO_ANIMATION
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.SFPS_STAGE_RIGHT_EDGE
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.STAGE_UNKNOWN
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.mock
+import org.mockito.Spy
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+import org.mockito.Mockito.`when` as whenever
+
+@RunWith(AndroidJUnit4::class)
+class SfpsEnrollmentFeatureImplTest {
+    @get:Rule
+    val mockito: MockitoRule = MockitoJUnit.rule()
+
+    @Spy
+    private val context: Context = ApplicationProvider.getApplicationContext()
+
+    private val settingsPackageName = "com.android.settings"
+
+    private lateinit var settingsContext: Context
+
+    @Mock
+    private lateinit var mockFingerprintManager: FingerprintManager
+
+    private val mSfpsEnrollmentFeatureImpl: SfpsEnrollmentFeatureImpl = SfpsEnrollmentFeatureImpl()
+
+    @Before
+    fun setUp() {
+        assertThat(mSfpsEnrollmentFeatureImpl).isInstanceOf(SfpsEnrollmentFeatureImpl::class.java)
+        whenever(context.getSystemService(FingerprintManager::class.java))
+            .thenReturn(mockFingerprintManager)
+        doReturn(0f).`when`(mockFingerprintManager).getEnrollStageThreshold(0)
+        doReturn(0.36f).`when`(mockFingerprintManager).getEnrollStageThreshold(1)
+        doReturn(0.52f).`when`(mockFingerprintManager).getEnrollStageThreshold(2)
+        doReturn(0.76f).`when`(mockFingerprintManager).getEnrollStageThreshold(3)
+        doReturn(1f).`when`(mockFingerprintManager).getEnrollStageThreshold(4)
+        settingsContext = context.createPackageContext(settingsPackageName, 0)
+    }
+
+    @Test
+    fun testGetEnrollStageThreshold() {
+        assertThat(mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, 0)).isEqualTo(0f)
+        assertThat(mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, 1)).isEqualTo(0.36f)
+        assertThat(mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, 2)).isEqualTo(0.52f)
+        assertThat(mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, 3)).isEqualTo(0.76f)
+        assertThat(mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, 4)).isEqualTo(1f)
+    }
+
+    @Test
+    fun testGetHelpAnimator() {
+        val mockView: View = mock(View::class.java)
+        val animator: Animator = mSfpsEnrollmentFeatureImpl.getHelpAnimator(mockView)
+        assertThat(animator.duration).isEqualTo(550)
+    }
+
+    @Test
+    fun testGetCurrentSfpsEnrollStage() {
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(0, null))
+            .isEqualTo(STAGE_UNKNOWN)
+        val mapper = { i: Int ->
+            (25 * mSfpsEnrollmentFeatureImpl.getEnrollStageThreshold(context, i)).roundToInt()
+        }
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(-1, mapper))
+            .isEqualTo(SFPS_STAGE_NO_ANIMATION)
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(0, mapper))
+            .isEqualTo(SFPS_STAGE_CENTER)
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(9, mapper))
+            .isEqualTo(SFPS_STAGE_FINGERTIP)
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(13, mapper))
+            .isEqualTo(SFPS_STAGE_LEFT_EDGE)
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(19, mapper))
+            .isEqualTo(SFPS_STAGE_RIGHT_EDGE)
+        assertThat(mSfpsEnrollmentFeatureImpl.getCurrentSfpsEnrollStage(25, mapper))
+            .isEqualTo(SFPS_STAGE_RIGHT_EDGE)
+    }
+
+    @Test
+    fun testGetFeaturedStageHeaderResource() {
+        val type = "string"
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getFeaturedStageHeaderResource(SFPS_STAGE_NO_ANIMATION)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "security_settings_fingerprint_enroll_repeat_title",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getFeaturedStageHeaderResource(SFPS_STAGE_CENTER)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "security_settings_sfps_enroll_finger_center_title",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getFeaturedStageHeaderResource(SFPS_STAGE_FINGERTIP)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "security_settings_sfps_enroll_fingertip_title",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getFeaturedStageHeaderResource(SFPS_STAGE_LEFT_EDGE)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "security_settings_sfps_enroll_left_edge_title",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getFeaturedStageHeaderResource(SFPS_STAGE_RIGHT_EDGE)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "security_settings_sfps_enroll_right_edge_title",
+                type,
+                settingsPackageName)
+        )
+    }
+
+    @Test
+    fun testGetSfpsEnrollLottiePerStage() {
+        val type = "raw"
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getSfpsEnrollLottiePerStage(SFPS_STAGE_NO_ANIMATION)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "sfps_lottie_no_animation",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getSfpsEnrollLottiePerStage(SFPS_STAGE_CENTER)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "sfps_lottie_pad_center",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getSfpsEnrollLottiePerStage(SFPS_STAGE_FINGERTIP)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "sfps_lottie_tip",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getSfpsEnrollLottiePerStage(SFPS_STAGE_LEFT_EDGE)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "sfps_lottie_left_edge",
+                type,
+                settingsPackageName)
+        )
+        assertThat(
+            mSfpsEnrollmentFeatureImpl.getSfpsEnrollLottiePerStage(SFPS_STAGE_RIGHT_EDGE)
+        ).isEqualTo(
+            settingsContext.resources.getIdentifier(
+                "sfps_lottie_right_edge",
+                type,
+                settingsPackageName)
+        )
+    }
+}
\ No newline at end of file