Control SystemUI behavior for rest to unlock using a device specific flag
Not all SideFPS sensor supported will support rest to unlock
Bug: 317164917
Test: all unit tests pass
Flag: ACONFIG com.android.systemui.rest_to_unlock TEAMFOOD
Change-Id: I4c92f8ae676e571b63474c7a1216c463227b283d
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt
similarity index 98%
rename from packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt
rename to packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt
index 8adee8d..8d6d052 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractorTest.kt
@@ -24,6 +24,7 @@
import android.view.WindowInsets
import android.view.WindowManager
import android.view.WindowMetrics
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider
@@ -61,7 +62,6 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
import org.mockito.Mock
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
@@ -69,7 +69,7 @@
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
-@RunWith(JUnit4::class)
+@RunWith(AndroidJUnit4::class)
class SideFpsSensorInteractorTest : SysuiTestCase() {
private val kosmos = testKosmos()
@@ -104,6 +104,7 @@
contextDisplayInfo.uniqueId = "current-display"
whenever(fingerprintInteractiveToAuthProvider.enabledForCurrentUser)
.thenReturn(isRestToUnlockEnabled)
+ overrideResource(R.bool.config_restToUnlockSupported, true)
underTest =
SideFpsSensorInteractor(
mContext,
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 5c362b2..10f7c4d 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -962,6 +962,9 @@
<!-- Whether to show bottom sheets edge to edge -->
<bool name="config_edgeToEdgeBottomSheetDialog">true</bool>
+ <!-- Device specific config that controls whether rest to unlock feature is supported. -->
+ <bool name="config_restToUnlockSupported">false</bool>
+
<!--
Time in milliseconds the user has to touch the side FPS sensor to successfully authenticate when
the screen is turned off with AOD not enabled.
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractor.kt
index c320350..348b54e 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/SideFpsSensorInteractor.kt
@@ -53,6 +53,9 @@
private val logger: SideFpsLogger,
) {
+ private val isProlongedTouchEnabledForDevice =
+ context.resources.getBoolean(R.bool.config_restToUnlockSupported)
+
private val sensorLocationForCurrentDisplay =
combine(
displayStateInteractor.displayChanges,
@@ -82,7 +85,7 @@
.onEach { logger.authDurationChanged(it) }
val isProlongedTouchRequiredForAuthentication: Flow<Boolean> =
- if (fingerprintInteractiveToAuthProvider.isEmpty) {
+ if (fingerprintInteractiveToAuthProvider.isEmpty || !isProlongedTouchEnabledForDevice) {
flowOf(false)
} else {
combine(