Skeleton loading state:
* Wire item_skeleton_transaction (previously dormant in res) into
AccountHistoryFragment and TransferHistoryFragment. When a load
starts with no cached transactions, 8 skeleton rows appear under
the search bar instead of a blank screen. Skeleton hides as soon
as transactions arrive or the load completes.
* Decision: ActivitiesFragment loads from local storage synchronously,
so no skeleton there — would only flash for a frame.
Accessibility:
* Decorative icons in item_more_nav, item_nav_slot, item_picker_row,
and item_account_dropdown now declare importantForAccessibility="no"
so TalkBack skips them (the adjacent text label conveys meaning).
* Also added tnum to item_picker_row.tvBalance and
item_account_dropdown.tvDropdownBalance — missed amounts from Pass 2.
Snackbar:
* ContactsFragment.deleteContact's success/failure feedback is now
a Snackbar instead of Toast — the fragment stays visible, so a
bottom-anchored Snackbar fits better than a floating Toast.
* Other Toasts are either followed by navigation away (Snackbar
couldn't display), or purely informational ("copied", "press back
to exit") where Toast is the right primitive. Left as-is.
Dark mode:
* Connectivity banner in activity_home no longer hardcodes
#C62828 / #FFFFFF — uses colorErrorContainer / colorOnErrorContainer
so it adapts to the user's theme.
* Other hex literals (card-artwork text, receipt screens that
intentionally emulate paper) are intentional and stay.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Status pills:
* New Widget.App.StatusChip style bundling the 10dp/4dp padding +
chip_background + label-small text used in 3 places (item_bml_loan,
item_finance_deal, item_profile_header). The 3 layouts now apply
the style instead of repeating 4 attributes each.
* Extract the bindCardStatus card-overlay pill background from inline
GradientDrawable code into a real drawable resource
(card_overlay_pill_bg.xml). PayWithCardFragment.bindCardStatus just
sets a background resource now.
Tabular figures (android:fontFeatureSettings="tnum"):
* Applied to amount TextViews on the highest-traffic surfaces —
transactions list, accounts list, card list, dashboard balance /
credit / blocked / overdue / pending finances totals, and the
account history header (available / balance / blocked).
* Digits become same-width, so right-aligned amounts in a column
line up.
Ripple feedback:
* item_finance_deal, item_bml_loan, item_foreign_limit get
android:clickable="true" android:focusable="true" so their
MaterialCardView roots show the M3 ripple when the adapter
attaches a click listener. All three are clickable from code
but were missing the ripple cue.
Empty-state strings:
* Hardcoded "No recent transfers" / "No transactions found" in
fragment_activities, fragment_transfer_history, and
fragment_account_history moved to strings.xml as
activities_empty / transactions_empty, matching the existing
accounts_empty / contacts_empty / financing_empty pattern.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces hardcoded paddings in the three layouts that share the
standard 16dp/14dp list-row pattern (item_account, item_card,
item_more_nav) with @dimen/list_item_padding_h / list_item_padding_v.
Dashboard root content padding becomes @dimen/screen_margin. Card
content paddings inside the dashboard are left as raw 16dp — they're
a separate semantic (card-interior padding, not screen edge) and
will be addressed once we either need a distinct token or have a
reason to change them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Introduces a small set of design tokens for card surfaces so the same
look is enforced everywhere instead of being hand-tuned per layout:
card_radius_lg / card_radius_md — 16dp / 12dp two-tier radius
card_elevation_flat / *_raised — 0dp outlined / 1dp subtle raise
Sweeps the existing layouts onto these tokens. Two-tier policy:
lg → hero/standalone cards (account history header, bml loan,
finance deal, otp card, bank selection tiles, security setup
options)
md → repeating row/summary cards (dashboard summary cards,
credentials inset, foreign limit, add-contact sheet)
Card-visual representations (item_card_dashboard / _stack / _wallet
/ _settings_entry) deliberately keep their bespoke radius/elevation
so they continue to read as credit cards — the tokens are for
content cards only. Tight inset frames inside fragment_bml_qr_pay
and fragment_transfer also remain on 4dp/0dp as form details.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>