CW-1045-Ledger-Bugs-Enhancements (#2278)

* feat: prepare ledger.dart to use callbacks * feat: set ledger callback using monero_c * fix(cw_monero): async ledger * build: Bump monero_c dependencies * feat: Add "How to connect" to HW Device selection screen * refactor: use monero_c free to clean pointer * fix: use new monero_c deps * fix: merge conflicts regarding new theming * feat: add status bottomsheet indicating an ongoing signing process * fix: getLastLedgerCommand monero.dart generation * reformat send_view_model.dart [skip ci] --------- Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

Konstantin Ullrich committed May 26, 2025 at 17:38 UTC 90aee053cd3ad243107dc667d52fac83bd7d7755
46 files changed +656 -311
cw_monero/lib/api/wallet_manager.dart
+1 -3
@@ -388,9 +388,7 @@ Future<void> loadWallet(
388 if (gLedger == null) {
389 throw Exception("Tried to open a ledger wallet with no ledger connected");
390 }
391 - final dummyWPtr = (currentWallet ??
392 - wmPtr.openWallet(path: '', password: ''));
393 - enableLedgerExchange(dummyWPtr, gLedger!);
391 + enableLedgerExchange(gLedger!);
392 }
393
394 final addr = wmPtr.ffiAddress();
cw_monero/lib/ledger.dart
+29 -56
@@ -2,75 +2,50 @@ import 'dart:async';
2 import 'dart:ffi';
3 import 'dart:typed_data';
4
5 -import 'package:collection/collection.dart';
5 import 'package:cw_core/utils/print_verbose.dart';
6 import 'package:ffi/ffi.dart';
7 +import 'package:flutter/foundation.dart';
8 import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
9 import 'package:ledger_flutter_plus/ledger_flutter_plus_dart.dart';
10 -import 'package:monero/src/wallet2.dart';
10 +import 'package:monero/src/monero.dart' as api;
11
12 LedgerConnection? gLedger;
13 +String? latestLedgerCommand;
14
14 -Timer? _ledgerExchangeTimer;
15 -Timer? _ledgerKeepAlive;
16 -
17 -void enableLedgerExchange(Wallet2Wallet wallet, LedgerConnection connection) {
18 - _ledgerExchangeTimer?.cancel();
19 - _ledgerExchangeTimer = Timer.periodic(Duration(milliseconds: 1), (_) async {
20 - final ledgerRequestLength = wallet.getSendToDeviceLength();
21 - final ledgerRequest = wallet.getSendToDevice()
22 - .cast<Uint8>()
23 - .asTypedList(ledgerRequestLength);
24 - if (ledgerRequestLength > 0) {
25 - _ledgerKeepAlive?.cancel();
26 -
27 - final Pointer<Uint8> emptyPointer = malloc<Uint8>(0);
28 - wallet.setDeviceSendData(
29 - emptyPointer.cast<UnsignedChar>(), 0);
30 - malloc.free(emptyPointer);
31 -
32 - _logLedgerCommand(ledgerRequest, false);
33 - final response = await exchange(connection, ledgerRequest);
34 - _logLedgerCommand(response, true);
35 -
36 - if (ListEquality().equals(response, [0x55, 0x15])) {
37 - await connection.disconnect();
38 - // // TODO: Show POPUP pls unlock your device
39 - // await Future.delayed(Duration(seconds: 15));
40 - // response = await exchange(connection, ledgerRequest);
41 - }
42 -
43 - final Pointer<Uint8> result = malloc<Uint8>(response.length);
44 - for (var i = 0; i < response.length; i++) {
45 - result.asTypedList(response.length)[i] = response[i];
46 - }
47 -
48 - wallet.setDeviceReceivedData(
49 - result.cast<UnsignedChar>(), response.length);
50 - malloc.free(result);
51 - keepAlive(connection);
15 +typedef LedgerCallback = Void Function(Pointer<UnsignedChar>, UnsignedInt);
16 +NativeCallable<LedgerCallback>? callable;
17 +
18 +void enableLedgerExchange(LedgerConnection connection) {
19 + callable?.close();
20 +
21 + void callback(Pointer<UnsignedChar> request, int requestLength) async {
22 + final ledgerRequest = request.cast<Uint8>().asTypedList(requestLength);
23 +
24 + _logLedgerCommand(ledgerRequest, false);
25 + final response = await exchange(connection, ledgerRequest);
26 + _logLedgerCommand(response, true);
27 +
28 + final Pointer<Uint8> result = malloc<Uint8>(response.length);
29 + for (var i = 0; i < response.length; i++) {
30 + result.asTypedList(response.length)[i] = response[i];
31 }
53 - });
54 -}
32
56 -void keepAlive(LedgerConnection connection) {
57 - if (connection.connectionType == ConnectionType.ble) {
58 - _ledgerKeepAlive = Timer.periodic(Duration(seconds: 10), (_) async {
59 - UniversalBle.setNotifiable(
60 - connection.device.id,
61 - connection.device.deviceInfo.serviceId,
62 - connection.device.deviceInfo.notifyCharacteristicKey,
63 - BleInputProperty.notification,
64 - ).onError((_, __) async {});
65 - });
33 + latestLedgerCommand = _ledgerMoneroCommands[ledgerRequest[1]];
34 +
35 + api.MoneroWallet.setDeviceReceivedData(
36 + result.cast<UnsignedChar>(), response.length);
37 + api.MoneroFree().free(result.cast());
38 }
39 +
40 + callable = NativeCallable<LedgerCallback>.listener(callback);
41 + api.MoneroWallet.setLedgerCallback(callable!.nativeFunction);
42 }
43
44 void disableLedgerExchange() {
70 - _ledgerExchangeTimer?.cancel();
71 - _ledgerKeepAlive?.cancel();
45 + callable?.close();
46 gLedger?.disconnect();
47 gLedger = null;
48 + latestLedgerCommand = null;
49 }
50
51 Future<Uint8List> exchange(LedgerConnection connection, Uint8List data) async =>
@@ -135,8 +110,6 @@ void _logLedgerCommand(Uint8List command, [bool isResponse = true]) {
110 String toHexString(Uint8List data) =>
111 data.map((e) => e.toRadixString(16).padLeft(2, '0')).join();
112
138 -
139 -
113 if (isResponse) {
114 printV("< ${toHexString(command)}");
115 } else {
cw_monero/lib/monero_wallet.dart
+1 -2
@@ -927,8 +927,7 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
927 }
928
929 void setLedgerConnection(LedgerConnection connection) {
930 - final dummyWPtr = createWalletPointer();
931 - enableLedgerExchange(dummyWPtr, connection);
930 + enableLedgerExchange(connection);
931 }
932
933 @override
cw_monero/lib/monero_wallet_service.dart
+1 -6
@@ -294,12 +294,7 @@ class MoneroWalletService extends WalletService<
294 final password = credentials.password;
295 final height = credentials.height;
296
297 - if (currentWallet == null) {
298 - final tmpWptr = monero_wallet_manager.createWalletPointer();
299 - enableLedgerExchange(tmpWptr, credentials.ledgerConnection);
300 - } else {
301 - enableLedgerExchange(currentWallet!, credentials.ledgerConnection);
302 - }
297 + enableLedgerExchange(credentials.ledgerConnection);
298
299 await monero_wallet_manager.restoreWalletFromHardwareWallet(
300 path: path,
cw_monero/pubspec.lock
+39 -39
@@ -42,10 +42,10 @@ packages:
42 dependency: transitive
43 description:
44 name: async
45 - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
45 + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
46 url: "https://pub.dev"
47 source: hosted
48 - version: "2.11.0"
48 + version: "2.12.0"
49 bip32:
50 dependency: "direct main"
51 description:
@@ -83,10 +83,10 @@ packages:
83 dependency: transitive
84 description:
85 name: boolean_selector
86 - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
86 + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
87 url: "https://pub.dev"
88 source: hosted
89 - version: "2.1.1"
89 + version: "2.1.2"
90 bs58check:
91 dependency: transitive
92 description:
@@ -172,10 +172,10 @@ packages:
172 dependency: transitive
173 description:
174 name: characters
175 - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
175 + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
176 url: "https://pub.dev"
177 source: hosted
178 - version: "1.3.0"
178 + version: "1.4.0"
179 checked_yaml:
180 dependency: transitive
181 description:
@@ -188,10 +188,10 @@ packages:
188 dependency: transitive
189 description:
190 name: clock
191 - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
191 + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
192 url: "https://pub.dev"
193 source: hosted
194 - version: "1.1.1"
194 + version: "1.1.2"
195 code_builder:
196 dependency: transitive
197 description:
@@ -204,10 +204,10 @@ packages:
204 dependency: transitive
205 description:
206 name: collection
207 - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
207 + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
208 url: "https://pub.dev"
209 source: hosted
210 - version: "1.19.0"
210 + version: "1.19.1"
211 convert:
212 dependency: transitive
213 description:
@@ -283,10 +283,10 @@ packages:
283 dependency: transitive
284 description:
285 name: fake_async
286 - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
286 + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
287 url: "https://pub.dev"
288 source: hosted
289 - version: "1.3.1"
289 + version: "1.3.2"
290 ffi:
291 dependency: "direct main"
292 description:
@@ -461,18 +461,18 @@ packages:
461 dependency: transitive
462 description:
463 name: leak_tracker
464 - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
464 + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
465 url: "https://pub.dev"
466 source: hosted
467 - version: "10.0.7"
467 + version: "10.0.8"
468 leak_tracker_flutter_testing:
469 dependency: transitive
470 description:
471 name: leak_tracker_flutter_testing
472 - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
472 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
473 url: "https://pub.dev"
474 source: hosted
475 - version: "3.0.8"
475 + version: "3.0.9"
476 leak_tracker_testing:
477 dependency: transitive
478 description:
@@ -517,10 +517,10 @@ packages:
517 dependency: transitive
518 description:
519 name: matcher
520 - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
520 + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
521 url: "https://pub.dev"
522 source: hosted
523 - version: "0.12.16+1"
523 + version: "0.12.17"
524 material_color_utilities:
525 dependency: transitive
526 description:
@@ -533,10 +533,10 @@ packages:
533 dependency: transitive
534 description:
535 name: meta
536 - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
536 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
537 url: "https://pub.dev"
538 source: hosted
539 - version: "1.15.0"
539 + version: "1.16.0"
540 mime:
541 dependency: transitive
542 description:
@@ -573,8 +573,8 @@ packages:
573 dependency: "direct main"
574 description:
575 path: "impls/monero.dart"
576 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
577 - resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
576 + ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
577 + resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
578 url: "https://github.com/mrcyjanek/monero_c"
579 source: git
580 version: "0.0.0"
@@ -615,10 +615,10 @@ packages:
615 dependency: transitive
616 description:
617 name: path
618 - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
618 + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
619 url: "https://pub.dev"
620 source: hosted
621 - version: "1.9.0"
621 + version: "1.9.1"
622 path_provider:
623 dependency: "direct main"
624 description:
@@ -804,26 +804,26 @@ packages:
804 dependency: transitive
805 description:
806 name: source_span
807 - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
807 + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
808 url: "https://pub.dev"
809 source: hosted
810 - version: "1.10.0"
810 + version: "1.10.1"
811 stack_trace:
812 dependency: transitive
813 description:
814 name: stack_trace
815 - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
815 + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
816 url: "https://pub.dev"
817 source: hosted
818 - version: "1.12.0"
818 + version: "1.12.1"
819 stream_channel:
820 dependency: transitive
821 description:
822 name: stream_channel
823 - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
823 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
824 url: "https://pub.dev"
825 source: hosted
826 - version: "2.1.2"
826 + version: "2.1.4"
827 stream_transform:
828 dependency: transitive
829 description:
@@ -836,26 +836,26 @@ packages:
836 dependency: transitive
837 description:
838 name: string_scanner
839 - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
839 + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
840 url: "https://pub.dev"
841 source: hosted
842 - version: "1.3.0"
842 + version: "1.4.1"
843 term_glyph:
844 dependency: transitive
845 description:
846 name: term_glyph
847 - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
847 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
848 url: "https://pub.dev"
849 source: hosted
850 - version: "1.2.1"
850 + version: "1.2.2"
851 test_api:
852 dependency: transitive
853 description:
854 name: test_api
855 - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
855 + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
856 url: "https://pub.dev"
857 source: hosted
858 - version: "0.7.3"
858 + version: "0.7.4"
859 timing:
860 dependency: transitive
861 description:
@@ -916,10 +916,10 @@ packages:
916 dependency: transitive
917 description:
918 name: vm_service
919 - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
919 + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
920 url: "https://pub.dev"
921 source: hosted
922 - version: "14.3.0"
922 + version: "14.3.1"
923 watcher:
924 dependency: "direct overridden"
925 description:
@@ -977,5 +977,5 @@ packages:
977 source: hosted
978 version: "3.1.3"
979 sdks:
980 - dart: ">=3.6.0 <4.0.0"
980 + dart: ">=3.7.0-0 <4.0.0"
981 flutter: ">=3.24.0"
cw_monero/pubspec.yaml
+2 -3
@@ -2,11 +2,10 @@ name: cw_monero
2 description: A new flutter plugin project.
3 version: 0.0.1
4 publish_to: none
5 -author: Cake Wallet
5 homepage: https://cakewallet.com
6
7 environment:
9 - sdk: ">=2.19.0 <3.0.0"
8 + sdk: ^3.5.0
9 flutter: ">=1.20.0"
10
11 dependencies:
@@ -27,7 +26,7 @@ dependencies:
26 monero:
27 git:
28 url: https://github.com/mrcyjanek/monero_c
30 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
29 + ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2
30 path: impls/monero.dart
31 mutex: ^3.1.0
32 ledger_flutter_plus: ^1.4.1
cw_wownero/pubspec.lock
+39 -39
@@ -37,10 +37,10 @@ packages:
37 dependency: transitive
38 description:
39 name: async
40 - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
40 + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
41 url: "https://pub.dev"
42 source: hosted
43 - version: "2.11.0"
43 + version: "2.12.0"
44 blockchain_utils:
45 dependency: transitive
46 description:
@@ -54,10 +54,10 @@ packages:
54 dependency: transitive
55 description:
56 name: boolean_selector
57 - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
57 + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
58 url: "https://pub.dev"
59 source: hosted
60 - version: "2.1.1"
60 + version: "2.1.2"
61 build:
62 dependency: transitive
63 description:
@@ -135,10 +135,10 @@ packages:
135 dependency: transitive
136 description:
137 name: characters
138 - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
138 + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
139 url: "https://pub.dev"
140 source: hosted
141 - version: "1.3.0"
141 + version: "1.4.0"
142 checked_yaml:
143 dependency: transitive
144 description:
@@ -151,10 +151,10 @@ packages:
151 dependency: transitive
152 description:
153 name: clock
154 - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
154 + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
155 url: "https://pub.dev"
156 source: hosted
157 - version: "1.1.1"
157 + version: "1.1.2"
158 code_builder:
159 dependency: transitive
160 description:
@@ -167,10 +167,10 @@ packages:
167 dependency: transitive
168 description:
169 name: collection
170 - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
170 + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
171 url: "https://pub.dev"
172 source: hosted
173 - version: "1.19.0"
173 + version: "1.19.1"
174 convert:
175 dependency: transitive
176 description:
@@ -238,10 +238,10 @@ packages:
238 dependency: transitive
239 description:
240 name: fake_async
241 - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
241 + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
242 url: "https://pub.dev"
243 source: hosted
244 - version: "1.3.1"
244 + version: "1.3.2"
245 ffi:
246 dependency: "direct main"
247 description:
@@ -400,18 +400,18 @@ packages:
400 dependency: transitive
401 description:
402 name: leak_tracker
403 - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
403 + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
404 url: "https://pub.dev"
405 source: hosted
406 - version: "10.0.7"
406 + version: "10.0.8"
407 leak_tracker_flutter_testing:
408 dependency: transitive
409 description:
410 name: leak_tracker_flutter_testing
411 - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
411 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
412 url: "https://pub.dev"
413 source: hosted
414 - version: "3.0.8"
414 + version: "3.0.9"
415 leak_tracker_testing:
416 dependency: transitive
417 description:
@@ -432,10 +432,10 @@ packages:
432 dependency: transitive
433 description:
434 name: matcher
435 - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
435 + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
436 url: "https://pub.dev"
437 source: hosted
438 - version: "0.12.16+1"
438 + version: "0.12.17"
439 material_color_utilities:
440 dependency: transitive
441 description:
@@ -448,10 +448,10 @@ packages:
448 dependency: transitive
449 description:
450 name: meta
451 - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
451 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
452 url: "https://pub.dev"
453 source: hosted
454 - version: "1.15.0"
454 + version: "1.16.0"
455 mime:
456 dependency: transitive
457 description:
@@ -480,8 +480,8 @@ packages:
480 dependency: "direct main"
481 description:
482 path: "impls/monero.dart"
483 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
484 - resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
483 + ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
484 + resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
485 url: "https://github.com/mrcyjanek/monero_c"
486 source: git
487 version: "0.0.0"
@@ -522,10 +522,10 @@ packages:
522 dependency: transitive
523 description:
524 name: path
525 - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
525 + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
526 url: "https://pub.dev"
527 source: hosted
528 - version: "1.9.0"
528 + version: "1.9.1"
529 path_provider:
530 dependency: "direct main"
531 description:
@@ -695,26 +695,26 @@ packages:
695 dependency: transitive
696 description:
697 name: source_span
698 - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
698 + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
699 url: "https://pub.dev"
700 source: hosted
701 - version: "1.10.0"
701 + version: "1.10.1"
702 stack_trace:
703 dependency: transitive
704 description:
705 name: stack_trace
706 - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
706 + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
707 url: "https://pub.dev"
708 source: hosted
709 - version: "1.12.0"
709 + version: "1.12.1"
710 stream_channel:
711 dependency: transitive
712 description:
713 name: stream_channel
714 - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
714 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
715 url: "https://pub.dev"
716 source: hosted
717 - version: "2.1.2"
717 + version: "2.1.4"
718 stream_transform:
719 dependency: transitive
720 description:
@@ -727,26 +727,26 @@ packages:
727 dependency: transitive
728 description:
729 name: string_scanner
730 - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
730 + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
731 url: "https://pub.dev"
732 source: hosted
733 - version: "1.3.0"
733 + version: "1.4.1"
734 term_glyph:
735 dependency: transitive
736 description:
737 name: term_glyph
738 - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
738 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
739 url: "https://pub.dev"
740 source: hosted
741 - version: "1.2.1"
741 + version: "1.2.2"
742 test_api:
743 dependency: transitive
744 description:
745 name: test_api
746 - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
746 + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
747 url: "https://pub.dev"
748 source: hosted
749 - version: "0.7.3"
749 + version: "0.7.4"
750 timing:
751 dependency: transitive
752 description:
@@ -791,10 +791,10 @@ packages:
791 dependency: transitive
792 description:
793 name: vm_service
794 - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
794 + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
795 url: "https://pub.dev"
796 source: hosted
797 - version: "14.3.0"
797 + version: "14.3.1"
798 watcher:
799 dependency: "direct overridden"
800 description:
@@ -844,5 +844,5 @@ packages:
844 source: hosted
845 version: "3.1.3"
846 sdks:
847 - dart: ">=3.5.0 <4.0.0"
847 + dart: ">=3.7.0-0 <4.0.0"
848 flutter: ">=3.24.0"
cw_wownero/pubspec.yaml
+1 -2
@@ -2,7 +2,6 @@ name: cw_wownero
2 description: A new flutter plugin project.
3 version: 0.0.1
4 publish_to: none
5 -author: Cake Wallet
5 homepage: https://cakewallet.com
6
7 environment:
@@ -25,7 +24,7 @@ dependencies:
24 monero:
25 git:
26 url: https://github.com/mrcyjanek/monero_c
28 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508 # monero_c hash
27 + ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2 # monero_c hash
28 path: impls/monero.dart
29 mutex: ^3.1.0
30
cw_zano/pubspec.lock
+40 -40
@@ -37,10 +37,10 @@ packages:
37 dependency: transitive
38 description:
39 name: async
40 - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
40 + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
41 url: "https://pub.dev"
42 source: hosted
43 - version: "2.11.0"
43 + version: "2.12.0"
44 blockchain_utils:
45 dependency: transitive
46 description:
@@ -54,10 +54,10 @@ packages:
54 dependency: transitive
55 description:
56 name: boolean_selector
57 - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
57 + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
58 url: "https://pub.dev"
59 source: hosted
60 - version: "2.1.1"
60 + version: "2.1.2"
61 build:
62 dependency: transitive
63 description:
@@ -135,10 +135,10 @@ packages:
135 dependency: transitive
136 description:
137 name: characters
138 - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
138 + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
139 url: "https://pub.dev"
140 source: hosted
141 - version: "1.3.0"
141 + version: "1.4.0"
142 checked_yaml:
143 dependency: transitive
144 description:
@@ -151,10 +151,10 @@ packages:
151 dependency: transitive
152 description:
153 name: clock
154 - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
154 + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
155 url: "https://pub.dev"
156 source: hosted
157 - version: "1.1.1"
157 + version: "1.1.2"
158 code_builder:
159 dependency: transitive
160 description:
@@ -167,10 +167,10 @@ packages:
167 dependency: transitive
168 description:
169 name: collection
170 - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
170 + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
171 url: "https://pub.dev"
172 source: hosted
173 - version: "1.19.0"
173 + version: "1.19.1"
174 convert:
175 dependency: transitive
176 description:
@@ -238,10 +238,10 @@ packages:
238 dependency: transitive
239 description:
240 name: fake_async
241 - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
241 + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
242 url: "https://pub.dev"
243 source: hosted
244 - version: "1.3.1"
244 + version: "1.3.2"
245 ffi:
246 dependency: "direct main"
247 description:
@@ -405,18 +405,18 @@ packages:
405 dependency: transitive
406 description:
407 name: leak_tracker
408 - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
408 + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
409 url: "https://pub.dev"
410 source: hosted
411 - version: "10.0.7"
411 + version: "10.0.8"
412 leak_tracker_flutter_testing:
413 dependency: transitive
414 description:
415 name: leak_tracker_flutter_testing
416 - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
416 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
417 url: "https://pub.dev"
418 source: hosted
419 - version: "3.0.8"
419 + version: "3.0.9"
420 leak_tracker_testing:
421 dependency: transitive
422 description:
@@ -437,10 +437,10 @@ packages:
437 dependency: transitive
438 description:
439 name: matcher
440 - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
440 + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
441 url: "https://pub.dev"
442 source: hosted
443 - version: "0.12.16+1"
443 + version: "0.12.17"
444 material_color_utilities:
445 dependency: transitive
446 description:
@@ -453,10 +453,10 @@ packages:
453 dependency: transitive
454 description:
455 name: meta
456 - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
456 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
457 url: "https://pub.dev"
458 source: hosted
459 - version: "1.15.0"
459 + version: "1.16.0"
460 mime:
461 dependency: transitive
462 description:
@@ -485,8 +485,8 @@ packages:
485 dependency: "direct main"
486 description:
487 path: "impls/monero.dart"
488 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
489 - resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
488 + ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
489 + resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
490 url: "https://github.com/mrcyjanek/monero_c"
491 source: git
492 version: "0.0.0"
@@ -519,10 +519,10 @@ packages:
519 dependency: transitive
520 description:
521 name: path
522 - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
522 + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
523 url: "https://pub.dev"
524 source: hosted
525 - version: "1.9.0"
525 + version: "1.9.1"
526 path_provider:
527 dependency: "direct main"
528 description:
@@ -692,26 +692,26 @@ packages:
692 dependency: transitive
693 description:
694 name: source_span
695 - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
695 + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
696 url: "https://pub.dev"
697 source: hosted
698 - version: "1.10.0"
698 + version: "1.10.1"
699 stack_trace:
700 dependency: transitive
701 description:
702 name: stack_trace
703 - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
703 + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
704 url: "https://pub.dev"
705 source: hosted
706 - version: "1.12.0"
706 + version: "1.12.1"
707 stream_channel:
708 dependency: transitive
709 description:
710 name: stream_channel
711 - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
711 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
712 url: "https://pub.dev"
713 source: hosted
714 - version: "2.1.2"
714 + version: "2.1.4"
715 stream_transform:
716 dependency: transitive
717 description:
@@ -724,26 +724,26 @@ packages:
724 dependency: transitive
725 description:
726 name: string_scanner
727 - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
727 + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
728 url: "https://pub.dev"
729 source: hosted
730 - version: "1.3.0"
730 + version: "1.4.1"
731 term_glyph:
732 dependency: transitive
733 description:
734 name: term_glyph
735 - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
735 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
736 url: "https://pub.dev"
737 source: hosted
738 - version: "1.2.1"
738 + version: "1.2.2"
739 test_api:
740 dependency: transitive
741 description:
742 name: test_api
743 - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
743 + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
744 url: "https://pub.dev"
745 source: hosted
746 - version: "0.7.3"
746 + version: "0.7.4"
747 timing:
748 dependency: transitive
749 description:
@@ -788,10 +788,10 @@ packages:
788 dependency: transitive
789 description:
790 name: vm_service
791 - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
791 + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
792 url: "https://pub.dev"
793 source: hosted
794 - version: "14.3.0"
794 + version: "14.3.1"
795 watcher:
796 dependency: "direct overridden"
797 description:
@@ -841,5 +841,5 @@ packages:
841 source: hosted
842 version: "3.1.3"
843 sdks:
844 - dart: ">=3.5.0 <4.0.0"
845 - flutter: ">=3.27.4"
844 + dart: ">=3.7.0-0 <4.0.0"
845 + flutter: ">=3.24.0"
cw_zano/pubspec.yaml
+1 -2
@@ -2,7 +2,6 @@ name: cw_zano
2 description: A new flutter plugin project.
3 version: 0.0.1
4 publish_to: none
5 -author: Cake Wallet
5 homepage: https://cakewallet.com
6
7 environment:
@@ -26,7 +25,7 @@ dependencies:
25 monero:
26 git:
27 url: https://github.com/mrcyjanek/monero_c
29 - ref: b335585a7fb94b315eb52bd88f2da6d3489fa508 # monero_c hash
28 + ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2 # monero_c hash
29 path: impls/monero.dart
30 dev_dependencies:
31 flutter_test:
lib/monero/cw_monero.dart
+4 -2
@@ -421,6 +421,7 @@ class CWMonero extends Monero {
421 moneroWallet.setLedgerConnection(connection);
422 }
423
424 + @override
425 void resetLedgerConnection() {
426 disableLedgerExchange();
427 }
@@ -428,9 +429,11 @@ class CWMonero extends Monero {
429 @override
430 void setGlobalLedgerConnection(ledger.LedgerConnection connection) {
431 gLedger = connection;
431 - keepAlive(connection);
432 }
433
434 + @override
435 + String? getLastLedgerCommand() => latestLedgerCommand;
436 +
437 bool isViewOnly() {
438 return isViewOnlyBySpendKey(null);
439 }
@@ -439,5 +442,4 @@ class CWMonero extends Monero {
442 Map<String, List<int>> debugCallLength() {
443 return monero_wallet_api.debugCallLength();
444 }
442 -
445 }
lib/src/screens/connect_device/connect_device_page.dart
+127 -88
@@ -5,7 +5,9 @@ import 'package:cake_wallet/generated/i18n.dart';
5 import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/screens/base_page.dart';
7 import 'package:cake_wallet/src/screens/connect_device/widgets/device_tile.dart';
8 +import 'package:cake_wallet/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart';
9 import 'package:cake_wallet/src/widgets/primary_button.dart';
10 +import 'package:cake_wallet/themes/core/material_base_theme.dart';
11 import 'package:cake_wallet/utils/responsive_layout_util.dart';
12 import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
13 import 'package:cw_core/utils/print_verbose.dart';
@@ -60,6 +62,7 @@ class ConnectDevicePage extends BasePage {
62 onConnectDevice,
63 allowChangeWallet,
64 ledgerVM,
65 + currentTheme,
66 ));
67 }
68
@@ -68,12 +71,14 @@ class ConnectDevicePageBody extends StatefulWidget {
71 final OnConnectDevice onConnectDevice;
72 final bool allowChangeWallet;
73 final LedgerViewModel ledgerVM;
74 + final MaterialThemeBase currentTheme;
75
76 const ConnectDevicePageBody(
77 this.walletType,
78 this.onConnectDevice,
79 this.allowChangeWallet,
80 this.ledgerVM,
81 + this.currentTheme,
82 );
83
84 @override
@@ -179,109 +184,126 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
184
185 @override
186 Widget build(BuildContext context) {
182 - return Center(
183 - child: Container(
184 - width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint,
185 - height: double.infinity,
186 - padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24),
187 - child: SingleChildScrollView(
188 - child: Column(
189 - children: [
190 - Padding(
191 - padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
192 - child: Text(
193 - Platform.isIOS
194 - ? S.of(context).connect_your_hardware_wallet_ios
195 - : S.of(context).connect_your_hardware_wallet,
196 - style: Theme.of(context).textTheme.titleMedium,
197 - textAlign: TextAlign.center,
198 - ),
199 - ),
200 - Offstage(
201 - offstage: !longWait,
202 - child: Padding(
203 - padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
204 - child: Text(
205 - S.of(context).if_you_dont_see_your_device,
206 - style: Theme.of(context).textTheme.titleMedium,
207 - textAlign: TextAlign.center,
208 - ),
209 - ),
210 - ),
211 - Observer(
212 - builder: (_) => Offstage(
213 - offstage: widget.ledgerVM.bleIsEnabled,
214 - child: Padding(
187 + return Container(
188 + width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint,
189 + padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24),
190 + child: Column(
191 + children: [
192 + Expanded(
193 + child: SingleChildScrollView(
194 + child: Column(
195 + children: [
196 + Padding(
197 padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
198 child: Text(
217 - S.of(context).ledger_please_enable_bluetooth,
218 - style: Theme.of(context).textTheme.titleMedium,
199 + Platform.isIOS
200 + ? S.of(context).connect_your_hardware_wallet_ios
201 + : S.of(context).connect_your_hardware_wallet,
202 + style: Theme.of(context)
203 + .textTheme.titleMedium,
204 textAlign: TextAlign.center,
205 ),
206 ),
222 - ),
223 - ),
224 - if (bleDevices.length > 0) ...[
225 - Padding(
226 - padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
227 - child: Container(
228 - width: double.infinity,
229 - child: Text(
230 - S.of(context).bluetooth,
231 - style: Theme.of(context).textTheme.bodyMedium,
207 + Offstage(
208 + offstage: !longWait,
209 + child: Padding(
210 + padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
211 + child: Text(
212 + S.of(context).if_you_dont_see_your_device,
213 + style: Theme.of(context)
214 + .textTheme.titleMedium,
215 + textAlign: TextAlign.center,
216 + ),
217 ),
218 ),
234 - ),
235 - ...bleDevices
236 - .map(
237 - (device) => Padding(
238 - padding: EdgeInsets.only(bottom: 20),
239 - child: DeviceTile(
240 - onPressed: () => _connectToDevice(device),
241 - title: device.name,
242 - leading: _getDeviceTileLeading(device.deviceInfo),
243 - connectionType: device.connectionType,
219 + Observer(
220 + builder: (_) => Offstage(
221 + offstage: widget.ledgerVM.bleIsEnabled,
222 + child: Padding(
223 + padding:
224 + EdgeInsets.only(left: 20, right: 20, bottom: 20),
225 + child: Text(
226 + S.of(context).ledger_please_enable_bluetooth,
227 + style: Theme.of(context)
228 + .textTheme.titleMedium,
229 + textAlign: TextAlign.center,
230 ),
231 ),
246 - )
247 - .toList()
248 - ],
249 - if (usbDevices.length > 0) ...[
250 - Padding(
251 - padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
252 - child: Container(
253 - width: double.infinity,
254 - child: Text(
255 - S.of(context).usb,
256 - style: Theme.of(context).textTheme.bodyMedium,
232 ),
233 ),
259 - ),
260 - ...usbDevices
261 - .map(
262 - (device) => Padding(
263 - padding: EdgeInsets.only(bottom: 20),
264 - child: DeviceTile(
265 - onPressed: () => _connectToDevice(device),
266 - title: device.name,
267 - leading: _getDeviceTileLeading(device.deviceInfo),
268 - connectionType: device.connectionType,
234 + if (bleDevices.length > 0) ...[
235 + Padding(
236 + padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
237 + child: Container(
238 + width: double.infinity,
239 + child: Text(
240 + S.of(context).bluetooth,
241 + style: Theme.of(context)
242 + .textTheme.bodyMedium,
243 ),
244 ),
245 + ),
246 + ...bleDevices
247 + .map(
248 + (device) => Padding(
249 + padding: EdgeInsets.only(bottom: 20),
250 + child: DeviceTile(
251 + onPressed: () => _connectToDevice(device),
252 + title: device.name,
253 + leading: _getDeviceTileLeading(device.deviceInfo),
254 + connectionType: device.connectionType,
255 + ),
256 + ),
257 + )
258 + .toList()
259 + ],
260 + if (usbDevices.length > 0) ...[
261 + Padding(
262 + padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
263 + child: Container(
264 + width: double.infinity,
265 + child: Text(
266 + S.of(context).usb,
267 + style: Theme.of(context)
268 + .textTheme.bodyMedium,
269 + ),
270 + ),
271 + ),
272 + ...usbDevices
273 + .map(
274 + (device) => Padding(
275 + padding: EdgeInsets.only(bottom: 20),
276 + child: DeviceTile(
277 + onPressed: () => _connectToDevice(device),
278 + title: device.name,
279 + leading: _getDeviceTileLeading(device.deviceInfo),
280 + connectionType: device.connectionType,
281 + ),
282 + ),
283 + )
284 + .toList(),
285 + ],
286 + if (widget.allowChangeWallet) ...[
287 + PrimaryButton(
288 + text: S.of(context).wallets,
289 + color: Theme.of(context)
290 + .colorScheme.primary,
291 + textColor: Theme.of(context)
292 + .colorScheme.onPrimary,
293 + onPressed: _onChangeWallet,
294 )
272 - .toList(),
273 - ],
274 - if (widget.allowChangeWallet) ...[
275 - PrimaryButton(
276 - text: S.of(context).wallets,
277 - color: Theme.of(context).colorScheme.primary,
278 - textColor: Theme.of(context).colorScheme.onPrimary,
279 - onPressed: _onChangeWallet,
280 - )
281 - ],
282 - ],
295 + ],
296 + ],
297 + ),
298 + ),
299 ),
284 - ),
300 + PrimaryButton(
301 + text: S.of(context).how_to_connect,
302 + color: Theme.of(context).colorScheme.surfaceContainer,
303 + textColor: Theme.of(context).colorScheme.onSecondaryContainer,
304 + onPressed: () => _onHowToConnect(context),
305 + )
306 + ],
307 ),
308 );
309 }
@@ -293,4 +315,21 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
315 .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false),
316 );
317 }
318 +
319 + void _onHowToConnect(BuildContext context) {
320 + showModalBottomSheet(
321 + context: context,
322 + isScrollControlled: true,
323 + builder: (BuildContext bottomSheetContext) => InfoStepsBottomSheet(
324 + titleText: S.of(context).how_to_connect,
325 + currentTheme: widget.currentTheme,
326 + steps: [
327 + InfoStep('${S.of(context).step} 1', S.of(context).connect_hw_info_step_1),
328 + InfoStep('${S.of(context).step} 2', S.of(context).connect_hw_info_step_2),
329 + InfoStep('${S.of(context).step} 3', S.of(context).connect_hw_info_step_3),
330 + InfoStep('${S.of(context).step} 4', S.of(context).connect_hw_info_step_4),
331 + ],
332 + ),
333 + );
334 + }
335 }
lib/src/screens/send/send_page.dart
+32 -14
@@ -684,29 +684,47 @@ class SendPage extends BasePage {
684 });
685 }
686
687 - if (state is IsAwaitingDeviceResponseState) {
687 + if (state is IsDeviceSigningResponseState) {
688 WidgetsBinding.instance.addPostFrameCallback((_) {
689 if (!context.mounted) return;
690
691 showModalBottomSheet<void>(
692 context: context,
693 isDismissible: false,
694 - builder: (BuildContext bottomSheetContext) => InfoBottomSheet(
695 - currentTheme: currentTheme,
696 - titleText: S.of(bottomSheetContext).proceed_on_device,
697 - contentImage: 'assets/images/hardware_wallet/ledger_nano_x.png',
698 - contentImageColor: Theme.of(context).colorScheme.onSurface,
699 - content: S.of(bottomSheetContext).proceed_on_device_description,
700 - isTwoAction: false,
701 - actionButtonText: S.of(context).cancel,
702 - actionButton: () {
703 - sendViewModel.state = InitialExecutionState();
704 - Navigator.of(bottomSheetContext).pop();
705 - },
706 - ),
694 + builder: (context) {
695 + dialogContext = context;
696 + return LoadingBottomSheet(titleText: S.of(context).device_is_signing);
697 + },
698 );
699 });
700 }
701 +
702 + if (state is IsAwaitingDeviceResponseState) {
703 + WidgetsBinding.instance.addPostFrameCallback((_) {
704 + if (!context.mounted) return;
705 +
706 + showModalBottomSheet<void>(
707 + context: context,
708 + isDismissible: false,
709 + builder: (context) {
710 + dialogContext = context;
711 + return InfoBottomSheet(
712 + currentTheme: currentTheme,
713 + titleText: S.of(context).proceed_on_device,
714 + contentImage:
715 + 'assets/images/hardware_wallet/ledger_nano_x.png',
716 + contentImageColor: Theme.of(context).colorScheme.onSurface,
717 + content: S.of(context).proceed_on_device_description,
718 + isTwoAction: false,
719 + actionButtonText: S.of(context).cancel,
720 + actionButton: () {
721 + sendViewModel.state = InitialExecutionState();
722 + Navigator.of(context).pop();
723 + },
724 + );
725 + });
726 + });
727 + }
728 });
729
730 _effectsInstalled = true;
lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart new
+114
@@ -0,0 +1,114 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/src/widgets/primary_button.dart';
3 +import 'package:cake_wallet/themes/core/material_base_theme.dart';
4 +import 'package:flutter/material.dart';
5 +
6 +import 'base_bottom_sheet_widget.dart';
7 +
8 +class InfoStep {
9 + final String title;
10 + final String description;
11 +
12 + const InfoStep(this.title, this.description);
13 +}
14 +
15 +class InfoStepsBottomSheet extends BaseBottomSheet {
16 + final MaterialThemeBase currentTheme;
17 + final List<InfoStep> steps;
18 +
19 + InfoStepsBottomSheet({
20 + required String titleText,
21 + required this.steps,
22 + String? titleIconPath,
23 + required this.currentTheme,
24 + }) : super(titleText: titleText, titleIconPath: titleIconPath);
25 +
26 + @override
27 + Widget contentWidget(BuildContext context) => SizedBox(
28 + height: 500,
29 + child: Column(
30 + children: [
31 + Expanded(
32 + child: SingleChildScrollView(
33 + child: Column(
34 + children: steps
35 + .map((step) => Container(
36 + margin: EdgeInsets.only(
37 + bottom: 15, left: 20, right: 20),
38 + padding: EdgeInsets.all(10),
39 + alignment: Alignment.center,
40 + decoration: BoxDecoration(
41 + borderRadius: BorderRadius.circular(10),
42 + color: Theme.of(context).cardColor,
43 + ),
44 + child: Row(
45 + mainAxisSize: MainAxisSize.max,
46 + mainAxisAlignment: MainAxisAlignment.center,
47 + crossAxisAlignment: CrossAxisAlignment.start,
48 + children: <Widget>[
49 + Expanded(
50 + child: Padding(
51 + padding: EdgeInsets.only(left: 16),
52 + child: Column(
53 + mainAxisSize: MainAxisSize.max,
54 + mainAxisAlignment:
55 + MainAxisAlignment.start,
56 + crossAxisAlignment:
57 + CrossAxisAlignment.start,
58 + children: <Widget>[
59 + Text(
60 + step.title,
61 + style: Theme.of(context)
62 + .textTheme
63 + .bodyMedium!
64 + .copyWith(
65 + fontSize: 20,
66 + fontWeight: FontWeight.w500,
67 + color: Theme.of(context)
68 + .colorScheme
69 + .onSurface,
70 + ),
71 + ),
72 + Padding(
73 + padding: EdgeInsets.only(top: 5),
74 + child: Text(
75 + step.description,
76 + style: Theme.of(context)
77 + .textTheme
78 + .bodyMedium!
79 + .copyWith(
80 + color: Theme.of(context)
81 + .colorScheme
82 + .onSurfaceVariant,
83 + ),
84 + ),
85 + )
86 + ],
87 + ),
88 + ),
89 + )
90 + ],
91 + ),
92 + ))
93 + .toList(),
94 + ),
95 + ),
96 + ),
97 + Padding(
98 + padding: const EdgeInsets.all(16),
99 + child: PrimaryButton(
100 + text: S.of(context).close,
101 + color: Theme.of(context).colorScheme.primary,
102 + textColor: currentTheme.isDark
103 + ? Theme.of(context).colorScheme.onSurfaceVariant
104 + : Theme.of(context).colorScheme.onPrimary,
105 + onPressed: () => Navigator.of(context).pop(),
106 + ),
107 + )
108 + ],
109 + ),
110 + );
111 +
112 + @override
113 + Widget footerWidget(BuildContext context) => SizedBox.shrink();
114 +}
lib/view_model/send/send_view_model.dart
+25 -13
@@ -15,8 +15,8 @@ import 'package:cake_wallet/entities/contact_record.dart';
15 import 'package:cake_wallet/entities/evm_transaction_error_fees_handler.dart';
16 import 'package:cake_wallet/entities/fiat_currency.dart';
17 import 'package:cake_wallet/entities/parsed_address.dart';
18 -import 'package:cake_wallet/entities/template.dart';
18 import 'package:cake_wallet/entities/preferences_key.dart';
19 +import 'package:cake_wallet/entities/template.dart';
20 import 'package:cake_wallet/entities/transaction_description.dart';
21 import 'package:cake_wallet/entities/wallet_contact.dart';
22 import 'package:cake_wallet/ethereum/ethereum.dart';
@@ -293,19 +293,18 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
293 .toList();
294
295 @computed
296 - bool get hasCoinControl =>
297 - wallet.type == WalletType.bitcoin ||
298 - wallet.type == WalletType.litecoin ||
299 - wallet.type == WalletType.monero ||
300 - wallet.type == WalletType.wownero ||
301 - wallet.type == WalletType.decred ||
302 - wallet.type == WalletType.bitcoinCash;
296 + bool get hasCoinControl => [
297 + WalletType.bitcoin,
298 + WalletType.litecoin,
299 + WalletType.monero,
300 + WalletType.wownero,
301 + WalletType.decred,
302 + WalletType.bitcoinCash
303 + ].contains(wallet.type);
304
305 @computed
306 bool get isElectrumWallet =>
306 - wallet.type == WalletType.bitcoin ||
307 - wallet.type == WalletType.litecoin ||
308 - wallet.type == WalletType.bitcoinCash;
307 + [WalletType.bitcoin, WalletType.litecoin, WalletType.bitcoinCash].contains(wallet.type);
308
309 @observable
310 CryptoCurrency selectedCryptoCurrency;
@@ -444,12 +443,23 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
443 }
444 }
445
446 + Timer? _ledgerTxStateTimer;
447 +
448 @action
449 Future<PendingTransaction?> createTransaction({ExchangeProvider? provider}) async {
450 try {
451 if (!(state is IsExecutingState)) state = IsExecutingState();
452
452 - if (wallet.isHardwareWallet) state = IsAwaitingDeviceResponseState();
453 + if (wallet.isHardwareWallet) {
454 + state = IsAwaitingDeviceResponseState();
455 + if (walletType == WalletType.monero)
456 + _ledgerTxStateTimer = Timer.periodic(Duration(seconds: 1), (timer) {
457 + if (monero!.getLastLedgerCommand() == "INS_CLSAG") {
458 + timer.cancel();
459 + state = IsDeviceSigningResponseState();
460 + }
461 + });
462 + }
463
464 pendingTransaction = await wallet.createTransaction(_credentials(provider));
465
@@ -475,6 +485,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
485 state = ExecutedSuccessfullyState();
486 return pendingTransaction;
487 } catch (e) {
488 + _ledgerTxStateTimer?.cancel();
489 // if (e is LedgerException) {
490 // final errorCode = e.errorCode.toRadixString(16);
491 // final fallbackMsg =
@@ -592,7 +603,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
603 ));
604 }
605 final sharedPreferences = await SharedPreferences.getInstance();
595 - await sharedPreferences.setString(PreferencesKey.backgroundSyncLastTrigger(wallet.name), DateTime.now().add(Duration(minutes: 1)).toIso8601String());
606 + await sharedPreferences.setString(PreferencesKey.backgroundSyncLastTrigger(wallet.name),
607 + DateTime.now().add(Duration(minutes: 1)).toIso8601String());
608 state = TransactionCommitted();
609 } catch (e) {
610 state = FailureState(translateErrorMessage(e, wallet.type, wallet.currency));
lib/view_model/send/send_view_model_state.dart
+1
@@ -1,5 +1,6 @@
1 import 'package:cake_wallet/core/execution_state.dart';
2
3 +class IsDeviceSigningResponseState extends IsExecutingState {}
4 class IsAwaitingDeviceResponseState extends IsExecutingState {}
5 class TransactionCommitting extends ExecutionState {}
6 class TransactionCommitted extends ExecutionState {}
res/values/strings_ar.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "مؤكد",
182 "congratulations": "تهانينا!",
183 "connect_an_existing_yat": "توصيل Yat الحالي",
184 + "connect_hw_info_step_1": "تأكد من تشغيل جهازك.",
185 + "connect_hw_info_step_2": "قم بتشغيل Bluetooth لكل من الجهازين وإقرانها من الهاتف ، أو قم بتوصيل أجهزتك معًا باستخدام كبل USB.",
186 + "connect_hw_info_step_3": "افتح جهازك وانتقل إلى تطبيق التشفير المطلوب.",
187 + "connect_hw_info_step_4": "حدد جهازك في محفظة كعكة ومتابعة الإعداد.",
188 "connect_yats": "توصيل Yats",
189 "connect_your_hardware_wallet": "قم بتوصيل محفظة الأجهزة الخاصة بك باستخدام Bluetooth أو USB",
190 "connect_your_hardware_wallet_ios": "قم بتوصيل محفظة الأجهزة الخاصة بك باستخدام Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "النزول",
245 "description": "ﻒﺻﻭ",
246 "destination_tag": "علامة الوجهة:",
247 + "device_is_signing": "الجهاز يوقع",
248 "dfx_option_description": "شراء التشفير مع EUR & CHF. لعملاء البيع بالتجزئة والشركات في أوروبا",
249 "didnt_get_code": "لم تحصل على رمز؟",
250 "digit_pin": "-رقم PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "أخف التفاصيل",
400 "high_contrast_theme": "موضوع عالي التباين",
401 "home_screen_settings": "إعدادات الشاشة الرئيسية",
402 + "how_to_connect": "كيفية الاتصال",
403 "how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ",
404 "how_to_use_card": "كيفية استخدام هذه البطاقة",
405 "id": "رقم المعرف:",
@@ -842,6 +848,7 @@
848 "spend_key_private": "مفتاح الإنفاق (خاص)",
849 "spend_key_public": "مفتاح الإنفاق (عام)",
850 "status": "الحالة:",
851 + "step": "خطوة",
852 "string_default": "تقصير",
853 "subaddress_title": "قائمة العناوين الفرعية",
854 "subaddresses": "العناوين الفرعية",
res/values/strings_bg.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Потвърдено",
182 "congratulations": "Поздравления!",
183 "connect_an_existing_yat": "Добавете съществуващ Yat",
184 + "connect_hw_info_step_1": "Уверете се, че вашето устройство е включено.",
185 + "connect_hw_info_step_2": "Включете Bluetooth както за устройства, така и за тях от телефона или свържете устройствата си заедно с USB кабел.",
186 + "connect_hw_info_step_3": "Отключете устройството си и отворете желаното приложение за криптовалута.",
187 + "connect_hw_info_step_4": "Изберете вашето устройство в портфейла за торта и продължете с настройката.",
188 "connect_yats": "Добавете Yats",
189 "connect_your_hardware_wallet": "Свържете хардуерния си портфейл с помощта на Bluetooth или USB",
190 "connect_your_hardware_wallet_ios": "Свържете хардуерния си портфейл с помощта на Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Низходящ",
245 "description": "Описание",
246 "destination_tag": "Destination tag:",
247 + "device_is_signing": "Устройството подписва",
248 "dfx_option_description": "Купете криптовалута с Eur & CHF. За търговски и корпоративни клиенти в Европа",
249 "didnt_get_code": "Не получихте код?",
250 "digit_pin": "-цифрен PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Скриване на подробностите",
400 "high_contrast_theme": "Тема с висок контраст",
401 "home_screen_settings": "Настройки на началния екран",
402 + "how_to_connect": "Как да се свържа",
403 "how_to_use": "Как да използвам",
404 "how_to_use_card": "Как се ползва тази карта",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Spend key (таен)",
849 "spend_key_public": "Spend key (публичен)",
850 "status": "Статус: ",
851 + "step": "Стъпка",
852 "string_default": "По подразбиране",
853 "subaddress_title": "Лист от подадреси",
854 "subaddresses": "Подадреси",
res/values/strings_cs.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Potvrzeno",
182 "congratulations": "Gratulujeme!",
183 "connect_an_existing_yat": "Připojit existující Yat",
184 + "connect_hw_info_step_1": "Ujistěte se, že je vaše zařízení zapnuté.",
185 + "connect_hw_info_step_2": "Zapněte Bluetooth pro obě zařízení a spárujte je z telefonu nebo připojte zařízení pomocí kabelu USB.",
186 + "connect_hw_info_step_3": "Odemkněte zařízení a přejděte na požadovanou aplikaci Crypto.",
187 + "connect_hw_info_step_4": "Vyberte zařízení v peněžence dortu a pokračujte v nastavení.",
188 "connect_yats": "Připojit Yaty",
189 "connect_your_hardware_wallet": "Připojte hardwarovou peněženku pomocí Bluetooth nebo USB",
190 "connect_your_hardware_wallet_ios": "Připojte hardwarovou peněženku pomocí Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Klesající",
245 "description": "Popis",
246 "destination_tag": "Destination Tag:",
247 + "device_is_signing": "Zařízení se podpisu",
248 "dfx_option_description": "Koupit krypto s EUR & CHF. Pro maloobchodní a firemní zákazníky v Evropě",
249 "didnt_get_code": "Nepřišel Vám kód?",
250 "digit_pin": "-číselný PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Skrýt detaily",
400 "high_contrast_theme": "Téma s vysokým kontrastem",
401 "home_screen_settings": "Nastavení domovské obrazovky",
402 + "how_to_connect": "Jak se připojit",
403 "how_to_use": "Jak používat",
404 "how_to_use_card": "Jak použít tuto kartu",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Klíč pro platby (soukromý)",
849 "spend_key_public": "Klíč pro platby (veřejný)",
850 "status": "Status: ",
851 + "step": "Krok",
852 "string_default": "Výchozí",
853 "subaddress_title": "Seznam subadres",
854 "subaddresses": "Subadresy",
res/values/strings_de.arb
+8 -1
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Bestätigt",
182 "congratulations": "Glückwunsch!",
183 "connect_an_existing_yat": "Verbinden Sie ein vorhandenes Yat",
184 + "connect_hw_info_step_1": "Stellen Sie sicher, dass Ihr Gerät eingeschaltet ist.",
185 + "connect_hw_info_step_2": "Schalten Sie Bluetooth für beide Geräte ein oder schließen Sie Ihre Geräte mit einem USB-Kabel an.",
186 + "connect_hw_info_step_3": "Entsperren Sie Ihr Gerät und navigieren Sie zur gewünschten Krypto-App auf ihrem Gerät.",
187 + "connect_hw_info_step_4": "Wählen Sie Ihr Gerät in Cake Wallet aus und fahren Sie mit dem Setup fort.",
188 "connect_yats": "Yats verbinden",
189 "connect_your_hardware_wallet": "Verbinden Sie Ihre Hardware-Wallet über Bluetooth oder USB",
190 "connect_your_hardware_wallet_ios": "Verbinden Sie Ihre Hardware-Wallet über Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Absteigend",
245 "description": "Beschreibung",
246 "destination_tag": "Ziel-Tag:",
247 + "device_is_signing": "Das Gerät unterschreibt",
248 "dfx_option_description": "Kaufen Sie Krypto mit EUR & CHF. Für Einzelhandel und Unternehmenskunden in Europa",
249 "didnt_get_code": "Kein Code?",
250 "digit_pin": "-stellige PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Details ausblenden",
400 "high_contrast_theme": "Kontrastreiches Thema",
401 "home_screen_settings": "Einstellungen für den Startbildschirm",
402 + "how_to_connect": "Anleitung",
403 "how_to_use": "Wie benutzt man",
404 "how_to_use_card": "Wie man diese Karte benutzt",
405 "id": "ID: ",
@@ -584,7 +590,7 @@
590 "potential_scam": "Potenzieller Betrug",
591 "powered_by": "Ermöglicht durch ${title}",
592 "pre_seed_button_text": "Verstanden. Zeig mir meinen Seed",
587 - "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Samen und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.",
593 + "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Seed und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.",
594 "pre_seed_title": "WICHTIG",
595 "prepaid_cards": "Karten mit Guthaben",
596 "prevent_screenshots": "Verhindern Sie Screenshots und Bildschirmaufzeichnungen",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Spend Key (geheim)",
850 "spend_key_public": "Spend Key (öffentlich)",
851 "status": "Status: ",
852 + "step": "Schritt",
853 "string_default": "Standard",
854 "subaddress_title": "Unteradressenliste",
855 "subaddresses": "Unteradressen",
res/values/strings_en.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Confirmed",
182 "congratulations": "Congratulations!",
183 "connect_an_existing_yat": "Connect an existing Yat",
184 + "connect_hw_info_step_1": "Make sure your device is powered ON.",
185 + "connect_hw_info_step_2": "Turn Bluetooth on for both devices and pair them from the phone, OR connect your devices together using a USB cable.",
186 + "connect_hw_info_step_3": "Unlock your device and navigate to the desired crypto app.",
187 + "connect_hw_info_step_4": "Select your device in Cake Wallet and continue with the setup.",
188 "connect_yats": "Connect Yats",
189 "connect_your_hardware_wallet": "Connect your hardware wallet using Bluetooth or USB",
190 "connect_your_hardware_wallet_ios": "Connect your hardware wallet using Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Descending",
245 "description": "Description",
246 "destination_tag": "Destination tag:",
247 + "device_is_signing": "Device is signing",
248 "dfx_option_description": "Buy crypto with EUR & CHF. For retail and corporate customers in Europe",
249 "didnt_get_code": "Didn't get code?",
250 "digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Hide Details",
400 "high_contrast_theme": "High Contrast Theme",
401 "home_screen_settings": "Home screen settings",
402 + "how_to_connect": "How to Connect",
403 "how_to_use": "How to use",
404 "how_to_use_card": "How to use this card",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Spend key (private)",
850 "spend_key_public": "Spend key (public)",
851 "status": "Status: ",
852 + "step": "Step",
853 "string_default": "Default",
854 "subaddress_title": "Subaddress list",
855 "subaddresses": "Subaddresses",
res/values/strings_es.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Confirmado",
182 "congratulations": "Felicidades!",
183 "connect_an_existing_yat": "Conectar un Yat existente",
184 + "connect_hw_info_step_1": "Asegúrese de que su dispositivo esté encendido.",
185 + "connect_hw_info_step_2": "Encienda Bluetooth para ambos dispositivos y combínelos desde el teléfono o conecte sus dispositivos con un cable USB.",
186 + "connect_hw_info_step_3": "Desbloquee su dispositivo y navegue a la aplicación de cifrado deseada.",
187 + "connect_hw_info_step_4": "Seleccione su dispositivo en la billetera de pastel y continúe con la configuración.",
188 "connect_yats": "Conectar Yats",
189 "connect_your_hardware_wallet": "Conecta tu billetera de hardware con Bluetooth o USB",
190 "connect_your_hardware_wallet_ios": "Conecta tu billetera de hardware con Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Descendente",
245 "description": "Descripción",
246 "destination_tag": "Etiqueta de destino:",
247 + "device_is_signing": "El dispositivo está firmando",
248 "dfx_option_description": "Compre cripto con EUR y CHF. Para clientes minoristas y corporativos en Europa",
249 "didnt_get_code": "¿No recibiste el código?",
250 "digit_pin": "-dígito PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Ocultar detalles",
400 "high_contrast_theme": "Tema de alto contraste",
401 "home_screen_settings": "Configuración de la pantalla de inicio",
402 + "how_to_connect": "Cómo conectarse",
403 "how_to_use": "Cómo utilizar",
404 "how_to_use_card": "Cómo usar esta tarjeta",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Llave de gasto (privada)",
850 "spend_key_public": "Llave de gasto (pública)",
851 "status": "Estado: ",
852 + "step": "Paso",
853 "string_default": "Por defecto",
854 "subaddress_title": "Lista de subdirecciones",
855 "subaddresses": "Subdirecciones",
res/values/strings_fr.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Confirmé",
182 "congratulations": "Félicitations !",
183 "connect_an_existing_yat": "Connecter un Yat existant",
184 + "connect_hw_info_step_1": "Assurez-vous que votre appareil est allumé.",
185 + "connect_hw_info_step_2": "Allumez Bluetooth pour les deux appareils et associez-les à partir du téléphone, ou connectez vos appareils ensemble à l'aide d'un câble USB.",
186 + "connect_hw_info_step_3": "Déverrouillez votre appareil et accédez à l'application Crypto souhaitée.",
187 + "connect_hw_info_step_4": "Sélectionnez votre appareil dans le portefeuille de gâteaux et continuez avec la configuration.",
188 "connect_yats": "Connecter Yats",
189 "connect_your_hardware_wallet": "Connectez votre portefeuille matériel à l'aide de Bluetooth ou USB",
190 "connect_your_hardware_wallet_ios": "Connectez votre portefeuille matériel à l'aide de Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Descendant",
245 "description": "Description",
246 "destination_tag": "Tag de destination :",
247 + "device_is_signing": "L'appareil signale",
248 "dfx_option_description": "Achetez de la crypto avec EUR & CHF. Pour les clients de la vente au détail et des entreprises en Europe",
249 "didnt_get_code": "Vous n'avez pas reçu le code ?",
250 "digit_pin": " chiffres",
@@ -394,6 +399,7 @@
399 "hide_details": "Masquer les détails",
400 "high_contrast_theme": "Thème à contraste élevé",
401 "home_screen_settings": "Paramètres de l'écran d'accueil",
402 + "how_to_connect": "Comment se connecter",
403 "how_to_use": "Comment utiliser",
404 "how_to_use_card": "Comment utiliser cette carte",
405 "id": "ID : ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Clef de dépense (spend key) (privée)",
849 "spend_key_public": "Clef de dépense (spend key) (publique)",
850 "status": "Statut: ",
851 + "step": "Étape",
852 "string_default": "Défaut",
853 "subaddress_title": "Liste des sous-adresses",
854 "subaddresses": "Sous-adresses",
res/values/strings_ha.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Tabbatar",
182 "congratulations": "Taya murna!",
183 "connect_an_existing_yat": "Haɗa Yat da ke akwai",
184 + "connect_hw_info_step_1": "Tabbatar cewa na'urarka tana da iko.",
185 + "connect_hw_info_step_2": "Juya Bluetooth akan na'urorin biyu da kuma haɗa su daga wayar, ko haɗa na'urorinku tare ta amfani da kebul na USB.",
186 + "connect_hw_info_step_3": "Buɗe na'urarka kuma kewaya cikin app ɗin da ake so.",
187 + "connect_hw_info_step_4": "Zaɓi na'urarka a cikin walat walat kuma ci gaba da saiti.",
188 "connect_yats": "Haɗa Yats",
189 "connect_your_hardware_wallet": "Haɗa Wallake Wallware ɗinku ta Bluetooth ko USB",
190 "connect_your_hardware_wallet_ios": "Haɗa kayan aikinku ta Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Saukowa",
245 "description": "Bayani",
246 "destination_tag": "Tambarin makoma:",
247 + "device_is_signing": "Na'urar tana shiga",
248 "dfx_option_description": "Buy crypto tare da Eur & Chf. Don Retail da abokan ciniki na kamfanoni a Turai",
249 "didnt_get_code": "Ba a samun code?",
250 "digit_pin": "-lambar PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Ɓoye cikakkun bayanai",
400 "high_contrast_theme": "Babban Jigon Kwatance",
401 "home_screen_settings": "Saitunan allo na gida",
402 + "how_to_connect": "Yadda ake haɗa",
403 "how_to_use": "Yadda ake amfani da shi",
404 "how_to_use_card": "Yadda ake amfani da wannan kati",
405 "id": "ID:",
@@ -844,6 +850,7 @@
850 "spend_key_private": "makullin biya (maɓallin kalmar sirri)",
851 "spend_key_public": "makullin biya (maɓallin jama'a)",
852 "status": "Matsayi:",
853 + "step": "Taka",
854 "string_default": "Ƙin cika alƙawari",
855 "subaddress_title": "Jagorar subaddress",
856 "subaddresses": "Subaddresses",
res/values/strings_hi.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "की पुष्टि",
182 "congratulations": "बधाई!",
183 "connect_an_existing_yat": "मौजूदा Yat कनेक्ट करें",
184 + "connect_hw_info_step_1": "सुनिश्चित करें कि आपका डिवाइस चालू है।",
185 + "connect_hw_info_step_2": "दोनों उपकरणों के लिए ब्लूटूथ चालू करें और उन्हें फोन से पेयर करें, या एक USB केबल का उपयोग करके अपने डिवाइस को एक साथ कनेक्ट करें।",
186 + "connect_hw_info_step_3": "अपने डिवाइस को अनलॉक करें और वांछित क्रिप्टो ऐप पर नेविगेट करें।",
187 + "connect_hw_info_step_4": "केक वॉलेट में अपने डिवाइस का चयन करें और सेटअप के साथ जारी रखें।",
188 "connect_yats": "कनेक्ट Yats",
189 "connect_your_hardware_wallet": "ब्लूटूथ या यूएसबी का उपयोग करके अपने हार्डवेयर वॉलेट को कनेक्ट करें",
190 "connect_your_hardware_wallet_ios": "ब्लूटूथ का उपयोग करके अपने हार्डवेयर वॉलेट को कनेक्ट करें",
@@ -240,6 +244,7 @@
244 "descending": "अवरोही",
245 "description": "विवरण",
246 "destination_tag": "गंतव्य टैग:",
247 + "device_is_signing": "उपकरण हस्ताक्षर कर रहा है",
248 "dfx_option_description": "EUR और CHF के साथ क्रिप्टो खरीदें। यूरोप में खुदरा और कॉर्पोरेट ग्राहकों के लिए",
249 "didnt_get_code": "कोड नहीं मिला?",
250 "digit_pin": "-अंक पिन",
@@ -394,6 +399,7 @@
399 "hide_details": "विवरण छुपाएं",
400 "high_contrast_theme": "उच्च कंट्रास्ट थीम",
401 "home_screen_settings": "होम स्क्रीन सेटिंग्स",
402 + "how_to_connect": "कनेक्ट कैसे करें",
403 "how_to_use": "का उपयोग कैसे करें",
404 "how_to_use_card": "इस कार्ड का उपयोग कैसे करें",
405 "id": "ID: ",
@@ -844,6 +850,7 @@
850 "spend_key_private": "खर्च करना (निजी)",
851 "spend_key_public": "खर्च करना (जनता)",
852 "status": "स्थिति: ",
853 + "step": "कदम",
854 "string_default": "गलती करना",
855 "subaddress_title": "उपखंड सूची",
856 "subaddresses": "उप पते",
res/values/strings_hr.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Potvrđen",
182 "congratulations": "Čestitamo!",
183 "connect_an_existing_yat": "Povežite postojeći Yat",
184 + "connect_hw_info_step_1": "Provjerite je li vaš uređaj uključen.",
185 + "connect_hw_info_step_2": "Uključite Bluetooth za oba uređaja i uparite ih s telefona ili spojite svoje uređaje zajedno pomoću USB kabela.",
186 + "connect_hw_info_step_3": "Otključajte svoj uređaj i idite do željene kripto aplikacije.",
187 + "connect_hw_info_step_4": "Odaberite svoj uređaj u novčanici za torte i nastavite s postavljanjem.",
188 "connect_yats": "Povežite Yats",
189 "connect_your_hardware_wallet": "Spojite svoj hardverski novčanik pomoću Bluetooth -a ili USB -a",
190 "connect_your_hardware_wallet_ios": "Spojite svoj hardverski novčanik pomoću Bluetooth -a",
@@ -240,6 +244,7 @@
244 "descending": "Silazni",
245 "description": "Opis",
246 "destination_tag": "Odredišna oznaka:",
247 + "device_is_signing": "Uređaj se potpisuje",
248 "dfx_option_description": "Kupite kriptovalute s Eur & CHF. Za maloprodajne i korporativne kupce u Europi",
249 "didnt_get_code": "Ne dobivate kod?",
250 "digit_pin": "-znamenkasti PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Sakrij pojedinosti",
400 "high_contrast_theme": "Tema visokog kontrasta",
401 "home_screen_settings": "Postavke početnog zaslona",
402 + "how_to_connect": "Kako se povezati",
403 "how_to_use": "Kako koristiti",
404 "how_to_use_card": "Kako koristiti ovu karticu",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Spend key (privatni)",
849 "spend_key_public": "Spend key (javni)",
850 "status": "Status: ",
851 + "step": "Korak",
852 "string_default": "Zadano",
853 "subaddress_title": "Lista podadresa",
854 "subaddresses": "Podadrese",
res/values/strings_hy.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Հաստատված",
182 "congratulations": "Շնորհավորանք!",
183 "connect_an_existing_yat": "Միացրեք գոյություն ունեցող Yat-ը",
184 + "connect_hw_info_step_1": "Համոզվեք, որ ձեր սարքը միացված է:",
185 + "connect_hw_info_step_2": "Միացրեք Bluetooth- ը երկու սարքերի համար, եւ զույգացրեք հեռախոսից կամ միացրեք ձեր սարքերը միասին `օգտագործելով USB մալուխ:",
186 + "connect_hw_info_step_3": "Բացեք ձեր սարքը եւ նավարկեք ցանկալի ծպտյալ հավելվածին:",
187 + "connect_hw_info_step_4": "Ընտրեք ձեր սարքը տորթի դրամապանակում եւ շարունակեք կարգաբերումը:",
188 "connect_yats": "Միացրեք Yat-ները",
189 "connect_your_hardware_wallet": "Միացրեք ձեր ապարատային դրամապանակը Bluetooth-ի կամ USB-ի միջոցով",
190 "connect_your_hardware_wallet_ios": "Միացրեք ձեր ապարատային դրամապանակը Bluetooth-ի միջոցով",
@@ -240,6 +244,7 @@
244 "descending": "Նվազող",
245 "description": "Նկարագրություն",
246 "destination_tag": "Նպատակակետի պիտակ:",
247 + "device_is_signing": "Սարքը ստորագրում է",
248 "dfx_option_description": "Գնեք կրիպտոարժույթ EUR և CHF: Կորպորատիվ և մանրածախ հաճախորդների համար Եվրոպայում",
249 "didnt_get_code": "Չեք ստացել կոդը?",
250 "digit_pin": "-նիշ ՊԻՆ",
@@ -394,6 +399,7 @@
399 "hide_details": "Թաքցնել մանրամասները",
400 "high_contrast_theme": "Բարձր հակադրության տեսք",
401 "home_screen_settings": "Գլխավոր էկրանի կարգավորումներ",
402 + "how_to_connect": "Ինչպես միացնել",
403 "how_to_use": "Ինչպես օգտագործել",
404 "how_to_use_card": "Ինչպես օգտագործել այս քարտը",
405 "id": "ID: ",
@@ -840,6 +846,7 @@
846 "spend_key_private": "Վճարման բանալի (գախտնի)",
847 "spend_key_public": "Վճարման բանալի (հանրային)",
848 "status": "Կարգավիճակ՝ ",
849 + "step": "Քայլ",
850 "string_default": "Լռելայն",
851 "subaddress_title": "Ենթահասցեների ցանկ",
852 "subaddresses": "Ենթահասցեներ",
res/values/strings_id.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Dikonfirmasi",
182 "congratulations": "Selamat!",
183 "connect_an_existing_yat": "Hubungkan Yat yang ada",
184 + "connect_hw_info_step_1": "Pastikan perangkat Anda didukung.",
185 + "connect_hw_info_step_2": "Nyalakan Bluetooth untuk kedua perangkat dan pasangkan dari telepon, atau hubungkan perangkat Anda bersama -sama menggunakan kabel USB.",
186 + "connect_hw_info_step_3": "Buka kunci perangkat Anda dan arahkan ke aplikasi crypto yang diinginkan.",
187 + "connect_hw_info_step_4": "Pilih perangkat Anda di dompet kue dan lanjutkan dengan pengaturan.",
188 "connect_yats": "Hubungkan Yats",
189 "connect_your_hardware_wallet": "Hubungkan dompet perangkat keras Anda menggunakan Bluetooth atau USB",
190 "connect_your_hardware_wallet_ios": "Hubungkan dompet perangkat keras Anda menggunakan Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Menurun",
245 "description": "Keterangan",
246 "destination_tag": "Tag tujuan:",
247 + "device_is_signing": "Perangkat sedang menandatangani",
248 "dfx_option_description": "Beli crypto dengan EUR & CHF. Untuk pelanggan ritel dan perusahaan di Eropa",
249 "didnt_get_code": "Tidak mendapatkan kode?",
250 "digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Sembunyikan Rincian",
400 "high_contrast_theme": "Tema Kontras Tinggi",
401 "home_screen_settings": "Pengaturan layar awal",
402 + "how_to_connect": "Cara terhubung",
403 "how_to_use": "Cara Penggunaan",
404 "how_to_use_card": "Bagaimana menggunakan kartu ini",
405 "id": "ID: ",
@@ -845,6 +851,7 @@
851 "spend_key_private": "Kunci pengeluaran (privat)",
852 "spend_key_public": "Kunci pengeluaran (publik)",
853 "status": "Status: ",
854 + "step": "Melangkah",
855 "string_default": "Bawaan",
856 "subaddress_title": "Daftar sub-alamat",
857 "subaddresses": "Sub-alamat",
res/values/strings_it.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Confermato",
182 "congratulations": "Congratulazioni!",
183 "connect_an_existing_yat": "Collegare un Yat esistente",
184 + "connect_hw_info_step_1": "Assicurati che il tuo dispositivo sia acceso.",
185 + "connect_hw_info_step_2": "Accendi Bluetooth per entrambi i dispositivi e abbinali dal telefono o collega i dispositivi utilizzando un cavo USB.",
186 + "connect_hw_info_step_3": "Sblocca il dispositivo e naviga nell'app crittografica desiderata.",
187 + "connect_hw_info_step_4": "Seleziona il tuo dispositivo nel portafoglio Cake e continua con l'installazione.",
188 "connect_yats": "Connetti Yats",
189 "connect_your_hardware_wallet": "Collega il tuo portafoglio hardware tramite Bluetooth o USB",
190 "connect_your_hardware_wallet_ios": "Collega il tuo portafoglio hardware tramite Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Discendente",
245 "description": "Descrizione",
246 "destination_tag": "Tag destinazione:",
247 + "device_is_signing": "Il dispositivo sta firmando",
248 "dfx_option_description": "Acquista Crypto con EUR & CHF. Per i clienti al dettaglio e aziendali in Europa",
249 "didnt_get_code": "Non hai ricevuto il codice?",
250 "digit_pin": "-cifre PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Nascondi dettagli",
400 "high_contrast_theme": "Tema ad alto contrasto",
401 "home_screen_settings": "Impostazioni della schermata iniziale",
402 + "how_to_connect": "Come connettersi",
403 "how_to_use": "Come usare",
404 "how_to_use_card": "Come usare questa carta",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Chiave di spesa (privata)",
850 "spend_key_public": "Chiave di spesa (pubblica)",
851 "status": "Stato: ",
852 + "step": "Fare un passo",
853 "string_default": "Predefinito",
854 "subaddress_title": "Lista sottoindirizzi",
855 "subaddresses": "Sottoindirizzi",
res/values/strings_ja.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "確認済み",
182 "congratulations": "おめでとうございます!",
183 "connect_an_existing_yat": "既存のYatを接続します",
184 + "connect_hw_info_step_1": "デバイスが電源を入れていることを確認してください。",
185 + "connect_hw_info_step_2": "両方のデバイスのBluetoothをオンにして電話からペアリングするか、USBケーブルを使用してデバイスを一緒に接続します。",
186 + "connect_hw_info_step_3": "デバイスのロックを解除し、目的のCryptoアプリに移動します。",
187 + "connect_hw_info_step_4": "ケーキウォレットでデバイスを選択し、セットアップを続行します。",
188 "connect_yats": "Yatsを接続します",
189 "connect_your_hardware_wallet": "BluetoothまたはUSBを使用して、ハードウェアウォレットを接続します",
190 "connect_your_hardware_wallet_ios": "Bluetoothを使用してハードウェアウォレットを接続します",
@@ -240,6 +244,7 @@
244 "descending": "下降",
245 "description": "説明",
246 "destination_tag": "宛先タグ:",
247 + "device_is_signing": "デバイスが署名しています",
248 "dfx_option_description": "EUR&CHFで暗号を購入します。ヨーロッパの小売および企業の顧客向け",
249 "didnt_get_code": "コードを取得しませんか?",
250 "digit_pin": "桁ピン",
@@ -395,6 +400,7 @@
400 "hide_details": "詳細を非表示",
401 "high_contrast_theme": "ハイコントラストテーマ",
402 "home_screen_settings": "ホーム画面の設定",
403 + "how_to_connect": "接続方法",
404 "how_to_use": "使い方",
405 "how_to_use_card": "このカードの使用方法",
406 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "キーを使う (プライベート)",
850 "spend_key_public": "キーを使う (パブリック)",
851 "status": "状態: ",
852 + "step": "ステップ",
853 "string_default": "デフォルト",
854 "subaddress_title": "サブアドレス一覧",
855 "subaddresses": "サブアドレス",
res/values/strings_ko.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "확정됨",
182 "congratulations": "축하합니다!",
183 "connect_an_existing_yat": "기존 Yat 연결",
184 + "connect_hw_info_step_1": "장치의 전원이 켜져 있는지 확인하십시오.",
185 + "connect_hw_info_step_2": "두 장치 모두에 Bluetooth를 켜고 전화에서 페어링하거나 USB 케이블을 사용하여 장치를 함께 연결하십시오.",
186 + "connect_hw_info_step_3": "장치를 잠금 해제하고 원하는 암호화 앱으로 이동하십시오.",
187 + "connect_hw_info_step_4": "케이크 지갑에서 장치를 선택하고 설정을 계속하십시오.",
188 "connect_yats": "Yat 연결",
189 "connect_your_hardware_wallet": "블루투스 또는 USB를 사용하여 하드웨어 지갑 연결",
190 "connect_your_hardware_wallet_ios": "블루투스를 사용하여 하드웨어 지갑 연결",
@@ -240,6 +244,7 @@
244 "descending": "내림차순",
245 "description": "설명",
246 "destination_tag": "목적지 태그:",
247 + "device_is_signing": "장치가 서명 중입니다",
248 "dfx_option_description": "EUR 및 CHF로 암호화폐 구매. 유럽의 개인 및 기업 고객 대상",
249 "didnt_get_code": "코드를 받지 못했나요?",
250 "digit_pin": "자리 PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "세부 정보 숨기기",
400 "high_contrast_theme": "고대비 테마",
401 "home_screen_settings": "홈 화면 설정",
402 + "how_to_connect": "연결 방법",
403 "how_to_use": "사용 방법",
404 "how_to_use_card": "이 카드 사용 방법",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "지출 키 (개인)",
850 "spend_key_public": "지출 키 (공개)",
851 "status": "상태: ",
852 + "step": "단계",
853 "string_default": "기본값",
854 "subaddress_title": "하위 주소 목록",
855 "subaddresses": "하위 주소",
res/values/strings_my.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "အတည်ပြုသည်",
182 "congratulations": "ဂုဏ်ယူပါသည်။",
183 "connect_an_existing_yat": "ရှိပြီးသား Yat ကို ချိတ်ဆက်ပါ။",
184 + "connect_hw_info_step_1": "သင်၏ device ကိုသေချာအောင်လုပ်ပါ။",
185 + "connect_hw_info_step_2": "ကိရိယာနှစ်ခုလုံးအတွက် Bluetooth ကိုဖွင့ ်. ဖုန်းမှတွဲပါ, သို့မဟုတ်သင်၏ကိရိယာများကို USB ကြိုးဖြင့်ချိတ်ဆက်ပါ။",
186 + "connect_hw_info_step_3": "သင်၏ device ကိုသော့ဖွင့်ပြီးလိုချင်သော crypto app သို့သွားပါ။",
187 + "connect_hw_info_step_4": "Cake Wallet တွင်သင်၏ device ကိုရွေးချယ်ပြီး setup ကိုဆက်လုပ်ပါ။",
188 "connect_yats": "Yats ကိုချိတ်ဆက်ပါ။",
189 "connect_your_hardware_wallet": "သင်၏ hardware ပိုက်ဆံအိတ်ကို Bluetooth သို့မဟုတ် USB ကို သုံး. ချိတ်ဆက်ပါ",
190 "connect_your_hardware_wallet_ios": "သင်၏ hardware ပိုက်ဆံအိတ်ကို Bluetooth ကို အသုံးပြု. ချိတ်ဆက်ပါ",
@@ -240,6 +244,7 @@
244 "descending": "ဆင်း",
245 "description": "ဖော်ပြချက်",
246 "destination_tag": "ခရီးဆုံးအမှတ်-",
247 + "device_is_signing": "ကိရိယာလက်မှတ်ထိုးနေသည်",
248 "dfx_option_description": "Crypto ကို EUR & CHF ဖြင့် 0 ယ်ပါ။ လက်လီရောင်းဝယ်မှုနှင့်ဥရောပရှိကော်ပိုရိတ်ဖောက်သည်များအတွက်",
249 "didnt_get_code": "ကုဒ်ကို မရဘူးလား?",
250 "digit_pin": "-ဂဏန်း PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "အသေးစိတ်ကို ဝှက်ပါ။",
400 "high_contrast_theme": "အလင်းအမှောင် မြင့်မားသော အပြင်အဆင်",
401 "home_screen_settings": "ပင်မစခရင် ဆက်တင်များ",
402 + "how_to_connect": "ဘယ်လိုချိတ်ဆက်ရမလဲ",
403 "how_to_use": "အသုံးပြုနည်း",
404 "how_to_use_card": "ဒီကတ်ကို ဘယ်လိုသုံးမလဲ။",
405 "id": "ID:",
@@ -842,6 +848,7 @@
848 "spend_key_private": "သော့သုံးရန် (သီးသန့်)",
849 "spend_key_public": "သုံးစွဲရန်သော့ (အများပြည်သူ)",
850 "status": "အခြေအနေ:",
851 + "step": "လှမ်း",
852 "string_default": "ပျက်ကွက်ခြင်း",
853 "subaddress_title": "လိပ်စာစာရင်း",
854 "subaddresses": "လိပ်စာများ",
res/values/strings_nl.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Bevestigd",
182 "congratulations": "gefeliciteerd!",
183 "connect_an_existing_yat": "Verbind een bestaande Yat",
184 + "connect_hw_info_step_1": "Zorg ervoor dat uw apparaat is ingeschakeld.",
185 + "connect_hw_info_step_2": "Zet Bluetooth aan voor beide apparaten en combineer ze van de telefoon, of sluit uw apparaten samen met een USB -kabel.",
186 + "connect_hw_info_step_3": "Ontgrendel uw apparaat en navigeer naar de gewenste crypto -app.",
187 + "connect_hw_info_step_4": "Selecteer uw apparaat in cake -portemonnee en ga verder met de opstelling.",
188 "connect_yats": "Verbind Yats",
189 "connect_your_hardware_wallet": "Sluit uw hardware -portemonnee aan met Bluetooth of USB",
190 "connect_your_hardware_wallet_ios": "Sluit uw hardware -portemonnee aan met Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Aflopend",
245 "description": "Beschrijving",
246 "destination_tag": "Bestemmingstag:",
247 + "device_is_signing": "Apparaat ondertekent",
248 "dfx_option_description": "Koop crypto met EUR & CHF. Voor retail- en zakelijke klanten in Europa",
249 "didnt_get_code": "Geen code?",
250 "digit_pin": "-cijferige PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Details verbergen",
400 "high_contrast_theme": "Thema met hoog contrast",
401 "home_screen_settings": "Instellingen voor het startscherm",
402 + "how_to_connect": "Hoe verbinding te maken",
403 "how_to_use": "Hoe te gebruiken",
404 "how_to_use_card": "Hoe deze kaart te gebruiken",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Sleutel uitgeven (privaat)",
849 "spend_key_public": "Sleutel uitgeven (openbaar)",
850 "status": "Staat: ",
851 + "step": "Stap",
852 "string_default": "Standaard",
853 "subaddress_title": "Subadreslijst",
854 "subaddresses": "Subadressen",
res/values/strings_pl.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Potwierdzony",
182 "congratulations": "gratulacje!",
183 "connect_an_existing_yat": "Podłącz istniejący Yat",
184 + "connect_hw_info_step_1": "Upewnij się, że urządzenie jest włączone.",
185 + "connect_hw_info_step_2": "Włącz Bluetooth dla obu urządzeń i sparuj je z telefonu lub podłącz urządzenia razem za pomocą kabla USB.",
186 + "connect_hw_info_step_3": "Odblokuj urządzenie i przejdź do żądanej aplikacji Crypto.",
187 + "connect_hw_info_step_4": "Wybierz urządzenie w portfelu ciasta i kontynuuj konfigurację.",
188 "connect_yats": "Połącz Yats",
189 "connect_your_hardware_wallet": "Podłącz portfel sprzętowy za pomocą Bluetooth lub USB",
190 "connect_your_hardware_wallet_ios": "Podłącz portfel sprzętowy za pomocą Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Malejąco",
245 "description": "Opis",
246 "destination_tag": "Tag docelowy:",
247 + "device_is_signing": "Urządzenie podpisuje",
248 "dfx_option_description": "Kup krypto za EUR & CHF. Dla klientów prywatnych i korporacyjnych w Europie",
249 "didnt_get_code": "Nie dostałeś kodu?",
250 "digit_pin": "-znakowy PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Ukryj szczegóły",
400 "high_contrast_theme": "Motyw o wysokim kontraście",
401 "home_screen_settings": "Ustawienia ekranu głównego",
402 + "how_to_connect": "Jak połączyć się",
403 "how_to_use": "Jak używać",
404 "how_to_use_card": "Jak korzystać z tej karty?",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Klucz prywatny",
849 "spend_key_public": "Klucz publiczny",
850 "status": "Status: ",
851 + "step": "Krok",
852 "string_default": "Domyślny",
853 "subaddress_title": "Lista podadresów",
854 "subaddresses": "Podadresy",
res/values/strings_pt.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Confirmado",
182 "congratulations": "Parabéns!",
183 "connect_an_existing_yat": "Conecte um Yat existente",
184 + "connect_hw_info_step_1": "Verifique se o seu dispositivo está ligado.",
185 + "connect_hw_info_step_2": "Ligue o Bluetooth para os dois dispositivos e emparelhe -os do telefone ou conecte seus dispositivos usando um cabo USB.",
186 + "connect_hw_info_step_3": "Desbloqueie seu dispositivo e navegue até o aplicativo Crypto desejado.",
187 + "connect_hw_info_step_4": "Selecione seu dispositivo na carteira de bolo e continue com a configuração.",
188 "connect_yats": "Connect Yats",
189 "connect_your_hardware_wallet": "Conecte sua carteira de hardware usando Bluetooth ou USB",
190 "connect_your_hardware_wallet_ios": "Conecte sua carteira de hardware usando o Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "descendente",
245 "description": "Descrição",
246 "destination_tag": "Tag de destino:",
247 + "device_is_signing": "O dispositivo está assinando",
248 "dfx_option_description": "Compre criptografia com EUR & CHF. Para clientes de varejo e corporativo na Europa",
249 "didnt_get_code": "Não recebeu o código?",
250 "digit_pin": "dígitos",
@@ -394,6 +399,7 @@
399 "hide_details": "Ocultar detalhes",
400 "high_contrast_theme": "Tema de alto contraste",
401 "home_screen_settings": "Configurações da tela inicial",
402 + "how_to_connect": "Como conectar",
403 "how_to_use": "Como usar",
404 "how_to_use_card": "Como usar este cartão",
405 "id": "ID: ",
@@ -844,6 +850,7 @@
850 "spend_key_private": "Chave de gastos (privada)",
851 "spend_key_public": "Chave de gastos (pública)",
852 "status": "Status: ",
853 + "step": "Etapa",
854 "string_default": "Padrão",
855 "subaddress_title": "Sub-endereços",
856 "subaddresses": "Sub-endereços",
res/values/strings_ru.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Подтвержденный",
182 "congratulations": "Поздравляем!",
183 "connect_an_existing_yat": "Подключить существующий Yat",
184 + "connect_hw_info_step_1": "Убедитесь, что ваше устройство включено.",
185 + "connect_hw_info_step_2": "Включите Bluetooth для обоих устройств и соедините их с телефона или соедините свои устройства вместе с помощью USB -кабеля.",
186 + "connect_hw_info_step_3": "Разблокируйте свое устройство и перейдите к желаемому крипто -приложению.",
187 + "connect_hw_info_step_4": "Выберите свое устройство в кошельке для торта и продолжайте с настройкой.",
188 "connect_yats": "Подключить Yats",
189 "connect_your_hardware_wallet": "Подключите свой аппаратный кошелек с помощью Bluetooth или USB",
190 "connect_your_hardware_wallet_ios": "Подключите свой аппаратный кошелек с помощью Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Нисходящий",
245 "description": "Описание",
246 "destination_tag": "Целевой тег:",
247 + "device_is_signing": "Устройство подписывает",
248 "dfx_option_description": "Купить крипто с Eur & CHF. Для розничных и корпоративных клиентов в Европе",
249 "didnt_get_code": "Не получить код?",
250 "digit_pin": "-значный PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Скрыть детали",
400 "high_contrast_theme": "Высококонтрастная тема",
401 "home_screen_settings": "Настройки главного экрана",
402 + "how_to_connect": "Как подключиться",
403 "how_to_use": "Как использовать",
404 "how_to_use_card": "Как использовать эту карту",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Приватный ключ траты",
850 "spend_key_public": "Публичный ключ траты",
851 "status": "Статус: ",
852 + "step": "Шаг",
853 "string_default": "По умолчанию",
854 "subaddress_title": "Список субадресов",
855 "subaddresses": "Субадреса",
res/values/strings_th.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "ซึ่งยืนยันแล้ว",
182 "congratulations": "ขอแสดงความยินดี!",
183 "connect_an_existing_yat": "เชื่อมต่อ Yat ที่มีอยู่",
184 + "connect_hw_info_step_1": "ตรวจสอบให้แน่ใจว่าอุปกรณ์ของคุณเปิดใช้งาน",
185 + "connect_hw_info_step_2": "เปิดบลูทู ธ สำหรับอุปกรณ์ทั้งสองและจับคู่จากโทรศัพท์หรือเชื่อมต่ออุปกรณ์ของคุณเข้าด้วยกันโดยใช้สายเคเบิล USB",
186 + "connect_hw_info_step_3": "ปลดล็อกอุปกรณ์ของคุณและนำทางไปยังแอพ crypto ที่ต้องการ",
187 + "connect_hw_info_step_4": "เลือกอุปกรณ์ของคุณในกระเป๋าเงินเค้กและดำเนินการติดตั้งต่อไป",
188 "connect_yats": "เชื่อมต่อ Yats",
189 "connect_your_hardware_wallet": "เชื่อมต่อกระเป๋าเงินฮาร์ดแวร์ของคุณโดยใช้บลูทู ธ หรือ USB",
190 "connect_your_hardware_wallet_ios": "เชื่อมต่อกระเป๋าเงินฮาร์ดแวร์ของคุณโดยใช้บลูทู ธ",
@@ -240,6 +244,7 @@
244 "descending": "ลงมา",
245 "description": "คำอธิบาย",
246 "destination_tag": "แท็กปลายทาง:",
247 + "device_is_signing": "อุปกรณ์กำลังลงนาม",
248 "dfx_option_description": "ซื้อ crypto ด้วย Eur & CHF สำหรับลูกค้ารายย่อยและลูกค้าในยุโรป",
249 "didnt_get_code": "ไม่ได้รับรหัส?",
250 "digit_pin": "-หลัก PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "ซ่อนรายละเอียด",
400 "high_contrast_theme": "ธีมความคมชัดสูง",
401 "home_screen_settings": "การตั้งค่าหน้าจอหลัก",
402 + "how_to_connect": "วิธีการเชื่อมต่อ",
403 "how_to_use": "วิธีใช้",
404 "how_to_use_card": "วิธีใช้บัตรนี้",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "คีย์จ่าย (ส่วนตัว)",
849 "spend_key_public": "คีย์จ่าย (สาธารณะ)",
850 "status": "สถานะ: ",
851 + "step": "ขั้นตอน",
852 "string_default": "ค่าเริ่มต้น",
853 "subaddress_title": "รายการที่อยู่ย่อย",
854 "subaddresses": "ที่อยู่ย่อย",
res/values/strings_tl.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Nakumpirma",
182 "congratulations": "Congratulations!",
183 "connect_an_existing_yat": "Ikonekta ang isang umiiral na Yat",
184 + "connect_hw_info_step_1": "Siguraduhin na ang iyong aparato ay pinapagana.",
185 + "connect_hw_info_step_2": "Lumiko ang Bluetooth para sa parehong mga aparato at ipares ang mga ito mula sa telepono, o ikonekta ang iyong mga aparato nang magkasama gamit ang isang USB cable.",
186 + "connect_hw_info_step_3": "I -unlock ang iyong aparato at mag -navigate sa nais na crypto app.",
187 + "connect_hw_info_step_4": "Piliin ang iyong aparato sa cake wallet at magpatuloy sa pag -setup.",
188 "connect_yats": "Ikonekta sa Yats",
189 "connect_your_hardware_wallet": "Ikonekta ang iyong hardware wallet gamit ang Bluetooth o USB",
190 "connect_your_hardware_wallet_ios": "Ikonekta ang iyong wallet gamit ang Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Pababang",
245 "description": "Paglalarawan",
246 "destination_tag": "Tag ng patutunguhan:",
247 + "device_is_signing": "Nag -sign ang aparato",
248 "dfx_option_description": "Bumili ng crypto kasama ang EUR & CHF. Para sa mga retail customer at corporate customer sa Europe",
249 "didnt_get_code": "Hindi nakuha ang code?",
250 "digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Itago ang mga detalye",
400 "high_contrast_theme": "High Contrast Theme",
401 "home_screen_settings": "Mga setting ng home screen",
402 + "how_to_connect": "Paano kumonekta",
403 "how_to_use": "Paano gamitin",
404 "how_to_use_card": "Paano gamitin ang card na ito",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Spend key (private)",
849 "spend_key_public": "Spend key (public)",
850 "status": "Katayuan: ",
851 + "step": "Hakbang",
852 "string_default": "Default",
853 "subaddress_title": "Listahan ng Subaddress",
854 "subaddresses": "Mga Subaddress",
res/values/strings_tr.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Onaylanmış",
182 "congratulations": "Tebrikler!",
183 "connect_an_existing_yat": "Mevcut bir Yat'ı bağla",
184 + "connect_hw_info_step_1": "Cihazınızın açıldığından emin olun.",
185 + "connect_hw_info_step_2": "Bluetooth'u her iki cihaz için açın ve telefondan eşleştirin veya bir USB kablosu kullanarak cihazlarınızı birbirine bağlayın.",
186 + "connect_hw_info_step_3": "Cihazınızın kilidini açın ve istenen kripto uygulamasına gidin.",
187 + "connect_hw_info_step_4": "Cihazınızı kek cüzdanında seçin ve kuruluma devam edin.",
188 "connect_yats": "Yat'lara bağlan",
189 "connect_your_hardware_wallet": "Bluetooth veya USB kullanarak donanım cüzdanınızı bağlayın",
190 "connect_your_hardware_wallet_ios": "Bluetooth kullanarak donanım cüzdanınızı bağlayın",
@@ -240,6 +244,7 @@
244 "descending": "Azalan",
245 "description": "Tanım",
246 "destination_tag": "Hedef Etiketi:",
247 + "device_is_signing": "Cihaz imzalıyor",
248 "dfx_option_description": "Eur & chf ile kripto satın alın. Avrupa'daki perakende ve kurumsal müşteriler için",
249 "didnt_get_code": "Kod gelmedi mi?",
250 "digit_pin": " haneli PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Detayları Gizle",
400 "high_contrast_theme": "Yüksek Kontrastlı Tema",
401 "home_screen_settings": "Ana ekran ayarları",
402 + "how_to_connect": "Nasıl bağlanır",
403 "how_to_use": "Nasıl kullanılır",
404 "how_to_use_card": "Bu kart nasıl kullanılır",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Harcama anahtarı (özel)",
849 "spend_key_public": "Harcama anahtarı (genel)",
850 "status": "Durum: ",
851 + "step": "Adım",
852 "string_default": "Varsayılan",
853 "subaddress_title": "Alt adres listesi",
854 "subaddresses": "Alt adresler",
res/values/strings_uk.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Підтверджений",
182 "congratulations": "Вітаємо!",
183 "connect_an_existing_yat": "Підключити існуючий Yat",
184 + "connect_hw_info_step_1": "Переконайтесь, що ваш пристрій працює.",
185 + "connect_hw_info_step_2": "Увімкніть Bluetooth для обох пристроїв і з’єднайте їх з телефону або підключіть свої пристрої разом за допомогою USB -кабелю.",
186 + "connect_hw_info_step_3": "Розблокуйте свій пристрій і перейдіть до потрібного програми Crypto.",
187 + "connect_hw_info_step_4": "Виберіть свій пристрій у гаманці тортів і продовжуйте налаштування.",
188 "connect_yats": "Підключіть Yats",
189 "connect_your_hardware_wallet": "Підключіть апаратний гаманець за допомогою Bluetooth або USB",
190 "connect_your_hardware_wallet_ios": "Підключіть апаратний гаманець за допомогою Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Низхідний",
245 "description": "опис",
246 "destination_tag": "Тег призначення:",
247 + "device_is_signing": "Пристрій підписується",
248 "dfx_option_description": "Купуйте криптовалюту з EUR & CHF. Для роздрібних та корпоративних клієнтів у Європі",
249 "didnt_get_code": "Не отримали код?",
250 "digit_pin": "-значний PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "Приховати деталі",
400 "high_contrast_theme": "Тема високої контрастності",
401 "home_screen_settings": "Налаштування головного екрана",
402 + "how_to_connect": "Як підключитися",
403 "how_to_use": "Як використовувати",
404 "how_to_use_card": "Як використовувати цю картку",
405 "id": "ID: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Приватний ключ витрати",
850 "spend_key_public": "Публічний ключ витрати",
851 "status": "Статус: ",
852 + "step": "Крок",
853 "string_default": "За замовчуванням",
854 "subaddress_title": "Список Субадрес",
855 "subaddresses": "Субадреси",
res/values/strings_ur.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "تصدیق",
182 "congratulations": "مبارک ہو!",
183 "connect_an_existing_yat": "ایک موجودہ Yat کو جوڑیں۔",
184 + "connect_hw_info_step_1": "اس بات کو یقینی بنائیں کہ آپ کا آلہ چل رہا ہے۔",
185 + "connect_hw_info_step_2": "دونوں آلات کے لئے بلوٹوتھ کو آن کریں اور فون سے ان کو جوڑیں ، یا USB کیبل کا استعمال کرکے اپنے آلات کو ایک ساتھ جوڑیں۔",
186 + "connect_hw_info_step_3": "اپنے آلے کو انلاک کریں اور مطلوبہ کریپٹو ایپ پر جائیں۔",
187 + "connect_hw_info_step_4": "اپنے آلے کو کیک پرس میں منتخب کریں اور سیٹ اپ کے ساتھ جاری رکھیں۔",
188 "connect_yats": "Yats کو جوڑیں۔",
189 "connect_your_hardware_wallet": "بلوٹوتھ یا USB کا استعمال کرتے ہوئے اپنے ہارڈ ویئر پرس کو مربوط کریں",
190 "connect_your_hardware_wallet_ios": "بلوٹوتھ کا استعمال کرتے ہوئے اپنے ہارڈ ویئر پرس کو جوڑیں",
@@ -240,6 +244,7 @@
244 "descending": "اترتے ہوئے",
245 "description": "ﻞﯿﺼﻔﺗ",
246 "destination_tag": "منزل کا ٹیگ:",
247 + "device_is_signing": "ڈیوائس پر دستخط کر رہے ہیں",
248 "dfx_option_description": "یورو اور سی ایچ ایف کے ساتھ کرپٹو خریدیں۔ یورپ میں خوردہ اور کارپوریٹ صارفین کے لئے",
249 "didnt_get_code": "کوڈ نہیں ملتا؟",
250 "digit_pin": "-ہندسوں کا پن",
@@ -394,6 +399,7 @@
399 "hide_details": "تفصیلات چھپائیں۔",
400 "high_contrast_theme": "ہائی کنٹراسٹ تھیم",
401 "home_screen_settings": "ہوم اسکرین کی ترتیبات",
402 + "how_to_connect": "کیسے مربوط ہوں",
403 "how_to_use": " ﮧﻘﯾﺮﻃ ﺎﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ",
404 "how_to_use_card": "اس کارڈ کو استعمال کرنے کا طریقہ",
405 "id": "ID:",
@@ -844,6 +850,7 @@
850 "spend_key_private": "خرچ کی کلید (نجی)",
851 "spend_key_public": "خرچ کی کلید (عوامی)",
852 "status": "حالت:",
853 + "step": "مرحلہ",
854 "string_default": "پہلے سے طے شدہ",
855 "subaddress_title": "ذیلی ایڈریس کی فہرست",
856 "subaddresses": "ذیلی پتے",
res/values/strings_vi.arb
+7
@@ -180,6 +180,10 @@
180 "confirmed_tx": "Đã xác nhận",
181 "congratulations": "Chúc mừng!",
182 "connect_an_existing_yat": "Kết nối Yat hiện có",
183 + "connect_hw_info_step_1": "Hãy chắc chắn rằng thiết bị của bạn được bật nguồn.",
184 + "connect_hw_info_step_2": "Bật Bluetooth cho cả hai thiết bị và ghép chúng từ điện thoại hoặc kết nối các thiết bị của bạn với nhau bằng cáp USB.",
185 + "connect_hw_info_step_3": "Mở khóa thiết bị của bạn và điều hướng đến ứng dụng tiền điện tử mong muốn.",
186 + "connect_hw_info_step_4": "Chọn thiết bị của bạn trong ví bánh và tiếp tục với thiết lập.",
187 "connect_yats": "Kết nối Yats",
188 "connect_your_hardware_wallet": "Kết nối ví phần cứng của bạn bằng Bluetooth hoặc USB",
189 "connect_your_hardware_wallet_ios": "Kết nối ví phần cứng của bạn bằng Bluetooth",
@@ -239,6 +243,7 @@
243 "descending": "Giảm dần",
244 "description": "Mô tả",
245 "destination_tag": "Thẻ đích:",
246 + "device_is_signing": "Thiết bị đang ký",
247 "dfx_option_description": "Mua tiền điện tử bằng EUR & CHF. Dành cho khách hàng bán lẻ và doanh nghiệp tại Châu Âu",
248 "didnt_get_code": "Không nhận được mã?",
249 "digit_pin": "Mã PIN - số",
@@ -393,6 +398,7 @@
398 "hide_details": "Ẩn chi tiết",
399 "high_contrast_theme": "Chủ đề độ tương phản cao",
400 "home_screen_settings": "Cài đặt màn hình chính",
401 + "how_to_connect": "Cách kết nối",
402 "how_to_use": "Cách sử dụng",
403 "how_to_use_card": "Cách sử dụng thẻ này",
404 "id": "ID: ",
@@ -839,6 +845,7 @@
845 "spend_key_private": "Khóa chi tiêu (riêng tư)",
846 "spend_key_public": "Khóa chi tiêu (công khai)",
847 "status": "Trạng thái: ",
848 + "step": "Bước chân",
849 "string_default": "Mặc định",
850 "subaddress_title": "Danh sách địa chỉ phụ",
851 "subaddresses": "Địa chỉ phụ",
res/values/strings_yo.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "Jẹrisi",
182 "congratulations": "Ẹ kúuṣẹ́ ooo!",
183 "connect_an_existing_yat": "So Yat wíwà",
184 + "connect_hw_info_step_1": "Rii daju pe ẹrọ rẹ ni agbara lori.",
185 + "connect_hw_info_step_2": "Tan Bluetooth lori fun awọn ẹrọ mejeeji ki o pa wọn kuro ninu foonu, tabi so awọn ẹrọ rẹ pọ pẹlu lilo okun USB.",
186 + "connect_hw_info_step_3": "Ṣii ẹrọ rẹ ki o lọ kiri si ohun elo Crypto ti o fẹ.",
187 + "connect_hw_info_step_4": "Yan ẹrọ rẹ ni apamọwọ akara oyinbo ki o tẹsiwaju pẹlu iṣeto.",
188 "connect_yats": "So àwọn Yat",
189 "connect_your_hardware_wallet": "So apamọwọ irinṣẹ rẹ nipa lilo Bluetooth tabi USB",
190 "connect_your_hardware_wallet_ios": "So apamọwọ ẹrọ rẹ ni lilo Bluetooth",
@@ -240,6 +244,7 @@
244 "descending": "Sọkalẹ",
245 "description": "Apejuwe",
246 "destination_tag": "Orúkọ tí ìbí tó a ránṣẹ́ sí:",
247 + "device_is_signing": "Ẹrọ n forukọsilẹ",
248 "dfx_option_description": "Ra Crypto pẹlu EUR & CHF. Fun soobu ati awọn alabara ile-iṣẹ ni Yuroopu",
249 "didnt_get_code": "Ko gba koodu?",
250 "digit_pin": "-díjíìtì òǹkà ìdánimọ̀ àdáni",
@@ -395,6 +400,7 @@
400 "hide_details": "Dé ìsọfúnni kékeré",
401 "high_contrast_theme": "Akori Iyatọ giga",
402 "home_screen_settings": "Awọn eto iboju ile",
403 + "how_to_connect": "Bi o ṣe le sopọ",
404 "how_to_use": "Bawo ni lati lo",
405 "how_to_use_card": "Báyìí ni wọ́n ṣe ń lo káàdì yìí.",
406 "id": "Àmì Ìdánimọ̀: ",
@@ -843,6 +849,7 @@
849 "spend_key_private": "Kọ́kọ́rọ́ sísan (àdáni)",
850 "spend_key_public": "Kọ́kọ́rọ́ sísan (kò àdáni)",
851 "status": "Tó ń ṣẹlẹ̀: ",
852 + "step": "Igbesẹ",
853 "string_default": "Aiyipada",
854 "subaddress_title": "Àkọsílẹ̀ ni nínú àwọn àdírẹ́sì tíwọn rẹ̀lẹ̀",
855 "subaddresses": "Àwọn àdírẹ́sì kékeré",
res/values/strings_zh.arb
+7
@@ -181,6 +181,10 @@
181 "confirmed_tx": "确认的",
182 "congratulations": "恭喜!",
183 "connect_an_existing_yat": "連接現有 Yat",
184 + "connect_hw_info_step_1": "确保您的设备已上电。",
185 + "connect_hw_info_step_2": "为这两个设备打开蓝牙,然后将它们配对,或使用USB电缆将设备连接在一起。",
186 + "connect_hw_info_step_3": "解锁设备并导航到所需的加密应用程序。",
187 + "connect_hw_info_step_4": "在蛋糕钱包中选择您的设备,然后继续设置。",
188 "connect_yats": "连接 Yats",
189 "connect_your_hardware_wallet": "使用蓝牙或USB连接硬件钱包",
190 "connect_your_hardware_wallet_ios": "使用蓝牙连接硬件钱包",
@@ -240,6 +244,7 @@
244 "descending": "下降",
245 "description": "描述",
246 "destination_tag": "目标Tag:",
247 + "device_is_signing": "设备正在签名",
248 "dfx_option_description": "用Eur&Chf购买加密货币。对于欧洲的零售和企业客户",
249 "didnt_get_code": "没有获取代码?",
250 "digit_pin": "位 PIN",
@@ -394,6 +399,7 @@
399 "hide_details": "隐藏细节",
400 "high_contrast_theme": "高对比度主题",
401 "home_screen_settings": "主屏幕设置",
402 + "how_to_connect": "如何连接",
403 "how_to_use": "如何使用",
404 "how_to_use_card": "如何使用这张卡",
405 "id": "ID: ",
@@ -842,6 +848,7 @@
848 "spend_key_private": "Spend 密钥 (私钥)",
849 "spend_key_public": "Spend 密钥 (公钥)",
850 "status": "状态: ",
851 + "step": "步",
852 "string_default": "默认",
853 "subaddress_title": "子地址列表",
854 "subaddresses": "子地址",
scripts/prepare_moneroc.sh
+1 -1
@@ -8,7 +8,7 @@ if [[ ! -d "monero_c/.git" ]];
8 then
9 git clone https://github.com/mrcyjanek/monero_c --branch master monero_c
10 cd monero_c
11 - git checkout b335585a7fb94b315eb52bd88f2da6d3489fa508
11 + git checkout a27fbcb24d91143715ed930a05aaa4d853fba1f2
12 git reset --hard
13 git submodule update --init --force --recursive
14 ./apply_patches.sh monero
tool/configure.dart
+1
@@ -434,6 +434,7 @@ WalletCredentials createMoneroNewWalletCredentials({required String name, requir
434 void setLedgerConnection(Object wallet, ledger.LedgerConnection connection);
435 void resetLedgerConnection();
436 void setGlobalLedgerConnection(ledger.LedgerConnection connection);
437 + String? getLastLedgerCommand();
438 Map<String, List<int>> debugCallLength();
439 }
440