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

Commit 8f6dea7a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add UDFPS a11y overlay for secure lock device" into main

parents 18759aec 0e506b9a
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
@@ -50,6 +51,7 @@ import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieClipSpec
import com.airbnb.lottie.compose.LottieCompositionSpec
@@ -62,6 +64,9 @@ import com.android.compose.modifiers.width
import com.android.systemui.Flags.bpColors
import com.android.systemui.biometrics.BiometricAuthIconAssets
import com.android.systemui.bouncer.shared.model.SecureLockDeviceBouncerActionButtonModel
import com.android.systemui.deviceentry.ui.binder.UdfpsAccessibilityOverlayBinder
import com.android.systemui.deviceentry.ui.view.UdfpsAccessibilityOverlay
import com.android.systemui.deviceentry.ui.viewmodel.AlternateBouncerUdfpsAccessibilityOverlayViewModel
import com.android.systemui.lifecycle.rememberActivated
import com.android.systemui.res.R
import com.android.systemui.securelockdevice.ui.viewmodel.SecureLockDeviceBiometricAuthContentViewModel
@@ -123,6 +128,7 @@ fun SecureLockDeviceContent(
            )
        }

        val hasUdfps: Boolean = secureLockDeviceViewModel.iconViewModel.hasUdfpsState
        val iconSize: Pair<Int, Int> = secureLockDeviceViewModel.iconViewModel.iconSizeState
        val iconBottomPadding =
            dimensionResource(R.dimen.biometric_prompt_portrait_medium_bottom_padding)
@@ -137,6 +143,14 @@ fun SecureLockDeviceContent(
                        .height { iconSize.second },
            )
        }

        val shouldListenForBiometricAuth = secureLockDeviceViewModel.shouldListenForBiometricAuth
        if (hasUdfps && shouldListenForBiometricAuth) {
            UdfpsA11yOverlay(
                viewModel = secureLockDeviceViewModel.udfpsAccessibilityOverlayViewModel,
                modifier = Modifier.fillMaxHeight(),
            )
        }
    }
}

@@ -286,3 +300,19 @@ fun ButtonArea(
        }
    }
}

@Composable
fun UdfpsA11yOverlay(
    viewModel: AlternateBouncerUdfpsAccessibilityOverlayViewModel,
    modifier: Modifier = Modifier,
) {
    AndroidView(
        factory = { context ->
            val view =
                UdfpsAccessibilityOverlay(context).apply { id = R.id.udfps_accessibility_overlay }
            UdfpsAccessibilityOverlayBinder.bind(view, viewModel)
            view
        },
        modifier = modifier,
    )
}
+9 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.deviceentry.domain.interactor.SystemUIDeviceEntryFac
import com.android.systemui.deviceentry.shared.model.FaceMessage
import com.android.systemui.deviceentry.shared.model.FingerprintMessage
import com.android.systemui.deviceentry.shared.model.SuccessFaceAuthenticationStatus
import com.android.systemui.deviceentry.ui.viewmodel.AlternateBouncerUdfpsAccessibilityOverlayViewModel
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.lifecycle.HydratedActivatable
import com.android.systemui.scene.shared.flag.SceneContainerFlag
@@ -72,10 +73,18 @@ constructor(
    private val deviceEntryFaceAuthInteractor: SystemUIDeviceEntryFaceAuthInteractor,
    deviceEntryFingerprintAuthInteractor: DeviceEntryFingerprintAuthInteractor,
    private val secureLockDeviceInteractor: SecureLockDeviceInteractor,
    val udfpsAccessibilityOverlayViewModel: AlternateBouncerUdfpsAccessibilityOverlayViewModel,
) : HydratedActivatable() {
    /** @see SecureLockDeviceInteractor.isSecureLockDeviceEnabled */
    val isSecureLockDeviceEnabled = secureLockDeviceInteractor.isSecureLockDeviceEnabled

    /** @see SecureLockDeviceInteractor.shouldListenForBiometricAuth */
    val shouldListenForBiometricAuth: Boolean by
        secureLockDeviceInteractor.shouldListenForBiometricAuth.hydratedStateOf(
            traceName = "shouldListenForBiometricAuth",
            initialValue = false,
        )

    /** @see SecureLockDeviceInteractor.enrolledStrongBiometricModalities */
    val enrolledStrongBiometrics = secureLockDeviceInteractor.enrolledStrongBiometricModalities

+12 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.accessibility.domain.interactor.accessibilityInterac
import com.android.systemui.biometrics.domain.interactor.udfpsOverlayInteractor
import com.android.systemui.biometrics.udfpsUtils
import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor
import com.android.systemui.deviceentry.ui.viewmodel.AlternateBouncerUdfpsAccessibilityOverlayViewModel
import com.android.systemui.deviceentry.ui.viewmodel.DeviceEntryUdfpsAccessibilityOverlayViewModel
import com.android.systemui.keyguard.ui.viewmodel.deviceEntryForegroundIconViewModel
import com.android.systemui.keyguard.ui.viewmodel.deviceEntryIconViewModel
@@ -38,3 +39,14 @@ val Kosmos.deviceEntryUdfpsAccessibilityOverlayViewModel by
            deviceEntryFgIconViewModel = deviceEntryForegroundIconViewModel,
        )
    }

val Kosmos.alternateBouncerUdfpsAccessibilityOverlayViewModel by
    Kosmos.Fixture {
        AlternateBouncerUdfpsAccessibilityOverlayViewModel(
            applicationContext = applicationContext,
            deviceEntryUdfpsInteractor = deviceEntryUdfpsInteractor,
            udfpsOverlayInteractor = udfpsOverlayInteractor,
            udfpsUtils = udfpsUtils,
            accessibilityInteractor = accessibilityInteractor,
        )
    }
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.securelockdevice.ui.viewmodel
import android.view.accessibility.accessibilityManager
import com.android.systemui.biometrics.ui.viewmodel.biometricAuthIconViewModelFactory_secureLockDevice
import com.android.systemui.bouncer.domain.interactor.bouncerActionButtonInteractor
import com.android.systemui.deviceentry.data.ui.viewmodel.alternateBouncerUdfpsAccessibilityOverlayViewModel
import com.android.systemui.deviceentry.domain.interactor.biometricMessageInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryFingerprintAuthInteractor
@@ -39,6 +40,7 @@ var Kosmos.secureLockDeviceBiometricAuthContentViewModel by Fixture {
        deviceEntryFaceAuthInteractor = deviceEntryFaceAuthInteractor,
        deviceEntryFingerprintAuthInteractor = deviceEntryFingerprintAuthInteractor,
        secureLockDeviceInteractor = secureLockDeviceInteractor,
        udfpsAccessibilityOverlayViewModel = alternateBouncerUdfpsAccessibilityOverlayViewModel,
    )
}