summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Beverly <beverlyt@google.com> 2022-09-16 21:42:21 +0000
committer Beverly <beverlyt@google.com> 2022-09-16 22:58:55 +0000
commit7d7d64032e7844aa526b668b3b49ea0d3a2110a4 (patch)
tree203e1b304fe512097a1a423792ca38e6c96a6d3c
parent88deb417100bb49a325bb9078c3d3b72f16b4b7b (diff)
Update FP sensor location before showing dwellAnim
The location may have changed if the resolution changed. The fingerprint location is cached in the AuthController. Test: atest AuthRippleControllerTest Test: change the resolution and then auth with UDFPS, see that the dwell ripple is in the correct spot Fixes: 246741099 Change-Id: I8b0ad2c9b400e410c2ee343fe3c18de53aa0798b
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt26
2 files changed, 29 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
index d7bf261b4bbd..734e941dd1ce 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
@@ -23,7 +23,6 @@ import android.content.Context
import android.graphics.Point
import android.hardware.biometrics.BiometricFingerprintConstants
import android.hardware.biometrics.BiometricSourceType
-import android.util.Log
import androidx.annotation.VisibleForTesting
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
@@ -95,7 +94,6 @@ class AuthRippleController @Inject constructor(
public override fun onViewAttached() {
authController.addCallback(authControllerCallback)
updateRippleColor()
- updateSensorLocation()
updateUdfpsDependentParams()
udfpsController?.addCallback(udfpsControllerCallback)
configurationController.addCallback(configurationChangedListener)
@@ -237,7 +235,11 @@ class AuthRippleController @Inject constructor(
}
private fun showDwellRipple() {
- mView.startDwellRipple(statusBarStateController.isDozing)
+ updateSensorLocation()
+ fingerprintSensorLocation?.let {
+ mView.setFingerprintSensorLocation(it, udfpsRadius)
+ mView.startDwellRipple(statusBarStateController.isDozing)
+ }
}
private val keyguardUpdateMonitorCallback =
@@ -291,13 +293,6 @@ class AuthRippleController @Inject constructor(
private val udfpsControllerCallback =
object : UdfpsController.Callback {
override fun onFingerDown() {
- if (fingerprintSensorLocation == null) {
- Log.e("AuthRipple", "fingerprintSensorLocation=null onFingerDown. " +
- "Skip showing dwell ripple")
- return
- }
-
- mView.setFingerprintSensorLocation(fingerprintSensorLocation!!, udfpsRadius)
showDwellRipple()
}
@@ -310,12 +305,10 @@ class AuthRippleController @Inject constructor(
object : AuthController.Callback {
override fun onAllAuthenticatorsRegistered() {
updateUdfpsDependentParams()
- updateSensorLocation()
}
override fun onUdfpsLocationChanged() {
updateUdfpsDependentParams()
- updateSensorLocation()
}
}
@@ -345,13 +338,11 @@ class AuthRippleController @Inject constructor(
"\n\tudfpsRadius=$udfpsRadius")
}
"fingerprint" -> {
- updateSensorLocation()
pw.println("fingerprint ripple sensorLocation=$fingerprintSensorLocation")
showUnlockRipple(BiometricSourceType.FINGERPRINT)
}
"face" -> {
// note: only shows when about to proceed to the home screen
- updateSensorLocation()
pw.println("face ripple sensorLocation=$faceSensorLocation")
showUnlockRipple(BiometricSourceType.FACE)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
index 44ef922d2c39..37bb0c296735 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt
@@ -18,6 +18,7 @@ package com.android.systemui.biometrics
import android.graphics.Point
import android.hardware.biometrics.BiometricSourceType
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
@@ -76,6 +77,7 @@ class AuthRippleControllerTest : SysuiTestCase() {
@Mock private lateinit var udfpsController: UdfpsController
@Mock private lateinit var statusBarStateController: StatusBarStateController
@Mock private lateinit var lightRevealScrim: LightRevealScrim
+ @Mock private lateinit var fpSensorProp: FingerprintSensorPropertiesInternal
@Before
fun setUp() {
@@ -86,6 +88,7 @@ class AuthRippleControllerTest : SysuiTestCase() {
.startMocking()
`when`(RotationUtils.getRotation(context)).thenReturn(RotationUtils.ROTATION_NONE)
+ `when`(authController.udfpsProps).thenReturn(listOf(fpSensorProp))
`when`(udfpsControllerProvider.get()).thenReturn(udfpsController)
controller = AuthRippleController(
@@ -132,7 +135,7 @@ class AuthRippleControllerTest : SysuiTestCase() {
false /* isStrongBiometric */)
// THEN update sensor location and show ripple
- verify(rippleView).setFingerprintSensorLocation(fpsLocation, -1f)
+ verify(rippleView).setFingerprintSensorLocation(fpsLocation, 0f)
verify(rippleView).startUnlockedRipple(any())
}
@@ -155,7 +158,7 @@ class AuthRippleControllerTest : SysuiTestCase() {
false /* isStrongBiometric */)
// THEN update sensor location and show ripple
- verify(rippleView).setFingerprintSensorLocation(fpsLocation, -1f)
+ verify(rippleView).setFingerprintSensorLocation(fpsLocation, 0f)
verify(rippleView).startUnlockedRipple(any())
}
@@ -342,4 +345,23 @@ class AuthRippleControllerTest : SysuiTestCase() {
captor.value.onUiModeChanged()
verify(rippleView).setLockScreenColor(ArgumentMatchers.anyInt())
}
+
+ @Test
+ fun testUdfps_onFingerDown_showDwellRipple() {
+ // GIVEN view is already attached
+ controller.onViewAttached()
+ val captor = ArgumentCaptor.forClass(UdfpsController.Callback::class.java)
+ verify(udfpsController).addCallback(captor.capture())
+
+ // GIVEN fp is updated to Point(5, 5)
+ val fpsLocation = Point(5, 5)
+ `when`(authController.fingerprintSensorLocation).thenReturn(fpsLocation)
+
+ // WHEN finger is down
+ captor.value.onFingerDown()
+
+ // THEN update sensor location and show ripple
+ verify(rippleView).setFingerprintSensorLocation(fpsLocation, 0f)
+ verify(rippleView).startDwellRipple(false)
+ }
}