Merge branch 'master' into tooltipadd

This commit is contained in:
marcosrdz 2021-02-25 16:54:59 -05:00
commit a3d7c2a151
23 changed files with 324 additions and 79 deletions

2
App.js
View File

@ -302,7 +302,7 @@ const App = () => {
isVisible={isClipboardContentModalVisible}
onClose={hideClipboardContentModal}
>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, stylesHook.modalContent]}>
<BlueTextCentered>
{clipboardContentType === ClipboardContentType.BITCOIN && loc.wallets.clipboard_bitcoin}

View File

@ -348,7 +348,7 @@ const ReorderWalletsStackRoot = () => {
const Drawer = createDrawerNavigator();
function DrawerRoot() {
const dimensions = useWindowDimensions();
const isLargeScreen = Platform.OS === 'android' ? isTablet() : dimensions.width >= Dimensions.get('screen').width / 3 && isTablet();
const isLargeScreen = Platform.OS === 'android' ? isTablet() : dimensions.width >= Dimensions.get('screen').width / 2 && isTablet();
const drawerStyle = { width: '0%' };
return (

View File

@ -1,7 +1,7 @@
import { Platform } from 'react-native';
import prompt from 'react-native-prompt-android';
module.exports = (title, text, isCancelable = true, type = 'secure-text') => {
module.exports = (title, text, isCancelable = true, type = 'secure-text', isOKDestructive = false) => {
const keyboardType = type === 'numeric' ? 'numeric' : 'default';
if (Platform.OS === 'ios' && type === 'numeric') {
@ -25,6 +25,7 @@ module.exports = (title, text, isCancelable = true, type = 'secure-text') => {
console.log('OK Pressed');
resolve(password);
},
style: isOKDestructive ? 'destructive' : 'default',
},
]
: [

View File

@ -1,22 +1,24 @@
{
"_": {
"allow": "Zezwól",
"bad_password": "Nieprawidłowe hasło, spróbuj ponownie.",
"cancel": "Anuluj",
"continue": "Kontynuuj",
"dont_allow": "Nie zezwalaj",
"enter_password": "Wprowadź hasło",
"file_saved": "Plik ({filePath}) został zapisany w twoim katalogu Pobrane.",
"invalid_animated_qr_code_fragment": "Nieprawidłowy fragment animowanego kodu QR, spróbuj ponownie",
"never": "nigdy",
"no": "Nie",
"of": "{number} z {total}",
"ok": "OK",
"storage_is_encrypted": "Twoje dane są zaszyfrowane. Hasło jest wymagane do ich rozszyfrowania",
"allow": "Zezwól",
"dont_allow": "Nie zezwalaj",
"yes": "Tak",
"no": "Nie",
"save": "Zapisz",
"seed": "Źródło",
"storage_is_encrypted": "Twoje dane są zaszyfrowane. Hasło jest wymagane do ich rozszyfrowania",
"wallet_key": "Klucz Portfela",
"yes": "Tak"
"invalid_animated_qr_code_fragment" : "Nieprawidłowy fragment animowanego kodu QR, spróbuj ponownie",
"file_saved": "Plik ({filePath}) został zapisany w twoim katalogu Pobrane.",
"discard_changes": "Odrzucić zmiany?",
"discard_changes_detail": "Masz niezapisane zmiany. Czy jesteś pewien, że chcesz je odrzucić i opuścić ten ekran?"
},
"azteco": {
"codeIs": "Twój kod vouchera to",
@ -73,7 +75,10 @@
"item_nooffers": "Brak ofert. Spróbój zmienić \"w mojej okolicy\" na Oferty Globalne",
"item_rating": "{transakcje} Ocena",
"item_rating_no": "Brak oceny",
"local_trader": "Lokalny handel",
"local_trader_new": "Nowy",
"login": "Login",
"logout": "Wyloguj",
"mycont": "Moje kontrakty",
"offer_accept": "Akceptuj ofertę",
"offer_account_finish": "Wygląda na to że nie ukończyłeś zakładania konta HodlHodl, czy dokończyć teraz?",
@ -86,9 +91,6 @@
"offer_window": "okno",
"p2p": "Giełda p2p"
},
"is_it_my_address": {
"title": "sprawdź czy to mój adres?"
},
"lnd": {
"errorInvoiceExpired": "Faktura utraciła ważność",
"exchange": "Kantor",
@ -109,19 +111,14 @@
"lndViewInvoice": {
"additional_info": "Dodatkowa informacja",
"for": "Do:",
"has_been_paid": "Wezwanie zostało opłacone",
"lightning_invoice": "Wezwanie Lightning",
"has_been_paid": "Wezwanie zostało opłacone",
"open_direct_channel": "Otwórz kanał bezpośredni z tym nodem:",
"please_pay": "Stwórz wezwanie",
"preimage": "Wyświetl kod wezwania",
"sats": "sat",
"wasnt_paid_and_expired": "To wezwanie nie zostało opłacone i wygasło."
},
"notifications": {
"ask_me_later": "Zapytaj później",
"no_and_dont_ask": "Nie. I nie pytaj ponownie.",
"would_you_like_to_receive_notifications": "Czy chcesz otrzymywać powiadomienia o nadchodzących płatnościach?"
},
"plausibledeniability": {
"create_fake_storage": "Utwórz szyfrowany schowek",
"create_password": "Utwórz hasło",
@ -142,6 +139,7 @@
"ok_lnd": "OK, zachowałem.",
"text": "Proszę poświęć chwilę, żeby zapisać te słowa na kartce papieru, To twoja kopia zapasowa, możesz użyć jej, aby odtworzyć portfel na innym urządzeniu.",
"text_lnd": "Proszę, poświęć chwilę, żeby zapisać to uwierzytelnienie LNDHub. To twoja kopia zapasowa, możesz użyć jej, aby odtworzyć portfel na innym urządzeniu.",
"text_lnd2": "Ten portfel jest obsługiwany przez BlueWallet.",
"title": "Twój portfel został utworzony ..."
},
"receive": {
@ -180,6 +178,7 @@
"details_adv_full_sure": "Czy jesteś pewien/-a, że chcesz użyć wszystkich środków z Twojego portfela w tej transakcji? ",
"details_adv_import": "Importuj transakcje",
"details_amount_field_is_not_valid": "Kwota w polu jest niepoprawna",
"details_amount_field_is_less_than_minimum_amount_sat": "Podana ilość jest za mała. Proszę podaj ilość większą niż 500 sat.",
"details_create": "Stwórz polecenie zapłaty",
"details_error_decode": "Błąd: Nie potrafię zdekodować adresu Bitcoin",
"details_fee_field_is_not_valid": "Błędnie wypełnione pole z opłatą",
@ -211,37 +210,46 @@
"input_done": "Gotowe",
"input_paste": "Wklej",
"input_total": "Łącznie:",
"no_tx_signing_in_progress": "Żadna transakcja nie jest obecnie podpisywana.",
"open_settings": "Otwórz ustawienia",
"permission_camera_message": "Potrzebujemy twojej zgody na wykorzystanie kamery",
"permission_camera_title": "Zgoda na wykorzystanie kamery",
"permission_storage_denied_message": "BlueWallet nie mół zapisać tego pliku. Otwórz ustawienia urządzenia i zezwól na Dostęp do Pamieci Masowej.",
"psbt_sign": "Podpisz transakcję",
"open_settings": "Otwórz ustawienia",
"permission_storage_later": "Zapytaj mnie później",
"permission_storage_message": "BlueWallet potrzebuje twojej zgody żeby zachować ten plik.",
"permission_storage_denied_message": "BlueWallet nie mół zapisać tego pliku. Otwórz ustawienia urządzenia i zezwól na Dostęp do Pamieci Masowej.",
"permission_storage_title": "Dostęp do Pamięci Masowej",
"problem_with_psbt": "Problem z PSBT",
"psbt_clipboard": "Skopiuj do schowka",
"psbt_this_is_psbt": "To jest częściowo podpisana transakcja Bitcoin (PSBT). Podpisz ją w swoim portfelu sprzętowym.",
"psbt_tx_export": "Eksportuj do pliku.",
"no_tx_signing_in_progress": "Żadna transakcja nie jest obecnie podpisywana.",
"psbt_tx_open": "Otwórz podpisaną transakcję",
"psbt_tx_scan": "Skanuj Podpisane Transakcje",
"qr_error_no_qrcode": "Ten obraz nie zawiera kodu QR.",
"qr_error_no_wallet": "Wybrany plik nie zawiera portfela, który może być zaimportowany.",
"success_done": "Wykonane",
"txSaved": "Ścieżka pliku ({filaPath}) została zapisana w twoim folderze Pobrane."
"txSaved": "Ścieżka pliku ({filaPath}) została zapisana w twoim folderze Pobrane.",
"problem_with_psbt": "Problem z PSBT"
},
"settings": {
"about": "O",
"about_awesome": "Przeczytaj o awesome",
"about_backup": "Zawsze rób kopie zapasowe swoich kluczy!",
"about_free": "BlueWallet jest projektem open source. Stworzonym przez i dla użytkowników Bitcoina.",
"about_license": "Licencja MIT",
"about_release_notes": "Informacje o wydaniu",
"about_review": "Wystaw nam opinię",
"about_selftest": "wykonaj self test",
"about_selftest_ok": "Wszystkie testy wewnętrzne przebiegły pomyślnie. Portfel działa dobrze.",
"about_sm_github": "GitHub",
"about_sm_discord": "Serwer Discord",
"about_sm_telegram": "Chat Telegram",
"about_sm_twitter": "Obserwuj nas na Twitterze",
"advanced_options": "Opcje Zaawansowane",
"biometrics": "Biometria",
"biom_10times": "Próbowałeś podać hasło 10 razy. Czy chcesz zresetować magazyn danych? To usunie wszystkie portfele i odszyfruje dane.",
"biom_conf_identity": "Proszę potwierdź swoją tożsamość",
"biom_no_passcode": "Twoje urządzenie nie ma hasła. Aby przejść dalej, skonfiguruj hasło w Ustawieniach aplikacji.",
"biom_remove_decrypt": "Wszystkie Twoje portfele zostaną skasowane a magazyn danych odszyfrowany. Czy jesteś pewien?",
"currency": "Waluta",
"currency_source": "Kurs jest pozyskiwany z",
"default_desc": "Po uruchomieniu BlueWallet natychmiast otworzy wcześniej wybrany domyślny portfel.",
@ -255,9 +263,19 @@
"electrum_port": "port TCP, zazwyczaj {przykład}",
"electrum_port_ssl": "port SSL, zazwyczaj {przykład}",
"electrum_saved": "Zmiany zostały zachowane pomyślnie. Żeby je zobaczyć zrestartuj aplikację.",
"electrum_settings": "Ustawienia Electrum",
"set_electrum_server_as_default": "Ustawić {server} jako domyślny serwer Electrum?",
"set_lndhub_as_default": "Ustawić {url} jako domyślny serwer LNDHub?",
"electrum_settings_server": "Ustawienia serwera Electrum",
"electrum_settings_explain": "zostaw puste aby użyć domyślnej wartości",
"electrum_status": "Status",
"electrum_clear_alert_title": "Wyczyścić historię?",
"electrum_clear_alert_message": "Czy chcesz wyczyścić historię serwerów Electrum?",
"electrum_clear_alert_cancel": "Anuluj",
"electrum_clear_alert_ok": "Ok",
"electrum_select": "Wybierz",
"electrum_reset": "Ustaw wartości domyślne",
"electrum_history": "Historia serwerów",
"electrum_clear": "Wyczyść",
"encrypt_decrypt": "Odszyfruj Schowek",
"encrypt_decrypt_q": "Czy jesteś pewien, że chcesz odszyfrować schowek? To pozwoli na dostęp do twoich portfeli bez hasła.",
"encrypt_del_uninstall": "Usuń, jeżeli BlueWallet jest odinstalowany.",
@ -284,26 +302,37 @@
"network_electrum": "Serwer Electrum",
"not_a_valid_uri": "Nieprawidłowy URL",
"notifications": "Powiadomienia",
"open_link_in_explorer" : "Otwórz link w eksploratrze",
"password": "Hasło",
"password_explain": "Stwórz hasło które odszyfruje schowek",
"passwords_do_not_match": "Hasła się nie zgadzają",
"plausible_deniability": "Wiarygodne zaprzeczenie",
"privacy": "Prywatność",
"privacy_clipboard_explanation": "Udostępnij jeżeli adres lub wezwanie są znalezione w schowku.",
"privacy_quickactions": "Skróty Portfeli",
"privacy_quickactions_explanation": "Dotknij i przytrzymaj ikonę aplikacji BlueWallet na swoim ekranie głównym aby szybko wyświetlić stan portfela.",
"privacy_read_clipboard": "Czytaj Schowek",
"privacy_read_clipboard_alert": "BlueWallet wyświetli adresy znalezione i skopiowane z twojego schowka.",
"privacy_system_settings": "Ustawienia Systemowe",
"privacy_quickactions": "Skróty Portfeli",
"privacy_quickactions_explanation": "Dotknij i przytrzymaj ikonę aplikacji BlueWallet na swoim ekranie głównym aby szybko wyświetlić stan portfela.",
"privacy_clipboard_explanation": "Udostępnij jeżeli adres lub wezwanie są znalezione w schowku.",
"push_notifications": "Powiadomienia Push",
"retype_password": "Wprowadź Ponownie hasło",
"save": "Zapisz",
"saved": "Zapisano"
"saved": "Zapisano",
"success_transaction_broadcasted" : "Sukces! Twoja transakcja została rozgłoszona!",
"total_balance": "Saldo całkowite",
"total_balance_explanation": "Wyświetlaj całkowite saldo wszystkich Twoich portfeli wśród widżetów na ekranie domowym",
"widgets": "Widżety"
},
"notifications": {
"would_you_like_to_receive_notifications": "Czy chcesz otrzymywać powiadomienia o nadchodzących płatnościach?",
"no_and_dont_ask": "Nie. I nie pytaj ponownie.",
"ask_me_later": "Zapytaj później"
},
"transactions": {
"cancel_explain": "Zastąpimy tą transakcję taką, która ma wyższe opłaty. To efektywnie anuluje transakcję. Nazywa się to RBF - Replace By Fee, Zastąp Opłatą.",
"cancel_no": "Ta transakcja jest nie do zastąpienia",
"cancel_title": "Anuluj tę transakcję (RBF)",
"confirmations_lowercase": "Potwierdzenia: {confirmations}",
"cpfp_create": "Utwórz",
"cpfp_exp": "Stworzymy kolejną transakcję, która wydaje twoją niepotwierdzoną transakcję. Całkowita opłata będzie wyższa niż z transakcji pierwotnej, więc powinna zostać wykopana szybciej. To się nazywa CPFP - Child Pays For Parent, Dziecko Płaci Za Rodzica.",
"cpfp_no_bump": "Dla tej transakcji nie można zwiększyć opłat",
@ -316,25 +345,214 @@
"details_inputs": "Wejścia",
"details_outputs": "Wyjścia",
"details_received": "Otrzymane",
"transaction_note_saved":"Transakcja została pomyślnie zapisana.",
"details_show_in_block_explorer": "Zobacz w przeglądarce bloków",
"details_title": "Transakcja",
"details_to": "Wyjście",
"details_transaction_details": "Szczegóły Transakcji",
"enable_hw": "Ten portfel nie jest używany w połączeniu z portfelem sprzętowym. Czy chcesz włączyć obsługę portfela sprzętowego?",
"enable_offline_signing": "Ten portfel nie jest używany wespół z podpisywaniem offline. Czy chcesz to włączyć?",
"list_conf": "potwierdzenia: {numer}",
"list_title": "transakcje",
"pending": "Oczekuje",
"list_title": "transakcje",
"rbf_explain": "Zastąpimy tą transakcję taką, która ma wyższe opłaty, tak że powinna zostać szybciej wykopana. Nazywa się to RBF - Replace By Fee, Zastąp Opłatą.",
"rbf_title": "podbij opłatę (RBF)",
"status_bump": "Podbij Opłatę",
"status_cancel": "Anuluj transakcje",
"transaction_note_saved": "Transakcja została pomyślnie zapisana."
"transactions_count": "Ilość transakcji",
"txid": "Identyfikator transakcji",
"updating": "Aktualizuję..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
"add_bitcoin_explain": "Prosty i potęzny portfel Bitcoin",
"add_create": "Utwórz",
"add_entropy_generated": "{gen} bajtów wygenerowanej entropii",
"add_entropy_provide": "Dostarcz entropii przy użyciu rzutów kością",
"add_entropy_remain": "{gen} bajtów wygenerowanej entropii. Pozostałe {rem} bajty zostaną pozyskane z systemowego generatora liczb losowych.",
"add_import_wallet": "Import portfela",
"add_lightning": "Lightning",
"add_lightning_explain": "W celu wydawania za pomocą natychmiastowych transakcji",
"add_lndhub": "Podłącz do własnego LNDHuba",
"add_lndhub_error": "Podany adres nie jest prawidłowym węzłem LNDHub.",
"add_lndhub_placeholder": "Adres Twojego węzła",
"add_or": "lub",
"add_title": "Dodaj portfel",
"add_wallet_name": "Nazwa",
"add_wallet_type": "Typ",
"clipboard_bitcoin": "Masz w schowku adres Bitcoin. Czy chcesz go użyć do transakcji?",
"clipboard_lightning": "Masz w schowku fakturę Lightning. Czy chcesz jej użyć do transakcji?",
"details_address": "Adres",
"details_advanced": "Zaawansowane",
"details_are_you_sure": "Jesteś pewny?",
"details_connected_to": "Podłączono do",
"details_del_wb": "Saldo portfela",
"details_del_wb_err": "Podane saldo nie zgadza się z saldem portfela. Spróbuj ponownie.",
"details_del_wb_q": "Ten portfel ma dodatnie saldo. Zanim pójdziesz dalej, wiedz, że nie będziesz w stanie odzyskać środków bez hasła ziarna. Aby uniknąć przypadkowego usunięcia portfela, wpisz jego saldo wynoszące {balance} satoshi.",
"details_delete": "Skasuj",
"details_delete_wallet": "Skasuj portfel",
"details_derivation_path": "ścieżka derywacji",
"details_display": "Pokaż na liście portfeli",
"details_export_backup": "Eksport/Kopia zapasowa",
"details_marketplace": "Rynek",
"details_master_fingerprint": "Główny odcisk palca",
"details_ms_l": "{m} z {n} legacy (p2sh)",
"details_ms_ns": "{m} z {n} natywny segwit (p2wsh)",
"details_ms_ws": "{m} z {n} owinięty segwit (p2sh-p2wsh)",
"details_multisig_type": "multisig",
"details_no_cancel": "Nie, anuluj",
"details_save": "Zapisz",
"details_show_xpub": "Pokaż XPUB portfela",
"details_title": "Portfel",
"details_type": "Typ",
"details_use_with_hardware_wallet": "Użyj z portfelem sprzętowym",
"details_wallet_updated": "Portfel zaktualizowany",
"details_yes_delete": "Tak, skasuj",
"enter_bip38_password": "Podaj hasło by zdeszyfrować",
"export_title": "Eksport portfela",
"import_do_import": "Importuj",
"import_error": "Import nieudany. Upewnij się proszę, że dane są prawidłowe.",
"import_explanation": "Podaj poniżej twoją frazę mnemoniczną, prywatny klucz, WIF lub cokolwiek co masz. BlueWallet postara się odgadnąć prawidłowy format i zaimportować Twój portfel. Jeśli zostanie podany klucz publiczny, dodamy go jako portfel tylko do obserwacji.",
"import_file": "Importuj plik",
"import_imported": "Zaimportowano",
"import_placeholder_fail": "Import portfela",
"import_placeholder_inprogress": "Importuję portfel...",
"import_scan_qr": "Skanuj lub importuj plik",
"import_success": "Twój portfel został pomyślnie zaimportowany.",
"list_long_scan": "Zeskanuj kod QR"
"import_title": "Importuj",
"list_create_a_button": "Dodaj teraz",
"list_create_a_wallet": "Dodaj portfel",
"list_create_a_wallet_text": "Jest za darmo i możesz utworzyć\nile Ci się podoba.",
"list_empty_txs1": "Twoje transakcje pojawią się tutaj.",
"list_empty_txs1_lightning": "Portfel Lightning powinien być używany do codziennych transakcji. Opłaty są szalenie niskie a prędkość piorunująca.",
"list_empty_txs2": "Rozpocznij z Twoim portfelem",
"list_empty_txs2_lightning": "\nZaby zacząć używać, dotknij Zarządzaj Środkami i doładuj swoje saldo.",
"list_header": "Portfel reprezentuje para kluczy: jeden prywatny i jeden, który możesz podawać aby otrzymywać monety.",
"list_import_error": "Napotkano błąd podczas próby importowania tego portfela.",
"list_import_problem": "Miał miejsce problem podczas importowania tego portfela.",
"list_latest_transaction": "Ostatnia transakcja",
"list_ln_browser": "Przeglądarka LApp",
"list_long_choose": "Wybierz zdjęcie",
"list_long_clipboard": "Kopiuj ze schowka",
"list_long_scan": "Zeskanuj kod QR",
"list_marketplace": "Rynek",
"list_tap_here_to_buy": "Kup Bitcoin",
"list_title": "Portfele",
"list_tryagain": "Spróbuj ponownie",
"no_ln_wallet_error": "Musisz najpierw dodać portfel Lightning, zanim zapłacisz fakturę.",
"looks_like_bip38": "To wygląda na klucz prywatny chroniony hasłem (BIP38).",
"reorder_title": "Zmień kolejność portfeli",
"please_continue_scanning": "Proszę skanuj dalej.",
"scan_error": "Błąd skanowania",
"select_no_bitcoin": "Nie ma dostępnych portfeli Bitcoin.",
"select_no_bitcoin_exp": "Portfel Bitcoin jest wymagany by uzupełnić portfel Lightning. Proszę utwórz lub zaimportuj.",
"select_wallet": "Wybierz portfel",
"take_photo": "Zrób zdjęcie",
"xpub_copiedToClipboard": "Skopiowano do schowka.",
"pull_to_refresh": "Pociągnij by odświeżyć",
"warning_do_not_disclose": "Uwaga! Nie ujawniać.",
"add_ln_wallet_first": "Najpierw musisz dodać portfel Lightning.",
"identity_pubkey": "Klucz publiczny tożsamości",
"xpub_title": "XPUB portfela"
},
"multisig": {
"multisig_vault": "Skarbiec",
"default_label": "Skarbiec Multisig",
"multisig_vault_explain": "Najlepsze bezpieczeństwo dla dużych kwot",
"provide_signature": "Podaj podpis",
"vault_key": "Klucz Skarbca {number}",
"required_keys_out_of_total": "Wymagane klucze spośród wszystkich",
"fee": "Opłata: {number}",
"fee_btc": "{number} BTC",
"confirm": "Potwierdź",
"header": "Wyślij",
"share": "Udostępnij",
"view": "Widok",
"manage_keys": "Zarządzaj kluczami",
"how_many_signatures_can_bluewallet_make": "ile podpisów BlueWallet może zrobić",
"signatures_required_to_spend": "Podpisy wymagane {number}",
"signatures_we_can_make": "mogą utworzyć {number}",
"scan_or_import_file": "Skanuj lub importuj plik",
"export_coordination_setup": "Eksportuj Ustawienia Koordynacji",
"cosign_this_transaction": "Współsygnować tę transakcję?",
"lets_start": "Zacznijmy",
"create": "Utwórz",
"provide_key": "Podaj klucz",
"native_segwit_title": "Najlepsza praktyka",
"wrapped_segwit_title": "Najlepsza kompatybilność",
"legacy_title": "Legacy",
"co_sign_transaction": "Podpisz transakcję",
"what_is_vault": "Skarbiec jest",
"what_is_vault_numberOfWallets": "portfelem multisig {m}-z-{n}",
"what_is_vault_wallet": ".",
"vault_advanced_customize": "Ustawienia Skarbca",
"needs": "Potrzebuje",
"what_is_vault_description_number_of_vault_keys": "{m} kluczy skarbca",
"what_is_vault_description_to_spend": "aby wydawać i trzeci,\nktóry możesz używać jako kopia zapasowa.",
"what_is_vault_description_to_spend_other": "do wydawania.",
"quorum": "kworum {m} z {n}",
"quorum_header": "Kworum",
"of": "z",
"wallet_type": "Typ portfela",
"view_key": "Widok",
"invalid_mnemonics": "Ta fraza mnemoniczna nie wydaje się prawidłowa.",
"invalid_cosigner": "Nieprawidłowe dane współsygnatariusza",
"not_a_multisignature_xpub": "To niejest XPUB z portfela multisig",
"invalid_cosigner_format": "Niepoprawny współsygnatariusz: to nie jest współsygnatariusz formatu {format}.",
"create_new_key": "Otwórz nowy",
"scan_or_open_file": "Skanuj lub otwórz plik",
"i_have_mnemonics": "Mam ziarno dla tego klucza",
"please_write_down_mnemonics": "Zapisz to wyrażenie menomiczne na papierze. Nie martw się, możesz to zrobić później.",
"i_wrote_it_down": "OK, zapisałem.",
"type_your_mnemonics": "Wprowadź ziarno by zaimportować Twój istniejący klucz Skarbca.",
"this_is_cosigners_xpub": "To jest XPUB współsygnatariusza—gotowy do zaimportowania w innym portfelu. Można go udostępniać.",
"wallet_key_created": "Twój klucz Skarbca został utworzony. Poświęć chwilę by zrobić kopię bezpieczeństwa Twojego ziarna.",
"are_you_sure_seed_will_be_lost": "Czy jesteś pewien? Twoje ziarno zostanie utracone jeśli nie masz kopii bezpieczeństwa.",
"forget_this_seed": "Zapomnij to ziarno i w zamian użyj XPUB.",
"invalid_fingerprint": "Odcisk palca tego ziarnia nie zgadza się z odciskiem palca współsygnatariusza.",
"view_edit_cosigners": "Wyświetł/edytuj współsygnatariuszy",
"this_cosigner_is_already_imported": "Ten współsygnatariusz już został zaimportowany.",
"export_signed_psbt": "Eksportuj podpisaną PSBT",
"input_fp": "Podaj odcisk palca",
"input_fp_explain": "Pomiń aby użyć domyślnej wartości (00000000)",
"input_path": "Podaj ścieżkę derywacji",
"input_path_explain": "Pomiń aby użyć domyślnej wartości ({default})",
"ms_help": "Pomoc",
"ms_help_title": "Jak działa multisig: wskazówki i porady",
"ms_help_text": "Portfel z wieloma kluczami, dla zwiększonego bezpieczeństwa i współdzielonego nadzoru",
"ms_help_title1": "Zalecane jest kilka urządzeń.",
"ms_help_1": "Ten Skarbiec będzie funkcjonować z innymi aplikacjami BlueWallet i portfelami kompatybilnymi z PSBT, takimi jak Electrum, Specter, Coldcard, Cobo Vault, etc.",
"ms_help_title2": "Edycja kluczy",
"ms_help_2": "Możesz utworzyć wszystkie klucze Skarbca na tym urządzeniu i usunąć lub edytować klucze później. Posiadanie wszystkich kluczy na tym samym urządzeniu jest równoważne z punktu widzenia bezpieczeństwa ze zwykłym portfelem Bitcoin.",
"ms_help_title3": "Kopie zapasowa Skarbców",
"ms_help_3": "Wśród opcji portfela znajdziesz kopie bezpieczeństwa Twojego Skarbca: pełną i tylko-do-wglądu. Ta kopia jest jak mapa do Twojego portfela. Just kluczowa w trakcie odzyskiwania w razie zgubienia jednego z ziaren.",
"ms_help_title4": "Import Skarbców",
"ms_help_4": "Aby zaimportować multisig, użyj kopii zapasowej i funkcji Importuj. Jeśli masz tylko ziarna lub XPUB, możesz uzyć przycisku Importuj podczas tworzenia kluczy Skarbca.",
"ms_help_title5": "Tryb zaawansowany",
"ms_help_5": "Domyślnie, BlueWallet wygeneruje skarbiec 2-z-3. Aby stworzyć inne kworum lub zmienić typ adresu, włącz Tryb Zaawansowany w Ustawieniach."
},
"is_it_my_address": {
"title": "sprawdź czy to mój adres?",
"owns": "{label} posiada {address}",
"enter_address": "Wprowadź adres",
"check_address": "Sprawdź adres",
"no_wallet_owns_address": "Żaden z dostępnych portfeli nie posiada podanego adresu."
},
"cc": {
"change": "Reszta",
"coins_selected": "Wybrano monet ({number})",
"empty": "Ten portfel nie ma żadnych monet w tej chwili.",
"freeze": "Zamroź",
"freezeLabel": "Zamroź",
"freezeLabel_un": "Odmroź",
"header": "Kontrola monet",
"use_coin": "Użyj monety",
"use_coins": "Użyj monet",
"tip": "Ta funkcja pozwala zobaczyć, nadać etykietę, zamrozić lub wybrać monety by usprawnić zarządzanie portelem. Możesz wybrać kilka monet wybierając kolorowe kółka."
},
"units": {
"BTC": "BTC",
"MAX": "Max",
"sat_byte": "sat/bajt",
"sats": "satoshi"
}
}

View File

@ -9,6 +9,7 @@ import {
StyleSheet,
Text,
TextInput,
Platform,
TouchableOpacity,
TouchableWithoutFeedback,
View,
@ -360,7 +361,7 @@ const LNDCreateInvoice = () => {
<View style={[styles.root, styleHooks.root]}>
<StatusBar barStyle="light-content" />
<View style={[styles.amount, styleHooks.amount]}>
<KeyboardAvoidingView behavior="position">
<KeyboardAvoidingView enabled={!Platform.isPad} behavior="position">
<BlueBitcoinAmount
isLoading={isLoading}
amount={amount}

View File

@ -1,5 +1,5 @@
import React, { useContext, useEffect, useRef, useState } from 'react';
import { View, Text, StatusBar, ScrollView, BackHandler, TouchableOpacity, StyleSheet, useWindowDimensions } from 'react-native';
import { View, Text, StatusBar, ScrollView, BackHandler, TouchableOpacity, StyleSheet } from 'react-native';
import Share from 'react-native-share';
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
import { Icon } from 'react-native-elements';
@ -11,7 +11,6 @@ import {
BlueText,
SafeBlueArea,
BlueButton,
SecondButton,
BlueCopyTextToClipboard,
BlueSpacing20,
BlueTextCentered,
@ -26,13 +25,12 @@ const LNDViewInvoice = () => {
const { invoice, walletID, isModal } = useRoute().params;
const { wallets, setSelectedWallet, fetchAndSaveWalletTransactions } = useContext(BlueStorageContext);
const wallet = wallets.find(w => w.getID() === walletID);
const { width, height } = useWindowDimensions();
const { colors } = useTheme();
const { goBack, navigate, setParams, setOptions } = useNavigation();
const [isLoading, setIsLoading] = useState(typeof invoice === 'string');
const [isFetchingInvoices, setIsFetchingInvoices] = useState(true);
const [invoiceStatusChanged, setInvoiceStatusChanged] = useState(false);
const qrCodeHeight = height > width ? width - 20 : width / 2;
const [qrCodeSize, setQRCodeSize] = useState(90);
const fetchInvoiceInterval = useRef();
const stylesHook = StyleSheet.create({
root: {
@ -177,6 +175,11 @@ const LNDViewInvoice = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [invoice]);
const onLayout = e => {
const { height, width } = e.nativeEvent.layout;
setQRCodeSize(height > width ? width - 40 : e.nativeEvent.layout.width / 1.8);
};
const render = () => {
if (isLoading) {
return (
@ -237,7 +240,7 @@ const LNDViewInvoice = () => {
<QRCode
value={invoice.payment_request}
logo={require('../../img/qr-code.png')}
size={qrCodeHeight}
size={qrCodeSize}
logoSize={90}
color="#000000"
logoBackgroundColor={colors.brandingColor}
@ -256,7 +259,7 @@ const LNDViewInvoice = () => {
)}
<BlueCopyTextToClipboard text={invoice.payment_request} />
<SecondButton onPress={handleOnSharePressed} title={loc.receive.details_share} />
<BlueButton onPress={handleOnSharePressed} title={loc.receive.details_share} />
<BlueSpacing20 />
<BlueButton
@ -270,9 +273,9 @@ const LNDViewInvoice = () => {
};
return (
<SafeBlueArea styles={[styles.root, stylesHook.root]}>
<SafeBlueArea styles={[styles.root, stylesHook.root]} onLayout={onLayout}>
<StatusBar barStyle="default" />
<ScrollView contentContainerStyle={styles.contentContainerStyle}>{render()}</ScrollView>
<ScrollView>{render()}</ScrollView>
</SafeBlueArea>
);
};
@ -281,9 +284,6 @@ const styles = StyleSheet.create({
root: {
flex: 1,
},
contentContainerStyle: {
flexGrow: 1,
},
justifyContentCenter: {
justifyContent: 'center',
},

View File

@ -312,7 +312,7 @@ const ReceiveDetails = () => {
const renderCustomAmountModal = () => {
return (
<BottomModal isVisible={isCustomModalVisible} onClose={dismissCustomAmountModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<BlueBitcoinAmount
unit={customUnit}

View File

@ -115,7 +115,11 @@ const Broadcast = () => {
return (
<SafeBlueArea style={styles.blueArea}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null} keyboardShouldPersistTaps="handled">
<KeyboardAvoidingView
enabled={!Platform.isPad}
behavior={Platform.OS === 'ios' ? 'position' : null}
keyboardShouldPersistTaps="handled"
>
<View style={styles.wrapper}>
{BROADCAST_RESULT.success !== broadcastResult && (
<BlueCard style={styles.mainCard}>

View File

@ -409,7 +409,7 @@ const CoinControl = () => {
setOutput(false);
}}
>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, { backgroundColor: colors.elevated }]}>{output && renderOutputModalContent()}</View>
</KeyboardAvoidingView>
</BottomModal>

View File

@ -807,7 +807,7 @@ export default class SendDetails extends Component {
isVisible={this.state.isFeeSelectionModalVisible}
onClose={this.hideFeeSelectionModal}
>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
{options.map(({ label, time, fee, rate, active }, index) => (
<TouchableOpacity
@ -1165,7 +1165,7 @@ export default class SendDetails extends Component {
isVisible={this.state.isAdvancedTransactionOptionsVisible}
onClose={this.hideAdvancedTransactionOptionsModal}
>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.advancedTransactionOptionsModalContent}>
{this.state.fromWallet.allowSendMax() && (
<BlueListItem
@ -1474,7 +1474,7 @@ export default class SendDetails extends Component {
<View style={styles.root} onLayout={this.onLayout}>
<StatusBar barStyle="light-content" />
<View>
<KeyboardAvoidingView behavior="position">
<KeyboardAvoidingView enabled={!Platform.isPad} behavior="position">
<FlatList
keyboardShouldPersistTaps="always"
scrollEnabled={this.state.addresses.length > 1}

View File

@ -78,7 +78,11 @@ const IsItMyAddress = () => {
return (
<SafeBlueArea style={[styles.blueArea, stylesHooks.blueArea]}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null} keyboardShouldPersistTaps="handled">
<KeyboardAvoidingView
enabled={!Platform.isPad}
behavior={Platform.OS === 'ios' ? 'position' : null}
keyboardShouldPersistTaps="handled"
>
<View style={styles.wrapper}>
<BlueCard style={styles.mainCard}>
<View style={[styles.input, stylesHooks.input]}>

View File

@ -1,7 +1,17 @@
/* global alert */
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { ActivityIndicator, View, TextInput, TouchableOpacity, Linking, ScrollView, StyleSheet, KeyboardAvoidingView } from 'react-native';
import {
ActivityIndicator,
Platform,
View,
TextInput,
TouchableOpacity,
Linking,
ScrollView,
StyleSheet,
KeyboardAvoidingView,
} from 'react-native';
import Clipboard from '@react-native-community/clipboard';
import { Text } from 'react-native-elements';
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
@ -158,7 +168,7 @@ export default class CPFP extends Component {
renderStage1(text) {
return (
<KeyboardAvoidingView behavior="position">
<KeyboardAvoidingView enabled={!Platform.isPad} behavior="position">
<SafeBlueArea style={styles.root}>
<BlueSpacing />
<BlueCard style={styles.center}>

View File

@ -117,11 +117,12 @@ const TransactionsStatus = () => {
}, [tx, wallets]);
useEffect(() => {
if (wallet) {
setSelectedWallet(wallet.current.getID());
const walletID = wallet.current?.getID();
if (walletID) {
setSelectedWallet(wallet.current?.getID());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [wallet]);
}, [wallet.current]);
useEffect(() => {
console.log('transactions/details - useEffect');

View File

@ -102,7 +102,7 @@ const WalletsAddMultisig = () => {
const renderModal = () => {
return (
<BottomModal isVisible={isModalVisible} onClose={closeModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContentShort, stylesHook.modalContentShort]}>
<Text style={[styles.textHeader, stylesHook.textHeader]}>{loc.multisig.quorum_header}</Text>
<Text style={[styles.textSubtitle, stylesHook.textSubtitle]}>{loc.multisig.required_keys_out_of_total}</Text>

View File

@ -603,7 +603,7 @@ const WalletsAddMultisigStep2 = () => {
const renderProvideMnemonicsModal = () => {
return (
<BottomModal isVisible={isProvideMnemonicsModalVisible} onClose={hideProvideMnemonicsModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, stylesHook.modalContent]}>
<BlueTextCentered>{loc.multisig.type_your_mnemonics}</BlueTextCentered>
<BlueSpacing20 />
@ -634,7 +634,7 @@ const WalletsAddMultisigStep2 = () => {
const renderCosignersXpubModal = () => {
return (
<BottomModal isVisible={isRenderCosignersXpubModalVisible} onClose={hideCosignersXpubModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, stylesHook.modalContent, styles.alignItemsCenter]}>
<Text style={[styles.headerText, stylesHook.textDestination]}>{loc.multisig.this_is_cosigners_xpub}</Text>
<BlueSpacing20 />

View File

@ -185,6 +185,7 @@ const WalletDetails = () => {
loc.formatString(loc.wallets.details_del_wb_q, { balance: wallet.getBalance() }),
true,
'plain-text',
true,
);
if (Number(walletBalanceConfirmation) === wallet.getBalance()) {
navigateToOverviewAndDeleteWallet();
@ -413,7 +414,7 @@ const WalletDetails = () => {
}
})()}
<Text style={[styles.textLabel2, stylesHook.textLabel2]}>{loc.wallets.add_wallet_name.toLowerCase()}</Text>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.input, stylesHook.input]}>
<TextInput
placeholder={loc.send.details_note_placeholder}

View File

@ -328,7 +328,7 @@ export default class HodlHodl extends Component {
renderChooseSideModal = () => {
return (
<BottomModal isVisible={this.state.isChooseSideModalVisible} onClose={this.hideChooseSideModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContentShort}>
<FlatList
scrollEnabled={false}
@ -377,7 +377,7 @@ export default class HodlHodl extends Component {
}
}}
>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContentShort}>
<FlatList
scrollEnabled={false}
@ -472,7 +472,7 @@ export default class HodlHodl extends Component {
return (
<BottomModal isVisible={this.state.isChooseCountryModalVisible} onClose={this.hideChooseCountryModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<View style={styles.searchInputContainer}>
<TextInput
@ -546,7 +546,7 @@ export default class HodlHodl extends Component {
return (
<BottomModal isVisible={this.state.isChooseCurrencyVisible} onClose={this.hideChooseCurrencyModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<View style={styles.searchInputContainer}>
<TextInput
@ -620,7 +620,7 @@ export default class HodlHodl extends Component {
return (
<BottomModal isVisible={this.state.isChooseMethodVisible} deviceHeight={windowHeight} onClose={this.hideChooseMethodModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<View style={styles.searchInputContainer}>
<TextInput

View File

@ -172,7 +172,7 @@ export default class HodlHodlMyContracts extends Component {
return (
<BottomModal isVisible={this.state.isRenderContractVisible} onClose={this.hideContractModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<View style={styles.modalContentCentered}>
<Text style={styles.btcText}>

View File

@ -176,7 +176,7 @@ export default class HodlHodlViewOffer extends Component {
) : (
<SafeBlueArea>
<ScrollView>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={styles.modalContent}>
<Text style={styles.Title}>{this.state.offerToDisplay.title}</Text>

View File

@ -45,7 +45,7 @@ const WalletsList = () => {
const [isLoading, setIsLoading] = useState(false);
const [itemWidth, setItemWidth] = useState(width * 0.82 > 375 ? 375 : width * 0.82);
const [isLargeScreen, setIsLargeScreen] = useState(
Platform.OS === 'android' ? isTablet() : width >= Dimensions.get('screen').width / 3 && isTablet(),
Platform.OS === 'android' ? isTablet() : width >= Dimensions.get('screen').width / 2 && isTablet(),
);
const [carouselData, setCarouselData] = useState([]);
const dataSource = getTransactions(null, 10);
@ -428,7 +428,7 @@ const WalletsList = () => {
};
const onLayout = _e => {
setIsLargeScreen(Platform.OS === 'android' ? isTablet() : width >= Dimensions.get('screen').width / 3 && isTablet());
setIsLargeScreen(Platform.OS === 'android' ? isTablet() : width >= Dimensions.get('screen').width / 2 && isTablet());
setItemWidth(width * 0.82 > 375 ? 375 : width * 0.82);
};

View File

@ -1,6 +1,6 @@
import React, { useCallback, useContext, useEffect } from 'react';
import React, { useCallback, useContext, useEffect, useState } from 'react';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import { View, useWindowDimensions, StyleSheet, BackHandler, StatusBar } from 'react-native';
import { View, StyleSheet, BackHandler, StatusBar } from 'react-native';
import QRCode from 'react-native-qrcode-svg';
import { ScrollView } from 'react-native-gesture-handler';
@ -17,7 +17,7 @@ const PleaseBackupLNDHub = () => {
const wallet = wallets.find(w => w.getID() === walletID);
const navigation = useNavigation();
const { colors } = useTheme();
const { height, width } = useWindowDimensions();
const [qrCodeSize, setQRCodeSize] = useState(90);
const handleBackButton = useCallback(() => {
navigation.dangerouslyGetParent().pop();
return true;
@ -48,8 +48,13 @@ const PleaseBackupLNDHub = () => {
}, [handleBackButton]);
const pop = () => navigation.dangerouslyGetParent().pop();
const onLayout = e => {
const { height, width } = e.nativeEvent.layout;
setQRCodeSize(height > width ? width - 40 : e.nativeEvent.layout.width / 1.5);
};
return (
<SafeBlueArea style={styles.root}>
<SafeBlueArea style={styles.root} onLayout={onLayout}>
<StatusBar barStyle="light-content" />
<ScrollView centerContent contentContainerStyle={styles.scrollViewContent}>
<View>
@ -63,11 +68,11 @@ const PleaseBackupLNDHub = () => {
value={wallet.secret}
logo={require('../../img/qr-code.png')}
logoSize={90}
size={height > width ? width - 40 : width / 2}
color="#000000"
logoBackgroundColor={colors.brandingColor}
backgroundColor="#FFFFFF"
ecl="H"
size={qrCodeSize}
/>
</View>
<BlueCopyTextToClipboard text={wallet.getSecret()} />

View File

@ -272,7 +272,7 @@ const WalletTransactions = () => {
const renderManageFundsModal = () => {
return (
<BottomModal isVisible={isManageFundsModalVisible} onClose={hideManageFundsModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.advancedTransactionOptionsModalContent, stylesHook.advancedTransactionOptionsModalContent]}>
<BlueListItem
hideChevron

View File

@ -510,7 +510,7 @@ const ViewEditMultisigCosigners = () => {
const renderProvideMnemonicsModal = () => {
return (
<BottomModal isVisible={isProvideMnemonicsModalVisible} onClose={hideProvideMnemonicsModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, stylesHook.modalContent]}>
<BlueTextCentered>{loc.multisig.type_your_mnemonics}</BlueTextCentered>
<BlueSpacing20 />
@ -535,7 +535,7 @@ const ViewEditMultisigCosigners = () => {
const renderShareModal = () => {
return (
<BottomModal isVisible={isShareModalVisible} onClose={hideShareModal}>
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'position' : null}>
<KeyboardAvoidingView enabled={!Platform.isPad} behavior={Platform.OS === 'ios' ? 'position' : null}>
<View style={[styles.modalContent, stylesHook.modalContent, styles.alignItemsCenter]}>
<Text style={[styles.headerText, stylesHook.textDestination]}>{loc.multisig.this_is_cosigners_xpub}</Text>
<View style={styles.qrCodeContainer}>
@ -601,7 +601,7 @@ const ViewEditMultisigCosigners = () => {
<View style={[styles.root, stylesHook.root]}>
<StatusBar barStyle="light-content" />
<KeyboardAvoidingView
enabled
enabled={!Platform.isPad}
behavior={Platform.OS === 'ios' ? 'padding' : null}
keyboardVerticalOffset={62}
style={[styles.mainBlock, styles.root]}