* feat: enhance dEuro Savings UI and functionality with fiat support and tooltips
* feat: add "Reinvest Interest" feature and improve dEuro Savings functionality
- Implemented the "Reinvest Interest" feature for dEuro Savings.
- Updated localized strings for multiple languages.
- Enhanced error handling for insufficient gas fees.
- Incorporated loading state and tooltips in Savings Card and Interest Card.
- Improved UI responsiveness and button state management.
* feat: localize deuro tooltips
* feat: enhance dEuro Savings with reinvestment feature and localized strings
- Added "Reinvest Interest" functionality for dEuro Savings.
- Updated localized strings across multiple languages.
- Improved modal bottom sheet handling for savings add/remove operations.
- Enhanced tooltips and UI responsiveness.
* feat: improve dEuro Savings page with info chips and localized strings
* Update res/values/strings_de.arb
* fix: update dEuro action type reset in transaction handling
* feat: allow all for no-fixed monero swaps
* fix: deposit amount calculation logic and remove unused print statements
* feat: integrate UnspentCoinsListViewModel into ExchangeViewModel for more streamlined unspent coins management
* fix: unpopulating the fiat field due to a race condition
* fix: ReceiveAmount not updating on all if bestRate changes
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
* feat: add max decimal handling for crypto amounts and test coverage
* fix: correct decimal point handling in `withMaxDecimals` and update related test
* fix: ensure amount formatting aligns with selected currency decimals in ReceivePage
* fix: ensure amount controller syncs with ViewModel in AddressPage and ReceivePage
* feat: add support for currency decimals and streamline amount handling logic
* fix: ensure crypto and fiat amounts sync correctly in Send ViewModel
* feat(deuro): Enhance gas fee handling and error management for Deuro Savings Transactions.
This change:
- Introduces DeuroGasFeeException to handle insufficient ETH for gas fees.
- Adds check for ETH balance before savings transactions to prevent failures due to insufficient funds.
- Updates savings transaction methods to include error handling.
- Adds UI feedback for transaction failures in DEuroSavingsPage.
* Fix conflicts
* Update cw_ethereum/lib/deuro/deuro_savings.dart
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
* feat: enhance Payjoin transaction details with block explorer link
* feat: enhance Payjoin transaction details with block explorer link
* fix: handle connectivity errors in Payjoin session operations
* feat(token_validation): Improve flow for adding new tokens across wallets
This change:
- Implements check to see if a token is already added, preventing duplicates
- Triggers dialog warning if its a duplicate token
- Takes EVM Chains contract adddress case-insensitivity when making checks for potential scams.
* refactor(token_validation): Modify token management flow
This change:
- Removes duplicate token check during token addition in EVMChainWalletBase.
- Introduces a flag to indicate if a token is being edited
- Adjusts token addition validation to bypass checks when editing an existing token.
* Update lib/src/screens/dashboard/edit_token_page.dart
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
* tor wip
* Enable tor on iOS
* Prevent app lag when node is exceptionally slow (usually over tor)
* fix: logic in daemonBlockchainHeight refresh
fix: storing tor state
* Pin ledger_flutter_plus dependency to fix builds
* bump arti version
* wip
* add single httpclient
* route everything I was able to catch trough the built-in tor node
* Enable proxy for http.Client [run tests]
* add tor proxy support to cw_evm, cw_tron and cw_polygon [run tests]
* remove log pollution, cleanup [skip slack]
* fix tests not working in latest main [skip slack] [run tests]
* remove cw_wownero import
* fix build issues
* migrate all remaining calls to use ProxyWrapper
add a CI action to enforce using ProxyWrapper instead of http/http.dart to prevent leaks
* fix tor background sync (will work on test builds after #2142 is merged and this PR is rebased on top)
* wip [skip ci]
* relicense to GPLv3 add socks5 license, build fixes
* use ProxyWrapper instead of http in robinhood
* Revert "relicense to GPLv3"
* feat(cw_bitcoin): support socks proxy and CakeTor
* fix(tor): migrate OCP and EVM over to ProxyWrapper()
* chore: cleanup
fix: show tor loading screen when app is starting
* fix: tor switch properly dismisses fullscreen loading dialog
fix: connectToNode after tor startup on app start
* fix(tor): status check for xmr/wow/zano
* fix(tor): onramper request fix
* fix(api): ServicesResponse is now being cached and doesn't fetch data everytime DashboardViewModel is being rebuilt
fix(tor): do not fallback to clearnet when tor failed.
fix(tor): do not leak connections during app startup
chore: refactor bootstrap() function to be separated into bootstrapOffline and bootstrapOnline
fix(cw_bitcoin): migrate payjoin to use ProxyWrapper
* [skip ci] remove print
* address comments from review
* fix: derusting tor implementation
Instead of rust-based Arti I've moved back to the
OG C++ tor implementation.
This fixed all issues we had with Tor.
- onion services now work
- all requests are going through without random errors
- we don't have to navigate a maze of multiple forks of multiple packages
- fully working `torrc` config file (probably will be needed for Tari).
- logging for Tor client
- and so on.
feat: network logging tab
feat: use built-in proxy on Tails - this should resolve all issues for Tails users (needs testing though)
* fix conflicts with main
bump https to fix build issue
relax store() call
* fix(cw_wownero): tor connection
fix(tor): connection issues
* fix(cw_evm): add missing chainId
fix(cw_core): solana rpc fix
* feat: mark tor as experimental
fix: drop anonpay onion authority
fix: drop fiatapi onion authority
fix: drop trocador onion authority
fix: disable networkimage when tor is enabled
fix: handle cakepay errors gracefully
* fix re-formatting [skip ci]
* changes from review
* Delete android/.kotlin/sessions/kotlin-compiler-2468481326039681181.salive
* fix missing imports
* Update pubspec_base.yaml
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
* feat: stop polling payjoin on switch wallet
* refactor: improve Payjoin session handling and cleanup unused methods
- Replaced `initReceiver` with `getUnusedReceiver` to reuse existing Payjoin sessions.
- Streamlined session initialization by removing `spawnNewReceiver`.
- Adjusted wallet sync reactions to resume Payjoin sessions when necessary.
* fix: Receiver.fromJson correctly handle parameter format in Payjoin manager
* fix: try reloading unspents if unspents are empty; No Unpsents available are now recoverable errors
* fix: ensure transaction details display only if transactionInfo is available and adjust payjoin success status handling
* fix: adjust payjoin success status handling for pending transactions
* fix: add error handling for Payjoin initialization and receiver creation [skip-ci]
* fix: add unrecoverable error handling for Payjoin sender sessions
* fix(cw_monero): call store() directly after commiting tx to make sure that tx key is written to cache
also, store it in TransactionDescription hive box
* Update lib/view_model/send/send_view_model.dart
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
* fix(solana-issues): Fix missing solana transaction history entries
* fix(solana-issues): Fixes issues relating to Solana Transaction History
This change:
- Modifies transaction parsing logic to handle more scenarios and better parse Solana transaction data.
- Adds partial filter for spam transactions
* fix(solana-issues): Enhance transaction parsing for Associated Token Account (ATA) programs
This change:
- Adds logic to differentiate between create account and token transfer transactions for the ATA program.
- Introduces a check to skip transactions that only create accounts without associated token transfers.
* fix(solana-issues): Improve transaction update logic and enhance error handling
This change:
- Updates the transaction update callback to only trigger when new valid transactions are present.
- Enhances error handling for insufficient funds by distinguishing between errors for sender and receiver.
* feat(swap-status-monitor): add real-time swap status monitoring and UI updates
- Introduce SwapManager for automatic tracking of active-wallet swaps.
- Automatically queues new or updated trades from the Hive box.
- Periodically fetch and persist swap statuses via the corresponding trade provider.
- Implement start(wallet, providers), stop(), and dispose() for lifecycle control.
- Apply user's ExchangeApiMode(disabled, tor-only, enabled) when fetching updates.
- Remove swaps from the watchlist on any final state (completed, expired, failed).
- Dispose SwapManager in AppState.dispose() to cancel polling and the Hive subscription.
* refactor(swap-status): replace SwapManager with TradeMonitor for improved trade monitoring.
This change improves the flow by simplifying the trade monitoring logic.
- Removes SwapManager class and replace with TradeMonitor implementation
- Update di and Appstate to register and dispose TradeMonitor
- Modify DashboardViewModel to use TradeMonitor instead of SwapManager
* fix: Modify trade monitoring logic to ensure trade timers are properly disposed when wallet switching occurs
* fix(swap-status): Fix receive amount for exchanges showing as .00 because of null values
* feat(swap-status): Enhance Trade Monitoring
This change:
- Adds a privacy settings option to disable automatic exchange status updates.
- Prevents trade monitoring when privacy settings option is enabled.
- Disables trade monitoring when the app is in background, we only want to run these checks in foreground.
- Refactors the trade monitoring logic to remove unneccessary checks and use of resources.
* feat(swap-status): Enhance Trade Monitoring
This change:
- Adds a privacy settings option to disable automatic exchange status updates.
- Prevents trade monitoring when privacy settings option is enabled.
- Disables trade monitoring when the app is in background, we only want to run these checks in foreground.
- Refactors the trade monitoring logic to remove unneccessary checks and use of resources.
* fix(swap-staus): Prevent unneccessary calls
* feat(swap-status): Prevent api request calls as long as last update time is less than specified interval
* feat(swap-status-monitor): add real-time swap status monitoring and UI updates
- Introduce SwapManager for automatic tracking of active-wallet swaps.
- Automatically queues new or updated trades from the Hive box.
- Periodically fetch and persist swap statuses via the corresponding trade provider.
- Implement start(wallet, providers), stop(), and dispose() for lifecycle control.
- Apply user's ExchangeApiMode(disabled, tor-only, enabled) when fetching updates.
- Remove swaps from the watchlist on any final state (completed, expired, failed).
- Dispose SwapManager in AppState.dispose() to cancel polling and the Hive subscription.
* refactor(swap-status): replace SwapManager with TradeMonitor for improved trade monitoring.
This change improves the flow by simplifying the trade monitoring logic.
- Removes SwapManager class and replace with TradeMonitor implementation
- Update di and Appstate to register and dispose TradeMonitor
- Modify DashboardViewModel to use TradeMonitor instead of SwapManager
* fix: Modify trade monitoring logic to ensure trade timers are properly disposed when wallet switching occurs
* fix(swap-status): Fix receive amount for exchanges showing as .00 because of null values
* Add theme base v2
* Initial new theme base files
* Typos
* Fixes
* Update theme files
* feat: Migrate to Material 3 Theming
Foundation, Theme Data Refactor, and First Extension Cleanup Batch.
This commit completes the first major phase of migrating to Material 3 theming by setting up the foundations for material 3 integration and begins the initial migration, removing custom theme extensions, updating theme data, and refactoring all relevant widget and page theming to use Material 3’s built-in color and typography tokens.
These changes:
- Lays the groundwork for Material 3 theming by restructuring the app’s theme configuration to use Material 3’s ColorScheme and TextTheme as the primary sources of color and typography throughout the app.
- Refactors the core theme config files by removing legacy custom color roles ensuring all color definitions now map directly to Material 3’s role.
- Begins the first batch migration of custom theme extensions (InfoTheme, PlaceholderTheme, KeyboardTheme, PinCodeTheme) and updates all affected widgets and pages to use Material 3 color and typography tokens instead of the custom properties.
- Cleans up the codebase by deleting the files of the initial set of migrated extensions and eliminating all related imports and usages.
* feat: Migrate to Material 3 Theming.
This change:
- Updates the themes README.md file to reflect the current structure and give more information based on the first major phase that was completed.
* feat: Migrate to Material 3 Theming
Deleting previous theme extensions
* feat: Migrate to Material 3 Theming
Another batch of migrations from existing extensions
* feat: Migration to Material 3 Theming
Third Migration batch for theme extensions
* fwat: Migration to Material 3 Theming
Final Migration batch for previous theme extensions
* Update onboarding hero
* Update button radius
* Add surfaceContainer to light theme
* feat(themes): Migrate to Material 3 Theming
This change:
- Adds new set of hero images
- Modifies the core structure for the themes
- Add missing color tokens to the theme classes
- Adds a CustomThemeColor class for custom color tokens
- Modifies the themelist to have a fall back for previous theme implementation
- Adds localization for some texts
- Modifies the flow for loading the theme on app start
- Add a WidgetsBindingObserver that listens for changes in the device theme and updates the app theme when there is a change
- Registers the themeStore as a Singleton for codebase wide use
* feat(themes): Migrate to Material 3 theming
This change:
- Migrates UI flows across the app to the new themes
- Confirms styling and typography of components across the app uses the new themes
- Remove instances of Palette use
- Switch TextStyles across the app to use theme text styles
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adjusts bottomsheets styling and removes duplicate close button
- Removes more themedata extensions from the previous implementation
* - Remove outlines from cards and dock
- Update menu colors
- Update padding/divider size for cards
* - Update PIN screen
- Fix navigation dock shadow
- Update wallet screen colors
* Update border radius --skip-ci
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adds gradient backgrounds to the dashbaord and balance cards.
- Migrates the input fields across the app to BaseTextFormFields.
- Removes dependence of input fields on individual styling, focusing instead on using theme defined InputDecoration styling with adjustments on individual components where needed.
- Applies new theme styling to BaseTextFormField, AddressTextField and CurrencyAmountTextField.
* - Switch some hero images to PNG
- Fix nagivation_dock shadow
- Minor fixes
* feat: Add fallback to previous underline styling in central widgets
This change:
- Adds a fallback to CurrencyAmountTextField, AddressTextField, and BaseTextFormField, allowing them use the previous theme styling.
- Adds localization for new texts
* feat(themes): Update warning box colors for dark and light themes
* feat(themes): Relaod themes when user restores from backup, ensuring the user previous theme preference is used.
* feat(themes): Handle themes logic during restore from backup
This change:
- Refactors theme loading logic to handle backup restore edgecase
- Refreshes the theme based on the user saved preference during restore from backup flow
* Fix card gradients and spacing
* Fix even more radiuses
Test new icons for navigation_dock.dart
* Update onboarding flow backgrounds
Fix swap icon clipping
Fix some text colors
Add more hero images
* Fix incorrect color for light theme
* Fix more hero images and cleanup
* Update text field icons
Fix info box CTA colors
Fix sync indicator colors
* Update toggle colors
Update dark theme colors (minor)
Update crypto_balance_widget.dart icon
* Update page transitions in router.dart
Fix some colors
* feat(themes): Display label by default for filled textfields
* feat(themes): Refactor theme handling across various components
This change:
- Fixes issue with themeMode resetting to system mode when app is restarted causing a UI glitch
- Updates theme checks from `currentTheme.type == ThemeType.dark` to `currentTheme.isDark` for consistency
- Adjusts UI components to use the theme directly from the themeStore
* feat(themes): Add animating tagline to the create pin welcome screen
* Revert text fields label temporarily, fix a couple colors, and cleanup some images
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
* Initial Payjoin
* Initial Payjoin
* More payjoin stuff
* Minor fixes
* Minor fixes
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Fix minor bug causes by data inconsistency in the btc utxos
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Initial Payjoin
* Initial Payjoin
* More payjoin stuff
* Minor fixes
* Minor fixes
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Fix minor bug causes by data inconsistency in the btc utxos
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Minor cleanup
* Fix Rebase issues
* Move PJ Receiver to isolate
* Add Payjoin Setting
* Payjoin Sender are now isolated
* Added Payjoin sessions to tx overview. Fix Fee issue with payjoin
* Clean up code
* Fix taproot for payjoin
* Fix CI Errors
* Add Payjoin UI elements and details page
* Add Payjoin UI elements and details page
* Fix Translations
* feat: Detect Payjoin URIs in pasted text and show to the User sending Payjoin
* feat: rename pjUri to payjoinURI for more code clarity
* Update res/values/strings_pl.arb
Co-authored-by: cyan <cyjan@mrcyjanek.net>
* Update cw_bitcoin/lib/payjoin/manager.dart
Co-authored-by: cyan <cyjan@mrcyjanek.net>
* Update cw_bitcoin/lib/payjoin/manager.dart
Co-authored-by: cyan <cyjan@mrcyjanek.net>
* feat: Disable Payjoin per default
* feat: Disable Payjoin fully if disabled or no Inputs available
* feat: Resume Payjoin if app comes back to foreground
* chore: Revert overly aggressive code formats
* feat: show correct Payjoin amount for receivers
* feat: Improved payjoin status
* feat: Show payjoin errors on payjoin details screen
* deps: update flutter to 3.27.4
* feat: Revert localisations
* bug: Remove duplicate transaction id on payjoin details
* style: remove double await in payjoin sender
* refactor(cw_bitcoin): Refactor method signatures and convert constructor to factory
* refactor(cw_bitcoin): Refactor wallet service and PSBT signer for cleaner code
Removed unnecessary `CakeHive` dependency and refactored `BitcoinWallet` initialization to use `payjoinSessionSource`. Improved code readability in `PsbtSigner` by reformatting lines and simplifying constructor methods for `UtxoWithPrivateKey`.
* fix: Resume Payjoin Sessions and load PJUri after sleep
* feat: Add "Copy Payjoin URL button" to receive screen
* fix: Add "Payjoin enabled"-Box below QR Code on the receive screen
* fix: Set payjoin_enabled color to black independent of the theme
* refactor: Payjoin session management and cleanup unused code.
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Co-authored-by: cyan <cyjan@mrcyjanek.net>
* fix(cw_monero): prevent monero wallet from breaking during rename
* update to cleaned up monero.dart
* fix: transaction screen not refreshing in monero
* fix: wallets not opening until app restart after rename.
* fix(cw_decred): wallet renaming throwing
* fix: transaction not being shown after sending until 1st confirmation
* fix(cw_monero): loop safeguard
* fix: don't await wallet.fetchTransactions
* feat(passphrase for restore): improve passphrase discoverability for restore flow.
Makes the option for adding a passphrase more visible for the user to see while restoring a wallet with seeds.
This change:
- Adds a checkbox on the restore from seeds page that asks if the wallet has a passphrase
- Switches the main CTA for the page to "Add Passphrase" when the checkbox is checked
- Pops up a bottomsheet with input fields for the passphrase when the "Add Passphrase" button is pressed
- Completes the flow and restores the wallet with the passphrase when the "Restore" button on the bottomsheet is pressed
- Hides the passphrase input fields in AdvancedSettings page when its a restore flow.
* feat(passphrase for restore): improve passphrase discoverability for restore flow. (Cont.)
This change:
- Obscures the passpgrase input fields by default
- Changes the color for the main CTA button
* feat(passphrase for restore): improve passphrase discoverability for restore flow. (Cont.)
This change:
- Adjusts the colors for the buttons on both the seed page and the bottomsheet
* feat(passphrase for restore): improve passphrase discoverability for restore flow. (Cont.)
This change:
- Combines the control for the visibility icons of the passphrase input fields - one tap to rule them all :)