* Label new-UI dashboard navigation and sync status for screen readers
Each bottom-nav tab becomes one button node carrying its localized name, its
selected state and mutual exclusion; the pill text no longer duplicates the
selected tab. The assets/history tabs gain selected state, the Bitcoin/Lightning
switcher becomes a labeled toggle, and the sync bar becomes a single button whose
label is the localized status (plus Tor/MWEB/Silent Payments badges) with a hint
pointing at node management. Compact mode's pulsing dot and the chain icon's
progress ring now have text equivalents, and the invisible pointer-absorbing
strip behind the nav bar is excluded from traversal.
* Make new-UI dashboard cards, lists and menus operable by screen readers
Collapse the wallet-name row into one labeled button (hardware-wallet glyph
folded into the label, inner accounts button no longer a second stop) and give
balance cards a labeled, selectable node with a long-press action for show/hide
balance. Balances hidden behind AnimatedOpacity, card artwork and decorative
glyphs leave the semantics tree; the 3-dots customize target and the card action
buttons are now named buttons. Assets/history rows, the history header, the MWEB
promo, long-press menu items, the account cards and the add-account and
generate-name controls become single button nodes, the phantom action chip in the
assets header is built conditionally instead of drawn at opacity 0, and app cards
get a close tooltip plus an 'opens externally' hint.
* Use expression bodies for the new a11y helpers
* Restore untouched expressions in cards_view
* Address review: state-aware balance hint, tooltip-free close label
* Address review: keep header height without the chip, name the selected index
* Give ModernButton and CoinActionButton one labeled a11y node
ModernButton, CoinActionButton and the ModalTopBar chrome buttons were
icon-only IconButtons with no tooltip and a detached caption sibling, so
screen readers announced an unnamed "button" plus unrelated static text.
- Add optional semanticLabel to ModernButton; wrap the control in
MergeSemantics + Semantics(button: true, label: semanticLabel ?? label)
and exclude both the icon and the visible caption so exactly one node
is exposed. No visual or pointer change.
- Give CoinActionButton the same treatment, reusing the label callers
already pass (dashboard Send / Receive / Swap / Scan).
- Add leadingSemanticLabel / trailingSemanticLabel to ModalTopBar,
defaulting the leading button to "Close", and mark a non-empty title
as a semantics header.
- Migrate every ModernButton / ModalTopBar call site to pass a localized
label, and drop the now-redundant external Semantics wrapper in
base_page.dart so the back button is not labeled twice.
- Localize the hard-coded "Settings" modal title in settings_page.dart.
New English keys: rotate_address, swap_reverse_direction, switch_camera,
switch_input_currency, test_node_speeds, turn_flash_off, turn_flash_on.
* Require explicit accessible names on ModalTopBar and ModernButton icons
ModalTopBar defaulted every leading icon's accessible name to "Close", so
the ~40 callers that pass a back arrow announced the wrong action, and
trailingSemanticLabel was optional, leaving the trailing icon controls
unnamed.
- Drop the "?? close" fallback in ModalTopBar: the leading ModernButton
now gets exactly leadingSemanticLabel, and constructor asserts require a
non-empty label whenever leadingIcon / trailingIcon is supplied. Callers
that pass leadingWidget / trailingWidget instead are unaffected, and a
null icon still builds no button at all.
- Assert in both ModernButton constructors that the control has a name:
either semanticLabel or a non-empty visible label.
- Pass the matching localized label at every ModalTopBar call site: "Go
back" for back arrows, "Close" for close icons, and the action name for
trailing icons (History, Configure, Export CSV, Save, Scan, Close).
- Label the last unnamed ModernButton (wallet accounts, wallet_info.dart).
No new localization keys; all labels reuse existing strings_en.arb keys.
* fix(a11y): put ModalTopBar header flag on the title Text node
On-device audit (CW-1574, defect D2) found zero [heading] nodes in the
Android accessibility tree on the Receive page: Semantics(header:) wrapped
the AnimatedSwitcher rather than the Text inside it, so the flag never
landed on the node that carries the title label.
Move the header semantics inside the AnimatedSwitcher, directly around the
Text. The ValueKey(title) moves with it onto the Semantics wrapper, since
AnimatedSwitcher switches on its direct child's key -- keying the Semantics
by title preserves the existing switch/animation behavior exactly.
No test or robot resolves the title ValueKey through a Text-typed finder,
so the key relocation is not observable from the test suites on this branch.
* Set headingLevel so Android surfaces modal titles as headings
The Flutter 3.41 engine drives AccessibilityNodeInfo.setHeading from
headingLevel, not the IS_HEADER flag (which 3.35 used). Proven by an
on-device probe: header:-only headings print on a 3.35-engine build and
vanish on the 3.41-engine CI build.
* v6.3.0 Release Candidate
- the new transaction history
- Radar in Apps screen
- Zcash update
- Flutter update
- Parts of the Refactor
should improve how amounts are handled in the app and fix any issue with amounts
improve handling sending to aliases
- Improvements for Cake Pay mobile
- Bug fixes
* don't use memo for note/message values
* save message in QR locally in the notes field
* Make stealth addresses generated from silent payment, not reliant on output index (#3420)
* - fix swaps showing only on primary account
- switch tron default node
- privacy fixes
* - enlarge destination tag and make it copiable
- migrate users on hashvault
- minor fix
* feat: zkool2
* feat: rescan on zkool
fix: sending to extracted addresses
fix: labeling shielding txs
fix: autoshield endless loop
fix: autoshield t addr not firing
fix: autoshield destinations
chore: remove old routes for rescan with zkool
other minor fixes/cleanups
* fix: zcash hardfork
* fix: update sync progress more reliably
* fix: pending transaction loading
fix: autoshield txs
fix: taddress
fix: fee estimation
fix: tx send errors
* chore: bump zkool2 to latest version
fix: reduce amount of taddrs generated
fix: derivation path for internal wallets
fix: display address in correct hidden/usable spots
fix: get wallet db height before it syncs for the first time
fix: taddr rotation with passphrase
fix: sync progress ui refresh
fix: taddress generation not getting capped
fix: hidden addresses not being hidden
fix: pending transactions not being shown
fix: t address cache misses
fix: t address rotation not getting refreshed
fix: t address high index not being used
* fix: refresh t addresses
* fix: patch rust side to make t addr rotation work
* fix: ui issue in recipient address
fix: zcash multiaddress send to show in the ui
fix: potential race condition
* minor fixes
* format
* fix: flashing on receive screen
* remove unused 'autoShield'
* review
* fix fiat amount resetting on swap page
* fix pressing ALL in fiat input mode
* populate amountController when disabling fiat mode
* fix resetting to crypto amount after fiat amount is entered
* fix rate fetching when switching currency for send all
* feat: add `Money` class for precise currency handling and amount parsing
- Introduced `Money` class for handling money values with fixed-point precision.
- Added parsing and comparison methods to `CryptoCurrency` and `FiatCurrency` interfaces.
- Implemented `smartAmountSanitizer` for format normalization.
Includes extensive unit tests for validation.
* refactor: optimize Money class with new factories and string formatting improvements
* refactor: unify balance handling with `Money` refactor
* refactor: update `ElectrumBalance` and transaction logic to use `Money` for currency precision
* refactor: standardize balance handling with `Money` across `Monero`, `Wownero`, and `Zano` wallets
* refactor: migrate EVM balance and transaction handling to `Money` for consistent currency precision
* refactor: migrate Decred balance and transaction handling to `Money` for consistent currency precision
* refactor: migrate nano balance and transaction handling to `Money` for consistent currency precision
* refactor: migrate Solana balance and transaction logic to `Money` for precise currency handling
* refactor: migrate Tron balance and transaction handling to `Money` for consistent currency precision
* refactor: migrate Zcash balance and transaction handling to `Money` for consistent currency precision
* refactor: adjust lib to handle money
* refactor: remove legacy Decred amount formatting and migrate to `Money`
* refactor: migrate pending transaction amount and fee to `Money`
* refactor: migrate dEuro savings and transaction logic to `Money` for improved precision and consistency
* refactor: migrate Bitcoin and lightning transaction logic to `Money` for consistent currency precision
* refactor: migrate Wownero, EVM, Zano, and Zcash transaction logic to `Money` for consistent and precise currency handling
* refactor: standardize balance handling across wallets, migrate to `Money.zero` and refine `Balance` class for consistency
* refactor: migrate Solana transaction and wallet logic to `Money` for consistent and precise currency handling
* refactor: improve fiat balance and formatting for consistency on dashboard
* fix: fiat input mode switching and standardize crypto amount display logic
* fix: cw_evm generator
* refactor: migrate exchange amount handling to `Money` for improved precision and consistency
* test: remove redundant and commented-out tests, tidy test cases, and apply minor formatting adjustments
* fix using Money wrapper in BridgeViewModel and USDT0Service
* refactor: streamline `AmountConverter` and `LightningWallet`, add `cw_core` tests to GitHub workflow, and remove unused/deprecated logic
* refactor: enhance `changeReceiveAmount` with `isCanonical` support, improve null handling, and refine amount parsing logic
* minor fix
* try/catch the lightning log file error
* feat: add copy-to-clipboard functionality for transaction amounts, fix typo in trailing widget method name (#3219)
* Cw 1234 disallow sp and mweb addresses as refund for swaps (#3187)
* disallow SP and MWEB for swaps
* Simplify address selection in addressForExchange
Refactor addressForExchange method to simplify address selection logic.
* validate refund and receive address types
* localize address validation messages
* minor ui fix [skip ci]
* minor fix [skip ci]
* Revert "localize address validation messages"
* fix translations
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
* refactor: replace manual amount sanitization with `sanitized()` extension across the codebase, add unit tests for `AmountSanitizer`
* fix: correct `sanitized()` test expectations for decimal handling in `amount_sanitizer_test.dart`
* refactor: fee display logic and append currency symbol in `send_confirm_sheet.dart`
* refactor: simplify `ZcashBalance` class by replacing custom fields with inherited properties, update references accordingly
* refactor: replace hardcoded USDT contract address with `DefaultTronTokens` lookup, improve maintainability
* refactor: replace `currency` with `inputAmount.currency` in Solana transaction signing methods to avoid inconsistency
* fix: handle null `fee` in `electrum_transaction_info.dart` to prevent potential runtime errors
* refactor: replace raw fee and amount handling with `Money` object for improved consistency and maintainability
* fix: limit fiat balance display to 2 decimal places in `balance_view_model.dart`
* refactor: replace raw `amount` and `fee` types with `Money` in Solana transaction methods for consistency and precision
* refactor: replace raw `amount` and `fee` handling with `Money` and improve balance calculation consistency across view models
* refactor: replace raw balance strings with `Money` and simplify `UnconfirmedBalanceModal` widget logic
* refactor: replace `print` with `printV` for better logging, add equality and hashCode overrides to `ERC20Currency` for object comparison
* feat: prepare deuro savings migration
* feat: add V1 savings migration support and improve formatting consistency in DEuro view model
* feat: add V1 savings withdrawal support and update associated UI components and logic
* refactor: replace `Image.asset` with `CakeImageWidget`, update balance string handling, and streamline address validation logic
* refactor: use `Money.tryParse` with fallback to `Money.zero` in `NanoBalance.fromRawString` for safer balance parsing
* refactor: replace `ERC20Currency` with `Erc20Token` for consistency and remove unused `evm_erc20_currency.dart` file
* refactor: add computed `hasDepositAmount` for deposit null-checks, optimize balance handling in `zano_wallet`, update Breez SDK to v0.14.0, and implement equality/hashCode for `Currency`
* refactor: rename `amountSats` to `amount` in `PrepareLnurlPayRequest` for consistency
* revert: downgrade Breez SDK to v0.11.0 in `pubspec.yaml` and update relevant references in `pubspec.lock`
* fix: use `cryptoAmount.copyWith` for currency consistency and replace `Image.asset` with `CakeImageWidget` in swap address modal
* fix: ensure currency consistency by using `cryptoAmount.copyWith` in Solana and EVM wallet transactions
* refactor: simplify CSV row generation logic by removing `_splitAmountCurrency` and streamlining amount/fee handling
* fix: LateInitializationError Field 'sdk' has not been initialized
* fix: use `Money.tryParse` for safer parsing of deposit and receive amounts
* chore: remove debug print statement
* refactor: update transaction processing to consistently use `Money` for amounts and fees
* refactor: improve currency and amount handling, simplify logic, and enhance code readability in Send and Swap pages
* refactor: integrate `DecimalInputFormatter` for consistent decimal input across Send and Swap pages, simplify input handling logic
* fix: "fiatMode" per output on sendPage
* refactor: make transaction_details_height applicable more readable
* fix: use correct base unit for deposit
* refactor: use Money in estimateFakeSendAllTxAmount method
* fix decred frozen balance
minor fixes
* fix decred frozen balance
minor fixes
* fix: automatically switch to lightning if lnurl or invoice detected
* fix: getBolt11Amount test cases
* fix: standardise crypto amount formatting and display
* fix: use base unit for Tron transaction fee parsing
* refactor: hardcode fractional digits to 8 in `AmountParsingProxy` display methods
* refactor: ensure consistent 8-decimal precision for fee formatting in `PendingTransaction`
* fix: use `AmountParsingProxy` for available balance display in exchange view model
* fix: improve amount formatting and layout in swap and send confirmation sheets
* chore: remove redundant decimal truncation in balance view model and send confirmation sheet
* fix: allow for editing text field if it is filled with "ALL"
* fix: allow for editing text field if it is filled with "ALL"
* fix: update currency detection logic for lightning mode
* avoid potential infinite loop [skip ci]
* fix: getDisplayCryptoAmount
* fix: update estimated fee calculation
* chore: simplify fee calculation logic [skip-ci]
* fix value display in hidden mode
* fix stale state in send confirm sheet
* fix decimals for mweb
* fix available balance display for sol/trx on swap
* restore proper hint text
* fix swap receive amount calculation for xno
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Co-authored-by: Serhii <17529954+serhii-bor@users.noreply.github.com>
Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>