mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2024-11-19 18:00:17 +01:00
Merge branch 'master' into notifcapable
This commit is contained in:
commit
35f8b7c1e8
@ -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>
|
||||
|
12
Privacy.js
12
Privacy.js
@ -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);
|
||||
}
|
||||
}
|
10
blue_modules/Privacy.android.js
Normal file
10
blue_modules/Privacy.android.js
Normal file
@ -0,0 +1,10 @@
|
||||
import Obscure from 'react-native-obscure';
|
||||
export default class Privacy {
|
||||
static enableBlur() {
|
||||
Obscure.activateObscure();
|
||||
}
|
||||
|
||||
static disableBlur() {
|
||||
Obscure.deactivateObscure();
|
||||
}
|
||||
}
|
10
blue_modules/Privacy.ios.js
Normal file
10
blue_modules/Privacy.ios.js
Normal 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
5
blue_modules/Privacy.js
Normal file
@ -0,0 +1,5 @@
|
||||
export default class Privacy {
|
||||
static enableBlur() {}
|
||||
|
||||
static disableBlur() {}
|
||||
}
|
@ -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}
|
||||
|
@ -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>} */
|
||||
|
@ -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
15
components/handoff.ios.js
Normal 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
5
components/handoff.js
Normal file
@ -0,0 +1,5 @@
|
||||
const HandoffComponent = () => {
|
||||
return null;
|
||||
};
|
||||
|
||||
export default HandoffComponent;
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
104
loc/nl_nl.json
104
loc/nl_nl.json
@ -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
18
package-lock.json
generated
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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}`}
|
||||
|
@ -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';
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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';
|
||||
|
@ -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) {
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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');
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user