Skip to content

Commit d5a7cb0

Browse files
authored
Merge pull request #1129 from SatoshiPortal/develop
5.4.2
2 parents 92225f8 + ef0b621 commit d5a7cb0

15 files changed

Lines changed: 329 additions & 113 deletions

File tree

.github/workflows/analyze.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ jobs:
2424
uses: subosito/flutter-action@v2
2525
with:
2626
channel: stable
27+
flutter-version: 3.29.3
2728

2829
- run: make clean
2930
- run: make deps

.github/workflows/build.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@ env:
1111

1212
jobs:
1313
ios:
14-
runs-on: macos-latest
14+
runs-on: macos-15
15+
1516
steps:
17+
- uses: maxim-lobanov/setup-xcode@v1
18+
with:
19+
xcode-version: latest-stable
20+
1621
- uses: actions/checkout@v4
1722

1823
- uses: dtolnay/rust-toolchain@stable
@@ -23,6 +28,7 @@ jobs:
2328
with:
2429
channel: stable
2530
architecture: x64
31+
flutter-version: 3.29.3
2632

2733
- run: make clean
2834
- run: make deps

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
uses: subosito/flutter-action@v2
1818
with:
1919
channel: stable
20+
flutter-version: 3.29.3
2021

2122
- run: make clean
2223
- run: make deps
Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2-
<uses-permission
3-
android:name="android.permission.INTERNET"/>
2+
<uses-permission android:name="android.permission.INTERNET"/>
43
<!-- <uses-permission android:name="android.permission.NFC"/> -->
5-
<uses-permission
6-
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
75
<queries>
86
<intent>
9-
<action
10-
android:name="android.intent.action.VIEW"/>
11-
<data
12-
android:scheme="https"/>
7+
<action android:name="android.intent.action.VIEW"/>
8+
<data android:scheme="https"/>
139
</intent>
1410
</queries>
15-
<application
16-
android:requestLegacyExternalStorage="true"
11+
<application android:requestLegacyExternalStorage="true"
1712
android:label="BULL"
1813
android:name="${applicationName}"
1914
android:icon="@mipmap/launcher_icon"
20-
android:enableOnBackInvokedCallback="true">
21-
<activity
22-
android:name="com.bullbitcoin.mobile.MainActivity"
15+
android:enableOnBackInvokedCallback="true"
16+
android:allowBackup="false">
17+
<activity android:name="com.bullbitcoin.mobile.MainActivity"
2318
android:exported="true"
2419
android:launchMode="singleInstance"
2520
android:theme="@style/LaunchTheme"
@@ -31,28 +26,22 @@
3126
the Android process has started. This theme is visible to the user
3227
while the Flutter UI initializes. After that, this theme continues
3328
to determine the Window background behind the Flutter UI. -->
34-
<meta-data
35-
android:name="io.flutter.embedding.android.NormalTheme"
29+
<meta-data android:name="io.flutter.embedding.android.NormalTheme"
3630
android:resource="@style/NormalTheme"/>
3731
<intent-filter>
3832
<action android:name="android.intent.action.MAIN"/>
3933
<category android:name="android.intent.category.LAUNCHER"/>
4034
</intent-filter>
4135
<intent-filter>
42-
<action
43-
android:name="android.intent.action.VIEW"/>
44-
<category
45-
android:name="android.intent.category.DEFAULT"/>
46-
<category
47-
android:name="android.intent.category.BROWSABLE"/>
48-
<data
49-
android:scheme="bitcoin"/>
36+
<action android:name="android.intent.action.VIEW"/>
37+
<category android:name="android.intent.category.DEFAULT"/>
38+
<category android:name="android.intent.category.BROWSABLE"/>
39+
<data android:scheme="bitcoin"/>
5040
</intent-filter>
5141
</activity>
5242
<!-- Don't delete the meta-data below.
5343
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
54-
<meta-data
55-
android:name="flutterEmbedding"
44+
<meta-data android:name="flutterEmbedding"
5645
android:value="2"/>
5746
</application>
5847
</manifest>

ios/Podfile.lock

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -244,42 +244,42 @@ EXTERNAL SOURCES:
244244
SPEC CHECKSUMS:
245245
AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73
246246
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
247-
bdk_flutter: cef9180019b4c6b67a3e3dfb74611683fe140107
248-
bip85: 3059e217a3a606a100dd244f21d2fc61b0a1aa83
247+
bdk_flutter: 86c9ba59ee282dee08c3a29599abe867d10a8b10
248+
bip85: f656a7e6b23afda4960efb11c87d51d68e8be3db
249249
boltz: 6388ec2412f3753b63a9e65c97f87ea26f43bddc
250-
camera_avfoundation: be3be85408cd4126f250386828e9b1dfa40ab436
251-
dart_bbqr: bfd89cc8a74538d94ef6d87d11e4a2ad55578e7d
250+
camera_avfoundation: adb0207d868b2d873e895371d88448399ab78d87
251+
dart_bbqr: 10143a83ef3919f9ac06974e3bbe23cac4abc39b
252252
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
253253
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
254-
file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
254+
file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49
255255
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
256-
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
257-
flutter_nfc_kit: e1b71583eafd2c9650bc86844a7f2d185fb414f6
258-
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
259-
flutter_zxing: e8bcc43bd3056c70c271b732ed94e7a16fd62f93
260-
google_sign_in_ios: b48bb9af78576358a168361173155596c845f0b9
256+
flutter_native_splash: df59bb2e1421aa0282cb2e95618af4dcb0c56c29
257+
flutter_nfc_kit: 3985c93f749b9cb4747479205c2f10bd2f877a11
258+
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
259+
flutter_zxing: d527c3ff9c7f3606dd29a7ec8c4055f7daa088c5
260+
google_sign_in_ios: 7411fab6948df90490dc4620ecbcabdc3ca04017
261261
GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4
262262
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
263263
GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de
264264
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
265-
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
266-
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
265+
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
266+
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
267267
lwk: 22e06bc5664247d6b2dac91cfe209b63b70dd580
268-
no_screenshot: 6d183496405a3ab709a67a54e5cd0f639e94729e
269-
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
270-
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
268+
no_screenshot: 67d110f12466f4913b488803d4e498d03ef2889e
269+
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
270+
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
271271
payjoin_flutter: 6397d7b698cdad6453be4949ab6aca1863f6c5e5
272272
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
273273
ScreenProtectorKit: 83a6281b02c7a5902ee6eac4f5045f674e902ae4
274274
SDWebImage: f29024626962457f3470184232766516dee8dfea
275-
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
275+
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
276276
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
277-
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
277+
sqlite3_flutter_libs: 86f82662868ee26ff3451f73cac9c5fc2a1f57fa
278278
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
279-
tor: 767208930250ef7be241963b75568c55c0a81890
280-
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
281-
webview_cookie_manager: d63a76cabdf42a7ea3d92768ac67d4853a1367f8
282-
webview_flutter_wkwebview: 1821ceac936eba6f7984d89a9f3bcb4dea99ebb2
279+
tor: 662a9f5b980b5c86decb8ba611de9bcd4c8286eb
280+
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
281+
webview_cookie_manager: eaf920722b493bd0f7611b5484771ca53fed03f7
282+
webview_flutter_wkwebview: a4af96a051138e28e29f60101d094683b9f82188
283283

284284
PODFILE CHECKSUM: b6fce51d85d6bfea5dd6ff4c1b945437a9e9dfa9
285285

lib/core/seed/data/repository/seed_repository.dart

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1+
import 'dart:typed_data';
12
import 'package:bb_mobile/core/seed/data/datasources/seed_datasource.dart';
23
import 'package:bb_mobile/core/seed/data/models/seed_model.dart';
34
import 'package:bb_mobile/core/seed/domain/entity/seed.dart';
4-
import 'package:bb_mobile/core/storage/data/datasources/key_value_storage/impl/secure_storage_data_source_impl.dart';
5-
import 'package:bb_mobile/core/storage/secure_storage.dart';
6-
import 'package:flutter/foundation.dart';
7-
import 'package:flutter/services.dart';
5+
import 'package:bb_mobile/core/utils/logger.dart';
86

97
class SeedRepository {
108
final SeedDatasource _source;
@@ -15,49 +13,64 @@ class SeedRepository {
1513
required List<String> mnemonicWords,
1614
String? passphrase,
1715
}) async {
18-
final model = SeedModel.mnemonic(
19-
mnemonicWords: mnemonicWords,
20-
passphrase: passphrase,
21-
);
22-
await _source.store(fingerprint: model.masterFingerprint, seed: model);
23-
return model.toEntity() as MnemonicSeed;
16+
try {
17+
final model = SeedModel.mnemonic(
18+
mnemonicWords: mnemonicWords,
19+
passphrase: passphrase,
20+
);
21+
await _source.store(fingerprint: model.masterFingerprint, seed: model);
22+
return model.toEntity() as MnemonicSeed;
23+
} catch (e, stackTrace) {
24+
log.info(
25+
'Failed to create seed from mnemonic: $e',
26+
error: e,
27+
trace: stackTrace,
28+
);
29+
rethrow;
30+
}
2431
}
2532

2633
Future<Seed> createFromBytes({required Uint8List bytes}) async {
27-
final model = SeedModel.bytes(bytes: bytes);
28-
await _source.store(fingerprint: model.masterFingerprint, seed: model);
29-
return model.toEntity();
34+
try {
35+
final model = SeedModel.bytes(bytes: bytes);
36+
await _source.store(fingerprint: model.masterFingerprint, seed: model);
37+
return model.toEntity();
38+
} catch (e, stackTrace) {
39+
log.info(
40+
'Failed to create seed from bytes: $e',
41+
error: e,
42+
trace: stackTrace,
43+
);
44+
rethrow;
45+
}
3046
}
3147

3248
Future<Seed> get(String fingerprint) async {
33-
final rootToken = RootIsolateToken.instance!;
34-
return await compute(
35-
_getSeedInIsolate,
36-
_IsolateParams(fingerprint: fingerprint, rootToken: rootToken),
37-
);
49+
try {
50+
final model = await _source.get(fingerprint);
51+
return model.toEntity();
52+
} catch (e, stackTrace) {
53+
log.info(
54+
'Failed to get seed with fingerprint $fingerprint: $e',
55+
error: e,
56+
trace: stackTrace,
57+
);
58+
rethrow;
59+
}
3860
}
3961

40-
Future<bool> exists(String fingerprint) => _source.exists(fingerprint);
62+
Future<bool> exists(String fingerprint) async {
63+
try {
64+
return await _source.exists(fingerprint);
65+
} catch (e, stackTrace) {
66+
log.info(
67+
'Failed to check if seed exists with fingerprint $fingerprint: $e',
68+
error: e,
69+
trace: stackTrace,
70+
);
71+
rethrow;
72+
}
73+
}
4174

4275
Future<void> delete(String fingerprint) => _source.delete(fingerprint);
4376
}
44-
45-
class _IsolateParams {
46-
final String fingerprint;
47-
final RootIsolateToken rootToken;
48-
49-
_IsolateParams({required this.fingerprint, required this.rootToken});
50-
}
51-
52-
Future<Seed> _getSeedInIsolate(_IsolateParams params) async {
53-
try {
54-
BackgroundIsolateBinaryMessenger.ensureInitialized(params.rootToken);
55-
final secureStorage = SecureStorageDatasourceImpl(SecureStorage.init());
56-
final seedDatasource = SeedDatasource(secureStorage: secureStorage);
57-
final model = await seedDatasource.get(params.fingerprint);
58-
return model.toEntity();
59-
} catch (e) {
60-
if (e is SeedNotFoundException) rethrow;
61-
throw Exception('Failed to get seed in isolate: $e');
62-
}
63-
}

0 commit comments

Comments
 (0)