From 8455f7f706453aa67c40fadea5071f5fc39ed689 Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 12 Mar 2026 12:47:26 -0500 Subject: [PATCH] PM-33441: bug: Add external link callout for start registration screen (#6646) --- .../startregistration/StartRegistrationScreen.kt | 10 ++++++++-- .../components/dropdown/EnvironmentSelector.kt | 7 ++++++- .../startregistration/StartRegistrationScreenTest.kt | 6 +++--- .../ui/platform/feature/settings/SettingsScreen.kt | 4 +++- ui/src/main/res/values/strings.xml | 2 +- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt index 4c4b91eba9..436857e946 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreen.kt @@ -274,8 +274,14 @@ private fun TermsAndPrivacyText( onPrivacyPolicyClick: () -> Unit, modifier: Modifier = Modifier, ) { - val strTerms = stringResource(id = BitwardenString.terms_of_service) - val strPrivacy = stringResource(id = BitwardenString.privacy_policy) + val strTerms = stringResource( + id = BitwardenString.external_link_format, + formatArgs = arrayOf(stringResource(id = BitwardenString.terms_of_service)), + ) + val strPrivacy = stringResource( + id = BitwardenString.external_link_format, + formatArgs = arrayOf(stringResource(id = BitwardenString.privacy_policy)), + ) Row( horizontalArrangement = Arrangement.Start, verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt index ceb7631d7c..ae5f11609a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dropdown/EnvironmentSelector.kt @@ -97,7 +97,12 @@ fun EnvironmentSelector( if (isHelpEnabled) { BitwardenStandardIconButton( vectorIconRes = BitwardenDrawable.ic_question_circle_small, - contentDescription = stringResource(BitwardenString.help_with_server_geolocations), + contentDescription = stringResource( + id = BitwardenString.external_link_format, + formatArgs = arrayOf( + stringResource(id = BitwardenString.help_with_server_geolocations), + ), + ), onClick = onHelpClick, contentColor = BitwardenTheme.colorScheme.icon.secondary, // Align with design but keep accessible touch target of IconButton. diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreenTest.kt index 6c6e50a51a..9b384178c5 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationScreenTest.kt @@ -185,7 +185,7 @@ class StartRegistrationScreenTest : BitwardenComposeTest() { @Test fun `clicking the server tool tip should send ServerGeologyHelpClickAction`() { composeTestRule - .onNodeWithContentDescription("Help with server geolocations.") + .onNodeWithContentDescription("Help with server geolocations, External link") .performScrollTo() .performClick() @@ -262,7 +262,7 @@ class StartRegistrationScreenTest : BitwardenComposeTest() { fun `when terms and conditions custom action invoked should send TermsClick`() { composeTestRule .onNodeWithText("By continuing, you agree to the Terms of Service and Privacy Policy") - .performCustomAccessibilityAction("Terms of Service") + .performCustomAccessibilityAction("Terms of Service, External link") verify { viewModel.trySendAction(StartRegistrationAction.TermsClick) } } @@ -271,7 +271,7 @@ class StartRegistrationScreenTest : BitwardenComposeTest() { fun `when privacy policy custom action invoked should send TermsClick`() { composeTestRule .onNodeWithText("By continuing, you agree to the Terms of Service and Privacy Policy") - .performCustomAccessibilityAction("Privacy Policy") + .performCustomAccessibilityAction("Privacy Policy, External link") verify { viewModel.trySendAction(StartRegistrationAction.PrivacyPolicyClick) } } diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt index 9996b4ab68..e1e6407a16 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/feature/settings/SettingsScreen.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.customActions +import androidx.compose.ui.semantics.hideFromAccessibility import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -707,6 +708,7 @@ private fun CopyRow( ) { Text( modifier = Modifier + .semantics { hideFromAccessibility() } .padding(end = 16.dp) .weight(1f), text = text(), @@ -715,7 +717,7 @@ private fun CopyRow( ) Icon( painter = rememberVectorPainter(id = BitwardenDrawable.ic_copy), - contentDescription = null, + contentDescription = stringResource(id = BitwardenString.copy), tint = BitwardenTheme.colorScheme.icon.primary, ) } diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index a26963d400..600c962c16 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -766,7 +766,7 @@ Do you want to switch to this account? Write this password down and keep it somewhere safe. Learn about other ways to prevent account lockout Learn about ways to prevent account lockout - Help with server geolocations. + Help with server geolocations Email address (required) Select the link in the email to verify your email address and continue creating your account. Change email address