summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2023-04-21 18:09:20 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-21 18:09:20 +0000
commit269e417a53621c0457d01c58015878d9853ce946 (patch)
tree98d02531f5c827b7572f16b28b37253947cb4019
parentaa3a23f82338dfba3b2d4f3b04508216334a2a99 (diff)
parent9140a682d4e952daa729221ccc1b3dfd838d1657 (diff)
Merge "Accept touches within sensor bounds during ellipse detection" into udc-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetector.kt30
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetectorTest.kt20
2 files changed, 17 insertions, 33 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetector.kt b/packages/SystemUI/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetector.kt
index 9847c10abd5c..baf8d743938d 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetector.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetector.kt
@@ -22,9 +22,7 @@ import android.util.Log
import com.android.systemui.biometrics.EllipseOverlapDetectorParams
import com.android.systemui.dagger.SysUISingleton
import kotlin.math.cos
-import kotlin.math.pow
import kotlin.math.sin
-import kotlin.math.sqrt
private enum class SensorPixelPosition {
OUTSIDE, // Pixel that falls outside of sensor circle
@@ -42,8 +40,8 @@ private val TAG = "EllipseOverlapDetector"
@SysUISingleton
class EllipseOverlapDetector(private val params: EllipseOverlapDetectorParams) : OverlapDetector {
override fun isGoodOverlap(touchData: NormalizedTouchData, nativeSensorBounds: Rect): Boolean {
- // First, check if entire ellipse is within the sensor
- if (isEllipseWithinSensor(touchData, nativeSensorBounds)) {
+ // First, check if touch is within bounding box,
+ if (nativeSensorBounds.contains(touchData.x.toInt(), touchData.y.toInt())) {
return true
}
@@ -119,28 +117,4 @@ class EllipseOverlapDetector(private val params: EllipseOverlapDetectorParams) :
return result <= 1
}
-
- /** Returns whether the entire ellipse is contained within the sensor area */
- private fun isEllipseWithinSensor(
- touchData: NormalizedTouchData,
- nativeSensorBounds: Rect
- ): Boolean {
- val a2 = (touchData.minor / 2.0).pow(2.0)
- val b2 = (touchData.major / 2.0).pow(2.0)
-
- val sin2a = sin(touchData.orientation.toDouble()).pow(2.0)
- val cos2a = cos(touchData.orientation.toDouble()).pow(2.0)
-
- val cx = sqrt(a2 * cos2a + b2 * sin2a)
- val cy = sqrt(a2 * sin2a + b2 * cos2a)
-
- val ellipseRect =
- Rect(
- (-cx + touchData.x).toInt(),
- (-cy + touchData.y).toInt(),
- (cx + touchData.x).toInt(),
- (cy + touchData.y).toInt()
- )
- return nativeSensorBounds.contains(ellipseRect)
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetectorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetectorTest.kt
index 4b41537208da..fb3c1854e996 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetectorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/udfps/EllipseOverlapDetectorTest.kt
@@ -61,7 +61,7 @@ class EllipseOverlapDetectorTest(val testCase: TestCase) : SysuiTestCase() {
@JvmStatic
fun data(): List<TestCase> =
listOf(
- genTestCases(
+ genPositiveTestCases(
innerXs = listOf(SENSOR.left, SENSOR.right, SENSOR.centerX()),
innerYs = listOf(SENSOR.top, SENSOR.bottom, SENSOR.centerY()),
outerXs = listOf(SENSOR.left - 1, SENSOR.right + 1),
@@ -70,9 +70,7 @@ class EllipseOverlapDetectorTest(val testCase: TestCase) : SysuiTestCase() {
major = 300f,
expected = true
),
- genTestCases(
- innerXs = listOf(SENSOR.left, SENSOR.right),
- innerYs = listOf(SENSOR.top, SENSOR.bottom),
+ genNegativeTestCase(
outerXs = listOf(SENSOR.left - 1, SENSOR.right + 1),
outerYs = listOf(SENSOR.top - 1, SENSOR.bottom + 1),
minor = 100f,
@@ -107,7 +105,7 @@ private val TOUCH_DATA =
private val SENSOR = Rect(100 /* left */, 200 /* top */, 300 /* right */, 400 /* bottom */)
-private fun genTestCases(
+private fun genPositiveTestCases(
innerXs: List<Int>,
innerYs: List<Int>,
outerXs: List<Int>,
@@ -122,3 +120,15 @@ private fun genTestCases(
}
}
}
+
+private fun genNegativeTestCase(
+ outerXs: List<Int>,
+ outerYs: List<Int>,
+ minor: Float,
+ major: Float,
+ expected: Boolean
+): List<EllipseOverlapDetectorTest.TestCase> {
+ return outerXs.flatMap { x ->
+ outerYs.map { y -> EllipseOverlapDetectorTest.TestCase(x, y, minor, major, expected) }
+ }
+}