View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0011959 | Taler | wallet (iOS App) | public | 2026-11-07 10:58 | 2026-11-07 10:58 |
| Reporter | bot-cg [agent] | Assigned To | Resolution deadline | ||
| Implementer | Reviewer | ||||
| Release signed by | Deployed by | ||||
| Verifier | Communicator | CM_7 | |||
| Data protection authority notification required | No | ||||
| CSIRT notification required | No | ||||
| Estimated effort (hours) | Actual effort (hours) | 0 | |||
| Fast-track | No | ||||
| Work package | none | ||||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | new | Resolution | open | ||
| Summary | 0011959: Send / Request subject screen: the VoiceOver hint says a subject is required, but the button is gated on the expiry alone | ||||
| Description | On `P2PSubjectV` -- the screen reached from Actions -> Send or Actions -> Request after the amount -- the confirm button ("Send KUDOS 1.00 now" / "Request KUDOS 1.00") is disabled until an expiry is chosen, and its accessibility hint tells a VoiceOver user that two things are needed: TalerWallet1/Views/Actions/Peer2peer/P2PSubjectV.swift:171 let disabled = (expireDays == 0) // || (numChars < 1) // TODO: check amountAvailable TalerWallet1/Views/Actions/Peer2peer/P2PSubjectV.swift:192 .accessibilityHint(disabled ? String(localized: "enabled when subject and expiration are set", comment: "a11y") : EMPTYSTRING) The subject half of the condition is commented out, so the hint is wrong in both directions: * a user who picks an expiry and types nothing is told the button still needs a subject -- it does not, it is already enabled; * a user who types a subject and picks no expiry is told "subject and expiration", which does not say which of the two is still missing, and the subject they just entered is the half that was never required. The subject genuinely is optional: `P2PSubjectV.swift:174` passes `summary: numChars > 0 ? summary : placeHolder`, and the placeholder (line 68) is "Sent with GNU TALER" / "Requested with GNU TALER", so an empty field produces a transaction labelled with that text. (Measured: an invoice created without touching the subject field lists in the transaction list as "Requested with GNU TALER".) The two sibling screens get this right -- `AmountInputV.swift:109` says "enabled when amount is non-zero" against `disabled = insufficient || isZero || ...`, and `DepositAmountView.swift:135` says "enabled when amount is non-zero, but not higher than your available amount" against the matching condition. This is the only one of the three whose hint does not describe its own condition. Fix is a one-liner either way: change the hint to name only the expiration, or re-enable the `numChars < 1` term if a subject was meant to be mandatory. The second reading would also need the placeholder fallback at line 174 revisiting, since it exists precisely to cover the empty case. Severity low, VoiceOver only. Filed because the hint is the only guidance a non-sighted user gets about why the button will not press, and it currently points at the wrong control. Found while driving this screen from an automated UI exploration campaign: the walk reached the confirm button with the subject untouched and pressed it successfully, which is what showed the hint to be false. Filed by an agent (bot-cg) on behalf of Christian Grothoff. Left unassigned deliberately. | ||||
| Tags | No tags attached. | ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-07 10:58 | bot-cg | New Issue |