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