Merge branch 'master' into notifcapable

This commit is contained in:
marcosrdz 2021-01-25 10:44:32 -05:00
commit 35f8b7c1e8
31 changed files with 226 additions and 141 deletions

View File

@ -574,7 +574,7 @@ export class BlueCopyTextToClipboard extends Component {
render() {
return (
<View style={{ justifyContent: 'center', alignItems: 'center', paddingHorizontal: 16 }}>
<TouchableOpacity onPress={this.copyToClipboard} disabled={this.state.hasTappedText}>
<TouchableOpacity onPress={this.copyToClipboard} disabled={this.state.hasTappedText} testID="BlueCopyTextToClipboard">
<Animated.Text style={styleCopyTextToClipboard.address} numberOfLines={0}>
{this.state.address}
</Animated.Text>

View File

@ -1,12 +0,0 @@
import Obscure from 'react-native-obscure';
import { Platform } from 'react-native';
import { enabled } from 'react-native-privacy-snapshot';
export default class Privacy {
static enableBlur() {
Platform.OS === 'android' ? Obscure.activateObscure() : enabled(true);
}
static disableBlur() {
Platform.OS === 'android' ? Obscure.deactivateObscure() : enabled(false);
}
}

View File

@ -0,0 +1,10 @@
import Obscure from 'react-native-obscure';
export default class Privacy {
static enableBlur() {
Obscure.activateObscure();
}
static disableBlur() {
Obscure.deactivateObscure();
}
}

View File

@ -0,0 +1,10 @@
import { enabled } from 'react-native-privacy-snapshot';
export default class Privacy {
static enableBlur() {
enabled(true);
}
static disableBlur() {
enabled(false);
}
}

5
blue_modules/Privacy.js Normal file
View File

@ -0,0 +1,5 @@
export default class Privacy {
static enableBlur() {}
static disableBlur() {}
}

View File

@ -18,6 +18,12 @@ export const BlueStorageProvider = ({ children }) => {
const getPreferredCurrencyAsyncStorage = useAsyncStorage(AppStorage.PREFERRED_CURRENCY).getItem;
const getLanguageAsyncStorage = useAsyncStorage(AppStorage.LANG).getItem;
const [newWalletAdded, setNewWalletAdded] = useState(false);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const setIsHandOffUseEnabledAsyncStorage = value => {
setIsHandOffUseEnabled(value);
return BlueApp.setItem(AppStorage.HANDOFF_STORAGE_KEY, value === true ? '1' : '');
};
const saveToDisk = async () => {
BlueApp.tx_metadata = txMetadata;
await BlueApp.saveToDisk();
@ -29,6 +35,18 @@ export const BlueStorageProvider = ({ children }) => {
setWallets(BlueApp.getWallets());
}, []);
useEffect(() => {
(async () => {
try {
const enabledHandoff = await BlueApp.getItem(AppStorage.HANDOFF_STORAGE_KEY);
setIsHandOffUseEnabled(!!enabledHandoff);
} catch (_e) {
setIsHandOffUseEnabledAsyncStorage(false);
setIsHandOffUseEnabled(false);
}
})();
}, []);
const getPreferredCurrency = async () => {
const item = await getPreferredCurrencyAsyncStorage();
_setPreferredFiatCurrency(item);
@ -187,6 +205,8 @@ export const BlueStorageProvider = ({ children }) => {
preferredFiatCurrency,
setLanguage,
language,
isHandOffUseEnabled,
setIsHandOffUseEnabledAsyncStorage,
}}
>
{children}

View File

@ -35,6 +35,7 @@ export class AppStorage {
static HODL_HODL_API_KEY = 'HODL_HODL_API_KEY';
static HODL_HODL_SIGNATURE_KEY = 'HODL_HODL_SIGNATURE_KEY';
static HODL_HODL_CONTRACTS = 'HODL_HODL_CONTRACTS';
static HANDOFF_STORAGE_KEY = 'HandOff';
constructor() {
/** {Array.<AbstractWallet>} */

View File

@ -1,24 +0,0 @@
import { Platform } from 'react-native';
const BlueApp = require('../BlueApp');
export default class HandoffSettings {
static STORAGEKEY = 'HandOff';
static async isHandoffUseEnabled() {
if (Platform.OS !== 'ios') {
return false;
}
try {
const enabledHandoff = await BlueApp.getItem(HandoffSettings.STORAGEKEY);
return !!enabledHandoff;
} catch (_e) {
await BlueApp.setItem(HandoffSettings.STORAGEKEY, '');
return false;
}
}
static async setHandoffUseEnabled(value) {
await BlueApp.setItem(HandoffSettings.STORAGEKEY, value === true && Platform.OS === 'ios' ? '1' : '');
}
}

15
components/handoff.ios.js Normal file
View File

@ -0,0 +1,15 @@
import React, { useContext } from 'react';
import Handoff from 'react-native-handoff';
import { BlueStorageContext } from '../blue_modules/storage-context';
import PropTypes from 'prop-types';
const HandoffComponent = props => {
const { isHandOffUseEnabled } = useContext(BlueStorageContext);
return isHandOffUseEnabled && props && props.url ? <Handoff {...props} /> : null;
};
export default HandoffComponent;
HandoffComponent.propTypes = {
url: PropTypes.string,
};

5
components/handoff.js Normal file
View File

@ -0,0 +1,5 @@
const HandoffComponent = () => {
return null;
};
export default HandoffComponent;

View File

@ -265,8 +265,8 @@ PODS:
- React
- react-native-geolocation (2.0.2):
- React
- react-native-image-picker (3.1.1):
- React
- react-native-image-picker (3.1.4):
- React-Core
- react-native-is-catalyst (1.0.0):
- React
- react-native-randombytes (3.5.3):
@ -347,9 +347,9 @@ PODS:
- React
- RemobileReactNativeQrcodeLocalImage (1.0.4):
- React
- RNCAsyncStorage (1.13.2):
- React
- RNCClipboard (1.5.0):
- RNCAsyncStorage (1.13.3):
- React-Core
- RNCClipboard (1.5.1):
- React-Core
- RNCMaskedView (0.1.10):
- React
@ -703,7 +703,7 @@ SPEC CHECKSUMS:
react-native-document-picker: c5752781fbc0c126c627c1549b037c139444a4cf
react-native-fingerprint-scanner: c68136ca57e3704d7bdf5faa554ea535ce15b1d0
react-native-geolocation: cbd9d6bd06bac411eed2671810f454d4908484a8
react-native-image-picker: 510ea4e35cbe99ec92ecd89e9449e7e149c930e6
react-native-image-picker: 248afb60a0c5a24153cb7c7483b257f30541323b
react-native-is-catalyst: 52ee70e0123c82419dd4ce47dc4cc94b22467512
react-native-randombytes: 991545e6eaaf700b4ee384c291ef3d572e0b2ca8
react-native-safe-area-context: 01158a92c300895d79dee447e980672dc3fb85a6
@ -723,8 +723,8 @@ SPEC CHECKSUMS:
ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3
RealmJS: 899b4839a8bee46e248bc277995ad58da855e41f
RemobileReactNativeQrcodeLocalImage: 57aadc12896b148fb5e04bc7c6805f3565f5c3fa
RNCAsyncStorage: bc2f81cc1df90c267ce9ed30bb2dbc93b945a8ee
RNCClipboard: 8f9f12fabf3c06e976f19f87a62c89e28dfedfca
RNCAsyncStorage: 32c7cbe1d43dff5f03f3d0b9e9d2c44d8ec91a3a
RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3
RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
RNCPushNotificationIOS: 5b1cf9ad2aaa107ecb92d5d2d7005ba521b2b97a
RNDefaultPreference: 21816c0a6f61a2829ccc0cef034392e9b509ee5f

View File

@ -177,6 +177,7 @@
"details_adv_full_sure": "Bist Du sicher, dass Du das gesamte Guthaben für diese Transaktion verwenden willst?",
"details_adv_import": "Transaktion importieren",
"details_amount_field_is_not_valid": "Betrageingabe ist nicht korrekt",
"details_amount_field_is_less_than_minimum_amount_sat": "Der angegebene Betrag ist zu klein. Bitte einen Betrag größer 500 sats eingeben.",
"details_create": "Erstellen",
"details_error_decode": "Fehler: Bitcoinadresse kann nicht dekodiert werden",
"details_fee_field_is_not_valid": "Gebühreneingabe ist nicht korrekt",

View File

@ -177,6 +177,7 @@
"details_adv_full_sure": "Etes-vous sûr de vouloir utiliser la totalité de votre solde pour cette transaction ?",
"details_adv_import": "Importer une transaction",
"details_amount_field_is_not_valid": "Champ montant invalide",
"details_amount_field_is_less_than_minimum_amount_sat": "Le montant spécifié est trop petit. Veuillez entrer un montant supérieur à 500 sats.",
"details_create": "Créer la requête",
"details_error_decode": "Erreur : impossible de décoder l'adresse Bitcoin",
"details_fee_field_is_not_valid": "Champ frais invalide",

View File

@ -14,7 +14,7 @@
"no": "Nee",
"save": "Opslaan",
"seed": "Seed",
"wallet_key": "Wallet key",
"wallet_key": "Wallet sleutel",
"invalid_animated_qr_code_fragment" : "Ongeldig geanimeerde QRCode, probeer het opnieuw",
"file_saved": "Bestand ({filePath}) is opgeslagen in uw gedownloade bestanden."
},
@ -22,15 +22,15 @@
"codeIs": "De code van uw tegoedbon is",
"errorBeforeRefeem": "Voor het inlossen moet u eerst Bitcoin-wallet toevoegen.",
"errorSomething": "Er ging is verkeerd. Is deze tegoedbon nog geldig?",
"redeem": "Inlossen naar wallet.",
"redeemButton": "Inlossen",
"redeem": "Inwisselen naar wallet.",
"redeemButton": "Inwisselen",
"success": "Succes",
"title": "Los uw Atze.co voucher in"
},
"entropy": {
"save": "Opslaan",
"title": "Entropy",
"undo": "Herstellen"
"undo": "Ongedaan maken"
},
"errors": {
"broadcast": "Verzenden mislukt",
@ -74,7 +74,10 @@
"item_nooffers": "Geen aanbod. Probeer \"Dicht bij mij\" te veranderen naar wereldwijd aanbod!",
"item_rating": "{rating} transacties",
"item_rating_no": "Geen beoordeling",
"local_trader": "Lokaal Handelen",
"local_trader_new": "Nieuw",
"login": "Inloggen",
"logout": "Uitloggen",
"mycont": "Mijn contracten",
"offer_accept": "Bod accepteren",
"offer_account_finish": "Het lijkt er op dat u nog niet klaar bent met uw account op HodlHodl, wilt u hiermee verder gaan?",
@ -134,8 +137,9 @@
"ok": "Oké, ik heb het opgeschreven!",
"ok_lnd": "Oké, ik heb het bewaard.",
"text": "Neem alstublieft een moment om deze mnemonic phrase op papier te schrijven. Het is uw back-up die u kunt gebruiken om uw wallet te herstellen op een ander apparaat.",
"text_lnd": "Neem alstublieft een moment om deze LNDHub authenticatie op te slaan. Het is uw back-up die u kunt gebruiken om uw wallet te herstellen op een ander apparaat.",
"title": "Uw wallet is aangemaakt..."
"text_lnd": "Sla deze wallet backup op. Zo kun je de wallet herstellen in geval van verlies.",
"text_lnd2": "Deze wallet wordt gehost door BlueWallet.",
"title": "Je wallet is aangemaakt"
},
"receive": {
"details_create": "Maken",
@ -173,6 +177,7 @@
"details_adv_full_sure": "Weet u zeker dat u het volledige saldo van uw wallet wilt gebruiken voor deze transactie?",
"details_adv_import": "Importeer transactie",
"details_amount_field_is_not_valid": "Bedrag is niet geldig",
"details_amount_field_is_less_than_minimum_amount_sat": "Het ingevoerde bedrag is te klein. Voer een bedrag in groter dan 500 sats.",
"details_create": "Maak factuur aan",
"details_error_decode": "Fout: Niet in staat om Bitcoin adres te decoderen",
"details_fee_field_is_not_valid": "Tarief is niet geldig",
@ -226,8 +231,9 @@
"settings": {
"about": "Over",
"about_awesome": "Gebouwt met de geweldige",
"about_backup": "Maak altijd een backup van uw keys!",
"about_backup": "Maak altijd een backup van uw sleutels!",
"about_free": "BlueWallet is een gratis en open-source project. Gemaakt door Bitcoin gebruikers.",
"about_license": "MIT Licentie",
"about_release_notes": "Release-opmerkingen",
"about_review": "Laat een review achter",
"about_selftest": "Voer een zelftest uit",
@ -236,6 +242,11 @@
"about_sm_telegram": "Telegram kanaal",
"about_sm_twitter": "Volg ons op Twitter",
"advanced_options": "Geavanceerde opties",
"biometrics": "Biometrische beveiliging",
"biom_10times": "Je hebt 10 wachtwoordpogingen gedaan. Wil je je opslagruimte resetten? Al je wallets worden verwijderd en je opslag wordt ontsleuteld.",
"biom_conf_identity": "Bevestig je identiteit.",
"biom_no_passcode": "Er is geen wachtwoord ingesteld op je apparaat. Ga naar het instellingenmenu om een wachtwoord in te stellen, om door te gaan.",
"biom_remove_decrypt": "Al je wallets worden verwijderd en je opslag zal worden ontsleuteld. Weet je zeker dat je door wil gaan?",
"currency": "Valuta",
"currency_source": "Prijzen zijn opgehaald bij",
"default_desc": "Indien uitgeschakeld zal BlueWallet meteen de geselecteerde wallet openen bij het opstarten.",
@ -249,9 +260,19 @@
"electrum_port": "TCP-poort, gebruikelijk {example}",
"electrum_port_ssl": "SSL-poort, gebruikelijk {example}",
"electrum_saved": "Uw veranderingen zijn succesvol opgeslagen. Opnieuw opstarten kan nodig zijn om de wijzigingen door te voeren.",
"set_electrum_server_as_default": "{server} instellen als de standaard electrum server?",
"set_lndhub_as_default": "{url} instellen als de standaard LNDHub server?",
"electrum_settings": "Electrum instellingen",
"electrum_settings_explain": "Laat leeg om standaardinstelling te gebruiken",
"electrum_status": "Status",
"electrum_clear_alert_title": "Geschiedenis verwijderen?",
"electrum_clear_alert_message": "Wil je de geschiedenis van de electrum servers wissen?",
"electrum_clear_alert_cancel": "Annuleren",
"electrum_clear_alert_ok": "Oké",
"electrum_select": "Selecteren",
"electrum_reset": "Naar standaardinstellingen resetten",
"electrum_history": "Server geschiedenis",
"electrum_clear": "Wissen",
"encrypt_decrypt": "Versleutel opslag",
"encrypt_decrypt_q": "Weet u zeker dat u uw opslag wilt ontsleutelen? Hierdoor kunnen uw wallets zonder wachtwoord worden geopend.",
"encrypt_del_uninstall": "Wis als BlueWallet is verwijderd",
@ -294,7 +315,10 @@
"retype_password": "Geef nogmaals het wachtwoord op",
"save": "Opslaan",
"saved": "Opgeslagen",
"success_transaction_broadcasted" : "Gelukt! Uw transactie is verzonden!"
"success_transaction_broadcasted" : "Gelukt! Uw transactie is verzonden!",
"total_balance": "Totaalbalans",
"total_balance_explanation": "Laat de totaalbalans van al je wallets zien op de widgets op je thuisscherm.",
"widgets": "Widgets"
},
"notifications": {
"would_you_like_to_receive_notifications": "Wil je meldingen ontvangen als je binnenkomende betalingen ontvangt?",
@ -331,7 +355,8 @@
"rbf_title": "Bumb fee (RBF)",
"status_bump": "Bumb fee",
"status_cancel": "Annuleer transactie",
"transactions_count": "Transactieteller"
"transactions_count": "Transactieteller",
"txid": "Txid"
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -361,10 +386,15 @@
"details_del_wb_q": "Deze wallet heeft een saldo. Voordat u verder gaat, moet u er rekening mee houden dat u de tegoeden niet kunt terugkrijgen zonder de seed phrase van deze wallet. Om te voorkomen dat deze wallet per ongeluk wordt verwijderd, moet u het saldo van {balance} satoshis in uw wallet invoeren.",
"details_delete": "Verwijderen",
"details_delete_wallet": "Verwijder wallet",
"details_derivation_path": "Derivatiepad",
"details_display": "Toon in wallet-lijst",
"details_export_backup": "Exporteren / back-up maken",
"details_marketplace": "Marktplaats",
"details_master_fingerprint": "Master vingerafdruk",
"details_ms_l": "{m} van {n} legacy (p2sh)",
"details_ms_ns": "{m} van {n} native segwit (p2wsh)",
"details_ms_ws": "{m} van {n} wrapped segwit (p2sh-p2wsh)",
"details_multisig_type": "multisig",
"details_no_cancel": "Nee, annuleren",
"details_save": "Opslaan",
"details_show_xpub": "Toon wallet XPUB",
@ -380,6 +410,8 @@
"import_explanation": "Schrijf hier je mnemonic phrase, private key, WIF of wat je maar hebt. BlueWallet zal zijn best doen om het juiste formaat te raden en uw wallet te importeren",
"import_file": "Importeer bestand",
"import_imported": "Geïmporteerd",
"import_placeholder_fail": "Wallet Importeren",
"import_placeholder_inprogress": "Wallet importeren...",
"import_scan_qr": "QR-code scannen of importeren?",
"import_success": "Succes",
"import_title": "Importeren",
@ -390,17 +422,19 @@
"list_empty_txs1_lightning": "Lightning-wallet moet worden gebruikt voor uw dagelijkse transacties. De fees zijn oneerlijk goedkoop en het is razendsnel.",
"list_empty_txs2": "Begin met uw wallet",
"list_empty_txs2_lightning": "\nOm het te gebruiken, tikt u op \"tegoeden beheren\" en laadt u uw saldo op.",
"list_header": "Een wallet vertegenwoordigt een paar keys, een private en een die u kunt delen om coins te ontvangen.",
"list_header": "Een wallet vertegenwoordigt een paar sleutels, een private en een die u kunt delen om coins te ontvangen.",
"list_import_error": "Er is een fout opgetreden bij het importeren van deze wallet.",
"list_import_problem": "Er is een probleem opgetreden bij het importeren van deze wallet",
"list_latest_transaction": "Laatste transactie",
"list_ln_browser": "LApp Browser",
"list_long_choose": "Kies foto",
"list_long_clipboard": "Kopiëren van klembord",
"list_long_scan": "Scan QR-code",
"list_marketplace": "Marktplaats",
"list_tap_here_to_buy": "Koop Bitcoin",
"no_ln_wallet_error": "Voordat u een Lightning-factuur betaalt, moet u eerst een Lightning-wallet toevoegen.",
"list_title": "Wallets",
"list_tryagain": "Probeer opnieuw",
"no_ln_wallet_error": "Voordat u een Lightning-factuur betaalt, moet u eerst een Lightning-wallet toevoegen.",
"looks_like_bip38": "Dit lijkt op een met een wachtwoord beveiligde private key (BIP38)",
"reorder_title": "Wallets opnieuw ordenen",
"please_continue_scanning": "Ga door met scannen",
@ -416,18 +450,21 @@
},
"multisig": {
"multisig_vault": "Kluis",
"default_label": "Multisig Kluis",
"multisig_vault_explain": "Beste beveiliging voor grote bedragen",
"provide_signature": "Geef een handtekening",
"vault_key": "Vault key {number}",
"required_keys_out_of_total": "Vereiste keys uit het totaal",
"vault_key": "Kluissleutel {number}",
"required_keys_out_of_total": "Vereiste sleutels uit het totaal",
"fee": "Fee: {number}",
"fee_btc": "{number} BTC",
"confirm": "Bevestig",
"header": "Verzenden",
"share": "Delen",
"view": "Bekijken",
"manage_keys": "Beheer keys",
"how_many_signatures_can_bluewallet_make": "Hoeveel handtekeningen kan BlueWallet maken",
"manage_keys": "Beheer sleutels",
"how_many_signatures_can_bluewallet_make": "Hoeveel signatures kan bluewallet aanmaken",
"signatures_required_to_spend": "Signatures vereist {number}",
"signatures_we_can_make": "kan {number} aanmaken",
"scan_or_import_file": "Scan of importeer bestand",
"export_coordination_setup": "Export coördinatie setup",
"cosign_this_transaction": "Deze transactie medeondertekenen?",
@ -441,9 +478,9 @@
"what_is_vault": "Een kluis is een",
"what_is_vault_numberOfWallets": "{m}-van-{n} multisig",
"what_is_vault_wallet": "Wallet",
"vault_advanced_customize": "Vault-instellingen...",
"vault_advanced_customize": "Kluis-instellingen...",
"needs": "Het is nodig",
"what_is_vault_description_number_of_vault_keys": "{m} Vault Keys",
"what_is_vault_description_number_of_vault_keys": "{m} Kluissleutels",
"what_is_vault_description_to_spend": "te besteden en een 3e die u \nals back-up kunt gebruiken.",
"what_is_vault_description_to_spend_other": "om uit te geven.",
"quorum": "{m} van {n} quorum",
@ -453,15 +490,16 @@
"view_key": "Bekijk",
"invalid_mnemonics": "Deze mnemonic phrase lijkt niet te kloppen",
"invalid_cosigner": "Geen geldige mede-ondertekenaar gegevens",
"not_a_multisignature_xpub": "Dit is geen xpub van een multisignature wallet!",
"invalid_cosigner_format": "Onjuiste mede-ondertekenaar: dit is geen mede-ondertekenaar voor het {format} formaat",
"create_new_key": "Maak een nieuwe",
"scan_or_open_file": "Scan of open bestand",
"i_have_mnemonics": "Ik heb een seed voor deze key...",
"please_write_down_mnemonics": "Schrijf dit mnemonic phrase op papier. Maak je geen zorgen, je kunt het later opschrijven.",
"i_wrote_it_down": "Ok, ik heb het opgeschreven",
"type_your_mnemonics": "Voeg een seed in om uw bestaande Vault key te importeren",
"type_your_mnemonics": "Voeg een seed in om uw bestaande kluissleutel te importeren",
"this_is_cosigners_xpub": "Dit is de XPUB van mede-ondertekenaar, klaar om in een andere wallet te worden geïmporteerd. Het is veilig om het te delen.",
"wallet_key_created": "Uw Vault key is gemaakt. Neem even de tijd om een veilige back-up van uw mnemonic seed te maken",
"wallet_key_created": "Uw kluissleutel is gemaakt. Neem even de tijd om een veilige back-up van uw mnemonic seed te maken",
"are_you_sure_seed_will_be_lost": "Weet u het zeker? Uw mnemonic seed zal verloren gaan als u geen back-up heeft",
"forget_this_seed": "Vergeet deze seed en gebruik XPUB",
"invalid_fingerprint": "Vingerafdruk voor dit seed komt niet overeen met de vingerafdruk van deze mede-ondertekenaar",
@ -473,18 +511,18 @@
"input_path": "Voer het derivation path in",
"input_path_explain": "Sla over om de standaard te gebruiken ({default})",
"ms_help": "Help",
"ms_help_title": "Hoe Multisig Vaults werken. Tips en trucs",
"ms_help_text": "Een wallet met meerdere keys, om de veiligheid exponentieel te verhogen of voor gedeelde bewaring.",
"ms_help_title": "Hoe Multisig kluizen werken. Tips en trucs",
"ms_help_text": "Een wallet met meerdere sleutels, om de veiligheid exponentieel te verhogen of voor gedeelde bewaring.",
"ms_help_title1": "Meerdere apparaten worden geadviseerd",
"ms_help_1": "De Vault werkt met andere BlueWallet-apps en PSBT-compatibele wallets, zoals Electrum, Spectre, Coldcard, Cobo-kluis, enz.",
"ms_help_title2": "Keys bewerken",
"ms_help_2": "U kunt alle Vault-keys op dit apparaat maken en deze keys later verwijderen of bewerken. Het hebben van alle keys op hetzelfde apparaat heeft dezelfde beveiliging als een gewone Bitcoin-wallet.",
"ms_help_title3": "Vault Back-ups",
"ms_help_3": "Op de wallet-opties vindt u uw Vault back-up en watch-only back-up. Deze back-up is als een routekaart voor uw wallet. Het is essentieel voor het herstel van uw wallet voor het geval u een van uw seeds verliest.",
"ms_help_title4": "Vaults importeren",
"ms_help_4": "Om een Multisig te importeren, gebruikt u uw multisig back-upbestand en de importfunctie. Als u alleen uitgebreide keys en seeds heeft, kunt u de afzonderlijke importvelden in het Vaults Toevoegen schema gebruiken.",
"ms_help_1": "De kluis werkt met andere BlueWallet-apps en PSBT-compatibele wallets, zoals Electrum, Spectre, Coldcard, Cobo-kluis, enz.",
"ms_help_title2": "Sleutels bewerken",
"ms_help_2": "U kunt alle kluissleutels op dit apparaat maken en deze sleutels later verwijderen of bewerken. Het hebben van alle sleutels op hetzelfde apparaat heeft dezelfde beveiliging als een gewone Bitcoin-wallet.",
"ms_help_title3": "Kluis Back-ups",
"ms_help_3": "Op de wallet-opties vindt u uw Kluis back-up en watch-only back-up. Deze back-up is als een routekaart voor uw wallet. Het is essentieel voor het herstel van uw wallet voor het geval u een van uw seeds verliest.",
"ms_help_title4": "Kluizen importeren",
"ms_help_4": "Om een Multisig te importeren, gebruikt u uw multisig back-upbestand en de importfunctie. Als u alleen uitgebreide sleutels en seeds heeft, kunt u de afzonderlijke importvelden in het Kluis Toevoegen schema gebruiken.",
"ms_help_title5": "Geavanceerde opties",
"ms_help_5": "BlueWallet genereert standaard een 2of3 Vault. Activeer de geavanceerde opties in de Instellingen om een ander quorum te creëren of om het adrestype te wijzigen."
"ms_help_5": "BlueWallet genereert standaard een 2-van-3 Kluis. Activeer de geavanceerde opties in de Instellingen om een ander quorum te creëren of om het adrestype te wijzigen."
},
"is_it_my_address": {
"title": "Is het mijn adres?",
@ -499,8 +537,16 @@
"empty": "Deze wallet heeft momenteel geen coins",
"freeze": "Bevriezen",
"freezeLabel": "Bevriezen",
"freezeLabel_un": "Ontvriezen",
"header": "Coin Control",
"use_coin": "Gebruik Coin",
"use_coins": "Gebruik Coins",
"tip": "Hiermee kunt u coins zien, labelen, bevriezen of selecteren voor verbeterd walletbeheer."
},
"units": {
"BTC": "BTC",
"MAX": "MAX",
"sat_byte": "sat/byte",
"sats": "sats"
}
}

18
package-lock.json generated
View File

@ -5986,9 +5986,9 @@
}
},
"@react-native-async-storage/async-storage": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.13.2.tgz",
"integrity": "sha512-isTDvUApRJPVWFxV15yrQSOGqarX7cIedq/y4N5yWSnotf68D9qvDEv1I7rCXhkBDi0u4OJt6GA9dksUT0D3wg==",
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.13.3.tgz",
"integrity": "sha512-s/7KyzFxS3WesYn5RrfRg1Pyz5EYDZAJxIxIuzmJZ1FlvpvaZGAZq9xJmVN2OG6S6NhfiY8Tszkau15hHreRag==",
"requires": {
"deep-assign": "^3.0.0"
}
@ -6339,9 +6339,9 @@
"integrity": "sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ=="
},
"@react-native-community/clipboard": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.0.tgz",
"integrity": "sha512-XoujTQuXhPgQLVLn7HPt7615jBEGzJm1Nhos0COdreBIz3qWIi5noYZth8jBFctf8FG5tpe24XTZNDz5udgqQQ=="
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
"integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA=="
},
"@react-native-community/eslint-config": {
"version": "2.0.0",
@ -19020,9 +19020,9 @@
"integrity": "sha512-KTIy7lExwMtB6pOpCARyUzFj5EzYTh+A1GN/FB5Eb0LrW5C6hbb1kdj9K2/RHyZC+wyAJD1M823ZaDCU6n6cLA=="
},
"react-native-image-picker": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-3.1.1.tgz",
"integrity": "sha512-7ZtOjFzfnsguNimyO1O/aASK5YBAPPtKmfEqWGCdfOft6cWctaQGOhZgbyEa+zWq6y2NIxo7306IlaCs+PXkog=="
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-3.1.4.tgz",
"integrity": "sha512-5pRmrBx+vZcf/UH6n95gxnBq5B7tRDZWIDnhvM4JxlthOChuvEEiShN+MMs7ue+lK26RXws5BOgKGd6MtQI/LQ=="
},
"react-native-inappbrowser-reborn": {
"version": "git+https://github.com/BlueWallet/react-native-inappbrowser.git#fa2d8e1763e46dd12a7e53081e97a0f908049103",

View File

@ -11,6 +11,7 @@
"babel-eslint": "^10.1.0",
"babel-jest": "^26.1.0",
"babel-preset-flow": "^6.23.0",
"detox-recorder": "^1.0.149",
"eslint": "^7.5.0",
"eslint-plugin-babel": "^5.3.1",
"eslint-plugin-import": "^2.22.0",
@ -66,9 +67,9 @@
},
"dependencies": {
"@babel/preset-env": "7.12.1",
"@react-native-async-storage/async-storage": "1.13.2",
"@react-native-async-storage/async-storage": "1.13.3",
"@react-native-community/blur": "3.6.0",
"@react-native-community/clipboard": "1.5.0",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/geolocation": "2.0.2",
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/push-notification-ios": "1.8.0",
@ -129,7 +130,7 @@
"react-native-gesture-handler": "1.8.0",
"react-native-handoff": "git+https://github.com/marcosrdz/react-native-handoff.git#f5becc63f3e36bf2da1ed1fc60fc690323e73602",
"react-native-haptic-feedback": "1.11.0",
"react-native-image-picker": "3.1.1",
"react-native-image-picker": "3.1.4",
"react-native-inappbrowser-reborn": "git+https://github.com/BlueWallet/react-native-inappbrowser.git#fa2d8e1763e46dd12a7e53081e97a0f908049103",
"react-native-is-catalyst": "git+https://github.com/BlueWallet/react-native-is-catalyst.git#v1.0.0",
"react-native-level-fs": "3.0.1",

View File

@ -13,7 +13,6 @@ import {
import QRCode from 'react-native-qrcode-svg';
import { useNavigation, useRoute, useTheme, useFocusEffect } from '@react-navigation/native';
import Share from 'react-native-share';
import Handoff from 'react-native-handoff';
import {
BlueLoading,
@ -29,9 +28,9 @@ import {
} from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import BottomModal from '../../components/BottomModal';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import { Chain, BitcoinUnit } from '../../models/bitcoinUnits';
import HandoffSettings from '../../class/handoff';
import HandoffComponent from '../../components/handoff';
import DeeplinkSchemaMatch from '../../class/deeplink-schema-match';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
@ -42,7 +41,6 @@ const ReceiveDetails = () => {
const { walletID } = useRoute().params;
const { wallets, saveToDisk, sleep } = useContext(BlueStorageContext);
const wallet = wallets.find(w => w.getID() === walletID);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const [address, setAddress] = useState('');
const [customLabel, setCustomLabel] = useState();
const [customAmount, setCustomAmount] = useState(0);
@ -138,15 +136,15 @@ const ReceiveDetails = () => {
<View style={styles.scrollBody}>
{isCustom && (
<>
<BlueText style={styles.amount} numberOfLines={1}>
<BlueText testID="CustomAmountText" style={styles.amount} numberOfLines={1}>
{getDisplayAmount()}
</BlueText>
<BlueText style={styles.label} numberOfLines={1}>
<BlueText testID="CustomAmountDescriptionText" style={styles.label} numberOfLines={1}>
{customLabel}
</BlueText>
</>
)}
<View style={styles.qrCodeContainer}>
<View style={styles.qrCodeContainer} testID="BitcoinAddressQRCodeContainer">
<QRCode
value={bip21encoded}
logo={require('../../img/qr-code.png')}
@ -161,7 +159,7 @@ const ReceiveDetails = () => {
<BlueCopyTextToClipboard text={isCustom ? bip21encoded : address} />
</View>
<View style={styles.share}>
<BlueButtonLink title={loc.receive.details_setAmount} onPress={showCustomAmountModal} />
<BlueButtonLink testID="SetCustomAmountButton" title={loc.receive.details_setAmount} onPress={showCustomAmountModal} />
<View>
<SecondButton onPress={handleShareButtonPressed} title={loc.receive.details_share} />
</View>
@ -172,7 +170,6 @@ const ReceiveDetails = () => {
};
const obtainWalletAddress = useCallback(async () => {
HandoffSettings.isHandoffUseEnabled().then(setIsHandOffUseEnabled);
Privacy.enableBlur();
console.log('receive/details - componentDidMount');
wallet.setUserHasSavedExport(true);
@ -302,11 +299,17 @@ const ReceiveDetails = () => {
value={customLabel || ''}
numberOfLines={1}
style={styles.customAmountText}
testID="CustomAmountDescription"
/>
</View>
<BlueSpacing20 />
<View>
<BlueButton style={styles.modalButton} title={loc.receive.details_create} onPress={createCustomAmountAddress} />
<BlueButton
testID="CustomAmountSaveButton"
style={styles.modalButton}
title={loc.receive.details_create}
onPress={createCustomAmountAddress}
/>
<BlueSpacing20 />
</View>
<BlueSpacing20 />
@ -338,8 +341,8 @@ const ReceiveDetails = () => {
return (
<View style={styles.root}>
<StatusBar barStyle="light-content" />
{isHandOffUseEnabled && address !== undefined && showAddress && (
<Handoff
{address !== undefined && showAddress && (
<HandoffComponent
title={`Bitcoin Transaction ${address}`}
type="io.bluewallet.bluewallet"
url={`https://blockstream.info/address/${address}`}

View File

@ -24,7 +24,7 @@ import isCatalyst from 'react-native-is-catalyst';
import { SafeBlueArea, BlueCard, BlueText } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import { BitcoinUnit } from '../../models/bitcoinUnits';
import loc from '../../loc';
import { BlueCurrentTheme } from '../../components/themes';

View File

@ -4,7 +4,6 @@ import { ScrollView, Platform, TouchableWithoutFeedback, TouchableOpacity, Style
import navigationStyle from '../../components/navigationStyle';
import { BlueLoading, BlueText, BlueSpacing20, BlueListItem, BlueCard } from '../../BlueComponents';
import { useNavigation, useTheme } from '@react-navigation/native';
import HandoffSettings from '../../class/handoff';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
@ -15,10 +14,11 @@ const styles = StyleSheet.create({
});
const GeneralSettings = () => {
const { isAdancedModeEnabled, setIsAdancedModeEnabled, wallets } = useContext(BlueStorageContext);
const { isAdancedModeEnabled, setIsAdancedModeEnabled, wallets, isHandOffUseEnabled, setIsHandOffUseEnabledAsyncStorage } = useContext(
BlueStorageContext,
);
const [isLoading, setIsLoading] = useState(true);
const [isAdancedModeSwitchEnabled, setIsAdancedModeSwitchEnabled] = useState(false);
const [isHandoffUseEnabled, setIsHandoffUseEnabled] = useState(false);
const { navigate } = useNavigation();
const { colors } = useTheme();
const onAdvancedModeSwitch = async value => {
@ -26,15 +26,9 @@ const GeneralSettings = () => {
setIsAdancedModeSwitchEnabled(value);
};
const onHandOffEnabledSwitch = async value => {
await HandoffSettings.setHandoffUseEnabled(value);
setIsHandoffUseEnabled(value);
};
useEffect(() => {
(async () => {
setIsAdancedModeSwitchEnabled(await isAdancedModeEnabled());
setIsHandoffUseEnabled(await HandoffSettings.isHandoffUseEnabled());
setIsLoading(false);
})();
});
@ -69,7 +63,7 @@ const GeneralSettings = () => {
hideChevron
title={loc.settings.general_continuity}
Component={TouchableWithoutFeedback}
switch={{ onValueChange: onHandOffEnabledSwitch, value: isHandoffUseEnabled }}
switch={{ onValueChange: setIsHandOffUseEnabledAsyncStorage, value: isHandOffUseEnabled }}
/>
<BlueCard>
<BlueText>{loc.settings.general_continuity_e}</BlueText>

View File

@ -2,10 +2,9 @@
import React, { useContext, useEffect, useState } from 'react';
import { View, ScrollView, TouchableOpacity, Text, TextInput, Linking, StatusBar, StyleSheet, Keyboard } from 'react-native';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import Handoff from 'react-native-handoff';
import { BlueCard, BlueCopyToClipboardButton, BlueLoading, BlueSpacing20, BlueText, SafeBlueArea } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import HandoffSettings from '../../class/handoff';
import HandoffComponent from '../../components/handoff';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
const dayjs = require('dayjs');
@ -28,7 +27,6 @@ const TransactionsDetails = () => {
const { setOptions } = useNavigation();
const { hash } = useRoute().params;
const { saveToDisk, txMetadata, wallets, getTransactions } = useContext(BlueStorageContext);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const [from, setFrom] = useState();
const [to, setTo] = useState();
const [isLoading, setIsLoading] = useState(true);
@ -110,11 +108,6 @@ const TransactionsDetails = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [hash, wallets]);
useEffect(() => {
HandoffSettings.isHandoffUseEnabled().then(setIsHandOffUseEnabled);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const handleOnSaveButtonTapped = () => {
Keyboard.dismiss();
txMetadata[tx.hash] = { memo };
@ -136,9 +129,11 @@ const TransactionsDetails = () => {
return (
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={styles.root}>
{isHandOffUseEnabled && (
<Handoff title={`Bitcoin Transaction ${tx.hash}`} type="io.bluewallet.bluewallet" url={`https://blockstream.info/tx/${tx.hash}`} />
)}
<HandoffComponent
title={`Bitcoin Transaction ${tx.hash}`}
type="io.bluewallet.bluewallet"
url={`https://blockstream.info/tx/${tx.hash}`}
/>
<StatusBar barStyle="default" />
<ScrollView style={styles.scroll}>
<BlueCard>

View File

@ -1,7 +1,6 @@
import React, { useContext, useEffect, useRef, useState } from 'react';
import { View, ActivityIndicator, Text, TouchableOpacity, StyleSheet, StatusBar } from 'react-native';
import { Icon } from 'react-native-elements';
import Handoff from 'react-native-handoff';
import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import {
@ -19,7 +18,7 @@ import {
import navigationStyle from '../../components/navigationStyle';
import { HDSegwitBech32Transaction } from '../../class';
import { BitcoinUnit } from '../../models/bitcoinUnits';
import HandoffSettings from '../../class/handoff';
import HandoffComponent from '../../components/handoff';
import loc, { formatBalanceWithoutSuffix } from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
@ -31,7 +30,6 @@ const buttonStatus = Object.freeze({
const TransactionsStatus = () => {
const { setSelectedWallet, wallets, txMetadata, getTransactions } = useContext(BlueStorageContext);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const { hash } = useRoute().params;
const { navigate, setOptions } = useNavigation();
const { colors } = useTheme();
@ -127,7 +125,6 @@ const TransactionsStatus = () => {
useEffect(() => {
console.log('transactions/details - useEffect');
HandoffSettings.isHandoffUseEnabled().then(setIsHandOffUseEnabled);
}, []);
const checkPossibilityOfCPFP = async () => {
@ -282,9 +279,12 @@ const TransactionsStatus = () => {
}
return (
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={[styles.root, stylesHook.root]}>
{isHandOffUseEnabled && (
<Handoff title={`Bitcoin Transaction ${tx.hash}`} type="io.bluewallet.bluewallet" url={`https://blockstream.info/tx/${tx.hash}`} />
)}
<HandoffComponent
title={`Bitcoin Transaction ${tx.hash}`}
type="io.bluewallet.bluewallet"
url={`https://blockstream.info/tx/${tx.hash}`}
/>
<StatusBar barStyle="default" />
<View style={styles.container}>
<BlueCard>

View File

@ -5,7 +5,7 @@ import { useTheme, useNavigation, useFocusEffect, useRoute } from '@react-naviga
import { BlueSpacing20, SafeBlueArea, BlueText, BlueCopyTextToClipboard, BlueCard } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import Biometric from '../../class/biometrics';
import { LegacyWallet, LightningCustodianWallet, SegwitBech32Wallet, SegwitP2SHWallet, WatchOnlyWallet } from '../../class';
import loc from '../../loc';

View File

@ -5,7 +5,7 @@ import { useFocusEffect, useNavigation, useRoute, useTheme } from '@react-naviga
import { BlueSpacing20, BlueText, SafeBlueArea } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import { DynamicQRCode } from '../../components/DynamicQRCode';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import Biometric from '../../class/biometrics';
import loc from '../../loc';
import { SquareButton } from '../../components/SquareButton';

View File

@ -15,7 +15,7 @@ import {
BlueSpacing20,
} from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import WalletImport from '../../class/wallet-import';
import loc from '../../loc';
const isDesktop = getSystemName() === 'Mac OS X';

View File

@ -4,7 +4,7 @@ import { useNavigation, useRoute, useTheme } from '@react-navigation/native';
import { BlueSpacing20, SafeBlueArea, BlueText, BlueButton } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';

View File

@ -6,7 +6,7 @@ import { ScrollView } from 'react-native-gesture-handler';
import { BlueButton, BlueCopyTextToClipboard, BlueSpacing20, BlueText, BlueTextCentered, SafeBlueArea } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
import { LightningCustodianWallet } from '../../class';

View File

@ -21,7 +21,6 @@ import {
import { launchImageLibrary } from 'react-native-image-picker';
import Clipboard from '@react-native-community/clipboard';
import { Icon } from 'react-native-elements';
import Handoff from 'react-native-handoff';
import { useRoute, useNavigation, useTheme, useFocusEffect } from '@react-navigation/native';
import isCatalyst from 'react-native-is-catalyst';
@ -30,7 +29,7 @@ import { BlueTransactionListItem, BlueWalletNavigationHeader, BlueAlertWalletExp
import WalletGradient from '../../class/wallet-gradient';
import navigationStyle from '../../components/navigationStyle';
import { LightningCustodianWallet, MultisigHDWallet, WatchOnlyWallet } from '../../class';
import HandoffSettings from '../../class/handoff';
import HandoffComponent from '../../components/handoff';
import ActionSheet from '../ActionSheet';
import loc from '../../loc';
import { FContainer, FButton } from '../../components/FloatButtons';
@ -50,7 +49,6 @@ const buttonFontSize =
const WalletTransactions = () => {
const { wallets, saveToDisk, setSelectedWallet } = useContext(BlueStorageContext);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const [isManageFundsModalVisible, setIsManageFundsModalVisible] = useState(false);
const { walletID } = useRoute().params;
@ -107,7 +105,6 @@ const WalletTransactions = () => {
};
useEffect(() => {
HandoffSettings.isHandoffUseEnabled().then(setIsHandOffUseEnabled);
const interval = setInterval(() => setTimeElapsed(prev => prev + 1), 60000);
return () => {
clearInterval(interval);
@ -590,8 +587,8 @@ const WalletTransactions = () => {
return (
<View style={styles.flex}>
<StatusBar barStyle="light-content" backgroundColor={WalletGradient.headerColorFor(wallet.current.type)} />
{wallet.current.chain === Chain.ONCHAIN && wallet.current.type !== MultisigHDWallet.type && isHandOffUseEnabled && (
<Handoff
{wallet.current.chain === Chain.ONCHAIN && wallet.current.type !== MultisigHDWallet.type && (
<HandoffComponent
title={`Bitcoin Wallet ${wallet.current.getLabel()}`}
type="io.bluewallet.bluewallet"
url={`https://blockpath.com/search/addr?q=${wallet.current.getXpub()}`}
@ -678,6 +675,7 @@ const WalletTransactions = () => {
<FContainer>
{wallet.current.allowReceive() && (
<FButton
testID="ReceiveButton"
text={loc.receive.header}
onPress={() => {
if (wallet.current.chain === Chain.OFFCHAIN) {

View File

@ -36,7 +36,7 @@ import MultipleStepsListItem, {
MultipleStepsListItemButtohType,
MultipleStepsListItemDashType,
} from '../../components/MultipleStepsListItem';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import Biometric from '../../class/biometrics';
import QRCode from 'react-native-qrcode-svg';
import { SquareButton } from '../../components/SquareButton';

View File

@ -5,7 +5,7 @@ import { useFocusEffect, useRoute, useNavigation, useTheme } from '@react-naviga
import navigationStyle from '../../components/navigationStyle';
import { BlueSpacing20, SafeBlueArea, BlueText, BlueCopyTextToClipboard } from '../../BlueComponents';
import Privacy from '../../Privacy';
import Privacy from '../../blue_modules/Privacy';
import Biometric from '../../class/biometrics';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';

View File

@ -31,7 +31,7 @@ describe('BlueWallet UI Tests', () => {
process.env.TRAVIS && require('fs').writeFileSync(lockFile, '1');
});
it('can create wallet, reload app and it persists', async () => {
it('can create wallet, reload app and it persists. then go to receive screen, set custom amount and label.', async () => {
const lockFile = '/tmp/travislock.' + hashIt(jasmine.currentTest.fullName);
if (process.env.TRAVIS) {
if (require('fs').existsSync(lockFile))
@ -44,6 +44,22 @@ describe('BlueWallet UI Tests', () => {
await device.launchApp({ newInstance: true });
await yo('WalletsList');
await expect(element(by.id('cr34t3d'))).toBeVisible();
await element(by.id('cr34t3d')).tap();
await element(by.id('ReceiveButton')).tap();
await element(by.text('Yes, I have')).tap();
await element(by.text(`No, and don't ask me again`)).tap();
await yo('BitcoinAddressQRCodeContainer');
await yo('BlueCopyTextToClipboard');
await element(by.id('SetCustomAmountButton')).tap();
await element(by.id('BitcoinAmountInput')).typeText('1');
await element(by.id('CustomAmountDescription')).typeText('test');
await element(by.id('CustomAmountSaveButton')).tap();
await sup('1 BTC');
await sup('test');
await yo('BitcoinAddressQRCodeContainer');
await yo('BlueCopyTextToClipboard');
await device.pressBack();
await device.pressBack();
process.env.TRAVIS && require('fs').writeFileSync(lockFile, '1');
});