CWA-198 | created front and back sides of wallet card

Oleksandr Sobol committed Apr 15, 2020 at 19:33 UTC fc8c632e21016b47e8a98eb331493f83b705f162
19 files changed +402 -119
assets/images/2.0x/right_arrow.png
Binary files /dev/null and b/assets/images/2.0x/right_arrow.png differ
assets/images/3.0x/right_arrow.png
Binary files /dev/null and b/assets/images/3.0x/right_arrow.png differ
assets/images/right_arrow.png
Binary files /dev/null and b/assets/images/right_arrow.png differ
lib/generated/i18n.dart
+23
@@ -40,6 +40,7 @@ class S implements WidgetsLocalizations {
40 String get available_balance => "Available Balance";
41 String get biometric_auth_reason => "Scan your fingerprint to authenticate";
42 String get cancel => "Cancel";
43 + String get card_address => "Address:";
44 String get change => "Change";
45 String get change_currency => "Change Currency";
46 String get change_exchange_provider => "Change Exchange Provider";
@@ -362,6 +363,8 @@ class $de extends S {
363 @override
364 String get wallet_list_create_new_wallet => "Neue Wallet erstellen";
365 @override
366 + String get card_address => "Adresse:";
367 + @override
368 String get seed_language_portuguese => "Portugiesisch";
369 @override
370 String get setup_pin => "PIN einrichten";
@@ -930,6 +933,8 @@ class $hi extends S {
933 @override
934 String get wallet_list_create_new_wallet => "नया बटुआ बनाएँ";
935 @override
936 + String get card_address => "पता:";
937 + @override
938 String get seed_language_portuguese => "पुर्तगाली";
939 @override
940 String get setup_pin => "पिन सेट करें";
@@ -1498,6 +1503,8 @@ class $ru extends S {
1503 @override
1504 String get wallet_list_create_new_wallet => "Создать новый кошелёк";
1505 @override
1506 + String get card_address => "Адрес:";
1507 + @override
1508 String get seed_language_portuguese => "Португальский";
1509 @override
1510 String get setup_pin => "Настроить PIN";
@@ -2066,6 +2073,8 @@ class $ko extends S {
2073 @override
2074 String get wallet_list_create_new_wallet => "새 월렛 만들기";
2075 @override
2076 + String get card_address => "주소:";
2077 + @override
2078 String get seed_language_portuguese => "포르투갈 인";
2079 @override
2080 String get setup_pin => "설정 PIN";
@@ -2634,6 +2643,8 @@ class $pt extends S {
2643 @override
2644 String get wallet_list_create_new_wallet => "Criar nova carteira";
2645 @override
2646 + String get card_address => "Endereço:";
2647 + @override
2648 String get seed_language_portuguese => "Português";
2649 @override
2650 String get setup_pin => "Configurar PIN";
@@ -3202,6 +3213,8 @@ class $uk extends S {
3213 @override
3214 String get wallet_list_create_new_wallet => "Створити новий гаманець";
3215 @override
3216 + String get card_address => "Адреса:";
3217 + @override
3218 String get seed_language_portuguese => "Португальська";
3219 @override
3220 String get setup_pin => "Встановити PIN";
@@ -3770,6 +3783,8 @@ class $ja extends S {
3783 @override
3784 String get wallet_list_create_new_wallet => "新しいウォレットを作成";
3785 @override
3786 + String get card_address => "住所:";
3787 + @override
3788 String get seed_language_portuguese => "ポルトガル語";
3789 @override
3790 String get setup_pin => "PINのセットアップ";
@@ -4342,6 +4357,8 @@ class $pl extends S {
4357 @override
4358 String get wallet_list_create_new_wallet => "Utwórz nowy portfel";
4359 @override
4360 + String get card_address => "Adres:";
4361 + @override
4362 String get seed_language_portuguese => "Portugalski";
4363 @override
4364 String get setup_pin => "Ustaw PIN";
@@ -4910,6 +4927,8 @@ class $es extends S {
4927 @override
4928 String get wallet_list_create_new_wallet => "Crear nueva billetera";
4929 @override
4930 + String get card_address => "Dirección:";
4931 + @override
4932 String get seed_language_portuguese => "Portugués";
4933 @override
4934 String get setup_pin => "PIN de configuración";
@@ -5478,6 +5497,8 @@ class $nl extends S {
5497 @override
5498 String get wallet_list_create_new_wallet => "Maak een nieuwe portemonnee";
5499 @override
5500 + String get card_address => "Adres:";
5501 + @override
5502 String get seed_language_portuguese => "Portugees";
5503 @override
5504 String get setup_pin => "PIN instellen";
@@ -6046,6 +6067,8 @@ class $zh extends S {
6067 @override
6068 String get wallet_list_create_new_wallet => "创建新钱包";
6069 @override
6070 + String get card_address => "地址:";
6071 + @override
6072 String get seed_language_portuguese => "葡萄牙語";
6073 @override
6074 String get setup_pin => "设定PIN码";
lib/palette.dart
+4
@@ -78,4 +78,8 @@ class PaletteDark {
78 static const Color walletCardBottomStartSync = Color.fromRGBO(70, 85, 133, 1.0);
79 static const Color walletCardTopEndSync = Color.fromRGBO(70, 85, 133, 1.0);
80 static const Color walletCardBottomEndSync = Color.fromRGBO(45, 56, 95, 1.0);
81 + static const Color walletCardText = Color.fromRGBO(140, 153, 201, 1.0);
82 + static const Color walletCardAddressField = Color.fromRGBO(51, 63, 104, 1.0);
83 + static const Color walletCardAddressText = Color.fromRGBO(183, 197, 242, 1.0);
84 + static const Color walletCardSubAddressField = Color.fromRGBO(63, 77, 122, 1.0);
85 }
\ No newline at end of file
lib/src/screens/dashboard/dashboard_page.dart
+2 -2
@@ -114,12 +114,12 @@ class DashboardPageBody extends StatefulWidget {
114 }
115
116 class DashboardPageBodyState extends State<DashboardPageBody> {
117 - final _connectionStatusObserverKey = GlobalKey();
117 + /*final _connectionStatusObserverKey = GlobalKey();
118 final _balanceObserverKey = GlobalKey();
119 final _balanceTitleObserverKey = GlobalKey();
120 final _syncingObserverKey = GlobalKey();
121 final _listObserverKey = GlobalKey();
122 - final _listKey = GlobalKey();
122 + final _listKey = GlobalKey();*/
123
124 @override
125 Widget build(BuildContext context) {
lib/src/screens/dashboard/widgets/wallet_card.dart
+337 -105
@@ -1,12 +1,18 @@
1 +import 'dart:async';
2 +import 'package:cake_wallet/src/domain/common/balance_display_mode.dart';
3 +import 'package:flutter/services.dart';
4 +import 'package:provider/provider.dart';
5 +import 'package:cake_wallet/src/stores/balance/balance_store.dart';
6 +import 'package:cake_wallet/src/stores/settings/settings_store.dart';
7 import 'package:cake_wallet/src/stores/sync/sync_store.dart';
8 import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
9 import 'package:flutter/cupertino.dart';
10 import 'package:flutter/material.dart';
11 import 'package:flutter_mobx/flutter_mobx.dart';
12 import 'package:cake_wallet/palette.dart';
7 -import 'package:provider/provider.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 import 'package:cake_wallet/src/domain/common/sync_status.dart';
15 +import 'package:cake_wallet/src/screens/receive/qr_image.dart';
16
17 class WalletCard extends StatefulWidget {
18 @override
@@ -15,18 +21,25 @@ class WalletCard extends StatefulWidget {
21
22 class WalletCardState extends State<WalletCard> {
23 final _syncingObserverKey = GlobalKey();
18 - final triangleButton = Image.asset('assets/images/triangle.png');
24 + final _balanceObserverKey = GlobalKey();
25 + final _addressObserverKey = GlobalKey();
26
27 final List<Color> colorsSync = [PaletteDark.walletCardTopEndSync, PaletteDark.walletCardBottomEndSync];
28 double cardWidth;
29 + double cardHeight;
30 double screenWidth;
31 double opacity;
32 + bool isDraw;
33 + bool isFrontSide;
34
35 @override
36 void initState() {
37 cardWidth = 0;
38 + cardHeight = 220;
39 screenWidth = 0;
40 opacity = 0;
41 + isDraw = false;
42 + isFrontSide = true;
43 super.initState();
44 WidgetsBinding.instance.addPostFrameCallback(afterLayout);
45 }
@@ -37,21 +50,21 @@ class WalletCardState extends State<WalletCard> {
50 cardWidth = screenWidth;
51 opacity = 1;
52 });
53 + Timer(Duration(milliseconds: 350), () =>
54 + setState(() => isDraw = true)
55 + );
56 }
57
58 @override
59 Widget build(BuildContext context) {
44 - final syncStore = Provider.of<SyncStore>(context);
45 - final walletStore = Provider.of<WalletStore>(context);
46 -
60 return Container(
61 width: double.infinity,
49 - height: 220,
62 + height: cardHeight,
63 alignment: Alignment.centerRight,
64 child: AnimatedContainer(
65 alignment: Alignment.centerLeft,
66 width: cardWidth,
54 - height: 220,
67 + height: cardHeight,
68 duration: Duration(milliseconds: 500),
69 curve: Curves.fastOutSlowIn,
70 decoration: BoxDecoration(
@@ -63,98 +76,156 @@ class WalletCardState extends State<WalletCard> {
76 end: Alignment.bottomCenter
77 )
78 ),
66 - child: screenWidth > 0 && cardWidth == screenWidth
67 - ? InkWell(
68 - onTap: (){print('TAP');},
69 - child: Observer(
70 - key: _syncingObserverKey,
71 - builder: (_) {
72 - final status = syncStore.status;
73 - final statusText = status.title();
74 - final progress = syncStore.status.progress();
75 - //final isFialure = status is FailedSyncStatus;
76 -
77 - var descriptionText = '';
78 -
79 - if (status is SyncingSyncStatus) {
80 - descriptionText = S
81 - .of(context)
82 - .Blocks_remaining(
83 - syncStore.status.toString());
84 - }
85 -
86 - if (status is FailedSyncStatus) {
87 - descriptionText = S
88 - .of(context)
89 - .please_try_to_connect_to_another_node;
90 - }
91 -
92 - return Container(
93 - width: cardWidth,
94 - height: 220,
95 - child: Stack(
96 - children: <Widget>[
97 - Container(
98 - height: 220,
99 - width: progress * cardWidth,
100 - decoration: BoxDecoration(
101 - borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
102 - gradient: LinearGradient(
103 - colors: colorsSync,
104 - begin: Alignment.topCenter,
105 - end: Alignment.bottomCenter
106 - )
107 - ),
108 - ),
109 - Positioned(
110 - left: 20,
111 - right: 20,
112 - top: 30,
113 - bottom: 30,
114 - child: Container(
115 - child: Column(
116 - mainAxisAlignment: MainAxisAlignment.spaceBetween,
117 - children: <Widget>[
118 - Row(
119 - crossAxisAlignment: CrossAxisAlignment.start,
120 - mainAxisAlignment: MainAxisAlignment.spaceBetween,
121 - children: <Widget>[
122 - Column(
123 - crossAxisAlignment: CrossAxisAlignment.start,
79 + child: InkWell(
80 + onTap: () => setState(() => isFrontSide = !isFrontSide),
81 + child: isFrontSide
82 + ? frontSide()
83 + : backSide()
84 + ),
85 + ),
86 + );
87 + }
88 +
89 + Widget frontSide() {
90 + final syncStore = Provider.of<SyncStore>(context);
91 + final walletStore = Provider.of<WalletStore>(context);
92 + final settingsStore = Provider.of<SettingsStore>(context);
93 + final balanceStore = Provider.of<BalanceStore>(context);
94 + final triangleButton = Image.asset('assets/images/triangle.png');
95 +
96 + return Observer(
97 + key: _syncingObserverKey,
98 + builder: (_) {
99 + final status = syncStore.status;
100 + final statusText = status.title();
101 + final progress = syncStore.status.progress();
102 +
103 + String shortAddress = walletStore.subaddress.address;
104 + shortAddress = shortAddress.replaceRange(4, shortAddress.length - 4, '...');
105 +
106 + var descriptionText = '';
107 +
108 + if (status is SyncingSyncStatus) {
109 + descriptionText = S
110 + .of(context)
111 + .Blocks_remaining(
112 + syncStore.status.toString());
113 + }
114 +
115 + if (status is FailedSyncStatus) {
116 + descriptionText = S
117 + .of(context)
118 + .please_try_to_connect_to_another_node;
119 + }
120 +
121 + return Container(
122 + width: cardWidth,
123 + height: cardHeight,
124 + child: Stack(
125 + children: <Widget>[
126 + Container(
127 + height: cardHeight,
128 + width: progress * cardWidth,
129 + decoration: BoxDecoration(
130 + borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
131 + gradient: LinearGradient(
132 + colors: colorsSync,
133 + begin: Alignment.topCenter,
134 + end: Alignment.bottomCenter
135 + )
136 + ),
137 + ),
138 + isDraw ? Positioned(
139 + left: 20,
140 + right: 20,
141 + top: 30,
142 + bottom: 30,
143 + child: Container(
144 + child: Column(
145 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
146 + children: <Widget>[
147 + Row(
148 + crossAxisAlignment: CrossAxisAlignment.start,
149 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
150 + children: <Widget>[
151 + Column(
152 + crossAxisAlignment: CrossAxisAlignment.start,
153 + children: <Widget>[
154 + InkWell(
155 + onTap: () {print('TAP 2');},
156 + child: Row(
157 children: <Widget>[
125 - InkWell(
126 - onTap: (){print('TAP 2');},
127 - child: Row(
128 - children: <Widget>[
129 - Text(
130 - walletStore.name,
131 - style: TextStyle(
132 - fontSize: 20,
133 - fontWeight: FontWeight.bold
134 - ),
135 - ),
136 - SizedBox(width: 10),
137 - triangleButton
138 - ],
139 - ),
140 - ),
141 - SizedBox(
142 - height: 5,
143 - ),
158 Text(
145 - walletStore.account.label,
159 + walletStore.name,
160 style: TextStyle(
147 - fontSize: 12
161 + fontSize: 20,
162 + fontWeight: FontWeight.bold
163 ),
149 - )
164 + ),
165 + SizedBox(width: 10),
166 + triangleButton
167 ],
168 ),
152 - Text(
153 - walletStore.account.label
154 - )
155 - ],
169 + ),
170 + SizedBox(
171 + height: 5,
172 + ),
173 + Text(
174 + walletStore.account.label,
175 + style: TextStyle(
176 + fontSize: 12,
177 + color: PaletteDark.walletCardText
178 + ),
179 + )
180 + ],
181 + ),
182 + Container(
183 + width: 98,
184 + height: 32,
185 + alignment: Alignment.center,
186 + decoration: BoxDecoration(
187 + color: PaletteDark.walletCardAddressField,
188 + borderRadius: BorderRadius.all(Radius.circular(16))
189 ),
157 - Row(
190 + child: Text(
191 + shortAddress,
192 + style: TextStyle(
193 + fontSize: 12,
194 + color: PaletteDark.walletCardAddressText
195 + ),
196 + ),
197 + )
198 + ],
199 + ),
200 + status is SyncedSyncStatus
201 + ? Observer(
202 + key: _balanceObserverKey,
203 + builder: (_) {
204 + final balanceDisplayMode = settingsStore.balanceDisplayMode;
205 + final symbol = settingsStore
206 + .fiatCurrency
207 + .toString();
208 + var balance = '---';
209 + var fiatBalance = '---';
210 +
211 + if (balanceDisplayMode ==
212 + BalanceDisplayMode.availableBalance) {
213 + balance =
214 + balanceStore.unlockedBalance ??
215 + '0.0';
216 + fiatBalance =
217 + '$symbol ${balanceStore.fiatUnlockedBalance}';
218 + }
219 +
220 + if (balanceDisplayMode ==
221 + BalanceDisplayMode.fullBalance) {
222 + balance =
223 + balanceStore.fullBalance ?? '0.0';
224 + fiatBalance =
225 + '$symbol ${balanceStore.fiatFullBalance}';
226 + }
227 +
228 + return Row(
229 crossAxisAlignment: CrossAxisAlignment.end,
230 mainAxisAlignment: MainAxisAlignment.spaceBetween,
231 children: <Widget>[
@@ -162,37 +233,198 @@ class WalletCardState extends State<WalletCard> {
233 crossAxisAlignment: CrossAxisAlignment.start,
234 children: <Widget>[
235 Text(
165 - statusText,
236 + balanceDisplayMode.toString(),
237 style: TextStyle(
167 - fontSize: 12
238 + fontSize: 12,
239 + color: PaletteDark.walletCardText
240 ),
241 ),
242 SizedBox(height: 5),
243 Text(
172 - descriptionText,
244 + balance,
245 style: TextStyle(
174 - fontSize: 14
246 + fontSize: 28
247 ),
248 )
249 ],
250 ),
251 Text(
180 - walletStore.account.label
252 + fiatBalance,
253 + style: TextStyle(
254 + fontSize: 14
255 + ),
256 )
257 ],
183 - )
184 - ],
258 + );
259 + }
260 + )
261 + : Row(
262 + crossAxisAlignment: CrossAxisAlignment.end,
263 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
264 + children: <Widget>[
265 + Column(
266 + crossAxisAlignment: CrossAxisAlignment.start,
267 + children: <Widget>[
268 + Text(
269 + statusText,
270 + style: TextStyle(
271 + fontSize: 12,
272 + color: PaletteDark.walletCardText
273 + ),
274 + ),
275 + SizedBox(height: 5),
276 + Text(
277 + descriptionText,
278 + style: TextStyle(
279 + fontSize: 14
280 + ),
281 + )
282 + ],
283 + )
284 + ],
285 + )
286 + ],
287 + ),
288 + )
289 + )
290 + : Offstage()
291 + ],
292 + ),
293 + );
294 + },
295 + );
296 + }
297 +
298 + Widget backSide() {
299 + final walletStore = Provider.of<WalletStore>(context);
300 + final rightArrow = Image.asset('assets/images/right_arrow.png');
301 + double messageBoxHeight = 0;
302 +
303 + return Observer(
304 + key: _addressObserverKey,
305 + builder: (_) {
306 + return Container(
307 + width: cardWidth,
308 + height: cardHeight,
309 + alignment: Alignment.topCenter,
310 + child: Stack(
311 + children: <Widget>[
312 + Container(
313 + width: cardWidth,
314 + height: cardHeight,
315 + padding: EdgeInsets.only(left: 20, right: 20, top: 30, bottom: 30),
316 + decoration: BoxDecoration(
317 + borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
318 + gradient: LinearGradient(
319 + colors: colorsSync,
320 + begin: Alignment.topCenter,
321 + end: Alignment.bottomCenter
322 + )
323 + ),
324 + child: Column(
325 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
326 + children: <Widget>[
327 + Row(
328 + children: <Widget>[
329 + Expanded(
330 + child: Container(
331 + height: 72,
332 + child: Column(
333 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
334 + crossAxisAlignment: CrossAxisAlignment.start,
335 + children: <Widget>[
336 + Text(
337 + S.current.card_address,
338 + style: TextStyle(
339 + fontSize: 12,
340 + color: PaletteDark.walletCardText
341 + ),
342 + ),
343 + GestureDetector(
344 + onTap: () {
345 + Clipboard.setData(ClipboardData(
346 + text: walletStore.subaddress.address));
347 + _addressObserverKey.currentState.setState(() => messageBoxHeight = 20);
348 + Timer(Duration(milliseconds: 1000), () {
349 + try {
350 + _addressObserverKey.currentState.setState(() => messageBoxHeight = 0);
351 + } catch(e) {
352 + print('${e.toString()}');
353 + }
354 + });
355 + },
356 + child: Text(
357 + walletStore.subaddress.address,
358 + style: TextStyle(
359 + fontSize: 14,
360 + ),
361 + ),
362 + )
363 + ],
364 + ),
365 + )
366 + ),
367 + SizedBox(width: 20),
368 + Container(
369 + width: 72,
370 + height: 72,
371 + child: QrImage(
372 + data: walletStore.subaddress.address,
373 + backgroundColor: Colors.transparent,
374 + foregroundColor: PaletteDark.walletCardText,
375 ),
376 )
377 + ],
378 + ),
379 + Container(
380 + height: 44,
381 + padding: EdgeInsets.only(left: 20, right: 20),
382 + alignment: Alignment.center,
383 + decoration: BoxDecoration(
384 + borderRadius: BorderRadius.all(Radius.circular(22)),
385 + color: PaletteDark.walletCardSubAddressField
386 + ),
387 + child: InkWell(
388 + onTap: () {},
389 + child: Row(
390 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
391 + children: <Widget>[
392 + Text(
393 + S.current.subaddresses,
394 + style: TextStyle(
395 + fontSize: 14,
396 + ),
397 + ),
398 + rightArrow
399 + ],
400 + ),
401 + ),
402 )
403 ],
404 ),
190 - );
191 - },
192 - )
193 - )
194 - : Offstage(),
195 - ),
405 + ),
406 + AnimatedContainer(
407 + width: cardWidth,
408 + height: messageBoxHeight,
409 + alignment: Alignment.center,
410 + duration: Duration(milliseconds: 500),
411 + curve: Curves.fastOutSlowIn,
412 + decoration: BoxDecoration(
413 + borderRadius: BorderRadius.only(topLeft: Radius.circular(10)),
414 + color: Colors.green
415 + ),
416 + child: Text(
417 + S.of(context).copied_to_clipboard,
418 + style: TextStyle(
419 + fontSize: 10,
420 + color: Colors.white
421 + ),
422 + ),
423 + )
424 + ],
425 + ),
426 + );
427 + }
428 );
429 }
430 }
\ No newline at end of file
res/values/strings_de.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Ausführung ${currentVersion}",
350
351 "openalias_alert_title" : "XMR-Empfänger erkannt",
352 - "openalias_alert_content" : "Sie senden Geld an\n${recipient_name}"
352 + "openalias_alert_content" : "Sie senden Geld an\n${recipient_name}",
353 +
354 + "card_address" : "Adresse:"
355 }
\ No newline at end of file
res/values/strings_en.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Version ${currentVersion}",
350
351 "openalias_alert_title" : "XMR Recipient Detected",
352 - "openalias_alert_content" : "You will be sending funds to\n${recipient_name}"
352 + "openalias_alert_content" : "You will be sending funds to\n${recipient_name}",
353 +
354 + "card_address" : "Address:"
355 }
\ No newline at end of file
res/values/strings_es.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Versión ${currentVersion}",
350
351 "openalias_alert_title" : "Destinatario XMR detectado",
352 - "openalias_alert_content" : "Enviará fondos a\n${recipient_name}"
352 + "openalias_alert_content" : "Enviará fondos a\n${recipient_name}",
353 +
354 + "card_address" : "Dirección:"
355 }
\ No newline at end of file
res/values/strings_hi.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "संस्करण ${currentVersion}",
350
351 "openalias_alert_title" : "XMR प्राप्तकर्ता का पता लगाया",
352 - "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}"
352 + "openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}",
353 +
354 + "card_address" : "पता:"
355 }
\ No newline at end of file
res/values/strings_ja.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "バージョン ${currentVersion}",
350
351 "openalias_alert_title" : "XMR受信者が検出されました",
352 - "openalias_alert_content" : "に送金します\n${recipient_name}"
352 + "openalias_alert_content" : "に送金します\n${recipient_name}",
353 +
354 + "card_address" : "住所:"
355 }
\ No newline at end of file
res/values/strings_ko.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "버전 ${currentVersion}",
350
351 "openalias_alert_title" : "XMR 수신자 감지",
352 - "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}"
352 + "openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}",
353 +
354 + "card_address" : "주소:"
355 }
\ No newline at end of file
res/values/strings_nl.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Versie ${currentVersion}",
350
351 "openalias_alert_title" : "XMR-ontvanger gedetecteerd",
352 - "openalias_alert_content" : "U stuurt geld naar\n${recipient_name}"
352 + "openalias_alert_content" : "U stuurt geld naar\n${recipient_name}",
353 +
354 + "card_address" : "Adres:"
355 }
\ No newline at end of file
res/values/strings_pl.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Wersja ${currentVersion}",
350
351 "openalias_alert_title" : "Wykryto odbiorcę XMR",
352 - "openalias_alert_content" : "Będziesz wysyłać środki na\n${recipient_name}"
352 + "openalias_alert_content" : "Będziesz wysyłać środki na\n${recipient_name}",
353 +
354 + "card_address" : "Adres:"
355 }
\ No newline at end of file
res/values/strings_pt.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Versão ${currentVersion}",
350
351 "openalias_alert_title" : "Destinatário XMR detectado",
352 - "openalias_alert_content" : "Você enviará fundos para\n${recipient_name}"
352 + "openalias_alert_content" : "Você enviará fundos para\n${recipient_name}",
353 +
354 + "card_address" : "Endereço:"
355 }
res/values/strings_ru.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Версия ${currentVersion}",
350
351 "openalias_alert_title" : "Получатель XMR обнаружен",
352 - "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}"
352 + "openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}",
353 +
354 + "card_address" : "Адрес:"
355 }
\ No newline at end of file
res/values/strings_uk.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "Версія ${currentVersion}",
350
351 "openalias_alert_title" : "Отримувача XMR виявлено",
352 - "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}"
352 + "openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}",
353 +
354 + "card_address" : "Адреса:"
355 }
\ No newline at end of file
res/values/strings_zh.arb
+3 -1
@@ -349,5 +349,7 @@
349 "version" : "版 ${currentVersion}",
350
351 "openalias_alert_title" : "檢測到XMR收件人",
352 - "openalias_alert_content" : "您將匯款至\n${recipient_name}"
352 + "openalias_alert_content" : "您將匯款至\n${recipient_name}",
353 +
354 + "card_address" : "地址:"
355 }
\ No newline at end of file