summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shawn Lin <shawnlin@google.com> 2023-05-03 14:55:17 +0800
committer Shawn Lin <shawnlin@google.com> 2023-05-04 15:50:33 +0800
commit3b89f1d09a628606f0c73fc147b970d6c172191c (patch)
tree7d02e2f65ff415dd233427f966eef97a10dc6eff
parentc9174e2f86bcae915585046af258fd434a8decd9 (diff)
Fix incorrect talkback text for non-sfps devices
Set the string id to fingerprint_dialog_touch_sensor for non-sfps devices. Bug: 280497338 Test: atest AuthBiometricFingerprintIconControllerTest Test: 1. open talkback in settings 2. trigger biometric prompt dialog 3. move the focus to the fingerprint icon and check the result Change-Id: I13fff5e119d0366738134e13a95596abba1f0742
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt11
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt100
2 files changed, 109 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
index 5499d2c07181..f04fdfff67f1 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt
@@ -23,6 +23,7 @@ import android.hardware.fingerprint.FingerprintManager
import android.view.DisplayInfo
import android.view.Surface
import android.view.View
+import androidx.annotation.VisibleForTesting
import com.airbnb.lottie.LottieAnimationView
import com.android.settingslib.widget.LottieColorUtils
import com.android.systemui.R
@@ -133,13 +134,19 @@ open class AuthBiometricFingerprintIconController(
}
}
- private fun getIconContentDescription(@BiometricState newState: Int): CharSequence? {
+ @VisibleForTesting
+ fun getIconContentDescription(@BiometricState newState: Int): CharSequence? {
val id = when (newState) {
STATE_IDLE,
STATE_AUTHENTICATING_ANIMATING_IN,
STATE_AUTHENTICATING,
STATE_PENDING_CONFIRMATION,
- STATE_AUTHENTICATED -> R.string.security_settings_sfps_enroll_find_sensor_message
+ STATE_AUTHENTICATED ->
+ if (isSideFps) {
+ R.string.security_settings_sfps_enroll_find_sensor_message
+ } else {
+ R.string.fingerprint_dialog_touch_sensor
+ }
STATE_ERROR,
STATE_HELP -> R.string.biometric_dialog_try_again
else -> null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt
new file mode 100644
index 000000000000..cac618b21dc7
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconControllerTest.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics
+
+import android.content.Context
+import android.hardware.biometrics.SensorProperties
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintSensorProperties
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import android.view.ViewGroup.LayoutParams
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.airbnb.lottie.LottieAnimationView
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when` as whenEver
+import org.mockito.junit.MockitoJUnit
+
+private const val SENSOR_ID = 1
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class AuthBiometricFingerprintIconControllerTest : SysuiTestCase() {
+
+ @JvmField @Rule var mockitoRule = MockitoJUnit.rule()
+
+ @Mock private lateinit var iconView: LottieAnimationView
+ @Mock private lateinit var iconViewOverlay: LottieAnimationView
+ @Mock private lateinit var layoutParam: LayoutParams
+ @Mock private lateinit var fingerprintManager: FingerprintManager
+
+ private lateinit var controller: AuthBiometricFingerprintIconController
+
+ @Before
+ fun setUp() {
+ context.addMockSystemService(Context.FINGERPRINT_SERVICE, fingerprintManager)
+ whenEver(iconView.layoutParams).thenReturn(layoutParam)
+ whenEver(iconViewOverlay.layoutParams).thenReturn(layoutParam)
+ }
+
+ @Test
+ fun testIconContentDescription_SfpsDevice() {
+ setupFingerprintSensorProperties(FingerprintSensorProperties.TYPE_POWER_BUTTON)
+ controller = AuthBiometricFingerprintIconController(context, iconView, iconViewOverlay)
+
+ assertThat(controller.getIconContentDescription(AuthBiometricView.STATE_AUTHENTICATING))
+ .isEqualTo(
+ context.resources.getString(
+ R.string.security_settings_sfps_enroll_find_sensor_message
+ )
+ )
+ }
+
+ @Test
+ fun testIconContentDescription_NonSfpsDevice() {
+ setupFingerprintSensorProperties(FingerprintSensorProperties.TYPE_UDFPS_OPTICAL)
+ controller = AuthBiometricFingerprintIconController(context, iconView, iconViewOverlay)
+
+ assertThat(controller.getIconContentDescription(AuthBiometricView.STATE_AUTHENTICATING))
+ .isEqualTo(context.resources.getString(R.string.fingerprint_dialog_touch_sensor))
+ }
+
+ private fun setupFingerprintSensorProperties(sensorType: Int) {
+ whenEver(fingerprintManager.sensorPropertiesInternal)
+ .thenReturn(
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ SENSOR_ID,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ listOf() /* componentInfo */,
+ sensorType,
+ true /* halControlsIllumination */,
+ true /* resetLockoutRequiresHardwareAuthToken */,
+ listOf() /* sensorLocations */
+ )
+ )
+ )
+ }
+}