mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-23 03:59:23 +00:00
Merge pull request #595 from cake-tech/CW-118-Allow-disabling-of-fiat
CW-118 Allow disabling of fiat
This commit is contained in:
commit
357ebe5fc8
38 changed files with 342 additions and 104 deletions
|
@ -51,6 +51,10 @@ class CWBitcoin extends Bitcoin {
|
||||||
TransactionPriority deserializeBitcoinTransactionPriority(int raw)
|
TransactionPriority deserializeBitcoinTransactionPriority(int raw)
|
||||||
=> BitcoinTransactionPriority.deserialize(raw: raw);
|
=> BitcoinTransactionPriority.deserialize(raw: raw);
|
||||||
|
|
||||||
|
@override
|
||||||
|
TransactionPriority deserializeLitecoinTransactionPriority(int raw)
|
||||||
|
=> LitecoinTransactionPriority.deserialize(raw: raw);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int getFeeRate(Object wallet, TransactionPriority priority) {
|
int getFeeRate(Object wallet, TransactionPriority priority) {
|
||||||
final bitcoinWallet = wallet as ElectrumWallet;
|
final bitcoinWallet = wallet as ElectrumWallet;
|
||||||
|
|
|
@ -214,6 +214,7 @@ class BackupService {
|
||||||
final currentBitcoinElectrumSererId = data[PreferencesKey.currentBitcoinElectrumSererIdKey] as int?;
|
final currentBitcoinElectrumSererId = data[PreferencesKey.currentBitcoinElectrumSererIdKey] as int?;
|
||||||
final currentLanguageCode = data[PreferencesKey.currentLanguageCode] as String?;
|
final currentLanguageCode = data[PreferencesKey.currentLanguageCode] as String?;
|
||||||
final displayActionListMode = data[PreferencesKey.displayActionListModeKey] as int?;
|
final displayActionListMode = data[PreferencesKey.displayActionListModeKey] as int?;
|
||||||
|
final fiatApiMode = data[PreferencesKey.currentFiatApiModeKey] as int?;
|
||||||
final currentPinLength = data[PreferencesKey.currentPinLength] as int?;
|
final currentPinLength = data[PreferencesKey.currentPinLength] as int?;
|
||||||
final currentTheme = data[PreferencesKey.currentTheme] as int?;
|
final currentTheme = data[PreferencesKey.currentTheme] as int?;
|
||||||
final currentDefaultSettingsMigrationVersion = data[PreferencesKey.currentDefaultSettingsMigrationVersion] as int?;
|
final currentDefaultSettingsMigrationVersion = data[PreferencesKey.currentDefaultSettingsMigrationVersion] as int?;
|
||||||
|
@ -266,6 +267,10 @@ class BackupService {
|
||||||
await _sharedPreferences.setInt(PreferencesKey.displayActionListModeKey,
|
await _sharedPreferences.setInt(PreferencesKey.displayActionListModeKey,
|
||||||
displayActionListMode);
|
displayActionListMode);
|
||||||
|
|
||||||
|
if (fiatApiMode != null)
|
||||||
|
await _sharedPreferences.setInt(PreferencesKey.currentFiatApiModeKey,
|
||||||
|
fiatApiMode);
|
||||||
|
|
||||||
if (currentPinLength != null)
|
if (currentPinLength != null)
|
||||||
await _sharedPreferences.setInt(PreferencesKey.currentPinLength,
|
await _sharedPreferences.setInt(PreferencesKey.currentPinLength,
|
||||||
currentPinLength);
|
currentPinLength);
|
||||||
|
@ -427,6 +432,8 @@ class BackupService {
|
||||||
_sharedPreferences.getInt(PreferencesKey.bitcoinTransactionPriority),
|
_sharedPreferences.getInt(PreferencesKey.bitcoinTransactionPriority),
|
||||||
PreferencesKey.moneroTransactionPriority:
|
PreferencesKey.moneroTransactionPriority:
|
||||||
_sharedPreferences.getInt(PreferencesKey.moneroTransactionPriority),
|
_sharedPreferences.getInt(PreferencesKey.moneroTransactionPriority),
|
||||||
|
PreferencesKey.currentFiatApiModeKey:
|
||||||
|
_sharedPreferences.getInt(PreferencesKey.currentFiatApiModeKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
return json.encode(preferences);
|
return json.encode(preferences);
|
||||||
|
|
39
lib/entities/fiat_api_mode.dart
Normal file
39
lib/entities/fiat_api_mode.dart
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
import 'package:cw_core/enumerable_item.dart';
|
||||||
|
|
||||||
|
class FiatApiMode extends EnumerableItem<int> with Serializable<int> {
|
||||||
|
const FiatApiMode({required String title, required int raw}) : super(title: title, raw: raw);
|
||||||
|
|
||||||
|
static const all = [FiatApiMode.enabled, FiatApiMode.torOnly, FiatApiMode.disabled];
|
||||||
|
|
||||||
|
static const enabled = FiatApiMode(raw: 0, title: 'Enabled');
|
||||||
|
static const torOnly = FiatApiMode(raw: 1, title: 'Tor only');
|
||||||
|
static const disabled = FiatApiMode(raw: 2, title: 'Disabled');
|
||||||
|
|
||||||
|
static FiatApiMode deserialize({required int raw}) {
|
||||||
|
switch (raw) {
|
||||||
|
case 0:
|
||||||
|
return enabled;
|
||||||
|
case 1:
|
||||||
|
return torOnly;
|
||||||
|
case 2:
|
||||||
|
return disabled;
|
||||||
|
default:
|
||||||
|
throw Exception('Unexpected token: $raw for FiatApiMode deserialize');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
switch (this) {
|
||||||
|
case FiatApiMode.enabled:
|
||||||
|
return S.current.enabled;
|
||||||
|
case FiatApiMode.torOnly:
|
||||||
|
return S.current.tor_only;
|
||||||
|
case FiatApiMode.disabled:
|
||||||
|
return S.current.disabled;
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,6 +9,7 @@ class PreferencesKey {
|
||||||
static const currentTransactionPriorityKeyLegacy = 'current_fee_priority';
|
static const currentTransactionPriorityKeyLegacy = 'current_fee_priority';
|
||||||
static const currentBalanceDisplayModeKey = 'current_balance_display_mode';
|
static const currentBalanceDisplayModeKey = 'current_balance_display_mode';
|
||||||
static const shouldSaveRecipientAddressKey = 'save_recipient_address';
|
static const shouldSaveRecipientAddressKey = 'save_recipient_address';
|
||||||
|
static const currentFiatApiModeKey = 'current_fiat_api_mode';
|
||||||
static const allowBiometricalAuthenticationKey =
|
static const allowBiometricalAuthenticationKey =
|
||||||
'allow_biometrical_authentication';
|
'allow_biometrical_authentication';
|
||||||
static const disableExchangeKey = 'disable_exchange';
|
static const disableExchangeKey = 'disable_exchange';
|
||||||
|
@ -21,6 +22,8 @@ class PreferencesKey {
|
||||||
'current_default_settings_migration_version';
|
'current_default_settings_migration_version';
|
||||||
static const moneroTransactionPriority = 'current_fee_priority_monero';
|
static const moneroTransactionPriority = 'current_fee_priority_monero';
|
||||||
static const bitcoinTransactionPriority = 'current_fee_priority_bitcoin';
|
static const bitcoinTransactionPriority = 'current_fee_priority_bitcoin';
|
||||||
|
static const havenTransactionPriority = 'current_fee_priority_haven';
|
||||||
|
static const litecoinTransactionPriority = 'current_fee_priority_litecoin';
|
||||||
static const shouldShowReceiveWarning = 'should_show_receive_warning';
|
static const shouldShowReceiveWarning = 'should_show_receive_warning';
|
||||||
static const shouldShowYatPopup = 'should_show_yat_popup';
|
static const shouldShowYatPopup = 'should_show_yat_popup';
|
||||||
static const moneroWalletPasswordUpdateV1Base = 'monero_wallet_update_v1';
|
static const moneroWalletPasswordUpdateV1Base = 'monero_wallet_update_v1';
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:cake_wallet/reactions/fiat_rate_update.dart';
|
||||||
import 'package:cake_wallet/reactions/on_current_node_change.dart';
|
import 'package:cake_wallet/reactions/on_current_node_change.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
@ -31,4 +32,5 @@ Future<void> bootstrap(GlobalKey<NavigatorState> navigatorKey) async {
|
||||||
appStore, settingsStore, fiatConversionStore);
|
appStore, settingsStore, fiatConversionStore);
|
||||||
startCurrentFiatChangeReaction(appStore, settingsStore, fiatConversionStore);
|
startCurrentFiatChangeReaction(appStore, settingsStore, fiatConversionStore);
|
||||||
startOnCurrentNodeChangeReaction(appStore);
|
startOnCurrentNodeChangeReaction(appStore);
|
||||||
|
startFiatRateUpdate(appStore, settingsStore, fiatConversionStore);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:cake_wallet/entities/update_haven_rate.dart';
|
import 'package:cake_wallet/entities/update_haven_rate.dart';
|
||||||
import 'package:cake_wallet/store/app_store.dart';
|
import 'package:cake_wallet/store/app_store.dart';
|
||||||
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||||
|
@ -8,30 +9,27 @@ import 'package:cw_core/wallet_type.dart';
|
||||||
|
|
||||||
Timer? _timer;
|
Timer? _timer;
|
||||||
|
|
||||||
Future<void> startFiatRateUpdate(AppStore appStore, SettingsStore settingsStore,
|
Future<void> startFiatRateUpdate(
|
||||||
FiatConversionStore fiatConversionStore) async {
|
AppStore appStore, SettingsStore settingsStore, FiatConversionStore fiatConversionStore) async {
|
||||||
if (_timer != null) {
|
if (_timer != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (appStore.wallet != null) {
|
_timer = Timer.periodic(Duration(seconds: 30), (_) async {
|
||||||
fiatConversionStore.prices[appStore.wallet!.currency] =
|
try {
|
||||||
await FiatConversionService.fetchPrice(
|
if (appStore.wallet == null || settingsStore.fiatApiMode == FiatApiMode.disabled) {
|
||||||
appStore.wallet!.currency, settingsStore.fiatCurrency);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_timer = Timer.periodic(
|
if (appStore.wallet!.type == WalletType.haven) {
|
||||||
Duration(seconds: 30),
|
await updateHavenRate(fiatConversionStore);
|
||||||
(_) async {
|
} else {
|
||||||
try {
|
fiatConversionStore.prices[appStore.wallet!.currency] =
|
||||||
if (appStore.wallet!.type == WalletType.haven) {
|
await FiatConversionService.fetchPrice(
|
||||||
await updateHavenRate(fiatConversionStore);
|
appStore.wallet!.currency, settingsStore.fiatCurrency);
|
||||||
} else {
|
}
|
||||||
fiatConversionStore.prices[appStore.wallet!.currency] = await FiatConversionService.fetchPrice(
|
} catch (e) {
|
||||||
appStore.wallet!.currency, settingsStore.fiatCurrency);
|
print(e);
|
||||||
}
|
}
|
||||||
} catch(e) {
|
});
|
||||||
print(e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
||||||
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||||
|
@ -12,7 +13,7 @@ void startCurrentFiatChangeReaction(AppStore appStore,
|
||||||
_onCurrentFiatCurrencyChangeDisposer?.reaction.dispose();
|
_onCurrentFiatCurrencyChangeDisposer?.reaction.dispose();
|
||||||
_onCurrentFiatCurrencyChangeDisposer = reaction(
|
_onCurrentFiatCurrencyChangeDisposer = reaction(
|
||||||
(_) => settingsStore.fiatCurrency, (FiatCurrency fiatCurrency) async {
|
(_) => settingsStore.fiatCurrency, (FiatCurrency fiatCurrency) async {
|
||||||
if (appStore.wallet == null) {
|
if (appStore.wallet == null || settingsStore.fiatApiMode == FiatApiMode.disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:cake_wallet/entities/fiat_currency.dart';
|
import 'package:cake_wallet/entities/fiat_currency.dart';
|
||||||
import 'package:cake_wallet/entities/update_haven_rate.dart';
|
import 'package:cake_wallet/entities/update_haven_rate.dart';
|
||||||
import 'package:cw_core/transaction_history.dart';
|
import 'package:cw_core/transaction_history.dart';
|
||||||
|
@ -87,7 +88,7 @@ void startCurrentWalletChangeReaction(AppStore appStore,
|
||||||
TransactionHistoryBase<TransactionInfo>, TransactionInfo>?
|
TransactionHistoryBase<TransactionInfo>, TransactionInfo>?
|
||||||
wallet) async {
|
wallet) async {
|
||||||
try {
|
try {
|
||||||
if (wallet == null) {
|
if (wallet == null || settingsStore.fiatApiMode == FiatApiMode.disabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,9 @@ class TransactionsPage extends StatelessWidget {
|
||||||
formattedDate: DateFormat('HH:mm')
|
formattedDate: DateFormat('HH:mm')
|
||||||
.format(transaction.date),
|
.format(transaction.date),
|
||||||
formattedAmount: item.formattedCryptoAmount,
|
formattedAmount: item.formattedCryptoAmount,
|
||||||
formattedFiatAmount: item.formattedFiatAmount,
|
formattedFiatAmount:
|
||||||
|
dashboardViewModel.balanceViewModel.isFiatDisabled
|
||||||
|
? '' : item.formattedFiatAmount,
|
||||||
isPending: transaction.isPending));
|
isPending: transaction.isPending));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -378,12 +378,10 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
actionLeftButton: () => Navigator.of(context).pop(),
|
actionLeftButton: () => Navigator.of(context).pop(),
|
||||||
feeFiatAmount: widget.exchangeTradeViewModel.sendViewModel.pendingTransactionFeeFiatAmount
|
feeFiatAmount: widget.exchangeTradeViewModel
|
||||||
+ ' ' + widget.exchangeTradeViewModel.sendViewModel.fiat.title,
|
.pendingTransactionFeeFiatAmountFormatted,
|
||||||
fiatAmountValue: widget.exchangeTradeViewModel.sendViewModel
|
fiatAmountValue: widget.exchangeTradeViewModel
|
||||||
.pendingTransactionFiatAmount +
|
.pendingTransactionFiatAmountValueFormatted,
|
||||||
' ' +
|
|
||||||
widget.exchangeTradeViewModel.sendViewModel.fiat.title,
|
|
||||||
outputs: widget.exchangeTradeViewModel.sendViewModel
|
outputs: widget.exchangeTradeViewModel.sendViewModel
|
||||||
.outputs);
|
.outputs);
|
||||||
});
|
});
|
||||||
|
|
|
@ -78,7 +78,14 @@ class _AdvancedPrivacySettingsBodyState extends State<AdvancedPrivacySettingsBod
|
||||||
children: [
|
children: [
|
||||||
LoadingPrimaryButton(
|
LoadingPrimaryButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
widget.nodeViewModel.save(saveAsCurrent: true);
|
if (widget.privacySettingsViewModel.addCustomNode) {
|
||||||
|
if (_formKey.currentState != null && !_formKey.currentState!.validate()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
widget.nodeViewModel.save(saveAsCurrent: true);
|
||||||
|
}
|
||||||
|
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
text: S.of(context).continue_text,
|
text: S.of(context).continue_text,
|
||||||
|
|
|
@ -381,16 +381,10 @@ class SendPage extends BasePage {
|
||||||
amount: S.of(context).send_amount,
|
amount: S.of(context).send_amount,
|
||||||
amountValue:
|
amountValue:
|
||||||
sendViewModel.pendingTransaction!.amountFormatted,
|
sendViewModel.pendingTransaction!.amountFormatted,
|
||||||
fiatAmountValue:
|
fiatAmountValue: sendViewModel.pendingTransactionFiatAmountFormatted,
|
||||||
sendViewModel.pendingTransactionFiatAmount +
|
|
||||||
' ' +
|
|
||||||
sendViewModel.fiat.title,
|
|
||||||
fee: S.of(context).send_fee,
|
fee: S.of(context).send_fee,
|
||||||
feeValue: sendViewModel.pendingTransaction!.feeFormatted,
|
feeValue: sendViewModel.pendingTransaction!.feeFormatted,
|
||||||
feeFiatAmount:
|
feeFiatAmount: sendViewModel.pendingTransactionFeeFiatAmountFormatted,
|
||||||
sendViewModel.pendingTransactionFeeFiatAmount +
|
|
||||||
' ' +
|
|
||||||
sendViewModel.fiat.title,
|
|
||||||
outputs: sendViewModel.outputs,
|
outputs: sendViewModel.outputs,
|
||||||
rightButtonText: S.of(context).ok,
|
rightButtonText: S.of(context).ok,
|
||||||
leftButtonText: S.of(context).cancel,
|
leftButtonText: S.of(context).cancel,
|
||||||
|
|
|
@ -332,7 +332,8 @@ class SendCardState extends State<SendCard>
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
Padding(
|
if (!sendViewModel.isFiatDisabled)
|
||||||
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 20),
|
padding: const EdgeInsets.only(top: 20),
|
||||||
child: BaseTextFormField(
|
child: BaseTextFormField(
|
||||||
focusNode: fiatAmountFocus,
|
focusNode: fiatAmountFocus,
|
||||||
|
@ -438,8 +439,9 @@ class SendCardState extends State<SendCard>
|
||||||
Padding(
|
Padding(
|
||||||
padding:
|
padding:
|
||||||
EdgeInsets.only(top: 5),
|
EdgeInsets.only(top: 5),
|
||||||
child: Text(
|
child: sendViewModel.isFiatDisabled
|
||||||
output
|
? const SizedBox(height: 14)
|
||||||
|
: Text(output
|
||||||
.estimatedFeeFiatAmount
|
.estimatedFeeFiatAmount
|
||||||
+ ' ' +
|
+ ' ' +
|
||||||
sendViewModel
|
sendViewModel
|
||||||
|
|
|
@ -34,7 +34,8 @@ class DisplaySettingsPage extends BasePage {
|
||||||
onValueChange: (_, bool value) {
|
onValueChange: (_, bool value) {
|
||||||
_displaySettingsViewModel.setShouldDisplayBalance(value);
|
_displaySettingsViewModel.setShouldDisplayBalance(value);
|
||||||
}),
|
}),
|
||||||
if (!isHaven)
|
//if (!isHaven) it does not work correctly
|
||||||
|
if(!_displaySettingsViewModel.disabledFiatApiMode)
|
||||||
SettingsPickerCell<FiatCurrency>(
|
SettingsPickerCell<FiatCurrency>(
|
||||||
title: S.current.settings_currency,
|
title: S.current.settings_currency,
|
||||||
searchHintText: S.current.search_currency,
|
searchHintText: S.current.search_currency,
|
||||||
|
|
|
@ -18,10 +18,15 @@ class PrivacyPage extends BasePage {
|
||||||
return Container(
|
return Container(
|
||||||
padding: EdgeInsets.only(top: 10),
|
padding: EdgeInsets.only(top: 10),
|
||||||
child: Observer(builder: (_) {
|
child: Observer(builder: (_) {
|
||||||
return Observer(builder: (_) {
|
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
SettingsSwitcherCell(
|
||||||
|
title: S.current.disable_fiat,
|
||||||
|
value: _privacySettingsViewModel.isFiatDisabled,
|
||||||
|
onValueChange: (BuildContext context, bool value) {
|
||||||
|
_privacySettingsViewModel.setFiatMode(value);
|
||||||
|
}),
|
||||||
SettingsSwitcherCell(
|
SettingsSwitcherCell(
|
||||||
title: S.current.disable_exchange,
|
title: S.current.disable_exchange,
|
||||||
value: _privacySettingsViewModel.disableExchange,
|
value: _privacySettingsViewModel.disableExchange,
|
||||||
|
@ -36,7 +41,6 @@ class PrivacyPage extends BasePage {
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
});
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,10 @@ import 'package:cake_wallet/entities/fiat_currency.dart';
|
||||||
import 'package:cw_core/node.dart';
|
import 'package:cw_core/node.dart';
|
||||||
import 'package:cake_wallet/monero/monero.dart';
|
import 'package:cake_wallet/monero/monero.dart';
|
||||||
import 'package:cake_wallet/entities/action_list_display_mode.dart';
|
import 'package:cake_wallet/entities/action_list_display_mode.dart';
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:cake_wallet/.secrets.g.dart' as secrets;
|
import 'package:cake_wallet/.secrets.g.dart' as secrets;
|
||||||
|
|
||||||
|
|
||||||
part 'settings_store.g.dart';
|
part 'settings_store.g.dart';
|
||||||
|
|
||||||
class SettingsStore = SettingsStoreBase with _$SettingsStore;
|
class SettingsStore = SettingsStoreBase with _$SettingsStore;
|
||||||
|
@ -29,6 +31,7 @@ abstract class SettingsStoreBase with Store {
|
||||||
required FiatCurrency initialFiatCurrency,
|
required FiatCurrency initialFiatCurrency,
|
||||||
required BalanceDisplayMode initialBalanceDisplayMode,
|
required BalanceDisplayMode initialBalanceDisplayMode,
|
||||||
required bool initialSaveRecipientAddress,
|
required bool initialSaveRecipientAddress,
|
||||||
|
required FiatApiMode initialFiatMode,
|
||||||
required bool initialAllowBiometricalAuthentication,
|
required bool initialAllowBiometricalAuthentication,
|
||||||
required bool initialExchangeEnabled,
|
required bool initialExchangeEnabled,
|
||||||
required ThemeBase initialTheme,
|
required ThemeBase initialTheme,
|
||||||
|
@ -41,12 +44,15 @@ abstract class SettingsStoreBase with Store {
|
||||||
required this.isBitcoinBuyEnabled,
|
required this.isBitcoinBuyEnabled,
|
||||||
required this.actionlistDisplayMode,
|
required this.actionlistDisplayMode,
|
||||||
TransactionPriority? initialBitcoinTransactionPriority,
|
TransactionPriority? initialBitcoinTransactionPriority,
|
||||||
TransactionPriority? initialMoneroTransactionPriority})
|
TransactionPriority? initialMoneroTransactionPriority,
|
||||||
|
TransactionPriority? initialHavenTransactionPriority,
|
||||||
|
TransactionPriority? initialLitecoinTransactionPriority})
|
||||||
: nodes = ObservableMap<WalletType, Node>.of(nodes),
|
: nodes = ObservableMap<WalletType, Node>.of(nodes),
|
||||||
_sharedPreferences = sharedPreferences,
|
_sharedPreferences = sharedPreferences,
|
||||||
fiatCurrency = initialFiatCurrency,
|
fiatCurrency = initialFiatCurrency,
|
||||||
balanceDisplayMode = initialBalanceDisplayMode,
|
balanceDisplayMode = initialBalanceDisplayMode,
|
||||||
shouldSaveRecipientAddress = initialSaveRecipientAddress,
|
shouldSaveRecipientAddress = initialSaveRecipientAddress,
|
||||||
|
fiatApiMode = initialFiatMode,
|
||||||
allowBiometricalAuthentication = initialAllowBiometricalAuthentication,
|
allowBiometricalAuthentication = initialAllowBiometricalAuthentication,
|
||||||
disableExchange = initialExchangeEnabled,
|
disableExchange = initialExchangeEnabled,
|
||||||
currentTheme = initialTheme,
|
currentTheme = initialTheme,
|
||||||
|
@ -63,6 +69,14 @@ abstract class SettingsStoreBase with Store {
|
||||||
priority[WalletType.bitcoin] = initialBitcoinTransactionPriority;
|
priority[WalletType.bitcoin] = initialBitcoinTransactionPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (initialHavenTransactionPriority != null) {
|
||||||
|
priority[WalletType.haven] = initialHavenTransactionPriority;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (initialLitecoinTransactionPriority != null) {
|
||||||
|
priority[WalletType.litecoin] = initialLitecoinTransactionPriority;
|
||||||
|
}
|
||||||
|
|
||||||
reaction(
|
reaction(
|
||||||
(_) => fiatCurrency,
|
(_) => fiatCurrency,
|
||||||
(FiatCurrency fiatCurrency) => sharedPreferences.setString(
|
(FiatCurrency fiatCurrency) => sharedPreferences.setString(
|
||||||
|
@ -74,11 +88,25 @@ abstract class SettingsStoreBase with Store {
|
||||||
.setBool(PreferencesKey.shouldShowYatPopup, shouldShowYatPopup));
|
.setBool(PreferencesKey.shouldShowYatPopup, shouldShowYatPopup));
|
||||||
|
|
||||||
priority.observe((change) {
|
priority.observe((change) {
|
||||||
final key = change.key == WalletType.monero
|
final String? key;
|
||||||
? PreferencesKey.moneroTransactionPriority
|
switch (change.key) {
|
||||||
: PreferencesKey.bitcoinTransactionPriority;
|
case WalletType.monero:
|
||||||
|
key = PreferencesKey.moneroTransactionPriority;
|
||||||
|
break;
|
||||||
|
case WalletType.bitcoin:
|
||||||
|
key = PreferencesKey.bitcoinTransactionPriority;
|
||||||
|
break;
|
||||||
|
case WalletType.litecoin:
|
||||||
|
key = PreferencesKey.litecoinTransactionPriority;
|
||||||
|
break;
|
||||||
|
case WalletType.haven:
|
||||||
|
key = PreferencesKey.havenTransactionPriority;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
key = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (change.newValue != null) {
|
if (change.newValue != null && key != null) {
|
||||||
sharedPreferences.setInt(key, change.newValue!.serialize());
|
sharedPreferences.setInt(key, change.newValue!.serialize());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -89,6 +117,11 @@ abstract class SettingsStoreBase with Store {
|
||||||
PreferencesKey.shouldSaveRecipientAddressKey,
|
PreferencesKey.shouldSaveRecipientAddressKey,
|
||||||
shouldSaveRecipientAddress));
|
shouldSaveRecipientAddress));
|
||||||
|
|
||||||
|
reaction(
|
||||||
|
(_) => fiatApiMode,
|
||||||
|
(FiatApiMode mode) => sharedPreferences.setInt(
|
||||||
|
PreferencesKey.currentFiatApiModeKey, mode.serialize()));
|
||||||
|
|
||||||
reaction(
|
reaction(
|
||||||
(_) => currentTheme,
|
(_) => currentTheme,
|
||||||
(ThemeBase theme) =>
|
(ThemeBase theme) =>
|
||||||
|
@ -144,6 +177,9 @@ abstract class SettingsStoreBase with Store {
|
||||||
@observable
|
@observable
|
||||||
BalanceDisplayMode balanceDisplayMode;
|
BalanceDisplayMode balanceDisplayMode;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
FiatApiMode fiatApiMode;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
bool shouldSaveRecipientAddress;
|
bool shouldSaveRecipientAddress;
|
||||||
|
|
||||||
|
@ -195,39 +231,48 @@ abstract class SettingsStoreBase with Store {
|
||||||
static Future<SettingsStore> load(
|
static Future<SettingsStore> load(
|
||||||
{required Box<Node> nodeSource,
|
{required Box<Node> nodeSource,
|
||||||
required bool isBitcoinBuyEnabled,
|
required bool isBitcoinBuyEnabled,
|
||||||
TransactionPriority? initialMoneroTransactionPriority,
|
|
||||||
TransactionPriority? initialBitcoinTransactionPriority,
|
|
||||||
FiatCurrency initialFiatCurrency = FiatCurrency.usd,
|
FiatCurrency initialFiatCurrency = FiatCurrency.usd,
|
||||||
BalanceDisplayMode initialBalanceDisplayMode =
|
BalanceDisplayMode initialBalanceDisplayMode =
|
||||||
BalanceDisplayMode.availableBalance}) async {
|
BalanceDisplayMode.availableBalance}) async {
|
||||||
if (initialBitcoinTransactionPriority == null) {
|
|
||||||
initialBitcoinTransactionPriority = bitcoin?.getMediumTransactionPriority();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (initialMoneroTransactionPriority == null) {
|
|
||||||
initialMoneroTransactionPriority = monero?.getDefaultTransactionPriority();
|
|
||||||
}
|
|
||||||
|
|
||||||
final sharedPreferences = await getIt.getAsync<SharedPreferences>();
|
final sharedPreferences = await getIt.getAsync<SharedPreferences>();
|
||||||
final currentFiatCurrency = FiatCurrency.deserialize(raw:
|
final currentFiatCurrency = FiatCurrency.deserialize(raw:
|
||||||
sharedPreferences.getString(PreferencesKey.currentFiatCurrencyKey)!);
|
sharedPreferences.getString(PreferencesKey.currentFiatCurrencyKey)!);
|
||||||
final savedMoneroTransactionPriority =
|
|
||||||
|
TransactionPriority? moneroTransactionPriority =
|
||||||
monero?.deserializeMoneroTransactionPriority(
|
monero?.deserializeMoneroTransactionPriority(
|
||||||
raw: sharedPreferences
|
raw: sharedPreferences
|
||||||
.getInt(PreferencesKey.moneroTransactionPriority)!);
|
.getInt(PreferencesKey.moneroTransactionPriority)!);
|
||||||
final savedBitcoinTransactionPriority =
|
TransactionPriority? bitcoinTransactionPriority =
|
||||||
bitcoin?.deserializeBitcoinTransactionPriority(sharedPreferences
|
bitcoin?.deserializeBitcoinTransactionPriority(sharedPreferences
|
||||||
.getInt(PreferencesKey.bitcoinTransactionPriority)!);
|
.getInt(PreferencesKey.bitcoinTransactionPriority)!);
|
||||||
final moneroTransactionPriority =
|
|
||||||
savedMoneroTransactionPriority ?? initialMoneroTransactionPriority;
|
TransactionPriority? havenTransactionPriority;
|
||||||
final bitcoinTransactionPriority =
|
TransactionPriority? litecoinTransactionPriority;
|
||||||
savedBitcoinTransactionPriority ?? initialBitcoinTransactionPriority;
|
|
||||||
|
if (sharedPreferences.getInt(PreferencesKey.havenTransactionPriority) != null) {
|
||||||
|
havenTransactionPriority = monero?.deserializeMoneroTransactionPriority(
|
||||||
|
raw: sharedPreferences.getInt(PreferencesKey.havenTransactionPriority)!);
|
||||||
|
}
|
||||||
|
if (sharedPreferences.getInt(PreferencesKey.litecoinTransactionPriority) != null) {
|
||||||
|
litecoinTransactionPriority = bitcoin?.deserializeLitecoinTransactionPriority(
|
||||||
|
sharedPreferences.getInt(PreferencesKey.litecoinTransactionPriority)!);
|
||||||
|
}
|
||||||
|
|
||||||
|
moneroTransactionPriority ??= monero?.getDefaultTransactionPriority();
|
||||||
|
bitcoinTransactionPriority ??= bitcoin?.getMediumTransactionPriority();
|
||||||
|
havenTransactionPriority ??= monero?.getDefaultTransactionPriority();
|
||||||
|
litecoinTransactionPriority ??= bitcoin?.getLitecoinTransactionPriorityMedium();
|
||||||
|
|
||||||
final currentBalanceDisplayMode = BalanceDisplayMode.deserialize(
|
final currentBalanceDisplayMode = BalanceDisplayMode.deserialize(
|
||||||
raw: sharedPreferences
|
raw: sharedPreferences
|
||||||
.getInt(PreferencesKey.currentBalanceDisplayModeKey)!);
|
.getInt(PreferencesKey.currentBalanceDisplayModeKey)!);
|
||||||
// FIX-ME: Check for which default value we should have here
|
// FIX-ME: Check for which default value we should have here
|
||||||
final shouldSaveRecipientAddress =
|
final shouldSaveRecipientAddress =
|
||||||
sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ?? false;
|
sharedPreferences.getBool(PreferencesKey.shouldSaveRecipientAddressKey) ?? false;
|
||||||
|
final currentFiatApiMode = FiatApiMode.deserialize(
|
||||||
|
raw: sharedPreferences
|
||||||
|
.getInt(PreferencesKey.currentFiatApiModeKey) ?? FiatApiMode.enabled.raw);
|
||||||
final allowBiometricalAuthentication = sharedPreferences
|
final allowBiometricalAuthentication = sharedPreferences
|
||||||
.getBool(PreferencesKey.allowBiometricalAuthenticationKey) ??
|
.getBool(PreferencesKey.allowBiometricalAuthenticationKey) ??
|
||||||
false;
|
false;
|
||||||
|
@ -239,8 +284,7 @@ abstract class SettingsStoreBase with Store {
|
||||||
: ThemeType.bright.index;
|
: ThemeType.bright.index;
|
||||||
final savedTheme = ThemeList.deserialize(
|
final savedTheme = ThemeList.deserialize(
|
||||||
raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ??
|
raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ??
|
||||||
legacyTheme ??
|
legacyTheme);
|
||||||
0);
|
|
||||||
final actionListDisplayMode = ObservableList<ActionListDisplayMode>();
|
final actionListDisplayMode = ObservableList<ActionListDisplayMode>();
|
||||||
actionListDisplayMode.addAll(deserializeActionlistDisplayModes(
|
actionListDisplayMode.addAll(deserializeActionlistDisplayModes(
|
||||||
sharedPreferences.getInt(PreferencesKey.displayActionListModeKey) ??
|
sharedPreferences.getInt(PreferencesKey.displayActionListModeKey) ??
|
||||||
|
@ -286,7 +330,7 @@ abstract class SettingsStoreBase with Store {
|
||||||
if (havenNode != null) {
|
if (havenNode != null) {
|
||||||
nodes[WalletType.haven] = havenNode;
|
nodes[WalletType.haven] = havenNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SettingsStore(
|
return SettingsStore(
|
||||||
sharedPreferences: sharedPreferences,
|
sharedPreferences: sharedPreferences,
|
||||||
nodes: nodes,
|
nodes: nodes,
|
||||||
|
@ -295,6 +339,7 @@ abstract class SettingsStoreBase with Store {
|
||||||
initialFiatCurrency: currentFiatCurrency,
|
initialFiatCurrency: currentFiatCurrency,
|
||||||
initialBalanceDisplayMode: currentBalanceDisplayMode,
|
initialBalanceDisplayMode: currentBalanceDisplayMode,
|
||||||
initialSaveRecipientAddress: shouldSaveRecipientAddress,
|
initialSaveRecipientAddress: shouldSaveRecipientAddress,
|
||||||
|
initialFiatMode: currentFiatApiMode,
|
||||||
initialAllowBiometricalAuthentication: allowBiometricalAuthentication,
|
initialAllowBiometricalAuthentication: allowBiometricalAuthentication,
|
||||||
initialExchangeEnabled: disableExchange,
|
initialExchangeEnabled: disableExchange,
|
||||||
initialTheme: savedTheme,
|
initialTheme: savedTheme,
|
||||||
|
@ -303,6 +348,8 @@ abstract class SettingsStoreBase with Store {
|
||||||
initialLanguageCode: savedLanguageCode,
|
initialLanguageCode: savedLanguageCode,
|
||||||
initialMoneroTransactionPriority: moneroTransactionPriority,
|
initialMoneroTransactionPriority: moneroTransactionPriority,
|
||||||
initialBitcoinTransactionPriority: bitcoinTransactionPriority,
|
initialBitcoinTransactionPriority: bitcoinTransactionPriority,
|
||||||
|
initialHavenTransactionPriority: havenTransactionPriority,
|
||||||
|
initialLitecoinTransactionPriority: litecoinTransactionPriority,
|
||||||
shouldShowYatPopup: shouldShowYatPopup);
|
shouldShowYatPopup: shouldShowYatPopup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,7 +362,7 @@ abstract class SettingsStoreBase with Store {
|
||||||
// TransactionPriority? initialBitcoinTransactionPriority,
|
// TransactionPriority? initialBitcoinTransactionPriority,
|
||||||
// BalanceDisplayMode initialBalanceDisplayMode =
|
// BalanceDisplayMode initialBalanceDisplayMode =
|
||||||
// BalanceDisplayMode.availableBalance}) async {
|
// BalanceDisplayMode.availableBalance}) async {
|
||||||
|
|
||||||
// if (initialBitcoinTransactionPriority == null) {
|
// if (initialBitcoinTransactionPriority == null) {
|
||||||
// initialBitcoinTransactionPriority = bitcoin?.getMediumTransactionPriority();
|
// initialBitcoinTransactionPriority = bitcoin?.getMediumTransactionPriority();
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/view_model/settings/switcher_list_item.dart';
|
import 'package:cake_wallet/view_model/settings/switcher_list_item.dart';
|
||||||
import 'package:cw_core/wallet_type.dart';
|
import 'package:cw_core/wallet_type.dart';
|
||||||
|
@ -11,15 +12,13 @@ class AdvancedPrivacySettingsViewModel = AdvancedPrivacySettingsViewModelBase
|
||||||
|
|
||||||
abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
||||||
AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore)
|
AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore)
|
||||||
: _disableFiat = false,
|
: _addCustomNode = false {
|
||||||
_addCustomNode = false {
|
|
||||||
settings = [
|
settings = [
|
||||||
// TODO: uncomment when Disable Fiat PR is merged
|
SwitcherListItem(
|
||||||
// SwitcherListItem(
|
title: S.current.disable_fiat,
|
||||||
// title: S.current.disable_fiat,
|
value: () => _settingsStore.fiatApiMode == FiatApiMode.disabled,
|
||||||
// value: () => _disableFiat,
|
onValueChange: (_, bool value) => setFiatMode(value),
|
||||||
// onValueChange: (_, bool value) => _disableFiat = value,
|
),
|
||||||
// ),
|
|
||||||
SwitcherListItem(
|
SwitcherListItem(
|
||||||
title: S.current.disable_exchange,
|
title: S.current.disable_exchange,
|
||||||
value: () => _settingsStore.disableExchange,
|
value: () => _settingsStore.disableExchange,
|
||||||
|
@ -37,9 +36,6 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
||||||
|
|
||||||
late List<SwitcherListItem> settings;
|
late List<SwitcherListItem> settings;
|
||||||
|
|
||||||
@observable
|
|
||||||
bool _disableFiat = false;
|
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
bool _addCustomNode = false;
|
bool _addCustomNode = false;
|
||||||
|
|
||||||
|
@ -48,4 +44,13 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
bool get addCustomNode => _addCustomNode;
|
bool get addCustomNode => _addCustomNode;
|
||||||
|
|
||||||
|
@action
|
||||||
|
void setFiatMode(bool value) {
|
||||||
|
if (value) {
|
||||||
|
_settingsStore.fiatApiMode = FiatApiMode.disabled;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_settingsStore.fiatApiMode = FiatApiMode.enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
import 'package:cw_core/transaction_history.dart';
|
import 'package:cw_core/transaction_history.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:cw_core/balance.dart';
|
import 'package:cw_core/balance.dart';
|
||||||
|
@ -10,7 +11,6 @@ import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
|
||||||
import 'package:cake_wallet/store/app_store.dart';
|
import 'package:cake_wallet/store/app_store.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
|
||||||
part 'balance_view_model.g.dart';
|
part 'balance_view_model.g.dart';
|
||||||
|
@ -71,6 +71,9 @@ abstract class BalanceViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
BalanceDisplayMode get savedDisplayMode => settingsStore.balanceDisplayMode;
|
BalanceDisplayMode get savedDisplayMode => settingsStore.balanceDisplayMode;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
bool get isFiatDisabled => settingsStore.fiatApiMode == FiatApiMode.disabled;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
String get asset {
|
String get asset {
|
||||||
final typeFormatted = walletTypeToString(appStore.wallet!.type);
|
final typeFormatted = walletTypeToString(appStore.wallet!.type);
|
||||||
|
@ -180,8 +183,8 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return MapEntry(key, BalanceRecord(
|
return MapEntry(key, BalanceRecord(
|
||||||
availableBalance: '---',
|
availableBalance: '---',
|
||||||
additionalBalance: '---',
|
additionalBalance: '---',
|
||||||
fiatAdditionalBalance: '---',
|
fiatAdditionalBalance: isFiatDisabled ? '' : '---',
|
||||||
fiatAvailableBalance: '---',
|
fiatAvailableBalance: isFiatDisabled ? '' : '---',
|
||||||
asset: key,
|
asset: key,
|
||||||
formattedAssetTitle: _formatterAsset(key)));
|
formattedAssetTitle: _formatterAsset(key)));
|
||||||
}
|
}
|
||||||
|
@ -192,17 +195,17 @@ abstract class BalanceViewModelBase with Store {
|
||||||
// throw Exception('Price is null for: $key');
|
// throw Exception('Price is null for: $key');
|
||||||
// }
|
// }
|
||||||
|
|
||||||
final additionalFiatBalance = fiatCurrency.toString()
|
final additionalFiatBalance = isFiatDisabled ? '' : (fiatCurrency.toString()
|
||||||
+ ' '
|
+ ' '
|
||||||
+ _getFiatBalance(
|
+ _getFiatBalance(
|
||||||
price: price,
|
price: price,
|
||||||
cryptoAmount: value.formattedAdditionalBalance);
|
cryptoAmount: value.formattedAdditionalBalance));
|
||||||
|
|
||||||
final availableFiatBalance = fiatCurrency.toString()
|
final availableFiatBalance = isFiatDisabled ? '' : (fiatCurrency.toString()
|
||||||
+ ' '
|
+ ' '
|
||||||
+ _getFiatBalance(
|
+ _getFiatBalance(
|
||||||
price: price,
|
price: price,
|
||||||
cryptoAmount: value.formattedAvailableBalance);
|
cryptoAmount: value.formattedAvailableBalance));
|
||||||
|
|
||||||
return MapEntry(key, BalanceRecord(
|
return MapEntry(key, BalanceRecord(
|
||||||
availableBalance: value.formattedAvailableBalance,
|
availableBalance: value.formattedAvailableBalance,
|
||||||
|
|
|
@ -72,6 +72,18 @@ abstract class ExchangeTradeViewModelBase with Store {
|
||||||
? '\n\n' + S.current.xrp_extra_info
|
? '\n\n' + S.current.xrp_extra_info
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get pendingTransactionFiatAmountValueFormatted =>
|
||||||
|
sendViewModel.isFiatDisabled
|
||||||
|
? '' : sendViewModel.pendingTransactionFiatAmount
|
||||||
|
+ ' ' + sendViewModel.fiat.title;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get pendingTransactionFeeFiatAmountFormatted =>
|
||||||
|
sendViewModel.isFiatDisabled
|
||||||
|
? '' : sendViewModel.pendingTransactionFeeFiatAmount
|
||||||
|
+ ' ' + sendViewModel.fiat.title;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
ObservableList<ExchangeTradeItem> items;
|
ObservableList<ExchangeTradeItem> items;
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,19 @@ abstract class SendViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
String get balance => balanceViewModel.availableBalance;
|
String get balance => balanceViewModel.availableBalance;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
bool get isFiatDisabled => balanceViewModel.isFiatDisabled;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get pendingTransactionFiatAmountFormatted =>
|
||||||
|
isFiatDisabled ? '' : pendingTransactionFiatAmount +
|
||||||
|
' ' + fiat.title;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get pendingTransactionFeeFiatAmountFormatted =>
|
||||||
|
isFiatDisabled ? '' : pendingTransactionFeeFiatAmount +
|
||||||
|
' ' + fiat.title;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
|
bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/fiat_currency.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/themes/theme_base.dart';
|
import 'package:cake_wallet/themes/theme_base.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
|
|
||||||
part 'display_settings_view_model.g.dart';
|
part 'display_settings_view_model.g.dart';
|
||||||
|
|
||||||
|
@ -30,6 +31,9 @@ abstract class DisplaySettingsViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
ThemeBase get theme => _settingsStore.currentTheme;
|
ThemeBase get theme => _settingsStore.currentTheme;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
bool get disabledFiatApiMode => _settingsStore.fiatApiMode == FiatApiMode.disabled;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void setBalanceDisplayMode(BalanceDisplayMode value) => _settingsStore.balanceDisplayMode = value;
|
void setBalanceDisplayMode(BalanceDisplayMode value) => _settingsStore.balanceDisplayMode = value;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
|
|
||||||
part 'privacy_settings_view_model.g.dart';
|
part 'privacy_settings_view_model.g.dart';
|
||||||
|
|
||||||
|
@ -16,9 +17,22 @@ abstract class PrivacySettingsViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
bool get shouldSaveRecipientAddress => _settingsStore.shouldSaveRecipientAddress;
|
bool get shouldSaveRecipientAddress => _settingsStore.shouldSaveRecipientAddress;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
bool get isFiatDisabled => _settingsStore.fiatApiMode == FiatApiMode.disabled;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value;
|
void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void setEnableExchange(bool value) => _settingsStore.disableExchange = value;
|
void setEnableExchange(bool value) => _settingsStore.disableExchange = value;
|
||||||
|
|
||||||
|
@action
|
||||||
|
void setFiatMode(bool value) {
|
||||||
|
if (value) {
|
||||||
|
_settingsStore.fiatApiMode = FiatApiMode.disabled;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_settingsStore.fiatApiMode = FiatApiMode.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Exchange deaktivieren",
|
"disable_exchange": "Exchange deaktivieren",
|
||||||
"advanced_privacy_settings": "Erweiterte Datenschutzeinstellungen",
|
"advanced_privacy_settings": "Erweiterte Datenschutzeinstellungen",
|
||||||
"settings_can_be_changed_later": "Diese Einstellungen können später in den App-Einstellungen geändert werden",
|
"settings_can_be_changed_later": "Diese Einstellungen können später in den App-Einstellungen geändert werden",
|
||||||
"add_custom_node": "Neuen benutzerdefinierten Knoten hinzufügen"
|
"add_custom_node": "Neuen benutzerdefinierten Knoten hinzufügen",
|
||||||
|
"disable_fiat": "Fiat deaktivieren",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Deaktiviert",
|
||||||
|
"enabled": "Ermöglicht",
|
||||||
|
"tor_only": "Nur Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Disable exchange",
|
"disable_exchange": "Disable exchange",
|
||||||
"advanced_privacy_settings": "Advanced Privacy Settings",
|
"advanced_privacy_settings": "Advanced Privacy Settings",
|
||||||
"settings_can_be_changed_later": "These settings can be changed later in the app settings",
|
"settings_can_be_changed_later": "These settings can be changed later in the app settings",
|
||||||
"add_custom_node": "Add New Custom Node"
|
"add_custom_node": "Add New Custom Node",
|
||||||
|
"disable_fiat": "Disable fiat",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"tor_only": "Tor only"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Deshabilitar intercambio",
|
"disable_exchange": "Deshabilitar intercambio",
|
||||||
"advanced_privacy_settings": "Configuración avanzada de privacidad",
|
"advanced_privacy_settings": "Configuración avanzada de privacidad",
|
||||||
"settings_can_be_changed_later": "Estas configuraciones se pueden cambiar más tarde en la configuración de la aplicación",
|
"settings_can_be_changed_later": "Estas configuraciones se pueden cambiar más tarde en la configuración de la aplicación",
|
||||||
"add_custom_node": "Agregar nuevo nodo personalizado"
|
"add_custom_node": "Agregar nuevo nodo personalizado",
|
||||||
|
"disable_fiat": "Deshabilitar fiat",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Desactivado",
|
||||||
|
"enabled": "Activado",
|
||||||
|
"tor_only": "solo Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -662,5 +662,10 @@
|
||||||
"disable_exchange": "Désactiver l'échange",
|
"disable_exchange": "Désactiver l'échange",
|
||||||
"advanced_privacy_settings": "Paramètres de confidentialité avancés",
|
"advanced_privacy_settings": "Paramètres de confidentialité avancés",
|
||||||
"settings_can_be_changed_later": "Ces paramètres peuvent être modifiés ultérieurement dans les paramètres de l'application",
|
"settings_can_be_changed_later": "Ces paramètres peuvent être modifiés ultérieurement dans les paramètres de l'application",
|
||||||
"add_custom_node": "Ajouter un nouveau nœud personnalisé"
|
"add_custom_node": "Ajouter un nouveau nœud personnalisé",
|
||||||
|
"disable_fiat": "Désactiver fiat",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Handicapé",
|
||||||
|
"enabled": "Activé",
|
||||||
|
"tor_only": "Tor uniquement"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "एक्सचेंज अक्षम करें",
|
"disable_exchange": "एक्सचेंज अक्षम करें",
|
||||||
"advanced_privacy_settings": "उन्नत गोपनीयता सेटिंग्स",
|
"advanced_privacy_settings": "उन्नत गोपनीयता सेटिंग्स",
|
||||||
"settings_can_be_changed_later": "इन सेटिंग्स को बाद में ऐप सेटिंग में बदला जा सकता है",
|
"settings_can_be_changed_later": "इन सेटिंग्स को बाद में ऐप सेटिंग में बदला जा सकता है",
|
||||||
"add_custom_node": "नया कस्टम नोड जोड़ें"
|
"add_custom_node": "नया कस्टम नोड जोड़ें",
|
||||||
|
"disable_exchange": "एक्सचेंज अक्षम करें",
|
||||||
|
"fiat_api": "फिएट पैसे API",
|
||||||
|
"disabled": "अक्षम",
|
||||||
|
"enabled": "सक्रिय",
|
||||||
|
"tor_only": "Tor केवल"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Onemogući exchange",
|
"disable_exchange": "Onemogući exchange",
|
||||||
"advanced_privacy_settings": "Napredne postavke privatnosti",
|
"advanced_privacy_settings": "Napredne postavke privatnosti",
|
||||||
"settings_can_be_changed_later": "Te se postavke mogu promijeniti kasnije u postavkama aplikacije",
|
"settings_can_be_changed_later": "Te se postavke mogu promijeniti kasnije u postavkama aplikacije",
|
||||||
"add_custom_node": "Dodaj novi prilagođeni čvor"
|
"add_custom_node": "Dodaj novi prilagođeni čvor",
|
||||||
|
"disable_fiat": "Isključi, fiat",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Onemogućeno",
|
||||||
|
"enabled": "Omogućeno",
|
||||||
|
"tor_only": "Samo Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Disabilita scambio",
|
"disable_exchange": "Disabilita scambio",
|
||||||
"advanced_privacy_settings": "Impostazioni avanzate sulla privacy",
|
"advanced_privacy_settings": "Impostazioni avanzate sulla privacy",
|
||||||
"settings_can_be_changed_later": "Queste impostazioni possono essere modificate in seguito nelle impostazioni dell'app",
|
"settings_can_be_changed_later": "Queste impostazioni possono essere modificate in seguito nelle impostazioni dell'app",
|
||||||
"add_custom_node": "Aggiungi nuovo nodo personalizzato"
|
"add_custom_node": "Aggiungi nuovo nodo personalizzato",
|
||||||
|
"disable_fiat": "Disabilita fiat",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Disabilitato",
|
||||||
|
"enabled": "Abilitato",
|
||||||
|
"tor_only": "Solo Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "交換を無効にする",
|
"disable_exchange": "交換を無効にする",
|
||||||
"advanced_privacy_settings": "高度なプライバシー設定",
|
"advanced_privacy_settings": "高度なプライバシー設定",
|
||||||
"settings_can_be_changed_later": "これらの設定は、後でアプリの設定で変更できます",
|
"settings_can_be_changed_later": "これらの設定は、後でアプリの設定で変更できます",
|
||||||
"add_custom_node": "新しいカスタム ノードを追加"
|
"add_custom_node": "新しいカスタム ノードを追加",
|
||||||
|
"disable_fiat": "フィアットを無効にする",
|
||||||
|
"fiat_api": "不換紙幣 API",
|
||||||
|
"disabled": "無効",
|
||||||
|
"enabled": "有効",
|
||||||
|
"tor_only": "Torのみ"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "교환 비활성화",
|
"disable_exchange": "교환 비활성화",
|
||||||
"advanced_privacy_settings": "고급 개인 정보 설정",
|
"advanced_privacy_settings": "고급 개인 정보 설정",
|
||||||
"settings_can_be_changed_later": "이 설정은 나중에 앱 설정에서 변경할 수 있습니다.",
|
"settings_can_be_changed_later": "이 설정은 나중에 앱 설정에서 변경할 수 있습니다.",
|
||||||
"add_custom_node": "새 사용자 정의 노드 추가"
|
"add_custom_node": "새 사용자 정의 노드 추가",
|
||||||
|
"disable_fiat": "법정화폐 비활성화",
|
||||||
|
"fiat_api": "명목 화폐 API",
|
||||||
|
"disabled": "장애가 있는",
|
||||||
|
"enabled": "사용",
|
||||||
|
"tor_only": "Tor 뿐"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Uitwisseling uitschakelen",
|
"disable_exchange": "Uitwisseling uitschakelen",
|
||||||
"advanced_privacy_settings": "Geavanceerde privacy-instellingen",
|
"advanced_privacy_settings": "Geavanceerde privacy-instellingen",
|
||||||
"settings_can_be_changed_later": "Deze instellingen kunnen later worden gewijzigd in de app-instellingen",
|
"settings_can_be_changed_later": "Deze instellingen kunnen later worden gewijzigd in de app-instellingen",
|
||||||
"add_custom_node": "Voeg een nieuw aangepast knooppunt toe"
|
"add_custom_node": "Voeg een nieuw aangepast knooppunt toe",
|
||||||
|
"disable_fiat": "Schakel Fiat uit",
|
||||||
|
"fiat_api": "Fiat API",
|
||||||
|
"disabled": "Gehandicapt",
|
||||||
|
"enabled": "Ingeschakeld",
|
||||||
|
"tor_only": "Alleen Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Wyłącz wymianę",
|
"disable_exchange": "Wyłącz wymianę",
|
||||||
"advanced_privacy_settings": "Zaawansowane ustawienia prywatności",
|
"advanced_privacy_settings": "Zaawansowane ustawienia prywatności",
|
||||||
"settings_can_be_changed_later": "Te ustawienia można później zmienić w ustawieniach aplikacji",
|
"settings_can_be_changed_later": "Te ustawienia można później zmienić w ustawieniach aplikacji",
|
||||||
"add_custom_node": "Dodaj nowy węzeł niestandardowy"
|
"add_custom_node": "Dodaj nowy węzeł niestandardowy",
|
||||||
|
"disable_fiat": "Wyłącz fiat",
|
||||||
|
"fiat_api": "API Fiata",
|
||||||
|
"disabled": "Wyłączone",
|
||||||
|
"enabled": "Włączony",
|
||||||
|
"tor_only": "Tylko Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -663,5 +663,10 @@
|
||||||
"disable_exchange": "Desativar troca",
|
"disable_exchange": "Desativar troca",
|
||||||
"advanced_privacy_settings": "Configurações de privacidade avançadas",
|
"advanced_privacy_settings": "Configurações de privacidade avançadas",
|
||||||
"settings_can_be_changed_later": "Essas configurações podem ser alteradas posteriormente nas configurações do aplicativo",
|
"settings_can_be_changed_later": "Essas configurações podem ser alteradas posteriormente nas configurações do aplicativo",
|
||||||
"add_custom_node": "Adicionar novo nó personalizado"
|
"add_custom_node": "Adicionar novo nó personalizado",
|
||||||
|
"disable_fiat": "Desativar fiat",
|
||||||
|
"fiat_api": "API da Fiat",
|
||||||
|
"disabled": "Desabilitado",
|
||||||
|
"enabled": "Habilitado",
|
||||||
|
"tor_only": "Tor apenas"
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,5 +664,10 @@
|
||||||
"disable_exchange": "Отключить обмен",
|
"disable_exchange": "Отключить обмен",
|
||||||
"advanced_privacy_settings": "Расширенные настройки конфиденциальности",
|
"advanced_privacy_settings": "Расширенные настройки конфиденциальности",
|
||||||
"settings_can_be_changed_later": "Эти настройки можно изменить позже в настройках приложения.",
|
"settings_can_be_changed_later": "Эти настройки можно изменить позже в настройках приложения.",
|
||||||
"add_custom_node": "Добавить новый пользовательский узел"
|
"add_custom_node": "Добавить новый пользовательский узел",
|
||||||
|
"disable_fiat": "Отключить фиат",
|
||||||
|
"fiat_api": "Фиат API",
|
||||||
|
"disabled": "Отключено",
|
||||||
|
"enabled": "Включено",
|
||||||
|
"tor_only": "Только Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -663,5 +663,11 @@
|
||||||
"disable_exchange": "Вимкнути exchange",
|
"disable_exchange": "Вимкнути exchange",
|
||||||
"advanced_privacy_settings": "Розширені налаштування конфіденційності",
|
"advanced_privacy_settings": "Розширені налаштування конфіденційності",
|
||||||
"settings_can_be_changed_later": "Ці параметри можна змінити пізніше в налаштуваннях програми",
|
"settings_can_be_changed_later": "Ці параметри можна змінити пізніше в налаштуваннях програми",
|
||||||
"add_custom_node": "Додати новий спеціальний вузол"
|
"add_custom_node": "Додати новий спеціальний вузол",
|
||||||
|
"disable_fiat": "Вимкнути фиат",
|
||||||
|
"fiat_api": "Фіат API",
|
||||||
|
"disabled": "Вимкнено",
|
||||||
|
"enabled": "Увімкнено",
|
||||||
|
"tor_only": "Тільки Tor"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -662,5 +662,10 @@
|
||||||
"disable_exchange": "禁用交换",
|
"disable_exchange": "禁用交换",
|
||||||
"advanced_privacy_settings": "高级隐私设置",
|
"advanced_privacy_settings": "高级隐私设置",
|
||||||
"settings_can_be_changed_later": "稍后可以在应用设置中更改这些设置",
|
"settings_can_be_changed_later": "稍后可以在应用设置中更改这些设置",
|
||||||
"add_custom_node": "添加新的自定义节点"
|
"add_custom_node": "添加新的自定义节点",
|
||||||
|
"disable_fiat": "禁用法令",
|
||||||
|
"fiat_api": "法币API",
|
||||||
|
"disabled": "禁用",
|
||||||
|
"enabled": "启用",
|
||||||
|
"tor_only": "仅限 Tor"
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ abstract class Bitcoin {
|
||||||
List<TransactionPriority> getTransactionPriorities();
|
List<TransactionPriority> getTransactionPriorities();
|
||||||
List<TransactionPriority> getLitecoinTransactionPriorities();
|
List<TransactionPriority> getLitecoinTransactionPriorities();
|
||||||
TransactionPriority deserializeBitcoinTransactionPriority(int raw);
|
TransactionPriority deserializeBitcoinTransactionPriority(int raw);
|
||||||
|
TransactionPriority deserializeLitecoinTransactionPriority(int raw);
|
||||||
int getFeeRate(Object wallet, TransactionPriority priority);
|
int getFeeRate(Object wallet, TransactionPriority priority);
|
||||||
Future<void> generateNewAddress(Object wallet);
|
Future<void> generateNewAddress(Object wallet);
|
||||||
Object createBitcoinTransactionCredentials(List<Output> outputs, {required TransactionPriority priority, int? feeRate});
|
Object createBitcoinTransactionCredentials(List<Output> outputs, {required TransactionPriority priority, int? feeRate});
|
||||||
|
|
Loading…
Reference in a new issue