* 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>
* fix(polygon): Polygon wallets not showing in address book when sending tokens
* feat(polygon_issues): Enhance gas price handling in EVM Chains
This change:
- Updates gas price calculation to account for minimum priority fee in Polygon
- Adjusts gas price handling to use maxFeePerGas when gasPrice is not provided.
- Fixes issue with send all for Polygon
* 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
* dcr: Always fetch the current dir path.
On ios devices the path will change between updates breaking decred.
Never save the path and always check to ensure it is up to date.
Previous wallets were also not creating a directory in the correct
place. Move those when found.
* Update cw_decred/lib/wallet_service.dart
* dcr: Update libwallet dep.
---------
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
* 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.
This change:
- Adds svg icons for history and notification
- Updates the sidebar and services widget to use new images
- Fixes services widget icon looking very tiny on desktop
* 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
* refactor(theme-setup-update): Move didChangePlatformBrightness lifecycle method to Root widget instead of AppState. We already have an active WidgetsBindingObserver in Root widget.
* fix(theme): Add workaround for flutter iOS didChangePlatformBrightness issue causing unneeded rebuilds.
* Fix some colors
* fix(themes): Adjust background and text colors for action buttons on info bottomsheet
---------
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
* Fix some colors
* fix(theme-updates): Modify condition for theme border style display when hasUnderlineBorder is true
* fix(themes-updates): Adjust switch colors and modify payjoin hint text
* fix: Crash report relating to success image display on successful exchange
* fix(theme-updates): Adjust animated text max width to prevent overflows
* fix(theme-updates): Adjust fee picker styling
* fix(themes-updates): Remove text overflow on welcome screen animation
* fix(themes-update): Fix the cursor to the baseline for the text
---------
Co-authored-by: tuxsudo <tuxsudo@tux.pizza>
* 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
* Fix some colors
* fix(theme-updates): Modify condition for theme border style display when hasUnderlineBorder is true
* fix(themes-updates): Adjust switch colors and modify payjoin hint text
* fix: Crash report relating to success image display on successful exchange
* fix(theme-updates): Adjust animated text max width to prevent overflows
* fix(theme-updates): Adjust fee picker styling
* fix(themes-updates): Remove text overflow on welcome screen animation
---------
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
* feat(themes): Reflect current system theme at the start of the app if the themeMode is system mode
* feat(themes): Extract platform awareness for router into a function, and use where needed
* 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>