From 7ab72543a3b76b1e94603c7742d412ef48776dcf Mon Sep 17 00:00:00 2001 From: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:30:34 -0500 Subject: [PATCH] PM-14333 fix case of crowdin translation not adding annotations on string with format args (#4505) --- .../data/autofill/util/AutofillIntentUtils.kt | 2 +- .../ui/platform/base/util/StringResExtensions.kt | 2 +- .../base/util/StringRestExtensionsTest.kt | 16 ++++++++++++++++ .../test/res/values/strings_for_tests_only.xml | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt index f659d18855..537a3b8e53 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt @@ -151,7 +151,7 @@ fun Intent.getTotpCopyIntentOrNull(): AutofillTotpCopyData? = /** * Checks if the given [Activity] was created for Autofill. This is useful to avoid locking the - * vault if one of the Autofill services starts the only only instance of the [MainActivity]. + * vault if one of the Autofill services starts the only instance of the [MainActivity]. */ val Activity.createdForAutofill: Boolean get() = intent.getAutofillSelectionDataOrNull() != null || diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/StringResExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/StringResExtensions.kt index 46992c23f6..6115ac8201 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/StringResExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/StringResExtensions.kt @@ -61,7 +61,7 @@ fun @receiver:StringRes Int.toAnnotatedString( SpannableStringBuilder(resources.getText(this) as SpannedString) } catch (e: ClassCastException) { // the resource did not contain and valid spans so we just return the raw string. - return stringResource(id = this).toAnnotatedString() + return stringResource(id = this, *args).toAnnotatedString() } // Replace any format arguments with the provided arguments. spannableBuilder.applyArgAnnotations(args = args) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/base/util/StringRestExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/base/util/StringRestExtensionsTest.kt index caf3a599e2..a452cabcb2 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/base/util/StringRestExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/base/util/StringRestExtensionsTest.kt @@ -100,4 +100,20 @@ class StringRestExtensionsTest : BaseComposeTest() { .onNodeWithText("On your computer, open a new browser tab and go to ") .assertIsDisplayed() } + + @Suppress("MaxLineLength") + @Test + fun `string with no annotations with args should just be handled as normal annotated string`() { + composeTestRule.setContent { + Text( + text = R.string.test_for_string_with_no_annotations_with_format_arg.toAnnotatedString( + args = arrayOf("this"), + ), + ) + } + + composeTestRule + .onNodeWithText("Nothing special here, except this.") + .assertIsDisplayed() + } } diff --git a/app/src/test/res/values/strings_for_tests_only.xml b/app/src/test/res/values/strings_for_tests_only.xml index 5d552d4ca2..b476c2c7cf 100644 --- a/app/src/test/res/values/strings_for_tests_only.xml +++ b/app/src/test/res/values/strings_for_tests_only.xml @@ -4,6 +4,7 @@ Get emails from Bitwarden for announcements, advice, and research opportunities. Unsubscribe at any time. By continuing, you agree to the Terms of Service and Privacy Policy Nothing special here. + Nothing special here, except %1$s. On your computer, open a new browser tab and go to %1$s