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>
Introduces a new attention row in the dashboard to display blocked funds and overdue financing. The row is conditionally visible based on the presence of blocked amounts or overdue totals. Updates the account display logic to show blocked amounts where applicable, ensuring users have a clear view of their financial status. Additionally, new string resources for "Blocked Funds" and "Overdue Financing" are added for localization.
BML CASA rows on the accounts list were showing currentBalance (the
working/ledger balance, which includes blocked funds). Every other
balance display in the app — transfer screen, contact picker, QR pay,
dashboard totals — uses availableBalance, so the same account was
showing a different figure depending on where you looked at it.
This switches the accounts list to availableBalance for consistency,
and adds a small muted "MVR X.XX blocked" line beneath the balance
when blocked > 0 so the blocked funds are still visible at a glance.
Only BML reports a non-zero blocked amount; MIB and Fahipay rows are
unaffected.
The per-account history page header is untouched — its three-column
Available / Balance / Blocked breakdown still works as before.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds applicationIdSuffix=.debug and versionNameSuffix=-debug so a
side-loaded debug build can be installed alongside the Play/release
build without conflicting on package id.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>