Update PromptSelectorInteractor resetPrompt
Don't reset the current view if the resetPrompt call is for an invalid
requestId.
Bug: 431279910
Test: BiometricSimpleTests
Flag: EXEMPT bugfix
Change-Id: Ia539344274a9a029936a9d071321a78ddcc18d25
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractorImplTest.kt
index b25e3ab..539f1be 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractorImplTest.kt
@@ -469,6 +469,28 @@
verifyUnset()
}
+ @Test
+ fun resetPrompt_onlyResetsViewForCurrentRequestId() =
+ testScope.runTest {
+ setUserCredentialType(isPassword = true)
+ val currentView by collectLastValue(interactor.currentView)
+ val requestId by collectLastValue(promptRepository.requestId)
+
+ setPrompt(onSwitchToCredential = true)
+ assertThat(currentView).isEqualTo(BiometricPromptView.CREDENTIAL)
+ assertThat(requestId).isEqualTo(REQUEST_ID)
+
+ interactor.resetPrompt(0L)
+
+ assertThat(currentView).isEqualTo(BiometricPromptView.CREDENTIAL)
+ assertThat(requestId).isEqualTo(REQUEST_ID)
+
+ interactor.resetPrompt(REQUEST_ID)
+
+ assertThat(currentView).isEqualTo(BiometricPromptView.BIOMETRIC)
+ verifyUnset()
+ }
+
private fun setPrompt(
info: PromptInfo = basicPromptInfo(),
onSwitchToCredential: Boolean = false,
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractor.kt
index ea55e413..f3ab434 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/PromptSelectorInteractor.kt
@@ -405,7 +405,10 @@
}
override fun resetPrompt(requestId: Long) {
- _currentView.value = BiometricPromptView.BIOMETRIC
+ val currentRequestId = promptRepository.requestId.value
+ if (currentRequestId != null && currentRequestId == requestId) {
+ _currentView.value = BiometricPromptView.BIOMETRIC
+ }
promptRepository.unsetPrompt(requestId)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakePromptRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakePromptRepository.kt
index fbc6124..5ef2329 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakePromptRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakePromptRepository.kt
@@ -82,14 +82,16 @@
}
override fun unsetPrompt(requestId: Long) {
- _promptInfo.value = null
- _userId.value = null
- _modalities.value = BiometricModalities()
- _requestId.value = null
- _challenge.value = null
- _promptKind.value = PromptKind.None
- _opPackageName.value = null
- _isConfirmationRequired.value = false
+ if (requestId == _requestId.value) {
+ _promptInfo.value = null
+ _userId.value = null
+ _modalities.value = BiometricModalities()
+ _requestId.value = null
+ _challenge.value = null
+ _promptKind.value = PromptKind.None
+ _opPackageName.value = null
+ _isConfirmationRequired.value = false
+ }
}
fun setIsShowing(showing: Boolean) {