Skip to content

PM-29871: Add additional callouts for external links in the app#6614

Open
david-livefront wants to merge 1 commit intomainfrom
PM-29871-external-links
Open

PM-29871: Add additional callouts for external links in the app#6614
david-livefront wants to merge 1 commit intomainfrom
PM-29871-external-links

Conversation

@david-livefront
Copy link
Collaborator

@david-livefront david-livefront commented Mar 4, 2026

🎟️ Tracking

PM-29871

📔 Objective

This PR adds additional callouts to external links within the app. This was done by adding the trailing , Eternal link announcement or by ensuring that all links have custom accessibility actions associated with them.

@david-livefront david-livefront requested a review from a team as a code owner March 4, 2026 21:52
@david-livefront david-livefront added app:password-manager Bitwarden Password Manager app context app:authenticator Bitwarden Authenticator app context ai-review Request a Claude code review t:bug Change Type - Bug labels Mar 4, 2026
@claude
Copy link
Contributor

claude bot commented Mar 4, 2026

Claude finished @david-livefront's task in 4m 6s —— View job


Pull Request Review: PM-29871 - Add additional callouts for external links in the app

Summary

This PR improves accessibility by adding "External link" callouts to help buttons and overflow menu items that navigate to external URLs. The implementation is clean and well-structured.

Changes reviewed:

  • New BitwardenHelpButtonData model (renamed from TooltipData) with explicit isExternalLink flag
  • New BitwardenHelpIconButton composable centralizing help button UI
  • New BitwardenDropdownMenuItem composable handling external link announcements in overflow menus
  • Migration of QR code screens to use BitwardenHyperTextLink for built-in accessibility actions
  • Custom accessibility action added for "Learn more" link in authenticator settings

Reviewed for: security, correctness, breaking changes, performance, accessibility patterns

Analysis

Correctness: All changes verified correct.

  • The TooltipData to BitwardenHelpButtonData rename is fully migrated (zero remaining TooltipData references).
  • QR code screen color changes from Color.White to BitwardenTheme.colorScheme.text.primary are safe because both screens wrap content in CompositionLocalProvider(LocalBitwardenColorScheme provides darkBitwardenColorScheme), so themed colors resolve to appropriate dark-mode values.
  • BitwardenDropdownMenuItem uses mergeDescendants = true with custom contentDescription on the parent and hideFromAccessibility() on the child Text, which is the correct pattern to avoid double-announcement in TalkBack.
  • BitwardenHyperTextLink provides built-in CustomAccessibilityAction, correctly replacing the previous manual semantics blocks in the QR code screens.
  • isExternalLink is a required parameter on BitwardenHelpButtonData (no default), which correctly forces all callers to be explicit about intent.
  • The default false on OverflowMenuItemData.isExternalLink is appropriate since most overflow items are internal actions.

Tests: Updated to match new content descriptions with ", External link" suffix.

Verdict

No issues found. The refactoring reduces duplication, improves accessibility consistency, and the architectural decisions (centralizing help button logic, explicit external link flags) are sound.

Approval: This PR is ready to merge. ✅

* @property isExternalLink Indicates that this button will launch an external link.
*/
data class TooltipData(
data class BitwardenHelpButtonData(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved this to be more associated with the new BitwardenHelpIconButton. Additionally, I renamed it to match the new button and distinguish it from the existing Tooltips we already have in the app.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 4, 2026

Logo
Checkmarx One – Scan Summary & Details302b0ae8-e7b0-4601-8357-ce1ddb8c0640

Great job! No new security vulnerabilities introduced in this pull request

@codecov
Copy link

codecov bot commented Mar 4, 2026

Codecov Report

❌ Patch coverage is 92.15686% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.58%. Comparing base (aa23d5e) to head (aeb1b41).

Files with missing lines Patch % Lines
...tor/ui/platform/feature/settings/SettingsScreen.kt 77.77% 2 Missing ⚠️
...en/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt 88.88% 1 Missing ⚠️
...thenticator/feature/qrcodescan/QrCodeScanScreen.kt 90.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #6614      +/-   ##
==========================================
- Coverage   85.90%   85.58%   -0.33%     
==========================================
  Files         804      932     +128     
  Lines       57370    59691    +2321     
  Branches     8307     8363      +56     
==========================================
+ Hits        49284    51085    +1801     
- Misses       5203     5703     +500     
- Partials     2883     2903      +20     
Flag Coverage Δ
app-data 17.53% <0.00%> (+<0.01%) ⬆️
app-ui-auth-tools 21.19% <5.88%> (+0.30%) ⬆️
app-ui-platform 15.68% <11.76%> (+0.60%) ⬆️
app-ui-vault 26.45% <43.13%> (+0.66%) ⬆️
authenticator 6.66% <31.37%> (-0.02%) ⬇️
lib-core-network-bridge 4.28% <0.00%> (+<0.01%) ⬆️
lib-data-ui 0.93% <0.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request a Claude code review app:authenticator Bitwarden Authenticator app context app:password-manager Bitwarden Password Manager app context t:bug Change Type - Bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant