CW-365-Wallet-QR-codes-not-working-properly-on-some-devices (#909)

* add exception for range error * add app links for wallets * Update reference to qr.flutter clone * QrImage update * Update fullscreen_qr_page.dart * Add automatic version for wallet QR --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>

Serhii committed May 8, 2023 at 23:30 UTC 086019d926110a809bb029da6a639035af3b0bd0
10 files changed +88 -6
android/app/src/main/AndroidManifestBase.xml
+6
@@ -46,8 +46,14 @@
46 <category android:name="android.intent.category.DEFAULT" />
47 <category android:name="android.intent.category.BROWSABLE" />
48 <data android:scheme="bitcoin" />
49 + <data android:scheme="bitcoin-wallet" />
50 + <data android:scheme="bitcoin_wallet" />
51 <data android:scheme="monero" />
52 + <data android:scheme="monero-wallet" />
53 + <data android:scheme="monero_wallet" />
54 <data android:scheme="litecoin" />
55 + <data android:scheme="litecoin-wallet" />
56 + <data android:scheme="litecoin_wallet" />
57 </intent-filter>
58 </activity>
59 <meta-data
assets/images/restore_qr.png
Binary files /dev/null and b/assets/images/restore_qr.png differ
ios/Runner/InfoBase.plist
+60
@@ -42,6 +42,26 @@
42 <string>bitcoin</string>
43 </array>
44 </dict>
45 + <dict>
46 + <key>CFBundleTypeRole</key>
47 + <string>Editor</string>
48 + <key>CFBundleURLName</key>
49 + <string>bitcoin-wallet</string>
50 + <key>CFBundleURLSchemes</key>
51 + <array>
52 + <string>bitcoin-wallet</string>
53 + </array>
54 + </dict>
55 + <dict>
56 + <key>CFBundleTypeRole</key>
57 + <string>Editor</string>
58 + <key>CFBundleURLName</key>
59 + <string>bitcoin_wallet</string>
60 + <key>CFBundleURLSchemes</key>
61 + <array>
62 + <string>bitcoin_wallet</string>
63 + </array>
64 + </dict>
65 <dict>
66 <key>CFBundleTypeRole</key>
67 <string>Editor</string>
@@ -52,6 +72,26 @@
72 <string>monero</string>
73 </array>
74 </dict>
75 + <dict>
76 + <key>CFBundleTypeRole</key>
77 + <string>Editor</string>
78 + <key>CFBundleURLName</key>
79 + <string>monero-wallet</string>
80 + <key>CFBundleURLSchemes</key>
81 + <array>
82 + <string>monero-wallet</string>
83 + </array>
84 + </dict>
85 + <dict>
86 + <key>CFBundleTypeRole</key>
87 + <string>Editor</string>
88 + <key>CFBundleURLName</key>
89 + <string>monero_wallet</string>
90 + <key>CFBundleURLSchemes</key>
91 + <array>
92 + <string>monero_wallet</string>
93 + </array>
94 + </dict>
95 <dict>
96 <key>CFBundleTypeRole</key>
97 <string>Editor</string>
@@ -62,6 +102,26 @@
102 <string>litecoin</string>
103 </array>
104 </dict>
105 + <dict>
106 + <key>CFBundleTypeRole</key>
107 + <string>Viewer</string>
108 + <key>CFBundleURLName</key>
109 + <string>litecoin-wallet</string>
110 + <key>CFBundleURLSchemes</key>
111 + <array>
112 + <string>litecoin-wallet</string>
113 + </array>
114 + </dict>
115 + <dict>
116 + <key>CFBundleTypeRole</key>
117 + <string>Viewer</string>
118 + <key>CFBundleURLName</key>
119 + <string>litecoin_wallet</string>
120 + <key>CFBundleURLSchemes</key>
121 + <array>
122 + <string>litecoin_wallet</string>
123 + </array>
124 + </dict>
125 </array>
126 <key>CFBundleVersion</key>
127 <string>$(CURRENT_PROJECT_VERSION)</string>
lib/src/screens/receive/fullscreen_qr_page.dart
+4 -1
@@ -71,7 +71,10 @@ class FullscreenQRPage extends BasePage {
71 padding: EdgeInsets.all(10),
72 decoration: BoxDecoration(
73 border: Border.all(width: 3, color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)),
74 - child: QrImage(data: qrViewData.data, version: qrViewData.version),
74 + child: Container(
75 + decoration: BoxDecoration(
76 + border: Border.all(width: 3, color: Colors.white)),
77 + child: QrImage(data: qrViewData.data, version: qrViewData.version)),
78 ),
79 ),
80 ),
lib/src/screens/receive/widgets/qr_image.dart
+1 -1
@@ -16,7 +16,7 @@ class QrImage extends StatelessWidget {
16
17 @override
18 Widget build(BuildContext context) {
19 - return qr.QrImage(
19 + return qr.QrImageView(
20 data: data,
21 errorCorrectionLevel: errorCorrectionLevel,
22 version: version ?? 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ???
lib/src/screens/receive/widgets/qr_widget.dart
+8 -1
@@ -86,7 +86,14 @@ class QRWidget extends StatelessWidget {
86 Theme.of(context).accentTextTheme.headline2!.backgroundColor!,
87 ),
88 ),
89 - child: QrImage(data: addressListViewModel.uri.toString()),
89 + child: Container(
90 + decoration: BoxDecoration(
91 + border: Border.all(
92 + width: 3,
93 + color:Colors.white,
94 + ),
95 + ),
96 + child: QrImage(data: addressListViewModel.uri.toString())),
97 ),
98 ),
99 ),
lib/src/screens/restore/restore_options_page.dart
+1 -1
@@ -25,7 +25,7 @@ class RestoreOptionsPage extends BasePage {
25 final bool isNewInstall;
26 final imageSeedKeys = Image.asset('assets/images/restore_wallet_image.png');
27 final imageBackup = Image.asset('assets/images/backup.png');
28 - final qrCode = Image.asset('assets/images/qr_code_icon.png');
28 + final qrCode = Image.asset('assets/images/restore_qr.png');
29
30 @override
31 Widget body(BuildContext context) {
lib/src/screens/wallet_keys/wallet_keys_page.dart
+2 -1
@@ -11,6 +11,7 @@ import 'package:cake_wallet/src/screens/base_page.dart';
11 import 'package:cake_wallet/src/widgets/list_row.dart';
12 import 'package:cake_wallet/view_model/wallet_keys_view_model.dart';
13 import 'package:cake_wallet/routes.dart';
14 +import 'package:qr_flutter/qr_flutter.dart';
15
16 class WalletKeysPage extends BasePage {
17 WalletKeysPage(this.walletKeysViewModel);
@@ -32,7 +33,7 @@ class WalletKeysPage extends BasePage {
33 await Navigator.pushNamed(
34 context,
35 Routes.fullscreenQR,
35 - arguments: QrViewData(data: url.toString()),
36 + arguments: QrViewData(data: url.toString(), version: QrVersions.auto),
37 );
38 // ignore: unawaited_futures
39 DeviceDisplayBrightness.setBrightness(brightness);
lib/view_model/restore/wallet_restore_from_qr_code.dart
+1
@@ -51,6 +51,7 @@ class WalletRestoreFromQRCode {
51
52 static String getFormattedUri(String code) {
53 final index = code.indexOf(':');
54 + if (index == -1) return throw Exception('Unexpected wallet type: $code, try to scan again');
55 final scheme = code.substring(0, index).replaceAll('_', '-');
56 final query = code.substring(index + 1).replaceAll('?', '&');
57 final formattedUri = '$scheme:?$query';
pubspec_base.yaml
+5 -1
@@ -6,7 +6,11 @@ dependencies:
6 flutter_cupertino_localizations: ^1.0.1
7 intl: ^0.17.0
8 url_launcher: ^6.1.4
9 - qr_flutter: ^4.0.0
9 + qr_flutter:
10 + git:
11 + url: https://github.com/cake-tech/qr.flutter.git
12 + ref: cake-4.0.2
13 + version: 4.0.2
14 uuid: 3.0.6
15 shared_preferences: ^2.0.15
16 flutter_secure_storage: