diff --git a/.gitignore b/.gitignore index 304ffe1c7..666b21729 100644 --- a/.gitignore +++ b/.gitignore @@ -142,9 +142,28 @@ lib/wownero/wownero.dart lib/zano/zano.dart lib/decred/decred.dart -ios/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_180.png -ios/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_120.png -ios/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png +ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png + ios/Runner/Info.plist android/app/src/main/res/mipmap-* android/app/src/main/res/drawable/ic_launcher.png diff --git a/README.md b/README.md index ea8f34624..ea796dbf2 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,13 @@ Cake Wallet includes support for several cryptocurrencies, including: * Ethereum (ETH) * Litecoin (LTC) * Bitcoin Cash (BCH) -* Polygon (Pol) +* Polygon (POL) * Solana (SOL) +* Tron (TRX) * Nano (XNO) -* Haven (XHV) +* Zano (ZANO) +* Decred (DCR) +* Wownero (WOW) ## Features @@ -81,10 +84,6 @@ Cake Wallet includes support for several cryptocurrencies, including: * Automatically generate new addresses * Specify multiple recipients for batch sending -### Haven Specific Features - -* Send, receive, and store XHV and all xAssets like xUSD, xEUR, xAG, etc. - # Monero.com by Cake Wallet for Android and iOS ## Open Source Monero-Only Wallet diff --git a/android/app/src/main/AndroidManifestBase.xml b/android/app/src/main/AndroidManifestBase.xml index 9a324edf3..4f15370c3 100644 --- a/android/app/src/main/AndroidManifestBase.xml +++ b/android/app/src/main/AndroidManifestBase.xml @@ -107,6 +107,9 @@ + _enabled; diff --git a/cw_core/lib/unspent_transaction_output.dart b/cw_core/lib/unspent_transaction_output.dart index 4765ac9ab..fa074d5b2 100644 --- a/cw_core/lib/unspent_transaction_output.dart +++ b/cw_core/lib/unspent_transaction_output.dart @@ -28,4 +28,9 @@ class Unspent with UnspentComparable { bool get isP2wpkh => address.startsWith('bc') || address.startsWith('tb') || address.startsWith('ltc'); + + @override + String toString() { + return 'Unspent(address: $address, hash: $hash, value: $value, vout: $vout, keyImage: $keyImage, isSending: $isSending, isFrozen: $isFrozen, isChange: $isChange, note: $note)'; + } } diff --git a/cw_core/lib/wallet_type.dart b/cw_core/lib/wallet_type.dart index 5ae1c1290..fed998ed0 100644 --- a/cw_core/lib/wallet_type.dart +++ b/cw_core/lib/wallet_type.dart @@ -193,7 +193,7 @@ String walletTypeToDisplayName(WalletType type) { case WalletType.banano: return 'Banano (BAN)'; case WalletType.polygon: - return 'Polygon (MATIC)'; + return 'Polygon (POL)'; case WalletType.solana: return 'Solana (SOL)'; case WalletType.tron: diff --git a/cw_decred/lib/wallet.dart b/cw_decred/lib/wallet.dart index c94f5425d..7493d8a4d 100644 --- a/cw_decred/lib/wallet.dart +++ b/cw_decred/lib/wallet.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:cw_core/exceptions.dart'; import 'package:cw_core/transaction_direction.dart'; import 'package:cw_core/utils/print_verbose.dart'; +import 'package:cw_decred/amount_format.dart'; import 'package:cw_decred/pending_transaction.dart'; import 'package:cw_decred/transaction_credentials.dart'; import 'package:flutter/foundation.dart'; @@ -122,6 +123,9 @@ abstract class DecredWalletBase extends WalletBase decredAmountToString(amount: int.parse(amount)); + Future init() async { final getSeed = () async { if (!watchingOnly) { diff --git a/cw_ethereum/lib/ethereum_wallet.dart b/cw_ethereum/lib/ethereum_wallet.dart index ae6158557..7cc140c5a 100644 --- a/cw_ethereum/lib/ethereum_wallet.dart +++ b/cw_ethereum/lib/ethereum_wallet.dart @@ -76,9 +76,13 @@ class EthereumWallet extends EVMChainWallet { await erc20TokensBox.deleteFromDisk(); // Add all the previous tokens with configs to the new box - evmChainErc20TokensBox.addAll(allValues); + await evmChainErc20TokensBox.addAll(allValues); } + @override + List get getDefaultTokenContractAddresses => + DefaultEthereumErc20Tokens().initialErc20Tokens.map((e) => e.contractAddress).toList(); + @override EVMChainTransactionInfo getTransactionInfo( EVMChainTransactionModel transactionModel, String address) { diff --git a/cw_evm/lib/evm_chain_wallet.dart b/cw_evm/lib/evm_chain_wallet.dart index 800bf745b..306688f13 100644 --- a/cw_evm/lib/evm_chain_wallet.dart +++ b/cw_evm/lib/evm_chain_wallet.dart @@ -146,6 +146,8 @@ abstract class EVMChainWalletBase extends WalletBase< // required WalletInfo walletInfo, // }); + List get getDefaultTokenContractAddresses; + Future initErc20TokensBox(); String getTransactionHistoryFileName(); @@ -173,6 +175,9 @@ abstract class EVMChainWalletBase extends WalletBase< await walletAddresses.init(); await transactionHistory.init(); + // check for Already existing scam tokens, cuz users can get scammed twice ¯\_(ツ)_/¯ + await _checkForExistingScamTokens(); + if (walletInfo.isHardwareWallet) { _evmChainPrivateKey = EvmLedgerCredentials(walletInfo.address); walletAddresses.address = walletInfo.address; @@ -188,6 +193,31 @@ abstract class EVMChainWalletBase extends WalletBase< await save(); } + Future _checkForExistingScamTokens() async { + final baseCurrencySymbols = CryptoCurrency.all.map((e) => e.title.toUpperCase()).toList(); + + for (var token in erc20Currencies) { + bool isPotentialScam = false; + + bool isWhitelisted = + getDefaultTokenContractAddresses.any((element) => element == token.contractAddress); + + final tokenSymbol = token.title.toUpperCase(); + + // check if the token symbol is the same as any of the base currencies symbols (ETH, SOL, POL, TRX, etc): + // if it is, then it's probably a scam unless it's in the whitelist + if (baseCurrencySymbols.contains(tokenSymbol.trim().toUpperCase()) && !isWhitelisted) { + isPotentialScam = true; + } + + if (isPotentialScam) { + token.isPotentialScam = true; + token.iconPath = null; + await token.save(); + } + } + } + @override Future calculateEstimatedFee(TransactionPriority priority) async { { diff --git a/cw_monero/lib/monero_unspent.dart b/cw_monero/lib/monero_unspent.dart index 292c76dbe..224e33b2a 100644 --- a/cw_monero/lib/monero_unspent.dart +++ b/cw_monero/lib/monero_unspent.dart @@ -4,21 +4,32 @@ import 'package:cw_monero/api/coins_info.dart'; import 'package:monero/monero.dart' as monero; class MoneroUnspent extends Unspent { + static Future fromUnspent(String address, String hash, String keyImage, int value, bool isFrozen, bool isUnlocked) async { + return MoneroUnspent( + address: address, + hash: hash, + keyImage: keyImage, + value: value, + isFrozen: isFrozen, + isUnlocked: isUnlocked); + } + MoneroUnspent( - String address, String hash, String keyImage, int value, bool isFrozen, this.isUnlocked) + {required String address, + required String hash, + required String keyImage, + required int value, + required bool isFrozen, + required this.isUnlocked}) : super(address, hash, value, 0, keyImage) { - getCoinByKeyImage(keyImage).then((coinId) { - if (coinId == null) return; - getCoin(coinId).then((coin) { - _frozen = monero.CoinsInfo_frozen(coin); - }); - }); + _frozen = isFrozen; } bool _frozen = false; @override set isFrozen(bool freeze) { + _frozen = freeze; printV("set isFrozen: $freeze ($keyImage): $freeze"); getCoinByKeyImage(keyImage!).then((coinId) async { if (coinId == null) return; diff --git a/cw_monero/lib/monero_wallet.dart b/cw_monero/lib/monero_wallet.dart index 8d5bb154f..ac8e01279 100644 --- a/cw_monero/lib/monero_wallet.dart +++ b/cw_monero/lib/monero_wallet.dart @@ -592,7 +592,7 @@ abstract class MoneroWalletBase extends WalletBase get getDefaultTokenContractAddresses => + DefaultPolygonErc20Tokens().initialPolygonErc20Tokens.map((e) => e.contractAddress).toList(); + @override Future checkIfScanProviderIsEnabled() async { bool isPolygonScanEnabled = (await sharedPrefs.future).getBool("use_polygonscan") ?? true; diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index df5cf1cc5..bd04914ae 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,114 +1,134 @@ { - "images" : [ + "images": [ { - "filename" : "Icon-App-40x40@1x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" + "filename": "AppIcon@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "filename" : "Icon-App-20x20@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" + "filename": "AppIcon@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "filename" : "Icon-App-29x29@2x 1.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" + "filename": "AppIcon~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "filename" : "Icon-App-29x29@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" + "filename": "AppIcon@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" + "filename": "AppIcon-83.5@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "filename" : "Icon-App-40x40@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" + "filename": "AppIcon-40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "filename" : "app_icon_120.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" + "filename": "AppIcon-40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "filename" : "app_icon_180.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" + "filename": "AppIcon-40~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "filename" : "Icon-App-20x20@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" + "filename": "AppIcon-40@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "filename" : "Icon-App-20x20@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" + "filename": "AppIcon-20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "filename" : "Icon-App-29x29@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" + "filename": "AppIcon-20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "filename" : "Icon-App-29x29@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" + "filename": "AppIcon-20~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "filename" : "Icon-App-40x40@1x 1.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" + "filename": "AppIcon-20@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" + "filename": "AppIcon-29.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "filename" : "Icon-App-76x76@1x.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" + "filename": "AppIcon-29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "filename" : "Icon-App-76x76@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" + "filename": "AppIcon-29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "filename" : "Icon-App-83.5x83.5@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" + "filename": "AppIcon-29~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "filename" : "app_icon_1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" + "filename": "AppIcon-29@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" + }, + { + "filename": "AppIcon-60@2x~car.png", + "idiom": "car", + "scale": "2x", + "size": "60x60" + }, + { + "filename": "AppIcon-60@3x~car.png", + "idiom": "car", + "scale": "3x", + "size": "60x60" + }, + { + "filename": "AppIcon~ios-marketing.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "author" : "xcode", - "version" : 1 + "info": { + "author": "iconkitchen", + "version": 1 } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 369d8d9a4..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 65ed7f3db..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index fb14bfc55..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index d24d594a3..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x 1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x 1.png deleted file mode 100644 index 07acd0a82..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x 1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index 07acd0a82..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index bdc20091d..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x 1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x 1.png deleted file mode 100644 index 65ed7f3db..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x 1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 65ed7f3db..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 80e78be41..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index e06998b67..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 78a2ccfb1..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 0ba8d647c..000000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/lib/entities/provider_types.dart b/lib/entities/provider_types.dart index 63918aa8b..400b5b9d4 100644 --- a/lib/entities/provider_types.dart +++ b/lib/entities/provider_types.dart @@ -6,7 +6,6 @@ import 'package:cake_wallet/buy/moonpay/moonpay_provider.dart'; import 'package:cake_wallet/buy/onramper/onramper_buy_provider.dart'; import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart'; import 'package:cake_wallet/di.dart'; -import 'package:cw_core/wallet_type.dart'; enum ProviderType { robinhood, dfx, onramper, moonpay, meld, kriptonim } @@ -47,7 +46,7 @@ extension ProviderTypeName on ProviderType { } class ProvidersHelper { - static List getAvailableBuyProviderTypes(WalletType walletType) => [ + static List getAvailableBuyProviderTypes() => [ ProviderType.robinhood, ProviderType.dfx, ProviderType.onramper, @@ -55,7 +54,7 @@ class ProvidersHelper { ProviderType.kriptonim ]; - static List getAvailableSellProviderTypes(WalletType walletType) => [ + static List getAvailableSellProviderTypes() => [ ProviderType.robinhood, ProviderType.dfx, ProviderType.onramper, @@ -63,7 +62,7 @@ class ProvidersHelper { ProviderType.kriptonim ]; - static BuyProvider? getProviderByType(ProviderType type) { + static BuyProvider getProviderByType(ProviderType type) { switch (type) { case ProviderType.robinhood: return getIt.get(); @@ -77,8 +76,6 @@ class ProvidersHelper { return getIt.get(); case ProviderType.kriptonim: return getIt.get(); - default: - return null; - } + } } } diff --git a/lib/src/screens/backup/backup_page.dart b/lib/src/screens/backup/backup_page.dart index 8f520b15f..408fad2d3 100644 --- a/lib/src/screens/backup/backup_page.dart +++ b/lib/src/screens/backup/backup_page.dart @@ -139,6 +139,7 @@ class BackupPage extends BasePage { await backupViewModelBase.saveToDownload( backup.name, backup.file); Navigator.of(dialogContext).pop(); + await showBar(context, S.of(context).file_saved); }, actionLeftButton: () async { Navigator.of(dialogContext).pop(); diff --git a/lib/src/screens/backup/edit_backup_password_page.dart b/lib/src/screens/backup/edit_backup_password_page.dart index 93207c191..1c80f1bb3 100644 --- a/lib/src/screens/backup/edit_backup_password_page.dart +++ b/lib/src/screens/backup/edit_backup_password_page.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; @@ -68,7 +67,9 @@ class EditBackupPasswordPage extends BasePage { actionRightButton: () async { await editBackupPasswordViewModel.save(); Navigator.of(dialogContext).pop(); - Navigator.of(context).pop(); + if (context.mounted) { + Navigator.of(context).pop(); + } }, actionLeftButton: () => Navigator.of(dialogContext).pop()); }); diff --git a/lib/src/screens/dashboard/pages/address_page.dart b/lib/src/screens/dashboard/pages/address_page.dart index a0de67100..ab51b97e6 100644 --- a/lib/src/screens/dashboard/pages/address_page.dart +++ b/lib/src/screens/dashboard/pages/address_page.dart @@ -162,7 +162,7 @@ class AddressPage extends BasePage { } reaction((_) => receiveOptionViewModel.selectedReceiveOption, (ReceivePageOption option) { - if (bitcoin!.isBitcoinReceivePageOption(option)) { + if (dashboardViewModel.type == WalletType.bitcoin && bitcoin!.isBitcoinReceivePageOption(option)) { addressListViewModel.setAddressType(bitcoin!.getOptionToType(option)); return; } diff --git a/lib/src/screens/dashboard/pages/navigation_dock.dart b/lib/src/screens/dashboard/pages/navigation_dock.dart index 4eda169d3..e2a2362ee 100644 --- a/lib/src/screens/dashboard/pages/navigation_dock.dart +++ b/lib/src/screens/dashboard/pages/navigation_dock.dart @@ -32,7 +32,7 @@ class NavigationDock extends StatelessWidget { ), ), child: Container( - margin: const EdgeInsets.only(left: 16, right: 16, bottom: 16), + margin: const EdgeInsets.only(left: 8, right: 8, bottom: 16), child: ClipRRect( borderRadius: BorderRadius.circular(50), child: BackdropFilter( @@ -48,7 +48,7 @@ class NavigationDock extends StatelessWidget { Theme.of(context).extension()!.syncedBackgroundColor, ), child: Container( - padding: EdgeInsets.symmetric(horizontal: 10), + padding: EdgeInsets.symmetric(horizontal: 8), child: IntrinsicHeight( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/src/screens/dashboard/pages/transactions_page.dart b/lib/src/screens/dashboard/pages/transactions_page.dart index 654663f92..be353677b 100644 --- a/lib/src/screens/dashboard/pages/transactions_page.dart +++ b/lib/src/screens/dashboard/pages/transactions_page.dart @@ -45,20 +45,17 @@ class TransactionsPage extends StatelessWidget { Observer(builder: (_) { final status = dashboardViewModel.status; if (status is SyncingSyncStatus) { - return Padding( - padding: const EdgeInsets.fromLTRB(24, 0, 24, 8), - child: DashBoardRoundedCardWidget( - key: ValueKey('transactions_page_syncing_alert_card_key'), - onTap: () { - try { - final uri = Uri.parse( - "https://docs.cakewallet.com/faq/funds-not-appearing"); - launchUrl(uri, mode: LaunchMode.externalApplication); - } catch (_) {} - }, - title: S.of(context).syncing_wallet_alert_title, - subTitle: S.of(context).syncing_wallet_alert_content, - ), + return DashBoardRoundedCardWidget( + key: ValueKey('transactions_page_syncing_alert_card_key'), + onTap: () { + try { + final uri = Uri.parse( + "https://docs.cakewallet.com/faq/funds-not-appearing"); + launchUrl(uri, mode: LaunchMode.externalApplication); + } catch (_) {} + }, + title: S.of(context).syncing_wallet_alert_title, + subTitle: S.of(context).syncing_wallet_alert_content, ); } else { return Container(); @@ -72,7 +69,6 @@ class TransactionsPage extends StatelessWidget { child: Observer( builder: (_) { final items = dashboardViewModel.items; - final amount = items.length + 1; return items.isNotEmpty ? ListView.builder( key: ValueKey('transactions_page_list_view_builder_key'), diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart index 786c56658..b26dadb67 100644 --- a/lib/src/screens/dashboard/widgets/action_button.dart +++ b/lib/src/screens/dashboard/widgets/action_button.dart @@ -47,6 +47,8 @@ class ActionButton extends StatelessWidget { SizedBox(height: 4), Text( title, + maxLines: 1, + overflow: TextOverflow.visible, style: TextStyle( fontSize: 9, color: textColor ?? diff --git a/lib/src/screens/nodes/node_create_or_edit_page.dart b/lib/src/screens/nodes/node_create_or_edit_page.dart index fc6ac07e0..e62b6cb01 100644 --- a/lib/src/screens/nodes/node_create_or_edit_page.dart +++ b/lib/src/screens/nodes/node_create_or_edit_page.dart @@ -182,7 +182,9 @@ class NodeCreateOrEditPage extends BasePage { await nodeCreateOrEditViewModel.save( editingNode: editingNode, saveAsCurrent: isSelected ?? false); - Navigator.of(context).pop(); + if (context.mounted) { + Navigator.of(context).pop(); + } }, text: S.of(context).save, color: Theme.of(context).primaryColor, diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 499bdb200..91f94e060 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -98,7 +98,7 @@ class SendPage extends BasePage { return MergeSemantics( child: SizedBox( height: isMobileView ? 37 : 45, - width: isMobileView ? 47: 45, + width: isMobileView ? 47 : 45, child: ButtonTheme( minWidth: double.minPositive, child: Semantics( @@ -397,7 +397,6 @@ class SendPage extends BasePage { return LoadingPrimaryButton( key: ValueKey('send_page_send_button_key'), onPressed: () async { - //Request dummy node to get the focus out of the text fields FocusScope.of(context).requestFocus(FocusNode()); @@ -507,7 +506,6 @@ class SendPage extends BasePage { Navigator.of(loadingBottomSheetContext!).pop(); } - if (state is FailureState) { WidgetsBinding.instance.addPostFrameCallback((_) { showPopUp( @@ -525,7 +523,6 @@ class SendPage extends BasePage { } if (state is IsExecutingState) { - // wait a bit to avoid showing the loading dialog if transaction is failed await Future.delayed(const Duration(milliseconds: 300)); final currentState = sendViewModel.state; @@ -584,8 +581,6 @@ class SendPage extends BasePage { }); } - - if (state is TransactionCommitted) { WidgetsBinding.instance.addPostFrameCallback((_) async { if (!context.mounted) { @@ -594,7 +589,8 @@ class SendPage extends BasePage { newContactAddress = newContactAddress ?? sendViewModel.newContactAddress(); - if (newContactAddress?.address != null && isRegularElectrumAddress(newContactAddress!.address)) { + if (newContactAddress?.address != null && + isRegularElectrumAddress(newContactAddress!.address)) { newContactAddress = null; } @@ -606,47 +602,53 @@ class SendPage extends BasePage { builder: (BuildContext bottomSheetContext) { return showContactSheet ? InfoBottomSheet( - currentTheme: currentTheme, - showDontAskMeCheckbox: true, - onCheckboxChanged: (value) => sendViewModel.setShowAddressBookPopup(!value), - titleText: S.of(bottomSheetContext).transaction_sent, - contentImage: 'assets/images/contact_icon.svg', - contentImageColor: Theme.of(context) - .extension()! - .titleColor, - content: S.of(bottomSheetContext).add_contact_to_address_book, - isTwoAction: true, - leftButtonText: 'No', - rightButtonText: 'Yes', - actionLeftButton: () { - Navigator.of(bottomSheetContext).pop(); - Navigator.of(context) - .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); - RequestReviewHandler.requestReview(); - newContactAddress = null; - }, - actionRightButton: () { - Navigator.of(bottomSheetContext).pop(); - RequestReviewHandler.requestReview(); - Navigator.of(context) - .pushNamed(Routes.addressBookAddContact, arguments: newContactAddress); - newContactAddress = null; - }, - ) + currentTheme: currentTheme, + showDontAskMeCheckbox: true, + onCheckboxChanged: (value) => sendViewModel.setShowAddressBookPopup(!value), + titleText: S.of(bottomSheetContext).transaction_sent, + contentImage: 'assets/images/contact_icon.svg', + contentImageColor: Theme.of(context).extension()!.titleColor, + content: S.of(bottomSheetContext).add_contact_to_address_book, + isTwoAction: true, + leftButtonText: 'No', + rightButtonText: 'Yes', + actionLeftButton: () { + Navigator.of(bottomSheetContext).pop(); + if (context.mounted) { + Navigator.of(context) + .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); + } + RequestReviewHandler.requestReview(); + newContactAddress = null; + }, + actionRightButton: () { + Navigator.of(bottomSheetContext).pop(); + RequestReviewHandler.requestReview(); + if (context.mounted) { + Navigator.of(context).pushNamed(Routes.addressBookAddContact, + arguments: newContactAddress); + } + newContactAddress = null; + }, + ) : InfoBottomSheet( - currentTheme: currentTheme, - titleText: S.of(bottomSheetContext).transaction_sent, - contentImage: 'assets/images/birthday_cake.svg', - actionButtonText: S.of(bottomSheetContext).close, - actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'), - actionButton: () { - Navigator.of(bottomSheetContext).pop(); - Navigator.of(context) - .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); - RequestReviewHandler.requestReview(); - newContactAddress = null; - }, - ); + currentTheme: currentTheme, + titleText: S.of(bottomSheetContext).transaction_sent, + contentImage: 'assets/images/birthday_cake.svg', + actionButtonText: S.of(bottomSheetContext).close, + actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'), + actionButton: () { + Navigator.of(bottomSheetContext).pop(); + Future.delayed(Duration.zero, () { + if (context.mounted) { + Navigator.of(context) + .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); + } + RequestReviewHandler.requestReview(); + newContactAddress = null; + }); + }, + ); }, ); @@ -678,8 +680,7 @@ class SendPage extends BasePage { currentTheme: currentTheme, titleText: S.of(bottomSheetContext).proceed_on_device, contentImage: 'assets/images/hardware_wallet/ledger_nano_x.png', - contentImageColor: - Theme.of(context).extension()!.titleColor, + contentImageColor: Theme.of(context).extension()!.titleColor, content: S.of(bottomSheetContext).proceed_on_device_description, isTwoAction: false, actionButtonText: S.of(context).cancel, @@ -778,5 +779,4 @@ class SendPage extends BasePage { return isValid; } - } diff --git a/lib/src/screens/send/widgets/send_card.dart b/lib/src/screens/send/widgets/send_card.dart index a8a9e6b61..5240867c9 100644 --- a/lib/src/screens/send/widgets/send_card.dart +++ b/lib/src/screens/send/widgets/send_card.dart @@ -90,6 +90,9 @@ class SendCardState extends State with AutomaticKeepAliveClientMixin with AutomaticKeepAliveClientMixin output.setSendAll(sendViewModel.sendingBalance)), + allAmountCallback: () async => output.setSendAll(await sendViewModel.sendingBalance)), Divider( height: 1, color: Theme.of(context).extension()!.textFieldHintColor), Observer( - builder: (_) => Padding( - padding: EdgeInsets.only(top: 10), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - S.of(context).available_balance + ':', - style: TextStyle( + builder: (_) { + // force rebuild on mobx + final _ = sendViewModel.coinTypeToSpendFrom; + return Padding( + padding: EdgeInsets.only(top: 10), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + S.of(context).available_balance + ':', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: + Theme.of(context).extension()!.textFieldHintColor), + ), + ), + FutureBuilder( + future: sendViewModel.sendingBalance, + builder: (context, snapshot) { + return Text( + snapshot.data ?? sendViewModel.balance, // default to balance while loading + style: TextStyle( fontSize: 12, fontWeight: FontWeight.w600, color: Theme.of(context).extension()!.textFieldHintColor), - ), - ), - Text( - sendViewModel.sendingBalance, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: - Theme.of(context).extension()!.textFieldHintColor), - ) - ], - ), - ), + ); + }, + ) + ], + ), + ); + }, ), if (!sendViewModel.isFiatDisabled) CurrencyAmountTextField( @@ -523,9 +535,9 @@ class SendCardState extends State with AutomaticKeepAliveClientMixin sendViewModel.selectedCryptoCurrency, (Currency currency) { + reaction((_) => sendViewModel.selectedCryptoCurrency, (Currency currency) async { if (output.sendAll) { - output.setSendAll(sendViewModel.sendingBalance); + output.setSendAll(await sendViewModel.sendingBalance); } output.setCryptoAmount(cryptoAmountController.text); diff --git a/lib/src/screens/wallet_connect/wc_pairing_detail_page.dart b/lib/src/screens/wallet_connect/wc_pairing_detail_page.dart index f99eb9cdb..321d1354a 100644 --- a/lib/src/screens/wallet_connect/wc_pairing_detail_page.dart +++ b/lib/src/screens/wallet_connect/wc_pairing_detail_page.dart @@ -101,7 +101,7 @@ class WCCDetailsWidget extends BasePage { child: CircleAvatar( backgroundImage: (pairing.peerMetadata!.icons.isNotEmpty ? NetworkImage(pairing.peerMetadata!.icons[0]) - : const AssetImage('assets/images/default_icon.png')) + : const AssetImage('assets/images/app_logo.png')) as ImageProvider, ), ), diff --git a/lib/view_model/buy/buy_sell_view_model.dart b/lib/view_model/buy/buy_sell_view_model.dart index bf05109ad..df4b838f2 100644 --- a/lib/view_model/buy/buy_sell_view_model.dart +++ b/lib/view_model/buy/buy_sell_view_model.dart @@ -15,7 +15,6 @@ import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cw_core/crypto_currency.dart'; -import 'package:cw_core/currency_for_wallet_type.dart'; import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; import 'package:mobx/mobx.dart'; @@ -61,21 +60,17 @@ abstract class BuySellViewModelBase extends WalletChangeListenerViewModel with S late Timer bestRateSync; List get availableBuyProviders { - final providerTypes = ProvidersHelper.getAvailableBuyProviderTypes( - walletTypeForCurrency(cryptoCurrency) ?? wallet.type); + final providerTypes = ProvidersHelper.getAvailableBuyProviderTypes(); return providerTypes .map((type) => ProvidersHelper.getProviderByType(type)) - .where((provider) => provider != null) .cast() .toList(); } List get availableSellProviders { - final providerTypes = ProvidersHelper.getAvailableSellProviderTypes( - walletTypeForCurrency(cryptoCurrency) ?? wallet.type); + final providerTypes = ProvidersHelper.getAvailableSellProviderTypes(); return providerTypes .map((type) => ProvidersHelper.getProviderByType(type)) - .where((provider) => provider != null) .cast() .toList(); } diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 31ec974ec..045002da1 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -245,7 +245,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor } @computed - String get sendingBalance { + Future get sendingBalance async { // only for electrum, monero, wownero, decred wallets atm: switch (wallet.type) { case WalletType.bitcoin: @@ -255,7 +255,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor case WalletType.wownero: case WalletType.decred: return wallet.formatCryptoAmount( - unspentCoinsListViewModel.getSendingBalance(coinTypeToSpendFrom).toString()); + (await unspentCoinsListViewModel.getSendingBalance(coinTypeToSpendFrom)).toString()); default: return balance; } diff --git a/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart b/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart index a54e2be49..bae4677cf 100644 --- a/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart +++ b/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart @@ -149,12 +149,15 @@ abstract class UnspentCoinsListViewModelBase with Store { } @action - int getSendingBalance(UnspentCoinType overrideCoinTypeToSpendFrom) { + Future getSendingBalance(UnspentCoinType overrideCoinTypeToSpendFrom) async { // return items.where((element) => element.isSending).fold(0, (previousValue, element) => previousValue + element.value); // go through all unspent coins and add up the value minus frozen and non sending: int total = 0; - + await _updateUnspents(); + Set seen = {}; for (final item in _getSpecificUnspents(overrideCoinTypeToSpendFrom)) { + if (seen.contains(item.toString())) continue; + seen.add(item.toString()); if (item.isFrozen || !item.isSending) continue; total += item.value; } @@ -163,8 +166,6 @@ abstract class UnspentCoinsListViewModelBase with Store { @action void _updateUnspentCoinsInfo() { - items.clear(); - final unspents = _getUnspents() .map((elem) { try { @@ -198,7 +199,7 @@ abstract class UnspentCoinsListViewModelBase with Store { .toList(); unspents.sort((a, b) => b.value.compareTo(a.value)); - + items.clear(); items.addAll(unspents); } diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 9d54afa04..adfbd21dc 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "الرصيد فيات", "field_required": "هذه الخانة مطلوبه", + "file_saved": "تم حفظ الملف", "fill_code": "يرجى ملء رمز التحقق المرسل إلى بريدك الإلكتروني", "filter_by": "تصفية حسب", "first_wallet_text": "محفظة رائعة ل Monero, Bitcoin, Ethereum, Litecoin و Haven", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 716b632ce..370295db4 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Фиат Баланс", "field_required": "Това поле е задължително", + "file_saved": "Запасен файл", "fill_code": "Моля, въведето кода за потвърждаване, изпратен на Вашия имейл", "filter_by": "Филтрирай по", "first_wallet_text": "Невероятен портфейл за Monero, Bitcoin, Ethereum, Litecoin и Haven", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index ba559e654..6a173de78 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Balance", "field_required": "Toto pole je povinné", + "file_saved": "Uložen soubor", "fill_code": "Prosím vyplňte ověřovací kód zaslaný na Váš e-mail", "filter_by": "Filtrovat podle", "first_wallet_text": "Úžasná peněženka pro Monero, Bitcoin, Ethereum, Litecoin a Haven", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 6636625d1..4f4728651 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Balance", "field_required": "Dieses Feld ist erforderlich", + "file_saved": "Datei gespeichert", "fill_code": "Geben Sie den Bestätigungscode ein, den Sie per E-Mail erhalten haben", "filter_by": "Filtern nach", "first_wallet_text": "Eine großartige Wallet für Monero, Bitcoin, Ethereum, Litecoin, und Haven", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index f059ef27e..7674b923f 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Balance", "field_required": "This field is required", + "file_saved": "File saved", "fill_code": "Please fill in the verification code provided to your email", "filter_by": "Filter by", "first_wallet_text": "Awesome wallet for Monero, Bitcoin, Ethereum, Litecoin, and Haven", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index d9bd87d77..3aa9bc91a 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Balance fiat", "field_required": "Este campo es obligatorio", + "file_saved": "Archivo guardado", "fill_code": "Por favor completa el código de verificación proporcionado en tu correo electrónico", "filter_by": "Filtrado por", "first_wallet_text": "Impresionante billetera para Monero, Bitcoin, Ethereum, Litecoin, y Haven", @@ -1035,4 +1036,4 @@ "you_will_receive_estimated_amount": "Recibirá(estimado )", "you_will_send": "Convertir de", "yy": "YY" -} +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index a9e1b25c0..18643a720 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Solde fiat", "field_required": "Ce champ est obligatoire", + "file_saved": "Dossier enregistré", "fill_code": "Veuillez remplir le code de vérification fourni sur votre e-mail", "filter_by": "Filtrer par", "first_wallet_text": "Super portefeuille (wallet) pour Monero, Bitcoin, Ethereum, Litecoin et Haven", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index 7435739be..93c98f316 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -333,6 +333,7 @@ "fiat_api": "API ɗin Fiat", "fiat_balance": "Fiat Balance", "field_required": "wannan fillin ana bukatansa", + "file_saved": "Fayil ɗin ceto", "fill_code": "Da fatan za a cika lambar tabbatarwa da aka bayar zuwa imel ɗin ku", "filter_by": "Tace ta", "first_wallet_text": "Aikace-aikacen e-wallet ga Monero, Bitcoin, Ethereum, Litecoin, da kuma Haven", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index c07ed9ca0..9c3444749 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -333,6 +333,7 @@ "fiat_api": "फिएट पैसे API", "fiat_balance": "फिएट बैलेंस", "field_required": "यह फ़ील्ड आवश्यक है", + "file_saved": "फ़ाइल सहेजा गया", "fill_code": "कृपया अपने ईमेल पर प्रदान किया गया सत्यापन कोड भरें", "filter_by": "के द्वारा छनित", "first_wallet_text": "Monero, Bitcoin, Ethereum, Litecoin, और Haven के लिए बहुत बढ़िया बटुआ", @@ -522,8 +523,8 @@ "paste": "पेस्ट करें", "pause_wallet_creation": "हेवन वॉलेट बनाने की क्षमता फिलहाल रुकी हुई है।", "payment_id": "भुगतान ID: ", - "payment_was_received": "आपका भुगतान प्राप्त हुआ था।", "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", + "payment_was_received": "आपका भुगतान प्राप्त हुआ था।", "pending": " (अपूर्ण)", "percentageOf": "${amount} का", "pin_at_top": "शीर्ष पर ${token} पिन करें", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index e3616d332..9cc32edba 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Bilans", "field_required": "ovo polje je obavezno", + "file_saved": "Spremljena datoteka", "fill_code": "Molimo vas da ispunite kontrolni kod koji ste dobili na svojoj e-pošti", "filter_by": "Filtrirati po", "first_wallet_text": "Odličan novčanik za Monero, Bitcoin, Ethereum, Litecoin, i Haven", diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index 28d242d73..cac62182d 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat մնացորդ", "field_required": "Այս դաշտը պարտադիր է", + "file_saved": "Ֆայլը պահպանվել է", "fill_code": "Խնդրում ենք լրացնել հաստատման կոդը ձեր էլեկտրոնային փոստում", "filter_by": "Ֆիլտրել ըստ", "first_wallet_text": "Հիանալի հաշվեհամար Monero, Bitcoin, Ethereum, Litecoin և Haven արժույթների համար", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index b7a517773..cfc5282e7 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -333,6 +333,7 @@ "fiat_api": "API fiat", "fiat_balance": "Saldo Fiat", "field_required": "Bagian ini diperlukan", + "file_saved": "File disimpan", "fill_code": "Silakan isi kode verifikasi yang diterima di email Anda", "filter_by": "Filter berdasarkan", "first_wallet_text": "Dompet luar biasa untuk Monero, Bitcoin, Ethereum, Litecoin, dan Haven", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 7db560738..993435eb0 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Saldo fiat", "field_required": "Questo campo è obbligatorio", + "file_saved": "File salvato", "fill_code": "Compila il codice di verifica fornito alla tua email", "filter_by": "Filtra per", "first_wallet_text": "Portafoglio fantastico per Monero, Bitcoin, Ethereum, Litecoin, e Haven", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index c70526164..a17c046dc 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -333,6 +333,7 @@ "fiat_api": "不換紙幣 API", "fiat_balance": "フィアットバランス", "field_required": "この項目は必須です", + "file_saved": "保存されたファイル", "fill_code": "メールアドレスに記載されている確認コードを入力してください", "filter_by": "でフィルタリング", "first_wallet_text": "Monero、Bitcoin、Ethereum、Litecoin、Haven用の素晴らしいウォレット", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 909ac9921..20296f0b9 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -333,6 +333,7 @@ "fiat_api": "명목 화폐 API", "fiat_balance": "피아트 잔액", "field_required": "이 필드는 필수입니다", + "file_saved": "파일이 저장되었습니다", "fill_code": "이메일에 제공된 인증 코드를 입력하세요.", "filter_by": "필터링 기준", "first_wallet_text": "Monero, Bitcoin, Ethereum, Litecoin 및 Haven을 위한 멋진 지갑", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 1396d77b7..0dde786c6 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Balance", "field_required": "ဤစာကွက်လပ်မှာဖြည့်ရန်လိုအပ်ပါသည်", + "file_saved": "သိမ်းဆည်းထားသည့်ဖိုင်", "fill_code": "သင့်အီးမေးလ်သို့ ပေးထားသည့် အတည်ပြုကုဒ်ကို ဖြည့်ပါ။", "filter_by": "အလိုက် စစ်ထုတ်ပါ။", "first_wallet_text": "Monero၊ Bitcoin၊ Ethereum၊ Litecoin နှင့် Haven အတွက် အလွန်ကောင်းမွန်သော ပိုက်ဆံအိတ်", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index c4a189ea2..4d21c6234 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Fiat Balans", "field_required": "dit veld is verplicht", + "file_saved": "Bestand opgeslagen", "fill_code": "Vul de verificatiecode in die u in uw e-mail hebt ontvangen", "filter_by": "Filteren op", "first_wallet_text": "Geweldige portemonnee voor Monero, Bitcoin, Ethereum, Litecoin, en Haven", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index adfc1d4cf..11d2e9634 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -333,6 +333,7 @@ "fiat_api": "API Walut FIAT", "fiat_balance": "Bilans Fiata", "field_required": "To pole jest wymagane", + "file_saved": "Zapisano plik", "fill_code": "Proszę wpisać kod weryfikacyjny który otrzymałeś w wiadomości e-mail", "filter_by": "Filtruj według", "first_wallet_text": "Świetny portfel na Monero, Bitcoin, Ethereum, Litecoin, i Haven", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 68262ef50..1ebfa1d04 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -333,6 +333,7 @@ "fiat_api": "API da Fiat", "fiat_balance": "Equilíbrio Fiat", "field_required": "Este campo é obrigatório", + "file_saved": "Arquivo salvo", "fill_code": "Por favor, preencha o código de verificação fornecido ao seu e-mail", "filter_by": "Filtrar por", "first_wallet_text": "Carteira incrível para Monero, Bitcoin, Ethereum, Litecoin, e Haven", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index d15ddf371..d60b76fb6 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -333,6 +333,7 @@ "fiat_api": "Фиат API", "fiat_balance": "Фиатный баланс", "field_required": "Это поле обязательно к заполнению", + "file_saved": "Файл сохранен", "fill_code": "Пожалуйста, введите код подтверждения, отправленный на вашу электронную почту", "filter_by": "Фильтровать по", "first_wallet_text": "В самом удобном кошельке для Monero, Bitcoin, Ethereum, Litecoin, и Haven", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 652b28ce4..3f6a2e752 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -333,6 +333,7 @@ "fiat_api": "API สกุลเงินตรา", "fiat_balance": "เฟียต บาลานซ์", "field_required": "ช่องนี้จำเป็น", + "file_saved": "บันทึกไฟล์", "fill_code": "โปรดกรอกรหัสยืนยันที่ส่งไปยังอีเมลของคุณ", "filter_by": "กรองตาม", "first_wallet_text": "กระเป๋าสตางค์ที่สวยงามสำหรับ Monero, Bitcoin, Ethereum, Litecoin และ Haven", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 46bf27419..4c7409500 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "Balanse ng fiat", "field_required": "Kinakailangan ang patlang na ito", + "file_saved": "Nai -save ang file", "fill_code": "Mangyaring ilagay ang verfification code na ibinigay sa iyong email", "filter_by": "Filter ni", "first_wallet_text": "Kahanga-hangang wallet para sa Monero, Bitcoin, Litecoin, Ethereum, at Haven", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 0081003d0..32fb7da4a 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -333,6 +333,7 @@ "fiat_api": "İtibari Para API", "fiat_balance": "Fiat Bakiyesi", "field_required": "Bu alan gereklidir", + "file_saved": "Dosya kaydedildi", "fill_code": "Lütfen e-postanıza gelen doğrulama kodunu girin", "filter_by": "Şuna göre filtrele", "first_wallet_text": "Monero, Bitcoin, Ethereum, Litecoin ve Haven için harika cüzdan", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index e4121539e..7efa95b10 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -333,6 +333,7 @@ "fiat_api": "Фіат API", "fiat_balance": "Фіат Баланс", "field_required": "Це поле є обов'язковим", + "file_saved": "Збережено файл", "fill_code": "Будь ласка, введіть код підтвердження, надісланий на вашу електронну адресу", "filter_by": "Фільтрувати по", "first_wallet_text": "В самому зручному гаманці для Monero, Bitcoin, Ethereum, Litecoin, та Haven", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 3d99f36a7..54546715c 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -333,6 +333,7 @@ "fiat_api": "Fiat API", "fiat_balance": "فیاٹ بیلنس", "field_required": "اس کو پر کرنا ضروری ہے", + "file_saved": "فائل محفوظ ہوگئی", "fill_code": "براہ کرم اپنے ای میل پر فراہم کردہ تصدیقی کوڈ کو پُر کریں۔", "filter_by": "کی طرف سے فلٹر", "first_wallet_text": "Monero، Bitcoin، Ethereum، Litecoin، اور Haven کے لیے زبردست پرس", diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index 690d6fbc5..fdfa0bc88 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -332,6 +332,7 @@ "fiat_api": "API Fiat", "fiat_balance": "Số dư Fiat", "field_required": "Trường này là bắt buộc", + "file_saved": "Tệp lưu", "fill_code": "Vui lòng điền mã xác minh được gửi đến email của bạn", "filter_by": "Lọc theo", "first_wallet_text": "Ví tuyệt vời cho Monero, Bitcoin, Ethereum, Litecoin, và Haven", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index ab7d03526..45a92e115 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -334,6 +334,7 @@ "fiat_api": "Ojú ètò áàpù owó tí ìjọba pàṣẹ wa lò", "fiat_balance": "Fiat Iwontunws.funfun", "field_required": "E ni lati se nkan si aye yi", + "file_saved": "Faili faili ti o ti fipamọ", "fill_code": "Ẹ jọ̀wọ́ tẹ̀ ọ̀rọ̀ ìjẹ́rìísí t'á ti ránṣẹ́ sí ímeèlì yín.", "filter_by": "Ṣẹ́ láti", "first_wallet_text": "Àpamọ́wọ́ t'á fi Monero, Bitcoin, Ethereum, Litecoin, àti Haven pamọ́ wà pa", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 0888c9fa3..6d7f312f5 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -333,6 +333,7 @@ "fiat_api": "法币API", "fiat_balance": "法币余额", "field_required": "此字段是必需的", + "file_saved": "保存的文件", "fill_code": "请填写提供给您邮箱的验证码", "filter_by": "过滤", "first_wallet_text": "适用于门罗币、比特币、以太坊、莱特币和避风港的超棒钱包", diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 9b5685a07..321db113d 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.21.0" -MONERO_COM_BUILD_NUMBER=116 +MONERO_COM_VERSION="4.25.0" +MONERO_COM_BUILD_NUMBER=118 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_SCHEME="monero.com" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="5.0.0" -CAKEWALLET_BUILD_NUMBER=254 +CAKEWALLET_VERSION="4.25.0" +CAKEWALLET_BUILD_NUMBER=256 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" CAKEWALLET_SCHEME="cakewallet" diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index a9e86bb4a..5c0003612 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET) APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.21.0" -MONERO_COM_BUILD_NUMBER=114 +MONERO_COM_VERSION="4.25.0" +MONERO_COM_BUILD_NUMBER=115 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="5.0.0" -CAKEWALLET_BUILD_NUMBER=308 +CAKEWALLET_VERSION="4.25.0" +CAKEWALLET_BUILD_NUMBER=310 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" diff --git a/scripts/ios/app_icon.sh b/scripts/ios/app_icon.sh index e3eb36b3c..dcb168888 100755 --- a/scripts/ios/app_icon.sh +++ b/scripts/ios/app_icon.sh @@ -1,24 +1,101 @@ #!/bin/sh -ICON_120_PATH="" -ICON_180_PATH="" -ICON_1024_PATH="" +ICON_2x_PATH="" +ICON_2x_ipad_PATH="" +ICON_3x_PATH="" +ICON_20_2x_PATH="" +ICON_20_2x_ipad_PATH="" +ICON_20_3x_PATH="" +ICON_20_ipad_PATH="" +ICON_29_PATH="" +ICON_29_2x_PATH="" +ICON_29_2x_ipad_PATH="" +ICON_29_3x_PATH="" +ICON_29_3x_ipad_PATH="" +ICON_29_ipad_PATH="" +ICON_40_2x_PATH="" +ICON_40_2x_ipad_PATH="" +ICON_40_3x_PATH="" +ICON_40_ipad_PATH="" +ICON_60_2x_PATH="" +ICON_60_3x_PATH="" +ICON_83_2x_ipad_PATH="" +ICON_marketing_PATH="" +ICON_ipad_PATH="" + +ICON_DIRECTORY="" + DEST_DIR_PATH=`pwd`/../../ios/Runner/Assets.xcassets/AppIcon.appiconset case $APP_IOS_TYPE in "monero.com") - ICON_120_PATH=`pwd`/../../assets/images/monero.com_icon_120.png - ICON_180_PATH=`pwd`/../../assets/images/monero.com_icon_180.png - ICON_1024_PATH=`pwd`/../../assets/images/monero.com_icon_1024.png;; + ICON_DIRECTORY=monero_ios_icons;; "cakewallet") - ICON_120_PATH=`pwd`/../../assets/images/cakewallet_icon_120.png - ICON_180_PATH=`pwd`/../../assets/images/cakewallet_icon_180.png - ICON_1024_PATH=`pwd`/../../assets/images/cakewallet_icon_1024.png;; + ICON_DIRECTORY=cakewallet_ios_icons;; esac -rm $DEST_DIR_PATH/app_icon_120.png -rm $DEST_DIR_PATH/app_icon_180.png -rm $DEST_DIR_PATH/app_icon_1024.png -ln -s $ICON_120_PATH $DEST_DIR_PATH/app_icon_120.png -ln -s $ICON_180_PATH $DEST_DIR_PATH/app_icon_180.png -ln -s $ICON_1024_PATH $DEST_DIR_PATH/app_icon_1024.png \ No newline at end of file +ICON_2x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon@2x.png +ICON_2x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon@2x~ipad.png +ICON_3x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon@3x.png +ICON_20_2x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-20@2x.png +ICON_20_2x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-20@2x~ipad.png +ICON_20_3x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-20@3x.png +ICON_20_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-20~ipad.png +ICON_29_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-29.png +ICON_29_2x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-29@2x.png +ICON_29_2x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-29@2x~ipad.png +ICON_29_3x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-29@3x.png +ICON_29_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-29~ipad.png +ICON_40_2x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-40@2x.png +ICON_40_2x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-40@2x~ipad.png +ICON_40_3x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-40@3x.png +ICON_40_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-40~ipad.png +ICON_60_2x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-60@2x~car.png +ICON_60_3x_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-60@3x~car.png +ICON_83_2x_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon-83.5@2x~ipad.png +ICON_marketing_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon~ios-marketing.png +ICON_ipad_PATH=`pwd`/../../assets/images/ios_icons/$ICON_DIRECTORY/AppIcon~ipad.png + +rm $DEST_DIR_PATH/AppIcon@2x.png +rm $DEST_DIR_PATH/AppIcon@2x~ipad.png +rm $DEST_DIR_PATH/AppIcon@3x.png +rm $DEST_DIR_PATH/AppIcon-20@2x.png +rm $DEST_DIR_PATH/AppIcon-20@2x~ipad.png +rm $DEST_DIR_PATH/AppIcon-20@3x.png +rm $DEST_DIR_PATH/AppIcon-20~ipad.png +rm $DEST_DIR_PATH/AppIcon-29.png +rm $DEST_DIR_PATH/AppIcon-29@2x.png +rm $DEST_DIR_PATH/AppIcon-29@2x~ipad.png +rm $DEST_DIR_PATH/AppIcon-29@3x.png +rm $DEST_DIR_PATH/AppIcon-29~ipad.png +rm $DEST_DIR_PATH/AppIcon-40@2x.png +rm $DEST_DIR_PATH/AppIcon-40@2x~ipad.png +rm $DEST_DIR_PATH/AppIcon-40@3x.png +rm $DEST_DIR_PATH/AppIcon-40~ipad.png +rm $DEST_DIR_PATH/AppIcon-60@2x~car.png +rm $DEST_DIR_PATH/AppIcon-60@3x~car.png +rm $DEST_DIR_PATH/AppIcon-83.5@2x~ipad.png +rm $DEST_DIR_PATH/AppIcon~ios-marketing.png +rm $DEST_DIR_PATH/AppIcon~ipad.png + +ln -s $ICON_2x_PATH $DEST_DIR_PATH/AppIcon@2x.png +ln -s $ICON_2x_ipad_PATH $DEST_DIR_PATH/AppIcon@2x~ipad.png +ln -s $ICON_3x_PATH $DEST_DIR_PATH/AppIcon@3x.png +ln -s $ICON_20_2x_PATH $DEST_DIR_PATH/AppIcon-20@2x.png +ln -s $ICON_20_2x_ipad_PATH $DEST_DIR_PATH/AppIcon-20@2x~ipad.png +ln -s $ICON_20_3x_PATH $DEST_DIR_PATH/AppIcon-20@3x.png +ln -s $ICON_20_ipad_PATH $DEST_DIR_PATH/AppIcon-20~ipad.png +ln -s $ICON_29_PATH $DEST_DIR_PATH/AppIcon-29.png +ln -s $ICON_29_2x_PATH $DEST_DIR_PATH/AppIcon-29@2x.png +ln -s $ICON_29_2x_ipad_PATH $DEST_DIR_PATH/AppIcon-29@2x~ipad.png +ln -s $ICON_29_3x_ipad_PATH $DEST_DIR_PATH/AppIcon-29@3x.png +ln -s $ICON_29_ipad_PATH $DEST_DIR_PATH/AppIcon-29~ipad.png +ln -s $ICON_40_2x_PATH $DEST_DIR_PATH/AppIcon-40@2x.png +ln -s $ICON_40_2x_ipad_PATH $DEST_DIR_PATH/AppIcon-40@2x~ipad.png +ln -s $ICON_40_3x_PATH $DEST_DIR_PATH/AppIcon-40@3x.png +ln -s $ICON_40_ipad_PATH $DEST_DIR_PATH/AppIcon-40~ipad.png +ln -s $ICON_60_2x_PATH $DEST_DIR_PATH/AppIcon-60@2x~car.png +ln -s $ICON_60_3x_PATH $DEST_DIR_PATH/AppIcon-60@3x~car.png +ln -s $ICON_83_2x_ipad_PATH $DEST_DIR_PATH/AppIcon-83.5@2x~ipad.png +ln -s $ICON_marketing_PATH $DEST_DIR_PATH/AppIcon~ios-marketing.png +ln -s $ICON_ipad_PATH $DEST_DIR_PATH/AppIcon~ipad.png diff --git a/scripts/linux/app_env.sh b/scripts/linux/app_env.sh index 9d97b63cb..0ef31d6bb 100755 --- a/scripts/linux/app_env.sh +++ b/scripts/linux/app_env.sh @@ -14,8 +14,8 @@ if [ -n "$1" ]; then fi CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="1.14.0" -CAKEWALLET_BUILD_NUMBER=50 +CAKEWALLET_VERSION="4.25.0" +CAKEWALLET_BUILD_NUMBER=51 if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then echo "Wrong app type." diff --git a/scripts/macos/app_env.sh b/scripts/macos/app_env.sh index 4ac64ba42..fa45b76d4 100755 --- a/scripts/macos/app_env.sh +++ b/scripts/macos/app_env.sh @@ -16,13 +16,13 @@ if [ -n "$1" ]; then fi MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.11.0" -MONERO_COM_BUILD_NUMBER=46 +MONERO_COM_VERSION="4.25.0" +MONERO_COM_BUILD_NUMBER=47 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="1.17.0" -CAKEWALLET_BUILD_NUMBER=108 +CAKEWALLET_VERSION="4.25.0" +CAKEWALLET_BUILD_NUMBER=109 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then diff --git a/scripts/windows/build_exe_installer.iss b/scripts/windows/build_exe_installer.iss index 3f433e1ae..0d757b8e5 100644 --- a/scripts/windows/build_exe_installer.iss +++ b/scripts/windows/build_exe_installer.iss @@ -1,5 +1,5 @@ #define MyAppName "Cake Wallet" -#define MyAppVersion "0.5.0" +#define MyAppVersion "4.25.0" #define MyAppPublisher "Cake Labs LLC" #define MyAppURL "https://cakewallet.com/" #define MyAppExeName "CakeWallet.exe"