Skip to content

feat: add accessibility labels to torch and cancel buttons#45

Open
alexgerardojacinto wants to merge 2 commits into
mainfrom
feat/RMET-5194/alternate-text
Open

feat: add accessibility labels to torch and cancel buttons#45
alexgerardojacinto wants to merge 2 commits into
mainfrom
feat/RMET-5194/alternate-text

Conversation

@alexgerardojacinto

@alexgerardojacinto alexgerardojacinto commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

⚠️ This PR was done with the help of Claude

Description

The Torch and Cancel buttons are icon-only with no alternative text, so VoiceOver can't announce them. This PR adds the ability to set that alternative text.

  • Adds three optional parameters on OSBARCScanParameters that set the accessibility label read by screen readers:
    • cancelButtonAccessibilityLabel
    • torchButtonOnAccessibilityLabel (torch on)
    • torchButtonOffAccessibilityLabel (torch off)
  • The torch label is state-aware (on vs off). Applied via the iOS 13-compatible .accessibility(label:).
  • When a label is not provided (nil/empty), no accessibility label is applied — behavior is identical to before this change. The labels are therefore fully opt-in and backward compatible; the consumer (e.g. the OutSystems plugin layer) supplies them, already localized.

Context

An accessibility audit flagged that the Torch and Cancel buttons have no alternative text, so they are announced incorrectly by screen readers. This exposes the labels as inputs so consumers can provide localized alternative text.

Closes #44

Type of changes

  • Fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Refactor (cosmetic changes)
  • Breaking change (change that would cause existing functionality to not work as expected)

Platforms affected

  • Android
  • iOS
  • JavaScript

Tests

  • Validate on device with VoiceOver: provided labels are announced; with no labels the buttons behave as before (no label).
  • Tested Cordova plugin with MABS builds:
  • Tested Capacitor plugin with Capacitor sample app available in the Capacitor plugin's repo.

Screenshots (if appropriate)

N/A

Checklist

  • Pull request title follows the format `RNMT-XXXX <title>`
  • Code follows code style of this project
  • CHANGELOG.md file is correctly updated
  • Changes require an update to the documentation
    • Documentation has been updated accordingly

The torch and cancel buttons were icon-only with no alternative text,
so screen readers could not announce them.

Add default English accessibility labels and expose optional
cancelButtonAccessibilityLabel, torchButtonOnAccessibilityLabel and
torchButtonOffAccessibilityLabel scan parameters so consumers can
customize/localize them.

Closes #44
When a label is not provided (nil/empty), no accessibility label is applied,
keeping the previous behavior unchanged. The English default labels are
removed; consumers supply the (localized) labels via the scan parameters.

@OS-pedrogustavobilro OS-pedrogustavobilro left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I tested and it worked fine, my comments are more related to documentation and clarifications

public let hint: OSBARCScannerHint?


/// Optional accessibility label for the cancel button. `Nil` or empty value uses the library's default.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I was looking at this and was a bit confused. You talk in a few places here about "library's default", which from what I read, the default is just no label. While that makes sense, the whole "Nil or empty value uses the library's default." sentence makes it sound like it would provide an actual default label when the consumer doesn't provide anything. To me it feels like that sentence doesn't need to be there at all.

This also applies to the descriptions you added in the capacitor plugin.

Comment on lines +17 to +24
/// Optional accessibility label for the cancel button. `Nil` or empty value uses the library's default.
public let cancelButtonAccessibilityLabel: String?

/// Optional accessibility label for the torch button when the torch is on. `Nil` or empty value uses the library's default.
public let torchButtonOnAccessibilityLabel: String?

/// Optional accessibility label for the torch button when the torch is off. `Nil` or empty value uses the library's default.
public let torchButtonOffAccessibilityLabel: String?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should add these parameters to the README, as we have for others.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Missing alternative text for Cancel and Torch buttons

2 participants