Loading packages/SystemUI/aconfig/biometrics_framework.aconfig +9 −0 Original line number Diff line number Diff line Loading @@ -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 } } packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +27 −10 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 { Loading @@ -342,6 +357,7 @@ object BiometricViewBinder { } .collect { onTouch -> iconView.setOnTouchListener(onTouch) } } } // dismiss prompt when authenticated and confirmed launch { Loading @@ -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 ) { Loading Loading
packages/SystemUI/aconfig/biometrics_framework.aconfig +9 −0 Original line number Diff line number Diff line Loading @@ -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 } }
packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/BiometricViewBinder.kt +27 −10 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 { Loading @@ -342,6 +357,7 @@ object BiometricViewBinder { } .collect { onTouch -> iconView.setOnTouchListener(onTouch) } } } // dismiss prompt when authenticated and confirmed launch { Loading @@ -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 ) { Loading