Cw 588 show popup for adding to address book (#1326)

* popup for adding to address book * update localization files

Serhii committed Mar 20, 2024 at 00:44 UTC a0c0ede0998124bf68b89ab95366f63613ea37d0
29 files changed +103 -18
lib/src/screens/send/send_page.dart
+44 -14
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/core/auth_service.dart';
2 +import 'package:cake_wallet/entities/contact_record.dart';
3 import 'package:cake_wallet/entities/fiat_currency.dart';
4 import 'package:cake_wallet/entities/template.dart';
5 import 'package:cake_wallet/reactions/wallet_connect.dart';
@@ -48,6 +49,7 @@ class SendPage extends BasePage {
49 final PaymentRequest? initialPaymentRequest;
50
51 bool _effectsInstalled = false;
52 + ContactRecord? newContactAddress;
53
54 @override
55 String get title => S.current.send;
@@ -443,22 +445,50 @@ class SendPage extends BasePage {
445 }
446
447 if (state is TransactionCommitted) {
446 - String alertContent;
447 - if (sendViewModel.walletType == WalletType.solana) {
448 - alertContent =
449 - '${S.of(_dialogContext).send_success(sendViewModel.selectedCryptoCurrency.toString())}. ${S.of(_dialogContext).waitFewSecondForTxUpdate}';
448 + newContactAddress =
449 + newContactAddress ?? sendViewModel.newContactAddress();
450 +
451 + final successMessage = S.of(_dialogContext).send_success(
452 + sendViewModel.selectedCryptoCurrency.toString());
453 +
454 + final waitMessage = sendViewModel.walletType == WalletType.solana
455 + ? '. ${S.of(_dialogContext).waitFewSecondForTxUpdate}' : '';
456 +
457 + final newContactMessage = newContactAddress != null
458 + ? '\n${S.of(context).add_contact_to_address_book}' : '';
459 +
460 + final alertContent =
461 + "$successMessage$waitMessage$newContactMessage";
462 +
463 + if (newContactAddress != null) {
464 + return AlertWithTwoActions(
465 + alertTitle: '',
466 + alertContent: alertContent,
467 + rightButtonText: S.of(_dialogContext).add_contact,
468 + leftButtonText: S.of(_dialogContext).ignor,
469 + actionRightButton: () {
470 + Navigator.of(_dialogContext).pop();
471 + RequestReviewHandler.requestReview();
472 + Navigator.of(context).pushNamed(
473 + Routes.addressBookAddContact,
474 + arguments: newContactAddress);
475 + newContactAddress = null;
476 + },
477 + actionLeftButton: () {
478 + Navigator.of(_dialogContext).pop();
479 + RequestReviewHandler.requestReview();
480 + newContactAddress = null;
481 + });
482 } else {
451 - alertContent = S.of(_dialogContext).send_success(
452 - sendViewModel.selectedCryptoCurrency.toString());
483 + return AlertWithOneAction(
484 + alertTitle: '',
485 + alertContent: alertContent,
486 + buttonText: S.of(_dialogContext).ok,
487 + buttonAction: () {
488 + Navigator.of(_dialogContext).pop();
489 + RequestReviewHandler.requestReview();
490 + });
491 }
454 - return AlertWithOneAction(
455 - alertTitle: '',
456 - alertContent: alertContent,
457 - buttonText: S.of(_dialogContext).ok,
458 - buttonAction: () {
459 - Navigator.of(_dialogContext).pop();
460 - RequestReviewHandler.requestReview();
461 - });
492 }
493
494 return Offstage();
lib/view_model/contact_list/contact_view_model.dart
+2 -2
@@ -48,11 +48,11 @@ abstract class ContactViewModelBase with Store {
48 currency = null;
49 }
50
51 - Future save() async {
51 + Future<void> save() async {
52 try {
53 state = IsExecutingState();
54
55 - if (_contact != null) {
55 + if (_contact != null && _contact!.original.isInBox) {
56 _contact?.name = name;
57 _contact?.address = address;
58 _contact?.type = currency!;
lib/view_model/send/send_view_model.dart
+29
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/entities/contact.dart';
2 import 'package:cake_wallet/entities/priority_for_wallet_type.dart';
3 import 'package:cake_wallet/entities/transaction_description.dart';
4 import 'package:cake_wallet/ethereum/ethereum.dart';
@@ -420,6 +421,34 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
421 }
422 }
423
424 + ContactRecord? newContactAddress () {
425 +
426 + final Set<String> contactAddresses =
427 + Set.from(contactListViewModel.contacts.map((contact) => contact.address))
428 + ..addAll(contactListViewModel.walletContacts.map((contact) => contact.address));
429 +
430 + for (var output in outputs) {
431 + String address;
432 + if (output.isParsedAddress) {
433 + address = output.parsedAddress.addresses.first;
434 + } else {
435 + address = output.address;
436 + }
437 +
438 + if (address.isNotEmpty && !contactAddresses.contains(address)) {
439 +
440 + return ContactRecord(
441 + contactListViewModel.contactSource,
442 + Contact(
443 + name: '',
444 + address: address,
445 + type: selectedCryptoCurrency,
446 + ));
447 + }
448 + }
449 + return null;
450 + }
451 +
452 String translateErrorMessage(
453 String error,
454 WalletType walletType,
res/values/strings_ar.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "ﺎﻨﻫ ﺔﻄﺸﻨﻟﺍ ﺕﻻﺎﺼﺗﻻﺍ ﺮﻬﻈﺘﺳ",
10 "add": "إضافة",
11 "add_contact": "ﻝﺎﺼﺗﺍ ﺔﻬﺟ ﺔﻓﺎﺿﺇ",
12 + "add_contact_to_address_book": "هل ترغب في إضافة جهة الاتصال هذه إلى دفتر العناوين الخاص بك؟",
13 "add_custom_node": "إضافة عقدة مخصصة جديدة",
14 "add_custom_redemption": "إضافة استرداد مخصص",
15 "add_fund_to_card": "أضف أموالاً مدفوعة مسبقًا إلى البطاقات (حتى ${value})",
res/values/strings_bg.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Тук ще се появят активни връзки",
10 "add": "Добави",
11 "add_contact": "Добави контакт",
12 + "add_contact_to_address_book": "Искате ли да добавите този контакт към вашата адресна книга?",
13 "add_custom_node": "Добавяне на нов персонализиран Node",
14 "add_custom_redemption": "Добавете персонализиран Redemption",
15 "add_fund_to_card": "Добавете предплатени средства в картите (до ${value})",
res/values/strings_cs.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Zde se zobrazí aktivní připojení",
10 "add": "Přidat",
11 "add_contact": "Přidat kontakt",
12 + "add_contact_to_address_book": "Chcete přidat tento kontakt do svého adresáře?",
13 "add_custom_node": "Přidat vlastní uzel",
14 "add_custom_redemption": "Přidat vlastní uplatnění",
15 "add_fund_to_card": "Všechny předplacené prostředky na kartě (až ${value})",
res/values/strings_de.arb
+2 -1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Hier werden aktive Verbindungen angezeigt",
10 "add": "Hinzufügen",
11 "add_contact": "Kontakt hinzufügen",
12 + "add_contact_to_address_book": "Möchten Sie diesen Kontakt zu Ihrem Adressbuch hinzufügen?",
13 "add_custom_node": "Neuen benutzerdefinierten Knoten hinzufügen",
14 "add_custom_redemption": "Benutzerdefinierte Einlösung hinzufügen",
15 "add_fund_to_card": "Prepaid-Guthaben zu den Karten hinzufügen (bis zu ${value})",
@@ -410,8 +411,8 @@
411 "placeholder_transactions": "Ihre Transaktionen werden hier angezeigt",
412 "please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist",
413 "please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.",
413 - "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
414 "Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
415 + "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
416 "please_select": "Bitte auswählen:",
417 "please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.",
418 "please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden",
res/values/strings_en.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Active connections will appear here",
10 "add": "Add",
11 "add_contact": "Add contact",
12 + "add_contact_to_address_book": "Would you like to add this contact to your address book?",
13 "add_custom_node": "Add New Custom Node",
14 "add_custom_redemption": "Add Custom Redemption",
15 "add_fund_to_card": "Add prepaid funds to the cards (up to ${value})",
res/values/strings_es.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Las conexiones activas aparecerán aquí",
10 "add": "Añadir",
11 "add_contact": "Agregar contacto",
12 + "add_contact_to_address_book": "¿Le gustaría agregar este contacto a su libreta de direcciones?",
13 "add_custom_node": "Agregar nuevo nodo personalizado",
14 "add_custom_redemption": "Agregar redención personalizada",
15 "add_fund_to_card": "Agregar fondos prepagos a las tarjetas (hasta ${value})",
res/values/strings_fr.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Les connexions actives apparaîtront ici",
10 "add": "Ajouter",
11 "add_contact": "Ajouter le contact",
12 + "add_contact_to_address_book": "Souhaitez-vous ajouter ce contact à votre carnet d'adresses?",
13 "add_custom_node": "Ajouter un nouveau nœud personnalisé",
14 "add_custom_redemption": "Ajouter un remboursement personnalisé",
15 "add_fund_to_card": "Ajouter des fonds prépayés aux cartes (jusqu'à ${value})",
res/values/strings_ha.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Haɗin kai mai aiki zai bayyana a nan",
10 "add": "Ƙara",
11 "add_contact": "Ƙara lamba",
12 + "add_contact_to_address_book": "Kuna so ku ƙara wannan lamba zuwa littafin adireshinku?",
13 "add_custom_node": "Ƙara Sabon Kulli na Custom",
14 "add_custom_redemption": "Ƙara Ceto na Musamman",
15 "add_fund_to_card": "Ƙara kuɗin da aka riga aka biya a katunan (har zuwa ${value})",
res/values/strings_hi.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "सक्रिय कनेक्शन यहां दिखाई देंगे",
10 "add": "जोड़ना",
11 "add_contact": "संपर्क जोड़ें",
12 + "add_contact_to_address_book": "क्या आप इस संपर्क को अपनी एड्रेस बुक में जोड़ना चाहेंगे?",
13 "add_custom_node": "नया कस्टम नोड जोड़ें",
14 "add_custom_redemption": "कस्टम रिडेम्पशन जोड़ें",
15 "add_fund_to_card": "कार्ड में प्रीपेड धनराशि जोड़ें (${value} तक)",
res/values/strings_hr.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Ovdje će se pojaviti aktivne veze",
10 "add": "Dodaj",
11 "add_contact": "Dodaj kontakt",
12 + "add_contact_to_address_book": "Želite li dodati ovaj kontakt u svoj adresar?",
13 "add_custom_node": "Dodaj novi prilagođeni čvor",
14 "add_custom_redemption": "Dodaj prilagođeni otkup",
15 "add_fund_to_card": "Dodajte unaprijed uplaćena sredstva na kartice (do ${value})",
res/values/strings_id.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Koneksi aktif akan muncul di sini",
10 "add": "Menambahkan",
11 "add_contact": "Tambah kontak",
12 + "add_contact_to_address_book": "Apakah Anda ingin menambahkan kontak ini ke buku alamat Anda?",
13 "add_custom_node": "Tambahkan Node Kustom Baru",
14 "add_custom_redemption": "Tambahkan Tukar Kustom",
15 "add_fund_to_card": "Tambahkan dana pra-bayar ke kartu (hingga ${value})",
res/values/strings_it.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Le connessioni attive verranno visualizzate qui",
10 "add": "Aggiungi",
11 "add_contact": "Aggiungi contatto",
12 + "add_contact_to_address_book": "Vorresti aggiungere questo contatto alla tua rubrica?",
13 "add_custom_node": "Aggiungi nuovo nodo personalizzato",
14 "add_custom_redemption": "Aggiungi riscatto personalizzato",
15 "add_fund_to_card": "Aggiungi fondi prepagati alle carte (fino a ${value})",
res/values/strings_ja.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "アクティブな接続がここに表示されます",
10 "add": "加える",
11 "add_contact": "連絡先を追加",
12 + "add_contact_to_address_book": "この連絡先をアドレス帳に追加しますか?",
13 "add_custom_node": "新しいカスタム ノードを追加",
14 "add_custom_redemption": "カスタム引き換えを追加",
15 "add_fund_to_card": "プリペイド資金をカードに追加します(最大 ${value})",
res/values/strings_ko.arb
+2 -1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "활성 연결이 여기에 표시됩니다",
10 "add": "더하다",
11 "add_contact": "주소록에 추가",
12 + "add_contact_to_address_book": "이 연락처를 주소록에 추가 하시겠습니까?",
13 "add_custom_node": "새 사용자 정의 노드 추가",
14 "add_custom_redemption": "사용자 지정 상환 추가",
15 "add_fund_to_card": "카드에 선불 금액 추가(최대 ${value})",
@@ -410,8 +411,8 @@
411 "placeholder_transactions": "거래가 여기에 표시됩니다",
412 "please_fill_totp": "다른 기기에 있는 8자리 코드를 입력하세요.",
413 "please_make_selection": "아래에서 선택하십시오 지갑 만들기 또는 복구.",
413 - "please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
414 "Please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
415 + "please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
416 "please_select": "선택 해주세요:",
417 "please_select_backup_file": "백업 파일을 선택하고 백업 암호를 입력하십시오.",
418 "please_try_to_connect_to_another_node": "다른 노드에 연결을 시도하십시오",
res/values/strings_my.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "လက်ရှိချိတ်ဆက်မှုများ ဤနေရာတွင် ပေါ်လာပါမည်။",
10 "add": "ထည့်ပါ။",
11 "add_contact": "အဆက်အသွယ်ထည့်ပါ။",
12 + "add_contact_to_address_book": "ဒီအဆက်အသွယ်ကိုမင်းရဲ့လိပ်စာစာအုပ်နဲ့ထပ်ထည့်ချင်ပါသလား။",
13 "add_custom_node": "စိတ်ကြိုက် Node အသစ်ကို ထည့်ပါ။",
14 "add_custom_redemption": "စိတ်ကြိုက်ရွေးယူမှုကို ထည့်ပါ။",
15 "add_fund_to_card": "ကတ်များသို့ ကြိုတင်ငွေပေးငွေများ ထည့်ပါ (${value} အထိ)",
res/values/strings_nl.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Actieve verbindingen worden hier weergegeven",
10 "add": "Toevoegen",
11 "add_contact": "Contactpersoon toevoegen",
12 + "add_contact_to_address_book": "Wilt u dit contact toevoegen aan uw adresboek?",
13 "add_custom_node": "Voeg een nieuw aangepast knooppunt toe",
14 "add_custom_redemption": "Voeg aangepaste inwisseling toe",
15 "add_fund_to_card": "Voeg prepaid tegoed toe aan de kaarten (tot ${value})",
res/values/strings_pl.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Tutaj pojawią się aktywne połączenia",
10 "add": "Dodaj",
11 "add_contact": "Dodaj kontakt",
12 + "add_contact_to_address_book": "Czy chciałbyś dodać ten kontakt do swojej książki adresowej?",
13 "add_custom_node": "Dodaj nowy węzeł niestandardowy",
14 "add_custom_redemption": "Dodaj niestandardowe wykorzystanie",
15 "add_fund_to_card": "Dodaj przedpłacone środki do kart (do ${value})",
res/values/strings_pt.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Conexões ativas aparecerão aqui",
10 "add": "Adicionar",
11 "add_contact": "Adicionar contato",
12 + "add_contact_to_address_book": "Você gostaria de adicionar esse contato ao seu catálogo de endereços?",
13 "add_custom_node": "Adicionar novo nó personalizado",
14 "add_custom_redemption": "Adicionar resgate personalizado",
15 "add_fund_to_card": "Adicionar fundos pré-pagos aos cartões (até ${value})",
res/values/strings_ru.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Здесь появятся активные подключения",
10 "add": "Добавить",
11 "add_contact": "Добавить контакт",
12 + "add_contact_to_address_book": "Хотели бы вы добавить этот контакт в свою адресную книгу?",
13 "add_custom_node": "Добавить новый пользовательский узел",
14 "add_custom_redemption": "Добавить пользовательское погашение",
15 "add_fund_to_card": "Добавить предоплаченные средства на карты (до ${value})",
res/values/strings_th.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "การเชื่อมต่อที่ใช้งานอยู่จะปรากฏที่นี่",
10 "add": "เพิ่ม",
11 "add_contact": "เพิ่มผู้ติดต่อ",
12 + "add_contact_to_address_book": "คุณต้องการเพิ่มผู้ติดต่อนี้ในสมุดที่อยู่ของคุณหรือไม่?",
13 "add_custom_node": "เพิ่มจุดโหนดแบบกำหนดเอง",
14 "add_custom_redemption": "เพิ่มการรับคืนที่กำหนดเอง",
15 "add_fund_to_card": "เพิ่มเงินสำรองไว้บนบัตร (ถึง ${value})",
res/values/strings_tl.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Lalabas dito ang mga aktibong koneksyon",
10 "add": "Idagdag",
11 "add_contact": "Magdagdag ng contact",
12 + "add_contact_to_address_book": "Nais mo bang idagdag ang contact na ito sa iyong address book?",
13 "add_custom_node": "Magdagdag ng bagong pasadyang node",
14 "add_custom_redemption": "Magdagdag ng pasadyang pagtubos",
15 "add_fund_to_card": "Magdagdag ng prepaid na pondo sa mga kard (hanggang sa ${value})",
res/values/strings_tr.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Aktif bağlantılar burada görünecek",
10 "add": "Ekle",
11 "add_contact": "Kişi ekle",
12 + "add_contact_to_address_book": "Bu kişiyi adres defterinize eklemek ister misiniz?",
13 "add_custom_node": "Yeni Özel Düğüm Ekleme",
14 "add_custom_redemption": "Özel Bozdurma Ekle",
15 "add_fund_to_card": "Ön ödemeli kartlara para ekle (En fazla yüklenebilir tutar: ${value})",
res/values/strings_uk.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Тут з’являться активні підключення",
10 "add": "Добавити",
11 "add_contact": "Додати контакт",
12 + "add_contact_to_address_book": "Хотіли б ви додати цей контакт до своєї адресної книги?",
13 "add_custom_node": "Додати новий спеціальний вузол",
14 "add_custom_redemption": "Додати спеціальне погашення",
15 "add_fund_to_card": "Додайте передплачені кошти на картки (до ${value})",
res/values/strings_ur.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "۔ﮯﮔ ﮞﻮﮨ ﺮﮨﺎﻇ ﮞﺎﮩﯾ ﺰﻨﺸﮑﻨﮐ ﻝﺎﻌﻓ",
10 "add": "شامل کریں۔",
11 "add_contact": "۔ﮟﯾﺮﮐ ﻞﻣﺎﺷ ﮧﻄﺑﺍﺭ",
12 + "add_contact_to_address_book": "کیا آپ اس رابطہ کو اپنی ایڈریس بک میں شامل کرنا چاہیں گے؟",
13 "add_custom_node": "نیا کسٹم نوڈ شامل کریں۔",
14 "add_custom_redemption": "حسب ضرورت چھٹکارا شامل کریں۔",
15 "add_fund_to_card": "کارڈز میں پری پیڈ فنڈز شامل کریں (${value} تک)",
res/values/strings_yo.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "Awọn asopọ ti nṣiṣe lọwọ yoo han nibi",
10 "add": "Fikún",
11 "add_contact": "Fi olubasọrọ kun",
12 + "add_contact_to_address_book": "Ṣe o fẹ lati ṣafikun olubasọrọ yii si iwe adirẹsi rẹ?",
13 "add_custom_node": "Fikún apẹka títun t'ẹ́ pààrọ̀",
14 "add_custom_redemption": "Tẹ̀ iye owó t'ẹ́ fẹ́ ná",
15 "add_fund_to_card": "Ẹ fikún owó sí àwọn káàdì (kò tóbi ju ${value})",
res/values/strings_zh.arb
+1
@@ -9,6 +9,7 @@
9 "activeConnectionsPrompt": "活动连接将出现在这里",
10 "add": "添加",
11 "add_contact": "增加联系人",
12 + "add_contact_to_address_book": "您想将此联系人添加到您的通讯录中吗?",
13 "add_custom_node": "添加新的自定义节点",
14 "add_custom_redemption": "添加自定义兑换",
15 "add_fund_to_card": "向卡中添加预付资金(最多 ${value})",