Use the default message as the primary line for fp/face acquisition messages

Also, stop animating the messages to avoid the flicker for fp/face acquisition messages/primary auth lockout messages.

Fixes: 293476712
Test: verified manually
Test: atest BouncerMessageFactoryTest
Test: atest BouncerMessageInteractorTest
Change-Id: I5539cdaf843de9a1d4a67797a2eb70eed9b6e0d2
This commit is contained in:
Chandru S
2023-08-01 17:25:06 -07:00
parent 42f70e51c3
commit 9b08fcb5e9
5 changed files with 69 additions and 29 deletions

View File

@@ -93,6 +93,7 @@ constructor(
fun createFromPromptReason(
@BouncerPromptReason reason: Int,
userId: Int,
secondaryMsgOverride: String? = null
): BouncerMessageModel? {
val pair =
getBouncerMessage(
@@ -102,21 +103,16 @@ constructor(
)
return pair?.let {
BouncerMessageModel(
message = Message(messageResId = pair.first),
secondaryMessage = Message(messageResId = pair.second)
message = Message(messageResId = pair.first, animate = false),
secondaryMessage =
secondaryMsgOverride?.let {
Message(message = secondaryMsgOverride, animate = false)
}
?: Message(messageResId = pair.second, animate = false)
)
}
}
fun createFromString(
primaryMsg: String? = null,
secondaryMsg: String? = null
): BouncerMessageModel =
BouncerMessageModel(
message = primaryMsg?.let { Message(message = it) },
secondaryMessage = secondaryMsg?.let { Message(message = it) },
)
/**
* Helper method that provides the relevant bouncer message that should be shown for different
* scenarios indicated by [reason]. [securityMode] & [fpAllowedInBouncer] parameters are used to
@@ -159,6 +155,9 @@ constructor(
else -> null
}
}
fun emptyMessage(): BouncerMessageModel =
BouncerMessageModel(Message(message = ""), Message(message = ""))
}
@Retention(AnnotationRetention.SOURCE)

View File

@@ -86,7 +86,11 @@ constructor(
repository.setFingerprintAcquisitionMessage(
if (value != null) {
factory.createFromString(secondaryMsg = value)
factory.createFromPromptReason(
PROMPT_REASON_DEFAULT,
userRepository.getSelectedUserInfo().id,
secondaryMsgOverride = value
)
} else {
null
}
@@ -98,7 +102,11 @@ constructor(
repository.setFaceAcquisitionMessage(
if (value != null) {
factory.createFromString(secondaryMsg = value)
factory.createFromPromptReason(
PROMPT_REASON_DEFAULT,
userRepository.getSelectedUserInfo().id,
secondaryMsgOverride = value
)
} else {
null
}
@@ -110,7 +118,11 @@ constructor(
repository.setCustomMessage(
if (value != null) {
factory.createFromString(secondaryMsg = value)
factory.createFromPromptReason(
PROMPT_REASON_DEFAULT,
userRepository.getSelectedUserInfo().id,
secondaryMsgOverride = value
)
} else {
null
}
@@ -140,8 +152,7 @@ constructor(
// always maps to an empty string.
private fun nullOrEmptyMessage() =
flowOf(
if (featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) null
else factory.createFromString("", "")
if (featureFlags.isEnabled(REVAMPED_BOUNCER_MESSAGES)) null else factory.emptyMessage()
)
val bouncerMessage =

View File

@@ -77,6 +77,22 @@ class BouncerMessageFactoryTest : SysuiTestCase() {
.isEqualTo("Unlock with pattern or fingerprint")
}
@Test
fun bouncerMessages_overridesSecondaryMessageValue() =
testScope.runTest {
val bouncerMessageModel =
bouncerMessageModel(
PIN,
true,
PROMPT_REASON_DEFAULT,
secondaryMessageOverride = "face acquisition message"
)!!
assertThat(context.resources.getString(bouncerMessageModel.message!!.messageResId!!))
.isEqualTo("Unlock with PIN or fingerprint")
assertThat(bouncerMessageModel.secondaryMessage!!.message!!)
.isEqualTo("face acquisition message")
}
@Test
fun bouncerMessages_setsPrimaryAndSecondaryMessage_basedOnSecurityModeAndFpAllowedInBouncer() =
testScope.runTest {
@@ -149,11 +165,16 @@ class BouncerMessageFactoryTest : SysuiTestCase() {
private fun bouncerMessageModel(
mode: KeyguardSecurityModel.SecurityMode,
fpAllowedInBouncer: Boolean,
reason: Int
reason: Int,
secondaryMessageOverride: String? = null,
): BouncerMessageModel? {
whenever(securityModel.getSecurityMode(0)).thenReturn(mode)
whenever(updateMonitor.isFingerprintAllowedInBouncer).thenReturn(fpAllowedInBouncer)
return underTest.createFromPromptReason(reason, 0)
return underTest.createFromPromptReason(
reason,
0,
secondaryMsgOverride = secondaryMessageOverride
)
}
}

View File

@@ -363,8 +363,8 @@ class BouncerMessageRepositoryTest : SysuiTestCase() {
private fun message(primaryResId: Int, secondaryResId: Int): BouncerMessageModel {
return BouncerMessageModel(
message = Message(messageResId = primaryResId),
secondaryMessage = Message(messageResId = secondaryResId)
message = Message(messageResId = primaryResId, animate = false),
secondaryMessage = Message(messageResId = secondaryResId, animate = false)
)
}
private fun message(value: String): BouncerMessageModel {

View File

@@ -150,11 +150,12 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
underTest.setCustomMessage("not empty")
assertThat(repository.customMessage.value)
.isEqualTo(BouncerMessageModel(secondaryMessage = Message(message = "not empty")))
val customMessage = repository.customMessage
assertThat(customMessage.value!!.message!!.messageResId).isEqualTo(keyguard_enter_pin)
assertThat(customMessage.value!!.secondaryMessage!!.message).isEqualTo("not empty")
underTest.setCustomMessage(null)
assertThat(repository.customMessage.value).isNull()
assertThat(customMessage.value).isNull()
}
@Test
@@ -164,11 +165,15 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
underTest.setFaceAcquisitionMessage("not empty")
assertThat(repository.faceAcquisitionMessage.value)
.isEqualTo(BouncerMessageModel(secondaryMessage = Message(message = "not empty")))
val faceAcquisitionMessage = repository.faceAcquisitionMessage
assertThat(faceAcquisitionMessage.value!!.message!!.messageResId)
.isEqualTo(keyguard_enter_pin)
assertThat(faceAcquisitionMessage.value!!.secondaryMessage!!.message)
.isEqualTo("not empty")
underTest.setFaceAcquisitionMessage(null)
assertThat(repository.faceAcquisitionMessage.value).isNull()
assertThat(faceAcquisitionMessage.value).isNull()
}
@Test
@@ -178,11 +183,15 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
underTest.setFingerprintAcquisitionMessage("not empty")
assertThat(repository.fingerprintAcquisitionMessage.value)
.isEqualTo(BouncerMessageModel(secondaryMessage = Message(message = "not empty")))
val fingerprintAcquisitionMessage = repository.fingerprintAcquisitionMessage
assertThat(fingerprintAcquisitionMessage.value!!.message!!.messageResId)
.isEqualTo(keyguard_enter_pin)
assertThat(fingerprintAcquisitionMessage.value!!.secondaryMessage!!.message)
.isEqualTo("not empty")
underTest.setFingerprintAcquisitionMessage(null)
assertThat(repository.fingerprintAcquisitionMessage.value).isNull()
assertThat(fingerprintAcquisitionMessage.value).isNull()
}
@Test