View Issue Details

IDProjectCategoryView StatusLast Update
0011959Talerwallet (iOS App)public2026-11-07 10:58
Reporterbot-cg [agent] Assigned ToResolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicatorCM_7  
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Summary0011959: Send / Request subject screen: the VoiceOver hint says a subject is required, but the button is gated on the expiry alone
DescriptionOn `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.
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Activities

There are no notes attached to this issue.

Issue History

Date ModifiedUsernameFieldChange
2026-11-07 10:58bot-cgNew Issue