dev
dart 139 lines 4.03 KB
Raw
1 import 'package:cake_wallet/entities/exchange_api_mode.dart';
2 import 'package:cake_wallet/entities/fiat_api_mode.dart';
3 import 'package:cake_wallet/entities/seed_phrase_length.dart';
4 import 'package:cake_wallet/entities/seed_type.dart';
5 import 'package:cake_wallet/evm/evm.dart';
6 import 'package:cake_wallet/reactions/wallet_connect.dart';
7 import 'package:cake_wallet/store/settings_store.dart';
8 import 'package:cw_core/wallet_type.dart';
9 import 'package:mobx/mobx.dart';
10
11 part 'advanced_privacy_settings_view_model.g.dart';
12
13 class AdvancedPrivacySettingsViewModel = AdvancedPrivacySettingsViewModelBase
14 with _$AdvancedPrivacySettingsViewModel;
15
16 abstract class AdvancedPrivacySettingsViewModelBase with Store {
17 AdvancedPrivacySettingsViewModelBase(this.type, this._settingsStore) : _addCustomNode = false;
18
19 @computed
20 ExchangeApiMode get exchangeStatus => _settingsStore.exchangeStatus;
21
22 @computed
23 FiatApiMode get fiatApiMode => _settingsStore.fiatApiMode;
24
25 @computed
26 bool get disableBulletin => _settingsStore.disableBulletin;
27
28 @computed
29 bool get useBlinkProtection => _settingsStore.useBlinkProtection;
30
31 bool get canUseBlinkProtection {
32 if (!isEVMCompatibleChain(type)) return false;
33
34 // Get the chainId from the wallet type
35 final chainId = evm!.getChainIdByWalletType(type);
36
37 return canSupportBlinkProtection(chainId);
38 }
39
40 @observable
41 bool _addCustomNode = false;
42
43 final WalletType type;
44
45 final SettingsStore _settingsStore;
46
47 @computed
48 bool get hasSeedPhraseLengthOption {
49 // convert to switch case so that it give a syntax error when adding a new wallet type
50 // thus we don't forget about it
51 switch (type) {
52 case WalletType.ethereum:
53 case WalletType.bitcoinCash:
54 case WalletType.dogecoin:
55 case WalletType.polygon:
56 case WalletType.base:
57 case WalletType.arbitrum:
58 case WalletType.bsc:
59 case WalletType.solana:
60 case WalletType.tron:
61 case WalletType.zcash:
62 case WalletType.decred:
63 return true;
64
65 case WalletType.bitcoin:
66 case WalletType.litecoin:
67 return _settingsStore.bitcoinSeedType == BitcoinSeedType.bip39;
68
69 case WalletType.nano:
70 case WalletType.banano:
71 return _settingsStore.nanoSeedType == NanoSeedType.bip39;
72
73 case WalletType.monero:
74 case WalletType.wownero:
75 case WalletType.none:
76 case WalletType.haven:
77 case WalletType.zano:
78 return false;
79 }
80 }
81
82 bool get isMoneroSeedTypeOptionsEnabled => [
83 WalletType.monero,
84 WalletType.wownero,
85 ].contains(type);
86
87 bool get isBitcoinSeedTypeOptionsEnabled => [
88 WalletType.bitcoin,
89 WalletType.litecoin,
90 ].contains(type);
91
92 bool get isNanoSeedTypeOptionsEnabled => [WalletType.nano].contains(type);
93
94 bool get hasPassphraseOption => [
95 WalletType.bitcoin,
96 WalletType.litecoin,
97 WalletType.bitcoinCash,
98 WalletType.ethereum,
99 WalletType.polygon,
100 WalletType.base,
101 WalletType.arbitrum,
102 WalletType.bsc,
103 WalletType.tron,
104 WalletType.solana,
105 WalletType.monero,
106 WalletType.wownero,
107 WalletType.zano,
108 WalletType.dogecoin,
109 WalletType.zcash,
110 WalletType.decred,
111 ].contains(type);
112
113 @computed
114 bool get addCustomNode => _addCustomNode;
115
116 @computed
117 SeedPhraseLength get seedPhraseLength => _settingsStore.seedPhraseLength;
118
119 @computed
120 bool get isPolySeed => _settingsStore.moneroSeedType == MoneroSeedType.polyseed;
121
122 @action
123 void setFiatApiMode(FiatApiMode fiatApiMode) => _settingsStore.fiatApiMode = fiatApiMode;
124
125 @action
126 void setExchangeApiMode(ExchangeApiMode value) => _settingsStore.exchangeStatus = value;
127
128 @action
129 void setDisableBulletin(bool value) => _settingsStore.disableBulletin = value;
130
131 @action
132 void setUseBlinkProtection(bool value) => _settingsStore.useBlinkProtection = value;
133
134 @action
135 void toggleAddCustomNode() => _addCustomNode = !_addCustomNode;
136
137 @action
138 void setSeedPhraseLength(SeedPhraseLength length) => _settingsStore.seedPhraseLength = length;
139 }