Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d01f40ea authored by Austin Delgado's avatar Austin Delgado
Browse files

Update content description for Biometric Prompt UDFPS icon

Fixes: 373971194
Test: Verified manually expected string is announced
Flag: EXEMPT bugfix
Change-Id: If89f9429e4c79690aaac2885358df0f7084a7f54
parent 58efa391
Loading
Loading
Loading
Loading
+39 −41
Original line number Diff line number Diff line
@@ -158,6 +158,22 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
    private val mockFingerprintIconWidth = 300
    private val mockFingerprintIconHeight = 300

    private val faceIconAuthingDescription =
        R.string.biometric_dialog_face_icon_description_authenticating
    private val faceIconAuthedDescription =
        R.string.biometric_dialog_face_icon_description_authenticated
    private val faceIconConfirmedDescription =
        R.string.biometric_dialog_face_icon_description_confirmed
    private val faceIconIdleDescription = R.string.biometric_dialog_face_icon_description_idle
    private val sfpsFindSensorDescription =
        R.string.security_settings_sfps_enroll_find_sensor_message
    private val udfpsIconDescription = R.string.accessibility_fingerprint_label
    private val faceFailedDescription = R.string.keyguard_face_failed
    private val bpTryAgainDescription = R.string.biometric_dialog_try_again
    private val bpConfirmDescription = R.string.biometric_dialog_confirm
    private val fingerprintIconAuthenticatedDescription =
        R.string.fingerprint_dialog_authenticated_confirmation

    /** Mock [UdfpsOverlayParams] for a test. */
    private fun mockUdfpsOverlayParams(isLandscape: Boolean = false): UdfpsOverlayParams =
        UdfpsOverlayParams(
@@ -337,21 +353,18 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
            if ((testCase.isCoex && !forceExplicitFlow) || testCase.isFaceOnly) {
                // Face-only or implicit co-ex auth
                assertThat(iconAsset).isEqualTo(R.raw.face_dialog_authenticating)
                assertThat(iconContentDescriptionId)
                    .isEqualTo(R.string.biometric_dialog_face_icon_description_authenticating)
                assertThat(iconContentDescriptionId).isEqualTo(faceIconAuthingDescription)
                assertThat(shouldAnimateIconView).isEqualTo(true)
            } else if ((testCase.isCoex && forceExplicitFlow) || testCase.isFingerprintOnly) {
                // Fingerprint-only or explicit co-ex auth
                if (testCase.sensorType == FingerprintSensorProperties.TYPE_POWER_BUTTON) {
                    assertThat(iconAsset).isEqualTo(getSfpsAsset_fingerprintAuthenticating())
                    assertThat(iconContentDescriptionId)
                        .isEqualTo(R.string.security_settings_sfps_enroll_find_sensor_message)
                    assertThat(iconContentDescriptionId).isEqualTo(sfpsFindSensorDescription)
                    assertThat(shouldAnimateIconView).isEqualTo(true)
                } else {
                    assertThat(iconAsset)
                        .isEqualTo(R.raw.fingerprint_dialogue_fingerprint_to_error_lottie)
                    assertThat(iconContentDescriptionId)
                        .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                    assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                    assertThat(shouldAnimateIconView).isEqualTo(false)
                }
            }
@@ -397,26 +410,25 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
        if (testCase.isFaceOnly) {
            // Face-only auth
            assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_error)
            assertThat(iconContentDescriptionId).isEqualTo(R.string.keyguard_face_failed)
            assertThat(iconContentDescriptionId).isEqualTo(faceFailedDescription)
            assertThat(shouldAnimateIconView).isEqualTo(true)

            // Clear error, go to idle
            errorJob.join()

            assertThat(iconAsset).isEqualTo(R.raw.face_dialog_error_to_idle)
            assertThat(iconContentDescriptionId)
                .isEqualTo(R.string.biometric_dialog_face_icon_description_idle)
            assertThat(iconContentDescriptionId).isEqualTo(faceIconIdleDescription)
            assertThat(shouldAnimateIconView).isEqualTo(true)
        } else if ((testCase.isCoex && forceExplicitFlow) || testCase.isFingerprintOnly) {
            // Fingerprint-only or explicit co-ex auth
            if (testCase.sensorType == FingerprintSensorProperties.TYPE_POWER_BUTTON) {
                assertThat(iconAsset).isEqualTo(getSfpsAsset_fingerprintToError())
                assertThat(iconContentDescriptionId).isEqualTo(R.string.biometric_dialog_try_again)
                assertThat(iconContentDescriptionId).isEqualTo(bpTryAgainDescription)
                assertThat(shouldAnimateIconView).isEqualTo(true)
            } else {
                assertThat(iconAsset)
                    .isEqualTo(R.raw.fingerprint_dialogue_fingerprint_to_error_lottie)
                assertThat(iconContentDescriptionId).isEqualTo(R.string.biometric_dialog_try_again)
                assertThat(iconContentDescriptionId).isEqualTo(bpTryAgainDescription)
                assertThat(shouldAnimateIconView).isEqualTo(true)
            }

@@ -425,14 +437,12 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa

            if (testCase.sensorType == FingerprintSensorProperties.TYPE_POWER_BUTTON) {
                assertThat(iconAsset).isEqualTo(getSfpsAsset_errorToFingerprint())
                assertThat(iconContentDescriptionId)
                    .isEqualTo(R.string.security_settings_sfps_enroll_find_sensor_message)
                assertThat(iconContentDescriptionId).isEqualTo(sfpsFindSensorDescription)
                assertThat(shouldAnimateIconView).isEqualTo(true)
            } else {
                assertThat(iconAsset)
                    .isEqualTo(R.raw.fingerprint_dialogue_error_to_fingerprint_lottie)
                assertThat(iconContentDescriptionId)
                    .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                assertThat(shouldAnimateIconView).isEqualTo(true)
            }
        }
@@ -472,13 +482,12 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
                    // Covers (1) fingerprint-only (2) co-ex, authenticated by fingerprint
                    if (testCase.authenticatedByFingerprint) {
                        assertThat(iconAsset).isEqualTo(R.raw.biometricprompt_sfps_error_to_success)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.security_settings_sfps_enroll_find_sensor_message)
                        assertThat(iconContentDescriptionId).isEqualTo(sfpsFindSensorDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    } else { // Covers co-ex, authenticated by face
                        assertThat(iconAsset).isEqualTo(R.raw.biometricprompt_sfps_error_to_unlock)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_authenticated_confirmation)
                            .isEqualTo(fingerprintIconAuthenticatedDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)

                        // Confirm authentication
@@ -486,8 +495,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa

                        assertThat(iconAsset)
                            .isEqualTo(R.raw.biometricprompt_sfps_unlock_to_success)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                        assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    }
                } else { // Non-SFPS (UDFPS / rear-FPS) test cases
@@ -495,14 +503,12 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
                    if (testCase.authenticatedByFingerprint) {
                        assertThat(iconAsset)
                            .isEqualTo(R.raw.fingerprint_dialogue_error_to_success_lottie)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                        assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    } else { //  co-ex, authenticated by face
                        assertThat(iconAsset)
                            .isEqualTo(R.raw.fingerprint_dialogue_error_to_unlock_lottie)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.biometric_dialog_confirm)
                        assertThat(iconContentDescriptionId).isEqualTo(bpConfirmDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)

                        // Confirm authentication
@@ -512,8 +518,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
                            .isEqualTo(
                                R.raw.fingerprint_dialogue_unlocked_to_checkmark_success_lottie
                            )
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                        assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    }
                }
@@ -543,22 +548,19 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
                    // Fingerprint icon asset assertions
                    if (testCase.sensorType == FingerprintSensorProperties.TYPE_POWER_BUTTON) {
                        assertThat(iconAsset).isEqualTo(getSfpsAsset_fingerprintToSuccess())
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.security_settings_sfps_enroll_find_sensor_message)
                        assertThat(iconContentDescriptionId).isEqualTo(sfpsFindSensorDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    } else {
                        assertThat(iconAsset)
                            .isEqualTo(R.raw.fingerprint_dialogue_fingerprint_to_success_lottie)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                        assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    }
                } else if (testCase.isFaceOnly || testCase.isCoex) {
                    // Face icon asset assertions
                    // If co-ex, use implicit flow (explicit flow always requires confirmation)
                    assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_checkmark)
                    assertThat(iconContentDescriptionId)
                        .isEqualTo(R.string.biometric_dialog_face_icon_description_authenticated)
                    assertThat(iconContentDescriptionId).isEqualTo(faceIconAuthedDescription)
                    assertThat(shouldAnimateIconView).isEqualTo(true)
                    assertThat(message).isEqualTo(PromptMessage.Empty)
                }
@@ -586,20 +588,18 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa

                if (testCase.isFaceOnly) {
                    assertThat(iconAsset).isEqualTo(R.raw.face_dialog_wink_from_dark)
                    assertThat(iconContentDescriptionId)
                        .isEqualTo(R.string.biometric_dialog_face_icon_description_authenticated)
                    assertThat(iconContentDescriptionId).isEqualTo(faceIconAuthedDescription)
                    assertThat(shouldAnimateIconView).isEqualTo(true)
                } else if (testCase.isCoex) { // explicit flow, confirmation requested
                    if (testCase.sensorType == FingerprintSensorProperties.TYPE_POWER_BUTTON) {
                        assertThat(iconAsset).isEqualTo(getSfpsAsset_fingerprintToUnlock())
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_authenticated_confirmation)
                            .isEqualTo(fingerprintIconAuthenticatedDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    } else {
                        assertThat(iconAsset)
                            .isEqualTo(R.raw.fingerprint_dialogue_fingerprint_to_unlock_lottie)
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.biometric_dialog_confirm)
                        assertThat(iconContentDescriptionId).isEqualTo(bpConfirmDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    }
                }
@@ -628,8 +628,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa

                if (testCase.isFaceOnly) {
                    assertThat(iconAsset).isEqualTo(R.raw.face_dialog_dark_to_checkmark)
                    assertThat(iconContentDescriptionId)
                        .isEqualTo(R.string.biometric_dialog_face_icon_description_confirmed)
                    assertThat(iconContentDescriptionId).isEqualTo(faceIconConfirmedDescription)
                    assertThat(shouldAnimateIconView).isEqualTo(true)
                }

@@ -644,8 +643,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa
                            .isEqualTo(
                                R.raw.fingerprint_dialogue_unlocked_to_checkmark_success_lottie
                            )
                        assertThat(iconContentDescriptionId)
                            .isEqualTo(R.string.fingerprint_dialog_touch_sensor)
                        assertThat(iconContentDescriptionId).isEqualTo(udfpsIconDescription)
                        assertThat(shouldAnimateIconView).isEqualTo(true)
                    }
                }
+33 −33
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ class PromptIconViewModel(
    enum class AuthType {
        Fingerprint,
        Face,
        Coex
        Coex,
    }

    /**
@@ -53,7 +53,7 @@ class PromptIconViewModel(
    val activeAuthType: Flow<AuthType> =
        combine(
            promptViewModel.modalities.distinctUntilChanged(),
            promptViewModel.faceMode.distinctUntilChanged()
            promptViewModel.faceMode.distinctUntilChanged(),
        ) { modalities, faceMode ->
            if (modalities.hasFaceAndFingerprint && !faceMode) {
                AuthType.Coex
@@ -102,7 +102,7 @@ class PromptIconViewModel(
                        promptSelectorInteractor.fingerprintSensorType,
                        promptViewModel.isAuthenticated,
                        promptViewModel.isAuthenticating,
                        promptViewModel.showingError
                        promptViewModel.showingError,
                    ) {
                        rotation: DisplayRotation,
                        isInRearDisplayMode: Boolean,
@@ -117,13 +117,13 @@ class PromptIconViewModel(
                                    isInRearDisplayMode,
                                    authState.isAuthenticated,
                                    isAuthenticating,
                                    showingError
                                    showingError,
                                )
                            else ->
                                getFingerprintIconViewAsset(
                                    authState.isAuthenticated,
                                    isAuthenticating,
                                    showingError
                                    showingError,
                                )
                        }
                    }
@@ -132,7 +132,7 @@ class PromptIconViewModel(
                        promptViewModel.isAuthenticated.distinctUntilChanged(),
                        promptViewModel.isAuthenticating.distinctUntilChanged(),
                        promptViewModel.isPendingConfirmation.distinctUntilChanged(),
                        promptViewModel.showingError.distinctUntilChanged()
                        promptViewModel.showingError.distinctUntilChanged(),
                    ) {
                        authState: PromptAuthState,
                        isAuthenticating: Boolean,
@@ -142,7 +142,7 @@ class PromptIconViewModel(
                            authState,
                            isAuthenticating,
                            isPendingConfirmation,
                            showingError
                            showingError,
                        )
                    }
                AuthType.Coex ->
@@ -170,14 +170,14 @@ class PromptIconViewModel(
                                    authState,
                                    isAuthenticating,
                                    isPendingConfirmation,
                                    showingError
                                    showingError,
                                )
                            else ->
                                getCoexIconViewAsset(
                                    authState,
                                    isAuthenticating,
                                    isPendingConfirmation,
                                    showingError
                                    showingError,
                                )
                        }
                    }
@@ -187,7 +187,7 @@ class PromptIconViewModel(
    private fun getFingerprintIconViewAsset(
        isAuthenticated: Boolean,
        isAuthenticating: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int {
        return if (isAuthenticated) {
            if (_previousIconWasError.value) {
@@ -214,7 +214,7 @@ class PromptIconViewModel(
        isInRearDisplayMode: Boolean,
        isAuthenticated: Boolean,
        isAuthenticating: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int {
        return if (isAuthenticated) {
            if (_previousIconWasError.value) {
@@ -240,7 +240,7 @@ class PromptIconViewModel(
        authState: PromptAuthState,
        isAuthenticating: Boolean,
        isPendingConfirmation: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int {
        return if (authState.isAuthenticated && isPendingConfirmation) {
            R.raw.face_dialog_wink_from_dark
@@ -262,7 +262,7 @@ class PromptIconViewModel(
        authState: PromptAuthState,
        isAuthenticating: Boolean,
        isPendingConfirmation: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int {
        return if (authState.isAuthenticatedAndExplicitlyConfirmed) {
            R.raw.fingerprint_dialogue_unlocked_to_checkmark_success_lottie
@@ -298,7 +298,7 @@ class PromptIconViewModel(
        authState: PromptAuthState,
        isAuthenticating: Boolean,
        isPendingConfirmation: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int {
        return if (authState.isAuthenticatedAndExplicitlyConfirmed) {
            R.raw.biometricprompt_sfps_unlock_to_success
@@ -338,7 +338,7 @@ class PromptIconViewModel(
                        promptViewModel.isAuthenticated,
                        promptViewModel.isAuthenticating,
                        promptViewModel.isPendingConfirmation,
                        promptViewModel.showingError
                        promptViewModel.showingError,
                    ) {
                        sensorType: FingerprintSensorType,
                        authState: PromptAuthState,
@@ -350,7 +350,7 @@ class PromptIconViewModel(
                            authState.isAuthenticated,
                            isAuthenticating,
                            isPendingConfirmation,
                            showingError
                            showingError,
                        )
                    }
                AuthType.Face ->
@@ -370,7 +370,7 @@ class PromptIconViewModel(
        isAuthenticated: Boolean,
        isAuthenticating: Boolean,
        isPendingConfirmation: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int =
        if (isPendingConfirmation) {
            when (sensorType) {
@@ -381,7 +381,7 @@ class PromptIconViewModel(
            when (sensorType) {
                FingerprintSensorType.POWER_BUTTON ->
                    R.string.security_settings_sfps_enroll_find_sensor_message
                else -> R.string.fingerprint_dialog_touch_sensor
                else -> R.string.accessibility_fingerprint_label
            }
        } else if (showingError) {
            R.string.biometric_dialog_try_again
@@ -392,7 +392,7 @@ class PromptIconViewModel(
    private fun getFaceIconContentDescriptionId(
        authState: PromptAuthState,
        isAuthenticating: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ): Int =
        if (authState.isAuthenticatedAndExplicitlyConfirmed) {
            R.string.biometric_dialog_face_icon_description_confirmed
@@ -415,7 +415,7 @@ class PromptIconViewModel(
                        promptSelectorInteractor.fingerprintSensorType,
                        promptViewModel.isAuthenticated,
                        promptViewModel.isAuthenticating,
                        promptViewModel.showingError
                        promptViewModel.showingError,
                    ) {
                        sensorType: FingerprintSensorType,
                        authState: PromptAuthState,
@@ -427,7 +427,7 @@ class PromptIconViewModel(
                                shouldAnimateFingerprintIconView(
                                    authState.isAuthenticated,
                                    isAuthenticating,
                                    showingError
                                    showingError,
                                )
                        }
                    }
@@ -435,7 +435,7 @@ class PromptIconViewModel(
                    combine(
                        promptViewModel.isAuthenticated,
                        promptViewModel.isAuthenticating,
                        promptViewModel.showingError
                        promptViewModel.showingError,
                    ) { authState: PromptAuthState, isAuthenticating: Boolean, showingError: Boolean
                        ->
                        isAuthenticating ||
@@ -463,7 +463,7 @@ class PromptIconViewModel(
                                    authState.isAuthenticated,
                                    isAuthenticating,
                                    isPendingConfirmation,
                                    showingError
                                    showingError,
                                )
                        }
                    }
@@ -483,14 +483,14 @@ class PromptIconViewModel(
    private fun shouldAnimateFingerprintIconView(
        isAuthenticated: Boolean,
        isAuthenticating: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ) = (isAuthenticating && _previousIconWasError.value) || isAuthenticated || showingError

    private fun shouldAnimateCoexIconView(
        isAuthenticated: Boolean,
        isAuthenticating: Boolean,
        isPendingConfirmation: Boolean,
        showingError: Boolean
        showingError: Boolean,
    ) =
        (isAuthenticating && _previousIconWasError.value) ||
            isPendingConfirmation ||
@@ -522,7 +522,7 @@ class PromptIconViewModel(
        listOf(
            R.raw.biometricprompt_sfps_fingerprint_authenticating,
            R.raw.biometricprompt_sfps_rear_display_fingerprint_authenticating,
            R.raw.biometricprompt_sfps_rear_display_fingerprint_authenticating
            R.raw.biometricprompt_sfps_rear_display_fingerprint_authenticating,
        )

    /** Called on configuration changes */
@@ -579,7 +579,7 @@ class PromptIconViewModel(
                R.raw.fingerprint_dialogue_error_to_success_lottie,
                R.raw.fingerprint_dialogue_fingerprint_to_success_lottie,
                R.raw.fingerprint_dialogue_error_to_fingerprint_lottie,
                R.raw.fingerprint_dialogue_fingerprint_to_error_lottie
                R.raw.fingerprint_dialogue_fingerprint_to_error_lottie,
            )
        }

@@ -620,7 +620,7 @@ class PromptIconViewModel(
                R.raw.fingerprint_dialogue_error_to_fingerprint_lottie,
                R.raw.fingerprint_dialogue_error_to_success_lottie,
                R.raw.fingerprint_dialogue_fingerprint_to_error_lottie,
                R.raw.fingerprint_dialogue_fingerprint_to_success_lottie
                R.raw.fingerprint_dialogue_fingerprint_to_success_lottie,
            )
        }

@@ -632,7 +632,7 @@ class PromptIconViewModel(
            R.raw.face_dialog_dark_to_error,
            R.raw.face_dialog_error_to_idle,
            R.raw.face_dialog_idle_static,
            R.raw.face_dialog_authenticating
            R.raw.face_dialog_authenticating,
        )

    private fun getSfpsAsset_fingerprintAuthenticating(isInRearDisplayMode: Boolean): Int =
@@ -644,7 +644,7 @@ class PromptIconViewModel(

    private fun getSfpsAsset_fingerprintToError(
        rotation: DisplayRotation,
        isInRearDisplayMode: Boolean
        isInRearDisplayMode: Boolean,
    ): Int =
        if (isInRearDisplayMode) {
            when (rotation) {
@@ -668,7 +668,7 @@ class PromptIconViewModel(

    private fun getSfpsAsset_errorToFingerprint(
        rotation: DisplayRotation,
        isInRearDisplayMode: Boolean
        isInRearDisplayMode: Boolean,
    ): Int =
        if (isInRearDisplayMode) {
            when (rotation) {
@@ -692,7 +692,7 @@ class PromptIconViewModel(

    private fun getSfpsAsset_fingerprintToUnlock(
        rotation: DisplayRotation,
        isInRearDisplayMode: Boolean
        isInRearDisplayMode: Boolean,
    ): Int =
        if (isInRearDisplayMode) {
            when (rotation) {
@@ -716,7 +716,7 @@ class PromptIconViewModel(

    private fun getSfpsAsset_fingerprintToSuccess(
        rotation: DisplayRotation,
        isInRearDisplayMode: Boolean
        isInRearDisplayMode: Boolean,
    ): Int =
        if (isInRearDisplayMode) {
            when (rotation) {