diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt b/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt index 4f6023b54fa95..d767c47caeac2 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactory.kt @@ -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) diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt index d06dd8e1c1241..fe01d081e60ca 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractor.kt @@ -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 = diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt index 992ee1a83254b..77dd9eeb261cc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/factory/BouncerMessageFactoryTest.kt @@ -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 + ) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt index ade09b916df40..e1b608b6f544a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/data/repo/BouncerMessageRepositoryTest.kt @@ -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 { diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt index 8e5256e970a30..283c02f925e45 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt @@ -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