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

Commit 6ca41f39 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "cherrypicker-L01600000961894751:N92400001386673229" into udc-d1-dev

* changes:
  Move haptic from authenticated to confirmed (when required).
  Prioritize fingerprint errors for coex.
parents 13f8f7d9 ee846efe
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.systemui.biometrics.domain.model
package com.android.systemui.biometrics.shared.model

import android.hardware.biometrics.BiometricAuthenticator

+10 −15
Original line number Diff line number Diff line
@@ -46,9 +46,9 @@ import com.android.systemui.biometrics.AuthIconController
import com.android.systemui.biometrics.AuthPanelController
import com.android.systemui.biometrics.Utils
import com.android.systemui.biometrics.domain.model.BiometricModalities
import com.android.systemui.biometrics.domain.model.BiometricModality
import com.android.systemui.biometrics.domain.model.asBiometricModality
import com.android.systemui.biometrics.shared.model.BiometricModality
import com.android.systemui.biometrics.shared.model.PromptKind
import com.android.systemui.biometrics.shared.model.asBiometricModality
import com.android.systemui.biometrics.ui.BiometricPromptLayout
import com.android.systemui.biometrics.ui.viewmodel.FingerprintStartMode
import com.android.systemui.biometrics.ui.viewmodel.PromptMessage
@@ -396,7 +396,6 @@ private class Spaghetti(

    private var lifecycleScope: CoroutineScope? = null
    private var modalities: BiometricModalities = BiometricModalities()
    private var faceFailedAtLeastOnce = false
    private var legacyCallback: Callback? = null

    override var legacyIconController: AuthIconController? = null
@@ -476,19 +475,15 @@ private class Spaghetti(
        viewModel.ensureFingerprintHasStarted(isDelayed = true)

        applicationScope.launch {
            val suppress =
                modalities.hasFaceAndFingerprint &&
                    (failedModality == BiometricModality.Face) &&
                    faceFailedAtLeastOnce
            if (failedModality == BiometricModality.Face) {
                faceFailedAtLeastOnce = true
            }

            viewModel.showTemporaryError(
                failureReason,
                messageAfterError = modalities.asDefaultHelpMessage(applicationContext),
                authenticateAfterError = modalities.hasFingerprint,
                suppressIfErrorShowing = suppress,
                suppressIf = { currentMessage ->
                    modalities.hasFaceAndFingerprint &&
                        failedModality == BiometricModality.Face &&
                        currentMessage.isError
                },
                failedModality = failedModality,
            )
        }
@@ -501,11 +496,10 @@ private class Spaghetti(
        }

        applicationScope.launch {
            val suppress =
                modalities.hasFaceAndFingerprint && (errorModality == BiometricModality.Face)
            viewModel.showTemporaryError(
                error,
                suppressIfErrorShowing = suppress,
                messageAfterError = modalities.asDefaultHelpMessage(applicationContext),
                authenticateAfterError = modalities.hasFingerprint,
            )
            delay(BiometricPrompt.HIDE_DIALOG_DELAY.toLong())
            legacyCallback?.onAction(Callback.ACTION_ERROR)
@@ -522,6 +516,7 @@ private class Spaghetti(
            viewModel.showTemporaryError(
                help,
                messageAfterError = modalities.asDefaultHelpMessage(applicationContext),
                authenticateAfterError = modalities.hasFingerprint,
                hapticFeedback = false,
            )
        }
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.systemui.biometrics.ui.viewmodel

import com.android.systemui.biometrics.domain.model.BiometricModality
import com.android.systemui.biometrics.shared.model.BiometricModality

/**
 * The authenticated state with the [authenticatedModality] (when [isAuthenticated]) with an
+3 −3
Original line number Diff line number Diff line
@@ -33,9 +33,9 @@ sealed interface PromptMessage {
                else -> ""
            }

    /** If this is an [Error] or [Help] message. */
    val isErrorOrHelp: Boolean
        get() = this is Error || this is Help
    /** If this is an [Error]. */
    val isError: Boolean
        get() = this is Error

    /** An error message. */
    data class Error(val errorMessage: String) : PromptMessage
+17 −15
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.util.Log
import com.android.systemui.biometrics.AuthBiometricView
import com.android.systemui.biometrics.domain.interactor.PromptSelectorInteractor
import com.android.systemui.biometrics.domain.model.BiometricModalities
import com.android.systemui.biometrics.domain.model.BiometricModality
import com.android.systemui.biometrics.shared.model.BiometricModality
import com.android.systemui.biometrics.shared.model.PromptKind
import com.android.systemui.statusbar.VibratorHelper
import javax.inject.Inject
@@ -210,35 +210,33 @@ constructor(
     * Show a temporary error [message] associated with an optional [failedModality] and play
     * [hapticFeedback].
     *
     * An optional [messageAfterError] will be shown via [showAuthenticating] when
     * [authenticateAfterError] is set (or via [showHelp] when not set) after the error is
     * dismissed.
     * The [messageAfterError] will be shown via [showAuthenticating] when [authenticateAfterError]
     * is set (or via [showHelp] when not set) after the error is dismissed.
     *
     * The error is ignored if the user has already authenticated or if [suppressIfErrorShowing] is
     * set and an error message is already showing.
     * The error is ignored if the user has already authenticated or if [suppressIf] is true given
     * the currently showing [PromptMessage].
     */
    suspend fun showTemporaryError(
        message: String,
        messageAfterError: String,
        authenticateAfterError: Boolean,
        suppressIf: (PromptMessage) -> Boolean = { false },
        hapticFeedback: Boolean = true,
        messageAfterError: String = "",
        authenticateAfterError: Boolean = false,
        suppressIfErrorShowing: Boolean = false,
        failedModality: BiometricModality = BiometricModality.None,
    ) = coroutineScope {
        if (_isAuthenticated.value.isAuthenticated) {
            return@coroutineScope
        }
        if (_message.value.isErrorOrHelp && suppressIfErrorShowing) {
            if (_isAuthenticated.value.isNotAuthenticated) {

        _canTryAgainNow.value = supportsRetry(failedModality)
            }

        if (suppressIf(_message.value)) {
            return@coroutineScope
        }

        _isAuthenticating.value = false
        _isAuthenticated.value = PromptAuthState(false)
        _forceMediumSize.value = true
        _canTryAgainNow.value = supportsRetry(failedModality)
        _message.value = PromptMessage.Error(message)
        _legacyState.value = AuthBiometricView.STATE_ERROR

@@ -374,7 +372,9 @@ constructor(
                AuthBiometricView.STATE_AUTHENTICATED
            }

        if (!needsUserConfirmation) {
            vibrator.success(modality)
        }

        messageJob?.cancel()
        messageJob = null
@@ -420,6 +420,8 @@ constructor(
        _message.value = PromptMessage.Empty
        _legacyState.value = AuthBiometricView.STATE_AUTHENTICATED

        vibrator.success(authState.authenticatedModality)

        messageJob?.cancel()
        messageJob = null
    }
Loading