Commit Graph
2745 Commits
Author SHA1 Message Date
malik1004xandGitHub 0257f5cf76 cw-1584-ironwood-migration-modal (#3481)
* ironwood migration modal

* auto-show when migration begins

* remove restricted import

* new condition

* string fix

* only activate if ironwood is active

* reaction safeguards

* migration*
2026-08-04 14:08:48 +02:00
Seth For PrivacyandGitHub a6bcf7c97a a11y: dashboard and navigation semantics (navbar, cards, sync, switchers) (#3468)
* 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
2026-08-03 19:58:51 +02:00
Seth For PrivacyandGitHub 26a16a4eef a11y: expose ModernButton, CoinActionButton and ModalTopBar as single labeled button nodes (#3463)
* 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.
2026-08-02 09:50:26 +02:00
f6566e3baf Enforce passphrase confirmation match on the restore and create wallet flows (#3474)
* fix: enforce passphrase confirmation in restore passphrase bottom sheet

The confirm-passphrase field in AddPassphraseBottomSheet already had a
validator comparing it to the first field, but the fields were not inside
a Form and nothing ever called validate(), so the validator never ran.
Tapping "Restore" restored the wallet with the first field's value even
when the confirmation did not match, defeating the typo check.

Wrap both fields in a Form and validate it before completing the restore,
matching the existing pattern in advanced_privacy_settings_page.dart.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019DtLNfYw1H81p7zZrkNDXM

* Validate passphrase confirmation when the passphrase field is empty

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-02 09:43:46 +02:00
claude[bot]andGitHub b50ceb2462 Point changelog modal "View more info" at docs release notes (#3459) 2026-07-31 01:01:52 +02:00
Konstantin UllrichandGitHub 22015eb1e1 fix: add reconnection logic to hardware wallet flow to handle tap-backs (#3458) 2026-07-31 00:05:18 +02:00
Konstantin UllrichandGitHub cb194fbaab intoduce-moneytext (#3447)
* feat: Introduce `MoneyText` and `CurrencySymbolText` Widgets

* feat: add accessibility to `MoneyText`
2026-07-28 00:13:29 +02:00
Omar a612135046 update build numbers
fix cw_zcash import
2026-07-27 13:20:52 +02:00
cyanandGitHub 92c2c5e043 zec ironwood (#3425)
* initial

* wip

* ironwood detection, migration

* dev: zec address validation on rt

* fix: ironwood spend

* ironwood regressions

* fix: tx history

* bump: zkool2

* fix: tx amounts on pending
fix: ironwood pending balance
fix: orchard->ironwood migration
fix: orchard->any pre ironwood txs
fix: ironwood -> any txs
fix: WrongSpendAuthorizingKey
fix: tx history
fix: autoshield to ironwood
fix: zkool to latest version
break: my sleep schedule :sweating: :worksonmymachine:

* thx fable

* downgrade frb to 2.11.1

* fix: tx amounts in history

* Migating... / migration label for O->I txs
2026-07-27 10:20:40 +02:00
Omar 6c54a4ee00 disable exolix [skip ci] 2026-07-26 02:20:03 +02:00
SerhiiandGitHub 037c21e638 Update changenow_exchange_provider.dart (#3416) 2026-07-26 00:52:59 +02:00
Seth For PrivacyandGitHub 7f090c3a3a Fix domain lookup toggles for Yat and Zcash.me providers (#3439)
Both providers checked the wrong SettingsStore flag in isEnabled(), so
their toggles in Settings > Connection and sync > Domain lookups had no
effect:

- YatAddressProvider read lookupsWellKnown instead of lookupsYatService,
  so the 'Yat' toggle did nothing and '.wellknown' unexpectedly gated it.
- ZcashMeAddressProvider read lookupsZcashNames instead of
  lookupsZcashAddress, so the 'Zcash.me' toggle did nothing and it was
  gated by the 'Zcash Names' toggle.

Each provider now reads the flag its own toggle writes, matching the
mapping in ConnectionSyncViewModel.lookupValue/setLookupValue.
2026-07-25 02:43:06 +03:00
Seth For PrivacyandGitHub 6641549d64 Fix mismatched support links for SwapTrade and Telegram (#3441)
Two entries in SupportViewModel's link list displayed one destination
but opened another.

SwapTrade pointed at mailto:support@exolix.com, so a user with a
SwapTrade trade problem emailed Exolix — who cannot help, and who
absorbed another provider's support traffic. The entry was added as
Quantex with Exolix's mailto already copy-pasted in from the entry
above it; the Quantex -> SwapTrade rename updated the title, icon and
linkTitle but carried the wrong link forward.

Point it at https://help.swaptrade.io/contact/, which matches what
docs.cakewallet.com/support/swap lists for SwapTrade. Live chat is the
only contact method that help center publishes — there is no SwapTrade
support email — so the mailto form is not an option. Using a path below
the displayed host follows the existing SideShift entry in this file.

Telegram had the inverse problem: linkTitle read t.me/cakewallet while
the link went to the announcements channel. Here the link was correct —
t.me/cakewallet is a group that self-describes as the inactive Cake
Wallet Community and directs visitors to the announcements channel — so
the stale label was updated to match the destination rather than the
reverse.

The other 15 entries were audited and are consistent.
2026-07-25 02:28:41 +03:00
Omar HatemandGitHub 8a6217fe46 Fix paste button in swap page (#3437)
* Fix paste button in swap page

* update app versions [skip ci]
2026-07-24 02:20:43 +03:00
Konstantin UllrichandGitHub 8056cfec86 fix: stop resetting coin control on swap (#3433) 2026-07-22 17:08:59 +03:00
Omar d2521aa01c revert and just show the change wallet button if it's a reconnect 2026-07-21 20:42:47 +03:00
Omar a43c32d626 add a back button so you can always go back from the hardware wallet connect screen 2026-07-21 19:18:15 +03:00
Omar HatemandGitHub 544cbec0e0 v6.3.0 Release Candidate (#3414)
* 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
2026-07-21 04:54:48 +03:00
Konstantin UllrichandGitHub b336da4a9a refactor: remove deprecated payment URI classes and unify URI handling with ERC681URI implementation (#3423)
* refactor: remove deprecated payment URI classes and unify URI handling with `ERC681URI` implementation

* refactor: apply lint [skip ci]
2026-07-21 00:23:20 +03:00
Konstantin UllrichandGitHub 85bb70807c fix: copy button behavior on receive page (#3424) 2026-07-20 17:27:23 +03:00
Konstantin UllrichandGitHub 6209e36dfc fix-<-01-fiat-amounts (#3421)
* fix: handling of "< 0.1" Amounts in send flow

* refactor: clean up imports and restructure classes in `send_page.dart` apply lint
2026-07-20 14:19:09 +03:00
malik1004xandGitHub 5dfae0e13a fix height of details modal when adding note from send confirmation (#3413) 2026-07-18 18:31:06 +03:00
9d685d4645 trezor-monero-passphrase-modal (#3337)
* trezor monero passphrase modal

* feat: add Trezor passphrase support for wallet restoration process

* revert: send page changes

* chore: format code

* chore: format code

* chore: reorganize imports and improve code formatting in send_page.dart [skip ci]

* auto-reformat

* fix: trezor usb device refresh race condition

* fix: ui bugs in relation to trezor

* fix: only show passphrase option for trezor devices

---------

Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2026-07-17 17:52:52 +03:00
03edd658a5 Cw 1539 lightning enhancements (#3400)
* feat: add Lightning transaction URL support in transaction details view model

* fix: update currency selection logic in WalletAddressListViewModel and ReceivePage

* feat: integrate computed transaction amount and fee getters in TransactionDetailsViewModel, refactor CopyWrapper logic in TransactionDetailsModal

* refactor: apply lint rules

* refactor: apply lint rules and improve LNURL handling with new methods for withdrawal requests and error checks

* auto-reformat

* fix: receive_page regression

* fix: Withdraw lightning to other btc wallet gives LN address

* chore: update .lock files [skip ci]

---------

Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2026-07-17 17:49:17 +03:00
cyanandGitHub 28c2cc152e feat: zkool2 (#3165)
* 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
2026-07-17 16:01:31 +03:00
David AdegokeandGitHub 3070612f15 fix: Wrong fiat for sent tx from swaps (#3409)
* fix android CI

* fix: wrong fiat amount showing for sent tx from swaps

* fix: use token address to fetch fiat amount for pending send entry
2026-07-17 06:40:30 +03:00
ed540bae04 CW-1291-ledger-fixes (#3390)
* feat: add connecting indicator in hardware wallet connect screen

* chore: bump ledger related dependencies

* chore: bump ledger related dependencies

* feat: add additional guard against gLedger being null

* auto-reformat

* feat: improve ledger connection and state management

* fix: connect_device_page padding on iOS

* chore: update universal_ble dependency reference

---------

Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2026-07-16 21:39:49 +03:00
David AdegokeandGitHub 0822c7d976 CW-1548: Solana wallet performance improvements (#3404)
* fix android CI

* add incremental sync, parallel fetch for native and spl token, and other improvments on perf and display regarding lagging
2026-07-16 19:57:23 +03:00
malik1004xandGitHub aa1dab4b1a fix tokens button appearing on litecoin (#3405) 2026-07-16 14:42:31 +03:00
6fc27dd3a0 CW-1409-Update-Cakepay-cards-to-use-all-variants (#3112)
* add prepaid range support for CakePay cards

* use selected denomination for order creation

* fix Flexible widget issue

* forces to use prod api

* auto-reformat

* fix the input string format [skip ci]

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

* fix the value string format [skip ci]

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

* fix the nextamount string format

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

---------

Co-authored-by: Robert Malikowski <malikowskirobert@gmail.com>
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
2026-07-15 15:57:59 +03:00
Omar HatemandGitHub 16ddc0837a Reformat the whole codebase with 100 line width (#3403) 2026-07-15 01:20:33 +03:00
Konstantin UllrichandGitHub 1241b28bec feat: add allowedIp to moonpay signature generation (#3375) 2026-07-14 16:49:52 +03:00
malik1004xandGitHub 723ee479fc add haptic feedback on copy (#3401)
* add haptic feedback on copy

* revert gradle
2026-07-14 16:42:15 +03:00
Omar HatemandGitHub bfc2c5ee23 await wallet address saving (#3393)
minor CI fix
2026-07-14 14:09:19 +02:00
01c977e82b add-lints (#3356)
* test add lint as separate action
* nicer logging
* only detect changes in dart files
* fix printV warnings being displayed when editing printV

---------

Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net>
2026-07-14 12:50:19 +02:00
malik1004xandGitHub 969a1481af disable dismissing or dragging down SendConfirmSheet (#3386) 2026-07-14 05:11:01 +03:00
malik1004xandGitHub f744e2228a fix fiat amount resetting on swap page (#3358)
* 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
2026-07-14 05:09:04 +03:00
Omar 5423484c91 minor fixes [skip ci] 2026-07-14 04:56:21 +03:00
Robert Malikowski 90cbf6777a add padding 2026-07-13 15:54:49 +02:00
Robert Malikowski ce8ee3148e Merge branch 'dev' into cw-1497-transaction-history-improved-layout 2026-07-13 15:35:49 +02:00
Omar bff9b2fa96 minor fix [skip ci] 2026-07-13 05:49:27 +03:00
SerhiiandGitHub 0cf80439ec refactor send validation and near token parsing (#3351)
* refactor send validation and near token parsing

* fix exchange send validation[skip ci]
2026-07-13 04:23:10 +03:00
Konstantin UllrichandGitHub 77f305af09 feat: add ToMoney extension for double type and refactor currency amount conversions (#3391) 2026-07-12 03:55:54 +03:00
Omar HatemandGitHub 38acc625f0 Add Radar to Apps screen (#3366)
* Add Radar to Apps screen

* ignore flutter error [skip ci]
2026-07-11 04:57:54 +03:00
malik1004xandGitHub f4b17e3354 fix styling on new wallet type selection (#3392) 2026-07-10 19:49:42 +03:00
Konstantin UllrichandGitHub 03d5046b81 Merge pull request #3374 from cake-tech/add-preimage-to-transaction-details
feat: add lightning preimage to transaction details
2026-07-10 15:26:55 +02:00
cyanandGitHub 2111edc5c5 prices: update endpoint (#2977) 2026-07-10 16:19:58 +03:00
David AdegokeandGitHub a7073df422 feat: harden spam detection for solana and evm (#3322)
* feat: harden spam detection for solana and evm

* fix: guard scam/impersonator tokens from auto-enabling on EVM and Solana

* feat: enhance token property validation for scam detection
2026-07-10 14:52:19 +03:00
c9e0ac85d4 feat(exchange): add TRX and USDT-on-Tron to Chainflip (#3341)
Chainflip added Tron support with asset ids trx.tron and usdt.tron.
Enable both for swaps in the Chainflip provider.

Tron needs explicit handling because Chainflip's network slug is
'tron', while Cake uses the 'TRX' tag (and null for native TRX), so
the generic title.tag normalization can't produce the right ids:
- _supported: add trx, usdttrc20
- _normalizeCurrency: map trx -> trx.tron, usdttrc20 -> usdt.tron
- _normalizeNetworkName: TRON -> Tron (status lookup in findTradeById)
- _toCurrency: reverse-map trx.tron/usdt.tron for trade resolution

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 16:55:28 +03:00
910a5cd9ef if input transactions are not all fetched correctly or had a failure,… (#3353)
* if input transactions are not all fetched correctly or had a failure, still parse the transaction correctly instead of skipping it

* handle nullable tx fee

* show warning for BTC txs with missing inputs

---------

Co-authored-by: Serhii <17529954+serhii-bor@users.noreply.github.com>
2026-07-08 23:48:32 +03:00