diff options
6 files changed, 23 insertions, 6 deletions
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index b9478018d7d3..0267454c9161 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1905,4 +1905,7 @@ <!-- Bouncer user switcher margins --> <dimen name="bouncer_user_switcher_view_mode_user_switcher_bottom_margin">0dp</dimen> <dimen name="bouncer_user_switcher_view_mode_view_flipper_bottom_margin">0dp</dimen> + + <!-- UDFPS view attributes --> + <dimen name="udfps_icon_size">6mm</dimen> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt index 38043b4020e5..f4a2811a1b5a 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt @@ -16,6 +16,7 @@ package com.android.systemui.biometrics.domain.interactor +import android.content.Context import android.view.MotionEvent import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams @@ -23,12 +24,15 @@ import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLoggin import com.android.systemui.common.coroutine.ConflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.res.R import com.android.systemui.user.domain.interactor.SelectedUserInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn /** Encapsulates business logic for interacting with the UDFPS overlay. */ @@ -36,10 +40,12 @@ import kotlinx.coroutines.flow.stateIn class UdfpsOverlayInteractor @Inject constructor( + @Application context: Context, private val authController: AuthController, private val selectedUserInteractor: SelectedUserInteractor, @Application scope: CoroutineScope ) { + private val iconSize: Int = context.resources.getDimensionPixelSize(R.dimen.udfps_icon_size) /** Whether a touch is within the under-display fingerprint sensor area */ fun isTouchWithinUdfpsArea(ev: MotionEvent): Boolean { @@ -70,6 +76,14 @@ constructor( } .stateIn(scope, started = SharingStarted.Eagerly, initialValue = UdfpsOverlayParams()) + // Padding between the fingerprint icon and its bounding box in pixels. + val iconPadding: Flow<Int> = + udfpsOverlayParams.map { params -> + val sensorWidth = params.nativeSensorBounds.right - params.nativeSensorBounds.left + val nativePadding = (sensorWidth - iconSize) / 2 + (nativePadding * params.scaleFactor).toInt() + } + companion object { private const val TAG = "UdfpsOverlayInteractor" } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryForegroundViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryForegroundViewModel.kt index 9a50d8370525..fe0b3656c3d7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryForegroundViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DeviceEntryForegroundViewModel.kt @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel import android.content.Context import com.android.settingslib.Utils +import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor import com.android.systemui.common.ui.data.repository.ConfigurationRepository import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor @@ -26,7 +27,6 @@ import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.ui.view.DeviceEntryIconView import com.android.systemui.res.R import javax.inject.Inject -import kotlin.math.roundToInt import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine @@ -45,6 +45,7 @@ constructor( deviceEntryUdfpsInteractor: DeviceEntryUdfpsInteractor, transitionInteractor: KeyguardTransitionInteractor, deviceEntryIconViewModel: DeviceEntryIconViewModel, + udfpsOverlayInteractor: UdfpsOverlayInteractor, ) { private val isShowingAod: Flow<Boolean> = transitionInteractor.startedKeyguardState.map { keyguardState -> @@ -73,11 +74,7 @@ constructor( isTransitionToAod && isUdfps } .distinctUntilChanged() - private val padding: Flow<Int> = - configurationRepository.scaleForResolution.map { scale -> - (context.resources.getDimensionPixelSize(R.dimen.lock_icon_padding) * scale) - .roundToInt() - } + private val padding: Flow<Int> = udfpsOverlayInteractor.iconPadding val viewModel: Flow<ForegroundIconViewModel> = combine( diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index 91219f02818c..0ee09390d03a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -151,6 +151,7 @@ open class AuthContainerViewTest : SysuiTestCase() { ) udfpsOverlayInteractor = UdfpsOverlayInteractor( + context, authController, selectedUserInteractor, testScope.backgroundScope, diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt index bbf471c34cc7..6a686726b959 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt @@ -108,6 +108,7 @@ class UdfpsOverlayInteractorTest : SysuiTestCase() { private fun createUdpfsOverlayInteractor() { underTest = UdfpsOverlayInteractor( + context, authController, selectedUserInteractor, testScope.backgroundScope diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt index 7475235cfeae..6170e0c2db1a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt @@ -128,6 +128,7 @@ internal class PromptViewModelTest(private val testCase: TestCase) : SysuiTestCa ) udfpsOverlayInteractor = UdfpsOverlayInteractor( + context, authController, selectedUserInteractor, testScope.backgroundScope |