Skip to content

Commit 0cbb45b

Browse files
committed
various firo view only wallet tweaks
1 parent a496074 commit 0cbb45b

File tree

16 files changed

+934
-941
lines changed

16 files changed

+934
-941
lines changed

lib/pages/add_wallet_views/new_wallet_options/new_wallet_options_view.dart

Lines changed: 134 additions & 131 deletions
Large diffs are not rendered by default.

lib/pages/add_wallet_views/restore_wallet_view/restore_view_only_wallet_view.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class _RestoreViewOnlyWalletViewState
108108

109109
ViewOnlyWalletType viewOnlyWalletType = _walletType;
110110
if (widget.coin is Bip39HDCurrency) {
111+
// already set above
111112
} else if (widget.coin is CryptonoteCurrency) {
112113
viewOnlyWalletType = ViewOnlyWalletType.cryptonote;
113114
} else {
@@ -125,6 +126,7 @@ class _RestoreViewOnlyWalletViewState
125126
name: widget.walletName,
126127
restoreHeight: widget.restoreBlockHeight,
127128
otherDataJsonString: jsonEncode(otherDataJson),
129+
overrideAddressType: viewOnlyWalletType == .spark ? .spark : null,
128130
);
129131

130132
bool isRestoring = true;

lib/pages/add_wallet_views/verify_recovery_phrase_view/verify_recovery_phrase_view.dart

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import '../../../wallets/wallet/impl/xelis_wallet.dart';
3939
import '../../../wallets/wallet/intermediate/cryptonote_wallet.dart';
4040
import '../../../wallets/wallet/wallet.dart';
4141
import '../../../wallets/wallet/wallet_mixin_interfaces/extended_keys_interface.dart';
42+
import '../../../wallets/wallet/wallet_mixin_interfaces/spark_interface.dart';
4243
import '../../../wallets/wallet/wallet_mixin_interfaces/view_only_option_interface.dart';
4344
import '../../../widgets/custom_buttons/app_bar_icon_button.dart';
4445
import '../../../widgets/desktop/desktop_app_bar.dart';
@@ -101,14 +102,16 @@ class _VerifyRecoveryPhraseViewState
101102
return result == "verified";
102103
}
103104

104-
Future<void> _convertToViewOnly() async {
105+
Future<void> _convertToViewOnly(bool firoSpark) async {
105106
int height = 0;
106107
final Map<String, dynamic> otherDataJson = {
107108
WalletInfoKeys.isViewOnlyKey: true,
108109
};
109110

110111
final ViewOnlyWalletType viewOnlyWalletType;
111-
if (widget.wallet is ExtendedKeysInterface) {
112+
if (firoSpark) {
113+
viewOnlyWalletType = .spark;
114+
} else if (widget.wallet is ExtendedKeysInterface) {
112115
viewOnlyWalletType = ViewOnlyWalletType.xPub;
113116
} else if (widget.wallet is CryptonoteWallet) {
114117
if (widget.wallet.cryptoCurrency is Monero) {
@@ -143,10 +146,18 @@ class _VerifyRecoveryPhraseViewState
143146
name: widget.wallet.info.name,
144147
restoreHeight: height,
145148
otherDataJsonString: jsonEncode(otherDataJson),
149+
overrideAddressType: viewOnlyWalletType == .spark ? .spark : null,
146150
);
147151

148152
final ViewOnlyWalletData viewOnlyData;
149-
if (widget.wallet is ExtendedKeysInterface) {
153+
if (viewOnlyWalletType == .spark) {
154+
final sparkViewKey = (widget.wallet as SparkInterface).sparkViewKey;
155+
156+
viewOnlyData = SparkViewOnlyWalletData(
157+
walletId: voInfo.walletId,
158+
viewKey: sparkViewKey!,
159+
);
160+
} else if (widget.wallet is ExtendedKeysInterface) {
150161
final extendedKeyInfo = await (widget.wallet as ExtendedKeysInterface)
151162
.getXPubs();
152163
final testPath = (_coin as Bip39HDCurrency).constructDerivePath(
@@ -299,7 +310,9 @@ class _VerifyRecoveryPhraseViewState
299310
try {
300311
Exception? ex;
301312
await showLoading(
302-
whileFuture: _convertToViewOnly(),
313+
whileFuture: _convertToViewOnly(
314+
ref.read(pNewWalletOptions)?.convertToViewOnlySpark == true,
315+
),
303316
context: context,
304317
message: "Converting to view only wallet",
305318
rootNavigator: Util.isDesktop,

lib/pages/address_book_views/address_book_view.dart

Lines changed: 71 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
6464
final coins = [...AppConfig.coins];
6565
coins.removeWhere((e) => e is Firo && e.network.isTestNet);
6666

67-
final bool showTestNet =
68-
ref.read(prefsChangeNotifierProvider).showTestNetCoins;
67+
final bool showTestNet = ref
68+
.read(prefsChangeNotifierProvider)
69+
.showTestNetCoins;
6970

7071
if (showTestNet) {
7172
ref.read(addressBookFilterProvider).addAll(coins, false);
@@ -88,10 +89,7 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
8889
final String addressString;
8990
if (wallet is SparkInterface) {
9091
Address? address = await wallet.getCurrentReceivingSparkAddress();
91-
if (address == null) {
92-
address = await wallet.generateNextSparkAddress();
93-
await ref.read(mainDBProvider).updateOrPutAddresses([address]);
94-
}
92+
address ??= await wallet.generateNextSparkAddress(saveToDB: true);
9593
addressString = address.value;
9694
} else {
9795
final address = await wallet.getCurrentReceivingAddress();
@@ -137,8 +135,9 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
137135
builder: (child) {
138136
return Background(
139137
child: Scaffold(
140-
backgroundColor:
141-
Theme.of(context).extension<StackColors>()!.background,
138+
backgroundColor: Theme.of(
139+
context,
140+
).extension<StackColors>()!.background,
142141
appBar: AppBar(
143142
leading: AppBarBackButton(
144143
onPressed: () {
@@ -162,16 +161,14 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
162161
key: const Key("addressBookFilterViewButton"),
163162
size: 36,
164163
shadows: const [],
165-
color:
166-
Theme.of(
167-
context,
168-
).extension<StackColors>()!.background,
164+
color: Theme.of(
165+
context,
166+
).extension<StackColors>()!.background,
169167
icon: SvgPicture.asset(
170168
Assets.svg.filter,
171-
color:
172-
Theme.of(
173-
context,
174-
).extension<StackColors>()!.accentColorDark,
169+
color: Theme.of(
170+
context,
171+
).extension<StackColors>()!.accentColorDark,
175172
width: 20,
176173
height: 20,
177174
),
@@ -195,16 +192,14 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
195192
key: const Key("addressBookAddNewContactViewButton"),
196193
size: 36,
197194
shadows: const [],
198-
color:
199-
Theme.of(
200-
context,
201-
).extension<StackColors>()!.background,
195+
color: Theme.of(
196+
context,
197+
).extension<StackColors>()!.background,
202198
icon: SvgPicture.asset(
203199
Assets.svg.plus,
204-
color:
205-
Theme.of(
206-
context,
207-
).extension<StackColors>()!.accentColorDark,
200+
color: Theme.of(
201+
context,
202+
).extension<StackColors>()!.accentColorDark,
208203
width: 20,
209204
height: 20,
210205
),
@@ -260,38 +255,37 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
260255
borderRadius: BorderRadius.circular(
261256
Constants.size.circularBorderRadius,
262257
),
263-
child:
264-
!isDesktop
265-
? TextField(
266-
autocorrect: Util.isDesktop ? false : true,
267-
enableSuggestions: Util.isDesktop ? false : true,
268-
controller: _searchController,
269-
focusNode: _searchFocusNode,
270-
onChanged: (value) {
271-
setState(() {
272-
_searchTerm = value;
273-
});
274-
},
275-
style: STextStyles.field(context),
276-
decoration: standardInputDecoration(
277-
"Search",
278-
_searchFocusNode,
279-
context,
280-
).copyWith(
281-
prefixIcon: Padding(
282-
padding: const EdgeInsets.symmetric(
283-
horizontal: 10,
284-
vertical: 16,
285-
),
286-
child: SvgPicture.asset(
287-
Assets.svg.search,
288-
width: 16,
289-
height: 16,
258+
child: !isDesktop
259+
? TextField(
260+
autocorrect: Util.isDesktop ? false : true,
261+
enableSuggestions: Util.isDesktop ? false : true,
262+
controller: _searchController,
263+
focusNode: _searchFocusNode,
264+
onChanged: (value) {
265+
setState(() {
266+
_searchTerm = value;
267+
});
268+
},
269+
style: STextStyles.field(context),
270+
decoration:
271+
standardInputDecoration(
272+
"Search",
273+
_searchFocusNode,
274+
context,
275+
).copyWith(
276+
prefixIcon: Padding(
277+
padding: const EdgeInsets.symmetric(
278+
horizontal: 10,
279+
vertical: 16,
280+
),
281+
child: SvgPicture.asset(
282+
Assets.svg.search,
283+
width: 16,
284+
height: 16,
285+
),
290286
),
291-
),
292-
suffixIcon:
293-
_searchController.text.isNotEmpty
294-
? Padding(
287+
suffixIcon: _searchController.text.isNotEmpty
288+
? Padding(
295289
padding: const EdgeInsets.only(right: 0),
296290
child: UnconstrainedBox(
297291
child: Row(
@@ -309,10 +303,10 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
309303
),
310304
),
311305
)
312-
: null,
313-
),
314-
)
315-
: null,
306+
: null,
307+
),
308+
)
309+
: null,
316310
),
317311
if (!isDesktop) const SizedBox(height: 16),
318312
Text("Favorites", style: STextStyles.smallMed12(context)),
@@ -324,16 +318,15 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
324318
children: [
325319
...contacts
326320
.where(
327-
(element) =>
328-
element.addressesSorted
329-
.where(
330-
(e) => ref.watch(
331-
addressBookFilterProvider.select(
332-
(value) => value.coins.contains(e.coin),
333-
),
334-
),
335-
)
336-
.isNotEmpty,
321+
(element) => element.addressesSorted
322+
.where(
323+
(e) => ref.watch(
324+
addressBookFilterProvider.select(
325+
(value) => value.coins.contains(e.coin),
326+
),
327+
),
328+
)
329+
.isNotEmpty,
337330
)
338331
.where(
339332
(e) =>
@@ -375,17 +368,15 @@ class _AddressBookViewState extends ConsumerState<AddressBookView> {
375368
children: [
376369
...contacts
377370
.where(
378-
(element) =>
379-
element.addressesSorted
380-
.where(
381-
(e) => ref.watch(
382-
addressBookFilterProvider.select(
383-
(value) =>
384-
value.coins.contains(e.coin),
385-
),
386-
),
387-
)
388-
.isNotEmpty,
371+
(element) => element.addressesSorted
372+
.where(
373+
(e) => ref.watch(
374+
addressBookFilterProvider.select(
375+
(value) => value.coins.contains(e.coin),
376+
),
377+
),
378+
)
379+
.isNotEmpty,
389380
)
390381
.where(
391382
(e) => ref

lib/pages/receive_view/receive_view.dart

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -178,17 +178,19 @@ class _ReceiveViewState extends ConsumerState<ReceiveView> {
178178
final Address? address;
179179
if (wallet is Bip39HDWallet && wallet is! BCashInterface) {
180180
DerivePathType? type;
181-
if (wallet.isViewOnly && wallet is ExtendedKeysInterface) {
182-
final voData = await wallet.getViewOnlyWalletData();
181+
if (wallet.isViewOnly &&
182+
wallet is ExtendedKeysInterface &&
183+
wallet.viewOnlyType != .spark) {
184+
final voData =
185+
await wallet.getViewOnlyWalletData()
186+
as ExtendedKeysViewOnlyWalletData;
183187
for (final t in wallet.cryptoCurrency.supportedDerivationPathTypes) {
184188
final testPath = wallet.cryptoCurrency.constructDerivePath(
185189
derivePathType: t,
186190
chain: 0,
187191
index: 0,
188192
);
189-
if (voData is SparkViewOnlyWalletData) {
190-
type = t;
191-
} else if (testPath.startsWith((voData as ExtendedKeysViewOnlyWalletData).xPubs.first.path)) {
193+
if (testPath.startsWith(voData.xPubs.first.path)) {
192194
type = t;
193195
break;
194196
}
@@ -255,10 +257,7 @@ class _ReceiveViewState extends ConsumerState<ReceiveView> {
255257
),
256258
);
257259

258-
final address = await wallet.generateNextSparkAddress();
259-
await ref.read(mainDBProvider).isar.writeTxn(() async {
260-
await ref.read(mainDBProvider).isar.addresses.put(address);
261-
});
260+
final address = await wallet.generateNextSparkAddress(saveToDB: true);
262261

263262
shouldPop = true;
264263

@@ -336,6 +335,9 @@ class _ReceiveViewState extends ConsumerState<ReceiveView> {
336335

337336
if (wallet is ViewOnlyOptionInterface && wallet.isViewOnly) {
338337
_showMultiType = false;
338+
if (wallet.viewOnlyType == .spark) {
339+
_walletAddressTypes.add(.spark);
340+
}
339341
} else {
340342
_showMultiType =
341343
_supportsSpark ||
@@ -345,7 +347,9 @@ class _ReceiveViewState extends ConsumerState<ReceiveView> {
345347
wallet.supportedAddressTypes.length > 1);
346348
}
347349

348-
_walletAddressTypes.add(wallet.info.mainAddressType);
350+
if (_walletAddressTypes.isEmpty) {
351+
_walletAddressTypes.add(wallet.info.mainAddressType);
352+
}
349353

350354
if (_showMultiType) {
351355
if (_supportsSpark) {

0 commit comments

Comments
 (0)