Skip to content

Commit b5d2be8

Browse files
committed
WIP: mobile camera permissions qr scanning clean up
1 parent 941b553 commit b5d2be8

24 files changed

Lines changed: 1333 additions & 1231 deletions

File tree

lib/pages/add_wallet_views/frost_ms/restore/restore_frost_ms_wallet_view.dart

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:async';
22
import 'dart:io';
33

4-
import 'package:barcode_scan2/barcode_scan2.dart';
54
import 'package:flutter/material.dart';
65
import 'package:flutter/services.dart';
76
import 'package:flutter_riverpod/flutter_riverpod.dart';
@@ -14,6 +13,7 @@ import '../../../../providers/providers.dart';
1413
import '../../../../services/frost.dart';
1514
import '../../../../themes/stack_colors.dart';
1615
import '../../../../utilities/assets.dart';
16+
import '../../../../utilities/barcode_scanner_interface.dart';
1717
import '../../../../utilities/constants.dart';
1818
import '../../../../utilities/logger.dart';
1919
import '../../../../utilities/show_loading.dart';
@@ -212,7 +212,7 @@ class _RestoreFrostMsWalletViewState
212212
await Future<void>.delayed(const Duration(milliseconds: 75));
213213
}
214214

215-
final qrResult = await BarcodeScanner.scan();
215+
final qrResult = await ref.read(pBarcodeScanner).scan();
216216

217217
configFieldController.text = qrResult.rawContent;
218218

@@ -238,11 +238,26 @@ class _RestoreFrostMsWalletViewState
238238
}
239239
}
240240
} on PlatformException catch (e, s) {
241-
Logging.instance.w(
242-
"Failed to get camera permissions while trying to scan qr code: ",
243-
error: e,
244-
stackTrace: s,
245-
);
241+
if (mounted) {
242+
try {
243+
await checkCamPermDeniedMobileAndOpenAppSettings(
244+
context,
245+
logging: Logging.instance,
246+
);
247+
} catch (e, s) {
248+
Logging.instance.e(
249+
"Failed to check cam permissions",
250+
error: e,
251+
stackTrace: s,
252+
);
253+
}
254+
} else {
255+
Logging.instance.w(
256+
"Failed to get camera permissions while trying to scan qr code: ",
257+
error: e,
258+
stackTrace: s,
259+
);
260+
}
246261
}
247262
}
248263

lib/pages/add_wallet_views/restore_wallet_view/restore_view_only_wallet_view.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import '../../../providers/global/secure_store_provider.dart';
1515
import '../../../providers/providers.dart';
1616
import '../../../themes/stack_colors.dart';
1717
import '../../../utilities/assets.dart';
18-
import '../../../utilities/barcode_scanner_interface.dart';
1918
import '../../../utilities/clipboard_interface.dart';
2019
import '../../../utilities/constants.dart';
2120
import '../../../utilities/text_styles.dart';
@@ -50,7 +49,7 @@ class RestoreViewOnlyWalletView extends ConsumerStatefulWidget {
5049
required this.coin,
5150
required this.restoreBlockHeight,
5251
this.enableLelantusScanning = false,
53-
this.barcodeScanner = const BarcodeScannerWrapper(),
52+
5453
this.clipboard = const ClipboardWrapper(),
5554
});
5655

@@ -60,7 +59,6 @@ class RestoreViewOnlyWalletView extends ConsumerStatefulWidget {
6059
final CryptoCurrency coin;
6160
final int restoreBlockHeight;
6261
final bool enableLelantusScanning;
63-
final BarcodeScannerInterface barcodeScanner;
6462
final ClipboardInterface clipboard;
6563

6664
@override

lib/pages/add_wallet_views/restore_wallet_view/restore_wallet_view.dart

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class RestoreWalletView extends ConsumerStatefulWidget {
7777
required this.mnemonicPassphrase,
7878
required this.restoreBlockHeight,
7979
this.enableLelantusScanning = false,
80-
this.barcodeScanner = const BarcodeScannerWrapper(),
80+
8181
this.clipboard = const ClipboardWrapper(),
8282
});
8383

@@ -90,7 +90,6 @@ class RestoreWalletView extends ConsumerStatefulWidget {
9090
final int restoreBlockHeight;
9191
final bool enableLelantusScanning;
9292

93-
final BarcodeScannerInterface barcodeScanner;
9493
final ClipboardInterface clipboard;
9594

9695
@override
@@ -110,8 +109,6 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
110109
final List<FormInputStatus> _inputStatuses = [];
111110
// final List<FocusNode> _focusNodes = [];
112111

113-
late final BarcodeScannerInterface scanner;
114-
115112
late final TextSelectionControls textSelectionControls;
116113

117114
bool _hideSeedWords = false;
@@ -161,7 +158,6 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
161158
? CustomCupertinoTextSelectionControls(onPaste: onControlsPaste)
162159
: CustomMaterialTextSelectionControls(onPaste: onControlsPaste);
163160

164-
scanner = widget.barcodeScanner;
165161
for (int i = 0; i < _seedWordCount; i++) {
166162
_controllers.add(TextEditingController());
167163
_inputStatuses.add(FormInputStatus.empty);
@@ -601,7 +597,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
601597

602598
Future<void> scanMnemonicQr() async {
603599
try {
604-
final qrResult = await scanner.scan();
600+
final qrResult = await ref.read(pBarcodeScanner).scan();
605601

606602
final results = AddressUtils.decodeQRSeedData(qrResult.rawContent);
607603

@@ -618,11 +614,26 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
618614
}
619615
} on PlatformException catch (e, s) {
620616
// likely failed to get camera permissions
621-
Logging.instance.e(
622-
"Restore wallet qr scan failed: $e",
623-
error: e,
624-
stackTrace: s,
625-
);
617+
if (mounted) {
618+
try {
619+
await checkCamPermDeniedMobileAndOpenAppSettings(
620+
context,
621+
logging: Logging.instance,
622+
);
623+
} catch (e, s) {
624+
Logging.instance.e(
625+
"Failed to check cam permissions",
626+
error: e,
627+
stackTrace: s,
628+
);
629+
}
630+
} else {
631+
Logging.instance.e(
632+
"Restore wallet qr scan failed: $e",
633+
error: e,
634+
stackTrace: s,
635+
);
636+
}
626637
}
627638
}
628639

lib/pages/address_book_views/subviews/add_address_book_entry_view.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import '../../../providers/ui/address_book_providers/contact_name_is_not_empty_s
2121
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
2222
import '../../../themes/stack_colors.dart';
2323
import '../../../utilities/assets.dart';
24-
import '../../../utilities/barcode_scanner_interface.dart';
2524
import '../../../utilities/clipboard_interface.dart';
2625
import '../../../utilities/constants.dart';
2726
import '../../../utilities/text_styles.dart';
@@ -43,13 +42,11 @@ import 'new_contact_address_entry_form.dart';
4342
class AddAddressBookEntryView extends ConsumerStatefulWidget {
4443
const AddAddressBookEntryView({
4544
super.key,
46-
this.barcodeScanner = const BarcodeScannerWrapper(),
4745
this.clipboard = const ClipboardWrapper(),
4846
});
4947

5048
static const String routeName = "/addAddressBookEntry";
5149

52-
final BarcodeScannerInterface barcodeScanner;
5350
final ClipboardInterface clipboard;
5451

5552
@override
@@ -63,7 +60,6 @@ class _AddAddressBookEntryViewState
6360
late final FocusNode nameFocusNode;
6461
late final ScrollController scrollController;
6562

66-
late final BarcodeScannerInterface scanner;
6763
late final ClipboardInterface clipboard;
6864

6965
Emoji? _selectedEmoji;
@@ -72,7 +68,7 @@ class _AddAddressBookEntryViewState
7268
@override
7369
initState() {
7470
ref.refresh(addressEntryDataProviderFamilyRefresher);
75-
scanner = widget.barcodeScanner;
71+
7672
clipboard = widget.clipboard;
7773

7874
nameController = TextEditingController();
@@ -114,7 +110,6 @@ class _AddAddressBookEntryViewState
114110
key: Key("contactAddressEntryForm_$id"),
115111
id: ref.read(addressEntryDataProvider(id)).id,
116112
clipboard: clipboard,
117-
barcodeScanner: scanner,
118113
),
119114
);
120115
setState(() {});

lib/pages/address_book_views/subviews/add_new_contact_address_view.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import '../../../providers/ui/address_book_providers/address_entry_data_provider
1818
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
1919
import '../../../themes/stack_colors.dart';
2020
import '../../../utilities/assets.dart';
21-
import '../../../utilities/barcode_scanner_interface.dart';
2221
import '../../../utilities/clipboard_interface.dart';
2322
import '../../../utilities/text_styles.dart';
2423
import '../../../utilities/util.dart';
@@ -33,15 +32,13 @@ class AddNewContactAddressView extends ConsumerStatefulWidget {
3332
const AddNewContactAddressView({
3433
super.key,
3534
required this.contactId,
36-
this.barcodeScanner = const BarcodeScannerWrapper(),
3735
this.clipboard = const ClipboardWrapper(),
3836
});
3937

4038
static const String routeName = "/addNewContactAddress";
4139

4240
final String contactId;
4341

44-
final BarcodeScannerInterface barcodeScanner;
4542
final ClipboardInterface clipboard;
4643

4744
@override
@@ -53,13 +50,12 @@ class _AddNewContactAddressViewState
5350
extends ConsumerState<AddNewContactAddressView> {
5451
late final String contactId;
5552

56-
late final BarcodeScannerInterface barcodeScanner;
5753
late final ClipboardInterface clipboard;
5854

5955
@override
6056
void initState() {
6157
contactId = widget.contactId;
62-
barcodeScanner = widget.barcodeScanner;
58+
6359
clipboard = widget.clipboard;
6460

6561
super.initState();
@@ -173,11 +169,7 @@ class _AddNewContactAddressViewState
173169
],
174170
),
175171
const SizedBox(height: 16),
176-
NewContactAddressEntryForm(
177-
id: 0,
178-
barcodeScanner: barcodeScanner,
179-
clipboard: clipboard,
180-
),
172+
NewContactAddressEntryForm(id: 0, clipboard: clipboard),
181173
const SizedBox(height: 16),
182174
const Spacer(),
183175
Row(

lib/pages/address_book_views/subviews/edit_contact_address_view.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import '../../../providers/ui/address_book_providers/address_entry_data_provider
1818
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
1919
import '../../../themes/stack_colors.dart';
2020
import '../../../utilities/assets.dart';
21-
import '../../../utilities/barcode_scanner_interface.dart';
2221
import '../../../utilities/clipboard_interface.dart';
2322
import '../../../utilities/text_styles.dart';
2423
import '../../../utilities/util.dart';
@@ -34,7 +33,7 @@ class EditContactAddressView extends ConsumerStatefulWidget {
3433
super.key,
3534
required this.contactId,
3635
required this.addressEntry,
37-
this.barcodeScanner = const BarcodeScannerWrapper(),
36+
3837
this.clipboard = const ClipboardWrapper(),
3938
});
4039

@@ -43,7 +42,6 @@ class EditContactAddressView extends ConsumerStatefulWidget {
4342
final String contactId;
4443
final ContactAddressEntry addressEntry;
4544

46-
final BarcodeScannerInterface barcodeScanner;
4745
final ClipboardInterface clipboard;
4846

4947
@override
@@ -56,7 +54,6 @@ class _EditContactAddressViewState
5654
late final String contactId;
5755
late final ContactAddressEntry addressEntry;
5856

59-
late final BarcodeScannerInterface barcodeScanner;
6057
late final ClipboardInterface clipboard;
6158

6259
Future<void> save(ContactEntry contact) async {
@@ -97,7 +94,6 @@ class _EditContactAddressViewState
9794
void initState() {
9895
contactId = widget.contactId;
9996
addressEntry = widget.addressEntry;
100-
barcodeScanner = widget.barcodeScanner;
10197
clipboard = widget.clipboard;
10298

10399
super.initState();
@@ -211,11 +207,7 @@ class _EditContactAddressViewState
211207
],
212208
),
213209
const SizedBox(height: 16),
214-
NewContactAddressEntryForm(
215-
id: 0,
216-
barcodeScanner: barcodeScanner,
217-
clipboard: clipboard,
218-
),
210+
NewContactAddressEntryForm(id: 0, clipboard: clipboard),
219211
const SizedBox(height: 24),
220212
ConditionalParent(
221213
condition: isDesktop,

0 commit comments

Comments
 (0)