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

Commit cac9ee92 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/27417143']...

Merge cherrypicks of ['googleplex-android-review.googlesource.com/27417143'] into sparse-11858898-L53800030003940296.
SPARSE_CHANGE: I18c15685bb0b9ac9c2c1e222d730d9bb27114de1

Change-Id: I0a7be35c620f117867bd145216580ae4999952fb
parents 4ac6db0a fe11c6cc
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -41,7 +41,10 @@ import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.withContext

@@ -52,7 +55,7 @@ import kotlinx.coroutines.withContext
 */
interface FingerprintPropertyRepository {
    /** Whether the fingerprint properties have been initialized yet. */
    val propertiesInitialized: StateFlow<Boolean>
    val propertiesInitialized: Flow<Boolean>

    /** The id of fingerprint sensor. */
    val sensorId: Flow<Int>
@@ -110,15 +113,6 @@ constructor(
                initialValue = UNINITIALIZED_PROPS,
            )

    override val propertiesInitialized: StateFlow<Boolean> =
        props
            .map { it != UNINITIALIZED_PROPS }
            .stateIn(
                applicationScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = props.value != UNINITIALIZED_PROPS,
            )

    override val sensorId: Flow<Int> = props.map { it.sensorId }

    override val strength: Flow<SensorStrength> = props.map { it.sensorStrength.toSensorStrength() }
@@ -139,6 +133,22 @@ constructor(
            }
        }

    override val propertiesInitialized: Flow<Boolean> =
        combine(
                props
                    .map { it != UNINITIALIZED_PROPS }
                    .onStart { emit(props.value != UNINITIALIZED_PROPS) },
                sensorId.map {}.onStart { if (props.value != UNINITIALIZED_PROPS) emit(Unit) },
                sensorLocations
                    .map {}
                    .onStart { if (props.value != UNINITIALIZED_PROPS) emit(Unit) },
                sensorType.map {}.onStart { if (props.value != UNINITIALIZED_PROPS) emit(Unit) },
                strength.map {}.onStart { if (props.value != UNINITIALIZED_PROPS) emit(Unit) },
            ) { initialized, _, _, _, _ ->
                initialized
            }
            .distinctUntilChanged()

    companion object {
        private const val TAG = "FingerprintPropertyRepositoryImpl"
        private val UNINITIALIZED_PROPS =
+2 −2
Original line number Diff line number Diff line
@@ -46,13 +46,13 @@ constructor(
    displayStateInteractor: DisplayStateInteractor,
    udfpsOverlayInteractor: UdfpsOverlayInteractor,
) {
    val propertiesInitialized: StateFlow<Boolean> = repository.propertiesInitialized
    val propertiesInitialized: Flow<Boolean> = repository.propertiesInitialized
    val isUdfps: StateFlow<Boolean> =
        repository.sensorType
            .map { it.isUdfps() }
            .stateIn(
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
                started = SharingStarted.Eagerly,
                initialValue = repository.sensorType.value.isUdfps(),
            )

+14 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.deviceentry.domain.interactor

import com.android.systemui.biometrics.domain.interactor.FingerprintPropertyInteractor
import com.android.systemui.biometrics.shared.model.SensorLocation
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
@@ -58,4 +59,17 @@ constructor(
                flowOf(false)
            }
        }

    /**
     * Location of the under-display fingerprint sensor on the display. Null if the device does not
     * support UDFPS.
     */
    val udfpsLocation: Flow<SensorLocation?> =
        isUdfpsSupported.flatMapLatest {
            if (it) {
                fingerprintPropertyInteractor.sensorLocation
            } else {
                flowOf(null)
            }
        }
}
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ constructor(
    private val refreshEvents: Flow<Unit> =
        merge(
            configurationInteractor.onAnyConfigurationChange,
            fingerprintPropertyInteractor.propertiesInitialized.filter { it }.map { Unit },
            fingerprintPropertyInteractor.propertiesInitialized.filter { it }.map {},
        )

    init {
+23 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context
import android.graphics.Point
import android.graphics.Rect
import android.util.DisplayMetrics
import android.util.Log
import android.view.View
import android.view.WindowManager
import androidx.annotation.VisibleForTesting
@@ -116,6 +117,10 @@ constructor(
    override fun applyConstraints(constraintSet: ConstraintSet) {
        val isUdfpsSupported =
            if (DeviceEntryUdfpsRefactor.isEnabled) {
                Log.d(
                    "DefaultDeviceEntrySection",
                    "isUdfpsSupported=${deviceEntryIconViewModel.get().isUdfpsSupported.value}"
                )
                deviceEntryIconViewModel.get().isUdfpsSupported.value
            } else {
                authController.isUdfpsSupported
@@ -138,9 +143,25 @@ constructor(
        val iconRadiusPx = (defaultDensity * 36).toInt()

        if (isUdfpsSupported) {
            if (DeviceEntryUdfpsRefactor.isEnabled) {
                deviceEntryIconViewModel.get().udfpsLocation.value?.let { udfpsLocation ->
                    Log.d(
                        "DeviceEntrySection",
                        "udfpsLocation=$udfpsLocation" +
                            " unusedAuthController=${authController.udfpsLocation}"
                    )
                    centerIcon(
                        Point(udfpsLocation.centerX.toInt(), udfpsLocation.centerY.toInt()),
                        udfpsLocation.radius,
                        constraintSet
                    )
                }
            } else {
                authController.udfpsLocation?.let { udfpsLocation ->
                    Log.d("DeviceEntrySection", "udfpsLocation=$udfpsLocation")
                    centerIcon(udfpsLocation, authController.udfpsRadius, constraintSet)
                }
            }
        } else {
            centerIcon(
                Point(
Loading