docs mobile p24 t02 usability accessibility - AlexandreZanata/Abastevo GitHub Wiki
P24-T02 β Novice usability and accessibility (protocol + first remediation)
Status: IN_PROGRESS on codex/phase-24-android-acceptance. Issue: #97 OPEN (not done).
Entry: G19βG23 integrated (P23 PR #95 b4f664e); P24-T01 automated loop PAUSED for
user manual validation (TEST_STAGE_CLOSED_USER_MANUAL), so no device acceptance is
claimed here. Binds B-BR-C01βC06 / BUC-C01βC05. No migration, no backend change, no iOS work.
Protocol (frozen before running, from P19-T02 baseline)
- Sample: 3β5 novice drivers (Android daily users, never used abastevo) + 1 maintainer observer. No PII collected beyond first name + consent; sessions not recorded.
- Tasks (predeclared, BUC-derived):
- T1 (BUC-C01): guest selects city + fuel, reads recent community price or explicit absence, identifies source (community vs dated ANP) and recency.
- T2 (B-BR-C01/C06): explains condition label on a loyalty/app-only price (no cheap ranking assumption).
- T3 (BUC-C02): photo contribution review β confirm station/fuel/price/condition.
- T4 (BUC-C03): rate/comment/reply/vote + report abuse path (280-char bound visible).
- Pass thresholds: T1 β₯ 4/5 first-try source/recency identification; T3 zero silent
publishes of queued data; T4 zero PII/GPS exposure; screen-reader + 2x font-scale
rows green (existing
AccessibilityUiTest4/4). Failures remediate presentation, never domain rules. - Novice sessions: NOT RUN in this slice (no participants recruited). Protocol above is frozen so P24-T02 can execute without redefinition. Maintainer heuristic walkthrough below is early evidence only, not a substitute.
Automated accessibility baseline (this tree)
- Existing instrumented
AccessibilityUiTest4/4 preserved (Loading TalkBack, Error/Home/Search at 2x font-scale). Device rerun stays P24-T01-row-owned while the user validates manually; not claimed here. - pt-BR coverage verified:
source_badge_*,a11y_source_badge_*,a11y_station_price_row,stations_collected_at_label,a11y_nav_update_pricepresent invalues-pt-rBR;a11y_station_price_rowpresent in all 7 locales.
Finding + remediation (this task)
- Finding:
StationPriceRowannounced onlya11y_station_navigate("Ir para X") β TalkBack lost price + recency, failing B-BR-C01 comprehension. The richer stringa11y_station_price_row("%1$s, preΓ§o %2$s") existed in all locales but was unused. - Fix (
app/.../ui/components/StationPriceRow.kt): description is nowa11y_station_price_row(displayName, priceFormatted)+ optional localizedstations_collected_at_label, joined by purestationRowTalkBackDescription(Role.Button preserved, so the row stays actionable). No new strings, no domain change. SourceTimeBadgeneeds no change: text + icon (never color-alone) + per-kind screen-reader description already covered bySourceTimeBadgeTest3/3.
Validation (this slice)
- RED β GREEN: new
StationPriceRowA11yTest3/0-fail (price-only, blank-recency, recency-appended). :app:testDebugUnitTesttarget +:app:assembleDebug(record outcome in commit evidence);git diff --checkclean; scoped secret review (no secrets/PII/GPS/photo).- Open for phase exit: novice sessions T1βT4, instrumented rerun on frozen P24-T01 rows, low-end hardware row (P24-T03-owned).