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

Commit 065eef0a authored by Austin Delgado's avatar Austin Delgado
Browse files

Update iconView in biometric prompt to act as a button

When face succeeds during biometric prompt coex, the icon button should
act as a button to support switch and voice access.

Test: verified button works with switch access
Bug: 359394944
Bug: 359423579
Flag: com.android.systemui.bp_icon_a11y
Change-Id: Ifad01107922ac22e78185f17e4aa3203776566f8
parent 646bd519
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -3,3 +3,12 @@ container: "system"

# NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors.

flag {
  name: "bp_icon_a11y"
  namespace: "biometrics_framework"
  description: "Fixes biometric prompt icon not working as button with a11y"
  bug: "359423579"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
+27 −10
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieCompositionFactory
import com.android.systemui.Flags.bpIconA11y
import com.android.systemui.biometrics.Utils.ellipsize
import com.android.systemui.biometrics.shared.model.BiometricModalities
import com.android.systemui.biometrics.shared.model.BiometricModality
@@ -54,6 +55,7 @@ import com.android.systemui.biometrics.ui.viewmodel.FingerprintStartMode
import com.android.systemui.biometrics.ui.viewmodel.PromptMessage
import com.android.systemui.biometrics.ui.viewmodel.PromptSize
import com.android.systemui.biometrics.ui.viewmodel.PromptViewModel
import com.android.systemui.common.ui.view.onTouchListener
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
import com.android.systemui.statusbar.VibratorHelper
@@ -330,6 +332,19 @@ object BiometricViewBinder {

                // reuse the icon as a confirm button
                launch {
                    if (bpIconA11y()) {
                        viewModel.isIconConfirmButton.collect { isButton ->
                            if (isButton) {
                                iconView.onTouchListener { _: View, event: MotionEvent ->
                                    viewModel.onOverlayTouch(event)
                                }
                                iconView.setOnClickListener { viewModel.confirmAuthenticated() }
                            } else {
                                iconView.setOnTouchListener(null)
                                iconView.setOnClickListener(null)
                            }
                        }
                    } else {
                        viewModel.isIconConfirmButton
                            .map { isPending ->
                                when {
@@ -342,6 +357,7 @@ object BiometricViewBinder {
                            }
                            .collect { onTouch -> iconView.setOnTouchListener(onTouch) }
                    }
                }

                // dismiss prompt when authenticated and confirmed
                launch {
@@ -358,6 +374,7 @@ object BiometricViewBinder {
                            // Allow icon to be used as confirmation button with udfps and a11y
                            // enabled
                            if (
                                !bpIconA11y() &&
                                    accessibilityManager.isTouchExplorationEnabled &&
                                    modalities.hasUdfps
                            ) {