replace xmr.to with SideShift.ai (#710)

replace xmr.to with SideShift.ai
random bugfixes
upgrade gradle & dependencies
This commit is contained in:
m2049r 2021-02-13 00:01:19 +01:00 committed by GitHub
parent ab6069058b
commit 57ddddfce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
133 changed files with 3404 additions and 3565 deletions

View File

@ -7,8 +7,8 @@ android {
applicationId "com.m2049r.xmrwallet" applicationId "com.m2049r.xmrwallet"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 602 versionCode 702
versionName "1.16.2 'Karmic Nodes'" versionName "1.17.2 'Druk'"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild { externalNativeBuild {
cmake { cmake {
@ -56,6 +56,9 @@ android {
debug { debug {
applicationIdSuffix ".debug" applicationIdSuffix ".debug"
} }
applicationVariants.all { variant ->
variant.buildConfigField "String", "ID_A", "\"" + getId("ID_A") + "\""
}
} }
externalNativeBuild { externalNativeBuild {
@ -109,10 +112,16 @@ android {
} }
} }
def getId(name) {
def Properties props = new Properties()
props.load(new FileInputStream(new File('monerujo.id')))
return props[name]
}
dependencies { dependencies {
implementation 'androidx.core:core:1.3.2' implementation 'androidx.core:core:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0-alpha03' implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2018 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.levin.scanner; package com.m2049r.levin.scanner;
import java.net.InetAddress; import java.net.InetAddress;

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2017-2020 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet; package com.m2049r.xmrwallet;
import android.app.PendingIntent; import android.app.PendingIntent;

View File

@ -301,24 +301,21 @@ public class LoginActivity extends BaseActivity
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setOnButtonListener(new Toolbar.OnButtonListener() { toolbar.setOnButtonListener(type -> {
@Override switch (type) {
public void onButton(int type) { case Toolbar.BUTTON_BACK:
switch (type) { onBackPressed();
case Toolbar.BUTTON_BACK: break;
onBackPressed(); case Toolbar.BUTTON_CLOSE:
break; finish();
case Toolbar.BUTTON_CLOSE: break;
finish(); case Toolbar.BUTTON_CREDITS:
break; CreditsFragment.display(getSupportFragmentManager());
case Toolbar.BUTTON_CREDITS: break;
CreditsFragment.display(getSupportFragmentManager()); case Toolbar.BUTTON_NONE:
break; break;
case Toolbar.BUTTON_NONE: default:
break; Timber.e("Button " + type + "pressed - how can this be?");
default:
Timber.e("Button " + type + "pressed - how can this be?");
}
} }
}); });
@ -366,34 +363,31 @@ public class LoginActivity extends BaseActivity
public void onWalletDetails(final String walletName) { public void onWalletDetails(final String walletName) {
Timber.d("details for wallet .%s.", walletName); Timber.d("details for wallet .%s.", walletName);
if (checkServiceRunning()) return; if (checkServiceRunning()) return;
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
@Override switch (which) {
public void onClick(DialogInterface dialog, int which) { case DialogInterface.BUTTON_POSITIVE:
switch (which) { final File walletFile = Helper.getWalletFile(LoginActivity.this, walletName);
case DialogInterface.BUTTON_POSITIVE: if (WalletManager.getInstance().walletExists(walletFile)) {
final File walletFile = Helper.getWalletFile(LoginActivity.this, walletName); Helper.promptPassword(LoginActivity.this, walletName, true, new Helper.PasswordAction() {
if (WalletManager.getInstance().walletExists(walletFile)) { @Override
Helper.promptPassword(LoginActivity.this, walletName, true, new Helper.PasswordAction() { public void act(String walletName1, String password, boolean fingerprintUsed) {
@Override if (checkDevice(walletName1, password))
public void act(String walletName, String password, boolean fingerprintUsed) { startDetails(walletFile, password, GenerateReviewFragment.VIEW_TYPE_DETAILS);
if (checkDevice(walletName, password)) }
startDetails(walletFile, password, GenerateReviewFragment.VIEW_TYPE_DETAILS);
}
@Override @Override
public void fail(String walletName, String password, boolean fingerprintUsed) { public void fail(String walletName1, String password, boolean fingerprintUsed) {
} }
}); });
} else { // this cannot really happen as we prefilter choices } else { // this cannot really happen as we prefilter choices
Timber.e("Wallet missing: %s", walletName); Timber.e("Wallet missing: %s", walletName);
Toast.makeText(LoginActivity.this, getString(R.string.bad_wallet), Toast.LENGTH_SHORT).show(); Toast.makeText(LoginActivity.this, getString(R.string.bad_wallet), Toast.LENGTH_SHORT).show();
} }
break; break;
case DialogInterface.BUTTON_NEGATIVE: case DialogInterface.BUTTON_NEGATIVE:
// do nothing // do nothing
break; break;
}
} }
}; };

View File

@ -56,6 +56,7 @@ import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix; import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.data.BarcodeData; import com.m2049r.xmrwallet.data.BarcodeData;
import com.m2049r.xmrwallet.ledger.LedgerProgressDialog; import com.m2049r.xmrwallet.ledger.LedgerProgressDialog;
import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.Wallet;
@ -468,7 +469,7 @@ public class ReceiveFragment extends Fragment {
Timber.d("CLEARQR"); Timber.d("CLEARQR");
return; return;
} }
bcData = new BarcodeData(BarcodeData.Asset.XMR, address, null, notes, xmrAmount); bcData = new BarcodeData(BarcodeData.Asset.XMR, address, notes, xmrAmount);
int size = Math.max(ivQrCode.getWidth(), ivQrCode.getHeight()); int size = Math.max(ivQrCode.getWidth(), ivQrCode.getHeight());
Bitmap qr = generate(bcData.getUriString(), size, size); Bitmap qr = generate(bcData.getUriString(), size, size);
if (qr != null) { if (qr != null) {

View File

@ -16,8 +16,11 @@
package com.m2049r.xmrwallet; package com.m2049r.xmrwallet;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.InputType; import android.text.InputType;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -25,6 +28,7 @@ import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@ -77,6 +81,9 @@ public class TxFragment extends Fragment {
private TextView tvTxXmrToKey; private TextView tvTxXmrToKey;
private TextView tvDestinationBtc; private TextView tvDestinationBtc;
private TextView tvTxAmountBtc; private TextView tvTxAmountBtc;
private TextView tvXmrToSupport;
private TextView tvXmrToKeyLabel;
private ImageView tvXmrToLogo;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -88,6 +95,9 @@ public class TxFragment extends Fragment {
tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey); tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey);
tvDestinationBtc = view.findViewById(R.id.tvDestinationBtc); tvDestinationBtc = view.findViewById(R.id.tvDestinationBtc);
tvTxAmountBtc = view.findViewById(R.id.tvTxAmountBtc); tvTxAmountBtc = view.findViewById(R.id.tvTxAmountBtc);
tvXmrToSupport = view.findViewById(R.id.tvXmrToSupport);
tvXmrToKeyLabel = view.findViewById(R.id.tvXmrToKeyLabel);
tvXmrToLogo = view.findViewById(R.id.tvXmrToLogo);
tvAccount = view.findViewById(R.id.tvAccount); tvAccount = view.findViewById(R.id.tvAccount);
tvAddress = view.findViewById(R.id.tvAddress); tvAddress = view.findViewById(R.id.tvAddress);
@ -104,12 +114,9 @@ public class TxFragment extends Fragment {
etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT); etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT);
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() { tvTxXmrToKey.setOnClickListener(v -> {
@Override Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
public void onClick(View v) { Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
}
}); });
Bundle args = getArguments(); Bundle args = getArguments();
@ -283,12 +290,36 @@ public class TxFragment extends Fragment {
showBtcInfo(); showBtcInfo();
} }
@SuppressLint("SetTextI18n")
void showBtcInfo() { void showBtcInfo() {
if (userNotes.xmrtoKey != null) { if (userNotes.xmrtoKey != null) {
cvXmrTo.setVisibility(View.VISIBLE); cvXmrTo.setVisibility(View.VISIBLE);
tvTxXmrToKey.setText(userNotes.xmrtoKey); String key = userNotes.xmrtoKey;
if ("xmrto".equals(userNotes.xmrtoTag)) { // legacy xmr.to service :(
key = "xmrto-" + key;
}
tvTxXmrToKey.setText(key);
tvDestinationBtc.setText(userNotes.xmrtoDestination); tvDestinationBtc.setText(userNotes.xmrtoDestination);
tvTxAmountBtc.setText(userNotes.xmrtoAmount + " BTC"); tvTxAmountBtc.setText(userNotes.xmrtoAmount + " BTC");
switch (userNotes.xmrtoTag) {
case "xmrto":
tvXmrToSupport.setVisibility(View.GONE);
tvXmrToKeyLabel.setVisibility(View.INVISIBLE);
tvXmrToLogo.setImageResource(R.drawable.ic_xmrto_logo);
break;
case "side": // defaults in layout - just add underline
tvXmrToSupport.setPaintFlags(tvXmrToSupport.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvXmrToSupport.setOnClickListener(v -> {
Uri uri = Uri.parse("https://sideshift.ai/orders/" + userNotes.xmrtoKey);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
});
break;
default:
tvXmrToSupport.setVisibility(View.GONE);
tvXmrToKeyLabel.setVisibility(View.INVISIBLE);
tvXmrToLogo.setVisibility(View.GONE);
}
} else { } else {
cvXmrTo.setVisibility(View.GONE); cvXmrTo.setVisibility(View.GONE);
} }

View File

@ -16,14 +16,13 @@
package com.m2049r.xmrwallet; package com.m2049r.xmrwallet;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.model.NetworkType; import com.m2049r.xmrwallet.model.NetworkType;
import com.m2049r.xmrwallet.util.DayNightMode;
import com.m2049r.xmrwallet.util.LocaleHelper; import com.m2049r.xmrwallet.util.LocaleHelper;
import com.m2049r.xmrwallet.util.NightmodeHelper; import com.m2049r.xmrwallet.util.NightmodeHelper;

View File

@ -21,7 +21,6 @@ import android.net.Uri;
import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.util.BitcoinAddressValidator; import com.m2049r.xmrwallet.util.BitcoinAddressValidator;
import com.m2049r.xmrwallet.util.OpenAliasHelper; import com.m2049r.xmrwallet.util.OpenAliasHelper;
import com.m2049r.xmrwallet.util.PaymentProtocolHelper;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
@ -43,7 +42,6 @@ public class BarcodeData {
static final String BTC_SCHEME = "bitcoin"; static final String BTC_SCHEME = "bitcoin";
static final String BTC_DESCRIPTION = "message"; static final String BTC_DESCRIPTION = "message";
static final String BTC_AMOUNT = "amount"; static final String BTC_AMOUNT = "amount";
static final String BTC_BIP70_PARM = "r";
public enum Asset { public enum Asset {
XMR, BTC XMR, BTC
@ -52,8 +50,7 @@ public class BarcodeData {
public enum Security { public enum Security {
NORMAL, NORMAL,
OA_NO_DNSSEC, OA_NO_DNSSEC,
OA_DNSSEC, OA_DNSSEC
BIP70
} }
final public Asset asset; final public Asset asset;
@ -62,7 +59,6 @@ public class BarcodeData {
final public String amount; final public String amount;
final public String description; final public String description;
final public Security security; final public Security security;
final public String bip70;
public BarcodeData(Asset asset, String address) { public BarcodeData(Asset asset, String address) {
this(asset, address, null, null, null, Security.NORMAL); this(asset, address, null, null, null, Security.NORMAL);
@ -80,21 +76,19 @@ public class BarcodeData {
this(asset, address, null, description, amount, Security.NORMAL); this(asset, address, null, description, amount, Security.NORMAL);
} }
public BarcodeData(Asset asset, String address, String addressName, String description, String amount, Security security) { public BarcodeData(Asset asset, String address, String description, String amount) {
this(asset, address, addressName, null, description, amount, security); this(asset, address, null, description, amount, Security.NORMAL);
} }
public BarcodeData(Asset asset, String address, String addressName, String bip70, String description, String amount, Security security) { public BarcodeData(Asset asset, String address, String addressName, String description, String amount, Security security) {
this.asset = asset; this.asset = asset;
this.address = address; this.address = address;
this.bip70 = bip70;
this.addressName = addressName; this.addressName = addressName;
this.description = description; this.description = description;
this.amount = amount; this.amount = amount;
this.security = security; this.security = security;
} }
public Uri getUri() { public Uri getUri() {
return Uri.parse(getUriString()); return Uri.parse(getUriString());
} }
@ -127,10 +121,6 @@ public class BarcodeData {
if (bcData == null) { if (bcData == null) {
bcData = parseBitcoinUri(qrCode); bcData = parseBitcoinUri(qrCode);
} }
// check for btc payment uri (like bitpay)
if (bcData == null) {
bcData = parseBitcoinPaymentUrl(qrCode);
}
// check for naked btc address // check for naked btc address
if (bcData == null) { if (bcData == null) {
bcData = parseBitcoinNaked(qrCode); bcData = parseBitcoinNaked(qrCode);
@ -195,7 +185,7 @@ public class BarcodeData {
Timber.d("address invalid"); Timber.d("address invalid");
return null; return null;
} }
return new BarcodeData(Asset.XMR, address, paymentId, description, amount); return new BarcodeData(Asset.XMR, address, description, amount);
} }
static public BarcodeData parseMoneroNaked(String address) { static public BarcodeData parseMoneroNaked(String address) {
@ -245,17 +235,9 @@ public class BarcodeData {
} }
String description = parms.get(BTC_DESCRIPTION); String description = parms.get(BTC_DESCRIPTION);
String address = parts[0]; // no need to decode as there can bo no special characters String address = parts[0]; // no need to decode as there can bo no special characters
if (address.isEmpty()) { // possibly a BIP72 uri if (address.isEmpty()) {
String bip70 = parms.get(BTC_BIP70_PARM); Timber.d("no address");
if (bip70 == null) { return null;
Timber.d("no address and can't find pp url");
return null;
}
if (!PaymentProtocolHelper.isHttp(bip70)) {
Timber.d("[%s] is not http url", bip70);
return null;
}
return new BarcodeData(BarcodeData.Asset.BTC, null, null, bip70, description, null, Security.NORMAL);
} }
if (!BitcoinAddressValidator.validate(address)) { if (!BitcoinAddressValidator.validate(address)) {
Timber.d("BTC address (%s) invalid", address); Timber.d("BTC address (%s) invalid", address);
@ -270,22 +252,7 @@ public class BarcodeData {
return null; // we have an amount but its not a number! return null; // we have an amount but its not a number!
} }
} }
return new BarcodeData(BarcodeData.Asset.BTC, address, null, description, amount); return new BarcodeData(BarcodeData.Asset.BTC, address, description, amount);
}
// https://bitpay.com/invoice?id=xxx
// https://bitpay.com/i/KbMdd4EhnLXSbpWGKsaeo6
static public BarcodeData parseBitcoinPaymentUrl(String url) {
Timber.d("parseBitcoinUri=%s", url);
if (url == null) return null;
if (!PaymentProtocolHelper.isHttp(url)) {
Timber.d("[%s] is not http url", url);
return null;
}
return new BarcodeData(Asset.BTC, url);
} }
static public BarcodeData parseBitcoinNaked(String address) { static public BarcodeData parseBitcoinNaked(String address) {
@ -333,6 +300,10 @@ public class BarcodeData {
} }
String paymentId = oaAttrs.get(OpenAliasHelper.OA1_PAYMENTID); String paymentId = oaAttrs.get(OpenAliasHelper.OA1_PAYMENTID);
if (paymentId != null) {
Timber.e("paymentId not supported");
return null;
}
String description = oaAttrs.get(OpenAliasHelper.OA1_DESCRIPTION); String description = oaAttrs.get(OpenAliasHelper.OA1_DESCRIPTION);
if (description == null) { if (description == null) {
description = oaAttrs.get(OpenAliasHelper.OA1_NAME); description = oaAttrs.get(OpenAliasHelper.OA1_NAME);
@ -348,13 +319,9 @@ public class BarcodeData {
return null; // we have an amount but its not a number! return null; // we have an amount but its not a number!
} }
} }
if ((paymentId != null) && !Wallet.isPaymentIdValid(paymentId)) {
Timber.d("paymentId invalid");
return null;
}
Security sec = dnssec ? BarcodeData.Security.OA_DNSSEC : BarcodeData.Security.OA_NO_DNSSEC; Security sec = dnssec ? BarcodeData.Security.OA_DNSSEC : BarcodeData.Security.OA_NO_DNSSEC;
return new BarcodeData(asset, address, addressName, paymentId, description, amount, sec); return new BarcodeData(asset, address, addressName, description, amount, sec);
} }
} }

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2020 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.data; package com.m2049r.xmrwallet.data;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -20,6 +20,7 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.m2049r.xmrwallet.model.PendingTransaction; import com.m2049r.xmrwallet.model.PendingTransaction;
import com.m2049r.xmrwallet.model.Wallet;
// https://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents // https://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents
public class TxData implements Parcelable { public class TxData implements Parcelable {
@ -52,6 +53,10 @@ public class TxData implements Parcelable {
return amount; return amount;
} }
public double getAmountAsDouble() {
return 1.0 * amount / 1000000000000L;
}
public int getMixin() { public int getMixin() {
return mixin; return mixin;
} }
@ -68,6 +73,10 @@ public class TxData implements Parcelable {
this.amount = amount; this.amount = amount;
} }
public void setAmount(double amount) {
this.amount = Wallet.getAmountFromDouble(amount);
}
public void setMixin(int mixin) { public void setMixin(int mixin) {
this.mixin = mixin; this.mixin = mixin;
} }

View File

@ -18,11 +18,20 @@ package com.m2049r.xmrwallet.data;
import android.os.Parcel; import android.os.Parcel;
public class TxDataBtc extends TxData { import androidx.annotation.NonNull;
private String xmrtoUuid; import lombok.Getter;
import lombok.Setter;
public class TxDataBtc extends TxData {
@Getter
@Setter
private String xmrtoOrderId; // shown in success screen
@Getter
@Setter
private String btcAddress; private String btcAddress;
private String bip70; @Getter
@Setter
private double btcAmount; private double btcAmount;
public TxDataBtc() { public TxDataBtc() {
@ -33,44 +42,11 @@ public class TxDataBtc extends TxData {
super(txDataBtc); super(txDataBtc);
} }
public String getXmrtoUuid() {
return xmrtoUuid;
}
public void setXmrtoUuid(String xmrtoUuid) {
this.xmrtoUuid = xmrtoUuid;
}
public String getBtcAddress() {
return btcAddress;
}
public void setBtcAddress(String btcAddress) {
this.btcAddress = btcAddress;
}
public String getBip70() {
return bip70;
}
public void setBip70(String bip70) {
this.bip70 = bip70;
}
public double getBtcAmount() {
return btcAmount;
}
public void setBtcAmount(double btcAmount) {
this.btcAmount = btcAmount;
}
@Override @Override
public void writeToParcel(Parcel out, int flags) { public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags); super.writeToParcel(out, flags);
out.writeString(xmrtoUuid); out.writeString(xmrtoOrderId);
out.writeString(btcAddress); out.writeString(btcAddress);
out.writeString(bip70);
out.writeDouble(btcAmount); out.writeDouble(btcAmount);
} }
@ -87,21 +63,19 @@ public class TxDataBtc extends TxData {
protected TxDataBtc(Parcel in) { protected TxDataBtc(Parcel in) {
super(in); super(in);
xmrtoUuid = in.readString(); xmrtoOrderId = in.readString();
btcAddress = in.readString(); btcAddress = in.readString();
bip70 = in.readString();
btcAmount = in.readDouble(); btcAmount = in.readDouble();
} }
@NonNull
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(",xmrtoUuid:"); sb.append("xmrtoOrderId:");
sb.append(xmrtoUuid); sb.append(xmrtoOrderId);
sb.append(",btcAddress:"); sb.append(",btcAddress:");
sb.append(btcAddress); sb.append(btcAddress);
sb.append(",bip70:");
sb.append(bip70);
sb.append(",btcAmount:"); sb.append(",btcAmount:");
sb.append(btcAmount); sb.append(btcAmount);
return sb.toString(); return sb.toString();

View File

@ -16,16 +16,16 @@
package com.m2049r.xmrwallet.data; package com.m2049r.xmrwallet.data;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderStatus; import com.m2049r.xmrwallet.service.shift.sideshift.api.CreateOrder;
import com.m2049r.xmrwallet.util.Helper;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import timber.log.Timber;
public class UserNotes { public class UserNotes {
public String txNotes = ""; public String txNotes = "";
public String note = ""; public String note = "";
public String xmrtoTag = null;
public String xmrtoKey = null; public String xmrtoKey = null;
public String xmrtoAmount = null; // could be a double - but we are not doing any calculations public String xmrtoAmount = null; // could be a double - but we are not doing any calculations
public String xmrtoDestination = null; public String xmrtoDestination = null;
@ -35,13 +35,14 @@ public class UserNotes {
return; return;
} }
this.txNotes = txNotes; this.txNotes = txNotes;
Pattern p = Pattern.compile("^\\{(xmrto-\\w{6}),([0-9.]*)BTC,(\\w*)\\} ?(.*)"); Pattern p = Pattern.compile("^\\{([a-z]+)-(\\w{6,}),([0-9.]*)BTC,(\\w*)\\} ?(.*)");
Matcher m = p.matcher(txNotes); Matcher m = p.matcher(txNotes);
if (m.find()) { if (m.find()) {
xmrtoKey = m.group(1); xmrtoTag = m.group(1);
xmrtoAmount = m.group(2); xmrtoKey = m.group(2);
xmrtoDestination = m.group(3); xmrtoAmount = m.group(3);
note = m.group(4); xmrtoDestination = m.group(4);
note = m.group(5);
} else { } else {
note = txNotes; note = txNotes;
} }
@ -56,12 +57,14 @@ public class UserNotes {
txNotes = buildTxNote(); txNotes = buildTxNote();
} }
public void setXmrtoStatus(QueryOrderStatus xmrtoStatus) { public void setXmrtoOrder(CreateOrder order) {
if (xmrtoStatus != null) { if (order != null) {
xmrtoKey = xmrtoStatus.getUuid(); xmrtoTag = order.TAG;
xmrtoAmount = String.valueOf(xmrtoStatus.getBtcAmount()); xmrtoKey = order.getOrderId();
xmrtoDestination = xmrtoStatus.getBtcDestAddress(); xmrtoAmount = Helper.getDisplayAmount(order.getBtcAmount());
xmrtoDestination = order.getBtcAddress();
} else { } else {
xmrtoTag = null;
xmrtoKey = null; xmrtoKey = null;
xmrtoAmount = null; xmrtoAmount = null;
xmrtoDestination = null; xmrtoDestination = null;
@ -70,11 +73,13 @@ public class UserNotes {
} }
private String buildTxNote() { private String buildTxNote() {
StringBuffer sb = new StringBuffer(); StringBuilder sb = new StringBuilder();
if (xmrtoKey != null) { if (xmrtoKey != null) {
if ((xmrtoAmount == null) || (xmrtoDestination == null)) if ((xmrtoAmount == null) || (xmrtoDestination == null))
throw new IllegalArgumentException("Broken notes"); throw new IllegalArgumentException("Broken notes");
sb.append("{"); sb.append("{");
sb.append(xmrtoTag);
sb.append("-");
sb.append(xmrtoKey); sb.append(xmrtoKey);
sb.append(","); sb.append(",");
sb.append(xmrtoAmount); sb.append(xmrtoAmount);

View File

@ -27,7 +27,6 @@ import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.R; import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;

View File

@ -34,6 +34,8 @@ import android.widget.ImageButton;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import com.m2049r.xmrwallet.R; import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.data.BarcodeData; import com.m2049r.xmrwallet.data.BarcodeData;
@ -45,9 +47,6 @@ import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.util.BitcoinAddressValidator; import com.m2049r.xmrwallet.util.BitcoinAddressValidator;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.OpenAliasHelper; import com.m2049r.xmrwallet.util.OpenAliasHelper;
import com.m2049r.xmrwallet.util.PaymentProtocolHelper;
import com.m2049r.xmrwallet.xmrto.XmrToError;
import com.m2049r.xmrwallet.xmrto.XmrToException;
import java.util.Map; import java.util.Map;
@ -92,8 +91,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
private ImageButton bPasteAddress; private ImageButton bPasteAddress;
private boolean resolvingOA = false; private boolean resolvingOA = false;
private boolean resolvingPP = false;
private String resolvedPP = null;
OnScanListener onScanListener; OnScanListener onScanListener;
@ -125,20 +122,11 @@ public class SendAddressWizardFragment extends SendWizardFragment {
@Override @Override
public void onFocusChange(View v, boolean hasFocus) { public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) { if (!hasFocus) {
View next = etAddress;
String enteredAddress = etAddress.getEditText().getText().toString().trim(); String enteredAddress = etAddress.getEditText().getText().toString().trim();
String dnsOA = dnsFromOpenAlias(enteredAddress); String dnsOA = dnsFromOpenAlias(enteredAddress);
Timber.d("OpenAlias is %s", dnsOA); Timber.d("OpenAlias is %s", dnsOA);
if (dnsOA != null) { if (dnsOA != null) {
processOpenAlias(dnsOA); processOpenAlias(dnsOA);
next = null;
} else {
// maybe a bip72 or 70 URI
final String bip70 = PaymentProtocolHelper.getBip70(enteredAddress);
if (bip70 != null) {
// looks good - resolve through xmr.to
processBip70(bip70);
}
} }
} }
} }
@ -147,8 +135,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
@Override @Override
public void afterTextChanged(Editable editable) { public void afterTextChanged(Editable editable) {
Timber.d("AFTER: %s", editable.toString()); Timber.d("AFTER: %s", editable.toString());
if (editable.toString().equals(resolvedPP)) return; // no change required
resolvedPP = null;
etAddress.setError(null); etAddress.setError(null);
if (isIntegratedAddress()) { if (isIntegratedAddress()) {
Timber.d("isIntegratedAddress"); Timber.d("isIntegratedAddress");
@ -156,7 +142,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
tvPaymentIdIntegrated.setVisibility(View.VISIBLE); tvPaymentIdIntegrated.setVisibility(View.VISIBLE);
llXmrTo.setVisibility(View.INVISIBLE); llXmrTo.setVisibility(View.INVISIBLE);
sendListener.setMode(SendFragment.Mode.XMR); sendListener.setMode(SendFragment.Mode.XMR);
} else if (isBitcoinAddress() || (resolvedPP != null)) { } else if (isBitcoinAddress()) {
Timber.d("isBitcoinAddress"); Timber.d("isBitcoinAddress");
setBtcMode(); setBtcMode();
} else { } else {
@ -190,14 +176,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
et.setSelection(et.getText().length()); et.setSelection(et.getText().length());
etAddress.requestFocus(); etAddress.requestFocus();
} else { } else {
final String bip70 = PaymentProtocolHelper.getBip70(clip); Toast.makeText(getActivity(), getString(R.string.send_address_invalid), Toast.LENGTH_SHORT).show();
if (bip70 != null) {
final EditText et = etAddress.getEditText();
et.setText(clip);
et.setSelection(et.getText().length());
processBip70(bip70);
} else
Toast.makeText(getActivity(), getString(R.string.send_address_invalid), Toast.LENGTH_SHORT).show();
} }
} }
}); });
@ -273,62 +252,10 @@ public class SendAddressWizardFragment extends SendWizardFragment {
} // else ignore } // else ignore
} }
private void processBip70(final String bip70) {
Timber.d("RESOLVED PP: %s", resolvedPP);
if (resolvingPP) return; // already resolving - just wait
resolvingPP = true;
sendListener.popBarcodeData();
etAddress.setError(getString(R.string.send_address_resolve_bip70));
PaymentProtocolHelper.resolve(bip70, new PaymentProtocolHelper.OnResolvedListener() {
@Override
public void onResolved(BarcodeData.Asset asset, String address, double amount, String resolvedBip70) {
resolvingPP = false;
if (asset != BarcodeData.Asset.BTC)
throw new IllegalArgumentException("only BTC here");
if (resolvedBip70 == null)
throw new IllegalArgumentException("success means we have a pp_url - else die");
final BarcodeData barcodeData =
new BarcodeData(BarcodeData.Asset.BTC, address, null,
resolvedBip70, null, String.valueOf(amount),
BarcodeData.Security.BIP70);
etNotes.post(new Runnable() {
@Override
public void run() {
Timber.d("security is %s", barcodeData.security);
processScannedData(barcodeData);
etNotes.requestFocus();
}
});
}
@Override
public void onFailure(final Exception ex) {
resolvingPP = false;
etAddress.post(new Runnable() {
@Override
public void run() {
int errorMsgId = R.string.send_address_not_bip70;
if (ex instanceof XmrToException) {
XmrToError error = ((XmrToException) ex).getError();
if (error != null) {
errorMsgId = error.getErrorMsgId();
}
}
etAddress.setError(getString(errorMsgId));
}
});
Timber.d("PP FAILED");
}
});
}
private boolean checkAddressNoError() { private boolean checkAddressNoError() {
String address = etAddress.getEditText().getText().toString(); String address = etAddress.getEditText().getText().toString();
return Wallet.isAddressValid(address) return Wallet.isAddressValid(address)
|| BitcoinAddressValidator.validate(address) || BitcoinAddressValidator.validate(address);
|| (resolvedPP != null);
} }
private boolean checkAddress() { private boolean checkAddress() {
@ -365,11 +292,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
Timber.d("OpenAlias is %s", dnsOA); Timber.d("OpenAlias is %s", dnsOA);
if (dnsOA != null) { if (dnsOA != null) {
processOpenAlias(dnsOA); processOpenAlias(dnsOA);
} else {
String bip70 = PaymentProtocolHelper.getBip70(enteredAddress);
if (bip70 != null) {
processBip70(bip70);
}
} }
return false; return false;
} }
@ -377,15 +299,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
if (sendListener != null) { if (sendListener != null) {
TxData txData = sendListener.getTxData(); TxData txData = sendListener.getTxData();
if (txData instanceof TxDataBtc) { if (txData instanceof TxDataBtc) {
if (resolvedPP != null) { ((TxDataBtc) txData).setBtcAddress(etAddress.getEditText().getText().toString());
// take the value from the field nonetheless as this is what the user sees
// (in case we have a bug somewhere)
((TxDataBtc) txData).setBip70(etAddress.getEditText().getText().toString());
((TxDataBtc) txData).setBtcAddress(null);
} else {
((TxDataBtc) txData).setBtcAddress(etAddress.getEditText().getText().toString());
((TxDataBtc) txData).setBip70(null);
}
txData.setDestinationAddress(null); txData.setDestinationAddress(null);
} else { } else {
txData.setDestinationAddress(etAddress.getEditText().getText().toString()); txData.setDestinationAddress(etAddress.getEditText().getText().toString());
@ -398,7 +312,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
} }
@Override @Override
public void onAttach(Context context) { public void onAttach(@NonNull Context context) {
super.onAttach(context); super.onAttach(context);
if (context instanceof OnScanListener) { if (context instanceof OnScanListener) {
onScanListener = (OnScanListener) context; onScanListener = (OnScanListener) context;
@ -424,21 +338,11 @@ public class SendAddressWizardFragment extends SendWizardFragment {
} }
public void processScannedData() { public void processScannedData() {
resolvedPP = null;
BarcodeData barcodeData = sendListener.getBarcodeData(); BarcodeData barcodeData = sendListener.getBarcodeData();
if (barcodeData != null) { if (barcodeData != null) {
Timber.d("GOT DATA"); Timber.d("GOT DATA");
if (barcodeData.bip70 != null) { if (barcodeData.address != null) {
setBtcMode();
if (barcodeData.security == BarcodeData.Security.BIP70) {
resolvedPP = barcodeData.bip70;
etAddress.setError(getString(R.string.send_address_bip70));
} else {
processBip70(barcodeData.bip70);
}
etAddress.getEditText().setText(barcodeData.bip70);
} else if (barcodeData.address != null) {
etAddress.getEditText().setText(barcodeData.address); etAddress.getEditText().setText(barcodeData.address);
if (checkAddress()) { if (checkAddress()) {
if (barcodeData.security == BarcodeData.Security.OA_NO_DNSSEC) if (barcodeData.security == BarcodeData.Security.OA_NO_DNSSEC)

View File

@ -19,7 +19,6 @@ package com.m2049r.xmrwallet.fragment.send;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.text.Spanned; import android.text.Spanned;
import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -31,15 +30,14 @@ import com.m2049r.xmrwallet.data.TxDataBtc;
import com.m2049r.xmrwallet.model.Wallet; import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.OkHttpHelper; import com.m2049r.xmrwallet.util.OkHttpHelper;
import com.m2049r.xmrwallet.widget.ExchangeEditText;
import com.m2049r.xmrwallet.widget.ExchangeOtherEditText; import com.m2049r.xmrwallet.widget.ExchangeOtherEditText;
import com.m2049r.xmrwallet.widget.SendProgressView; import com.m2049r.xmrwallet.widget.SendProgressView;
import com.m2049r.xmrwallet.xmrto.XmrToError; import com.m2049r.xmrwallet.service.shift.ShiftError;
import com.m2049r.xmrwallet.xmrto.XmrToException; import com.m2049r.xmrwallet.service.shift.ShiftException;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderParameters; import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderParameters;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi; import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback; import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl; import com.m2049r.xmrwallet.service.shift.sideshift.network.SideShiftApiImpl;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.Locale; import java.util.Locale;
@ -93,17 +91,22 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
@Override @Override
public boolean onValidateFields() { public boolean onValidateFields() {
Timber.i(maxBtc + "/" + minBtc);
if (!etAmount.validate(maxBtc, minBtc)) { if (!etAmount.validate(maxBtc, minBtc)) {
return false; return false;
} }
if (orderParameters == null) {
return false; // this should never happen
}
if (sendListener != null) { if (sendListener != null) {
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData(); TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
String btcString = etAmount.getNativeAmount(); String btcString = etAmount.getNativeAmount();
if (btcString != null) { if (btcString != null) {
try { try {
double btc = Double.parseDouble(btcString); double btc = Double.parseDouble(btcString);
Timber.d("setAmount %f", btc); Timber.d("setBtcAmount %f", btc);
txDataBtc.setBtcAmount(btc); txDataBtc.setBtcAmount(btc);
txDataBtc.setAmount(btc / orderParameters.getPrice());
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
Timber.d(ex.getLocalizedMessage()); Timber.d(ex.getLocalizedMessage());
txDataBtc.setBtcAmount(0); txDataBtc.setBtcAmount(0);
@ -115,17 +118,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
return true; return true;
} }
private void setBip70Mode() {
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
if (txDataBtc.getBip70() == null) {
etAmount.setEditable(true);
Helper.showKeyboard(getActivity());
} else {
etAmount.setEditable(false);
Helper.hideKeyboard(getActivity());
}
}
double maxBtc = 0; double maxBtc = 0;
double minBtc = 0; double minBtc = 0;
@ -152,7 +144,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
etAmount.setAmount(data.amount); etAmount.setAmount(data.amount);
} }
} }
setBip70Mode();
callXmrTo(); callXmrTo();
} }
@ -164,45 +155,37 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
private void processOrderParms(final QueryOrderParameters orderParameters) { private void processOrderParms(final QueryOrderParameters orderParameters) {
this.orderParameters = orderParameters; this.orderParameters = orderParameters;
getView().post(new Runnable() { getView().post(() -> {
@Override final double price = orderParameters.getPrice();
public void run() { etAmount.setExchangeRate(1 / price);
etAmount.setExchangeRate(1.0d / orderParameters.getPrice()); maxBtc = price * orderParameters.getUpperLimit();
NumberFormat df = NumberFormat.getInstance(Locale.US); minBtc = price * orderParameters.getLowerLimit();
df.setMaximumFractionDigits(6); Timber.d("minBtc=%f / maxBtc=%f", minBtc, maxBtc);
String min = df.format(orderParameters.getLowerLimit()); NumberFormat df = NumberFormat.getInstance(Locale.US);
String max = df.format(orderParameters.getUpperLimit()); df.setMaximumFractionDigits(6);
String rate = df.format(orderParameters.getPrice()); String min = df.format(minBtc);
Spanned xmrParmText = Html.fromHtml(getString(R.string.info_send_xmrto_parms, min, max, rate)); String max = df.format(maxBtc);
if (orderParameters.isZeroConfEnabled()) { String rate = df.format(price);
String zeroConf = df.format(orderParameters.getZeroConfMaxAmount()); Spanned xmrParmText = Html.fromHtml(getString(R.string.info_send_xmrto_parms, min, max, rate));
Spanned zeroConfText = Html.fromHtml(getString(R.string.info_send_xmrto_zeroconf, zeroConf)); tvXmrToParms.setText(xmrParmText);
xmrParmText = (Spanned) TextUtils.concat(xmrParmText, " ", zeroConfText);
}
tvXmrToParms.setText(xmrParmText);
maxBtc = orderParameters.getUpperLimit();
minBtc = orderParameters.getLowerLimit();
Timber.d("minBtc=%f / maxBtc=%f", minBtc, maxBtc);
final long funds = getTotalFunds(); final long funds = getTotalFunds();
double availableXmr = 1.0 * funds / 1000000000000L; double availableXmr = 1.0 * funds / 1000000000000L;
maxBtc = Math.min(maxBtc, availableXmr * orderParameters.getPrice());
String availBtcString; String availBtcString;
String availXmrString; String availXmrString;
if (!sendListener.getActivityCallback().isStreetMode()) { if (!sendListener.getActivityCallback().isStreetMode()) {
availBtcString = df.format(availableXmr * orderParameters.getPrice()); availBtcString = df.format(availableXmr * price);
availXmrString = df.format(availableXmr); availXmrString = df.format(availableXmr);
} else { } else {
availBtcString = getString(R.string.unknown_amount); availBtcString = getString(R.string.unknown_amount);
availXmrString = availBtcString; availXmrString = availBtcString;
}
tvFunds.setText(getString(R.string.send_available_btc,
availXmrString,
availBtcString));
llXmrToParms.setVisibility(View.VISIBLE);
evParams.hideProgress();
} }
tvFunds.setText(getString(R.string.send_available_btc,
availXmrString,
availBtcString));
llXmrToParms.setVisibility(View.VISIBLE);
evParams.hideProgress();
}); });
} }
@ -212,44 +195,38 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
maxBtc = 0; maxBtc = 0;
minBtc = 0; minBtc = 0;
Timber.e(ex); Timber.e(ex);
getView().post(new Runnable() { getView().post(() -> {
@Override if (ex instanceof ShiftException) {
public void run() { ShiftException xmrEx = (ShiftException) ex;
if (ex instanceof XmrToException) { ShiftError xmrErr = xmrEx.getError();
XmrToException xmrEx = (XmrToException) ex; if (xmrErr != null) {
XmrToError xmrErr = xmrEx.getError(); if (xmrErr.isRetryable()) {
if (xmrErr != null) { evParams.showMessage(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
if (xmrErr.isRetryable()) { getString(R.string.text_retry));
evParams.showMessage(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(), evParams.setOnClickListener(v -> {
getString(R.string.text_retry)); evParams.setOnClickListener(null);
evParams.setOnClickListener(new View.OnClickListener() { callXmrTo();
@Override });
public void onClick(View v) {
evParams.setOnClickListener(null);
callXmrTo();
}
});
} else {
evParams.showMessage(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else { } else {
evParams.showMessage(getString(R.string.label_generic_xmrto_error), evParams.showMessage(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else { } else {
evParams.showMessage(getString(R.string.label_generic_xmrto_error), evParams.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(), getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else {
evParams.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
getString(R.string.text_noretry));
} }
}); });
} }
private void callXmrTo() { private void callXmrTo() {
evParams.showProgress(getString(R.string.label_send_progress_queryparms)); evParams.showProgress(getString(R.string.label_send_progress_queryparms));
getXmrToApi().queryOrderParameters(new XmrToCallback<QueryOrderParameters>() { getXmrToApi().queryOrderParameters(new ShiftCallback<QueryOrderParameters>() {
@Override @Override
public void onSuccess(final QueryOrderParameters orderParameters) { public void onSuccess(final QueryOrderParameters orderParameters) {
processOrderParms(orderParameters); processOrderParms(orderParameters);
@ -262,13 +239,13 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
}); });
} }
private XmrToApi xmrToApi = null; private SideShiftApi xmrToApi = null;
private XmrToApi getXmrToApi() { private SideShiftApi getXmrToApi() {
if (xmrToApi == null) { if (xmrToApi == null) {
synchronized (this) { synchronized (this) {
if (xmrToApi == null) { if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(), xmrToApi = new SideShiftApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl()); Helper.getXmrToBaseUrl());
} }
} }

View File

@ -17,13 +17,6 @@
package com.m2049r.xmrwallet.fragment.send; package com.m2049r.xmrwallet.fragment.send;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -31,8 +24,6 @@ import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import com.m2049r.xmrwallet.R; import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.data.TxData; import com.m2049r.xmrwallet.data.TxData;
import com.m2049r.xmrwallet.data.TxDataBtc; import com.m2049r.xmrwallet.data.TxDataBtc;
@ -41,13 +32,13 @@ import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.OkHttpHelper; import com.m2049r.xmrwallet.util.OkHttpHelper;
import com.m2049r.xmrwallet.widget.SendProgressView; import com.m2049r.xmrwallet.widget.SendProgressView;
import com.m2049r.xmrwallet.xmrto.XmrToError; import com.m2049r.xmrwallet.service.shift.ShiftError;
import com.m2049r.xmrwallet.xmrto.XmrToException; import com.m2049r.xmrwallet.service.shift.ShiftException;
import com.m2049r.xmrwallet.xmrto.api.CreateOrder; import com.m2049r.xmrwallet.service.shift.sideshift.api.CreateOrder;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderStatus; import com.m2049r.xmrwallet.service.shift.sideshift.api.RequestQuote;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi; import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback; import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl; import com.m2049r.xmrwallet.service.shift.sideshift.network.SideShiftApiImpl;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.Locale; import java.util.Locale;
@ -55,8 +46,6 @@ import java.util.Locale;
import timber.log.Timber; import timber.log.Timber;
public class SendBtcConfirmWizardFragment extends SendWizardFragment implements SendConfirm { public class SendBtcConfirmWizardFragment extends SendWizardFragment implements SendConfirm {
private final int QUERY_INTERVAL = 500;//ms
public static SendBtcConfirmWizardFragment newInstance(SendConfirmWizardFragment.Listener listener) { public static SendBtcConfirmWizardFragment newInstance(SendConfirmWizardFragment.Listener listener) {
SendBtcConfirmWizardFragment instance = new SendBtcConfirmWizardFragment(); SendBtcConfirmWizardFragment instance = new SendBtcConfirmWizardFragment();
instance.setSendListener(listener); instance.setSendListener(listener);
@ -65,9 +54,8 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
SendConfirmWizardFragment.Listener sendListener; SendConfirmWizardFragment.Listener sendListener;
public SendBtcConfirmWizardFragment setSendListener(SendConfirmWizardFragment.Listener listener) { public void setSendListener(SendConfirmWizardFragment.Listener listener) {
this.sendListener = listener; this.sendListener = listener;
return this;
} }
private View llStageA; private View llStageA;
@ -103,7 +91,6 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
tvTxFee = view.findViewById(R.id.tvTxFee); tvTxFee = view.findViewById(R.id.tvTxFee);
tvTxTotal = view.findViewById(R.id.tvTxTotal); tvTxTotal = view.findViewById(R.id.tvTxTotal);
llStageA = view.findViewById(R.id.llStageA); llStageA = view.findViewById(R.id.llStageA);
evStageA = view.findViewById(R.id.evStageA); evStageA = view.findViewById(R.id.evStageA);
llStageB = view.findViewById(R.id.llStageB); llStageB = view.findViewById(R.id.llStageB);
@ -111,12 +98,9 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
llStageC = view.findViewById(R.id.llStageC); llStageC = view.findViewById(R.id.llStageC);
evStageC = view.findViewById(R.id.evStageC); evStageC = view.findViewById(R.id.evStageC);
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() { tvTxXmrToKey.setOnClickListener(v -> {
@Override Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
public void onClick(View v) { Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
}
}); });
llConfirmSend = view.findViewById(R.id.llConfirmSend); llConfirmSend = view.findViewById(R.id.llConfirmSend);
@ -125,13 +109,10 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
bSend = view.findViewById(R.id.bSend); bSend = view.findViewById(R.id.bSend);
bSend.setEnabled(false); bSend.setEnabled(false);
bSend.setOnClickListener(new View.OnClickListener() { bSend.setOnClickListener(v -> {
@Override Timber.d("bSend.setOnClickListener");
public void onClick(View v) { bSend.setEnabled(false);
Timber.d("bSend.setOnClickListener"); preSend();
bSend.setEnabled(false);
preSend();
}
}); });
return view; return view;
@ -208,8 +189,8 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
Toast.makeText(getContext(), getString(R.string.send_xmrto_timeout), Toast.LENGTH_SHORT).show(); Toast.makeText(getContext(), getString(R.string.send_xmrto_timeout), Toast.LENGTH_SHORT).show();
return; return;
} }
sendListener.getTxData().getUserNotes().setXmrtoStatus(xmrtoStatus); sendListener.getTxData().getUserNotes().setXmrtoOrder(xmrtoOrder); // note the transaction in the TX notes
((TxDataBtc) sendListener.getTxData()).setXmrtoUuid(xmrtoStatus.getUuid()); ((TxDataBtc) sendListener.getTxData()).setXmrtoOrderId(xmrtoOrder.getOrderId()); // remember the order id for later
// TODO make method in TxDataBtc to set both of the above in one go // TODO make method in TxDataBtc to set both of the above in one go
sendListener.commitTransaction(); sendListener.commitTransaction();
getActivity().runOnUiThread(() -> pbProgressSend.setVisibility(View.VISIBLE)); getActivity().runOnUiThread(() -> pbProgressSend.setVisibility(View.VISIBLE));
@ -226,19 +207,15 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
public void transactionCreated(final String txTag, final PendingTransaction pendingTransaction) { public void transactionCreated(final String txTag, final PendingTransaction pendingTransaction) {
if (isResumed if (isResumed
&& (inProgress == STAGE_C) && (inProgress == STAGE_C)
&& (xmrtoStatus != null) && (xmrtoOrder != null)
&& (xmrtoStatus.isCreated() && (xmrtoOrder.getOrderId().equals(txTag))) {
&& (xmrtoStatus.getUuid().equals(txTag)))) {
this.pendingTransaction = pendingTransaction; this.pendingTransaction = pendingTransaction;
getView().post(new Runnable() { getView().post(() -> {
@Override hideProgress();
public void run() { tvTxFee.setText(Wallet.getDisplayAmount(pendingTransaction.getFee()));
hideProgress(); tvTxTotal.setText(Wallet.getDisplayAmount(
tvTxFee.setText(Wallet.getDisplayAmount(pendingTransaction.getFee())); pendingTransaction.getFee() + pendingTransaction.getAmount()));
tvTxTotal.setText(Wallet.getDisplayAmount( updateSendButton();
pendingTransaction.getFee() + pendingTransaction.getAmount()));
updateSendButton();
}
}); });
} else { } else {
this.pendingTransaction = null; this.pendingTransaction = null;
@ -291,20 +268,19 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
evStageC.hideProgress(); evStageC.hideProgress();
isResumed = true; isResumed = true;
if ((pendingTransaction == null) && (inProgress == STAGE_X)) { if ((pendingTransaction == null) && (inProgress == STAGE_X)) {
createOrder(); stageA();
} // otherwise just sit there blank } // otherwise just sit there blank
// TODO: don't sit there blank - can this happen? should we just die? // TODO: don't sit there blank - can this happen? should we just die?
} }
private int sendCountdown = 0; private int sendCountdown = 0;
private static final int XMRTO_COUNTDOWN = 10 * 60; // 10 minutes
private static final int XMRTO_COUNTDOWN_STEP = 1; // 1 second private static final int XMRTO_COUNTDOWN_STEP = 1; // 1 second
Runnable updateRunnable = null; Runnable updateRunnable = null;
void startSendTimer() { void startSendTimer(int timeout) {
Timber.d("startSendTimer()"); Timber.d("startSendTimer()");
sendCountdown = XMRTO_COUNTDOWN; sendCountdown = timeout;
updateRunnable = new Runnable() { updateRunnable = new Runnable() {
@Override @Override
public void run() { public void run() {
@ -363,240 +339,228 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
// or createTransactionFailed() // or createTransactionFailed()
void prepareSend() { void prepareSend() {
if (!isResumed) return; if (!isResumed) return;
if ((xmrtoStatus == null)) { if ((xmrtoOrder == null)) {
throw new IllegalStateException("xmrtoStatus is null"); throw new IllegalStateException("xmrtoOrder is null");
}
if ((!xmrtoStatus.isCreated())) {
throw new IllegalStateException("order is not created");
} }
showProgress(3, getString(R.string.label_send_progress_create_tx)); showProgress(3, getString(R.string.label_send_progress_create_tx));
TxData txData = sendListener.getTxData(); final TxData txData = sendListener.getTxData();
txData.setDestinationAddress(xmrtoStatus.getReceivingSubaddress()); txData.setDestinationAddress(xmrtoOrder.getXmrAddress());
txData.setAmount(Wallet.getAmountFromDouble(xmrtoStatus.getIncomingAmountTotal())); txData.setAmount(xmrtoOrder.getXmrAmount());
getActivityCallback().onPrepareSend(xmrtoStatus.getUuid(), txData); getActivityCallback().onPrepareSend(xmrtoOrder.getOrderId(), txData);
} }
SendFragment.Listener getActivityCallback() { SendFragment.Listener getActivityCallback() {
return sendListener.getActivityCallback(); return sendListener.getActivityCallback();
} }
private CreateOrder xmrtoOrder = null; private RequestQuote xmrtoQuote = null;
private int stageARetries = 0;
private final int RETRIES = 3;
private double stageAPrice = 0;
private void processCreateOrder(final CreateOrder createOrder) { private void processStageA(final RequestQuote requestQuote) {
Timber.d("processCreateOrder %s", createOrder.getUuid()); Timber.d("processCreateOrder %s", requestQuote.getId());
xmrtoOrder = createOrder; TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
if (QueryOrderStatus.State.TO_BE_CREATED.toString().equals(createOrder.getState())) { // verify the BTC amount is correct (price can change and we can only specify XMR amount)
getView().post(new Runnable() { if (requestQuote.getBtcAmount() != txDataBtc.getBtcAmount()) {
@Override if (--stageARetries <= 0) {
public void run() { Timber.d("Failed to get quote");
tvTxXmrToKey.setText(createOrder.getUuid()); getView().post(() ->
tvTxBtcAddress.setText(createOrder.getBtcDestAddress()); showStageError(ShiftError.Error.SERVICE.toString(),
hideProgress(); getString(R.string.shift_noquote),
} getString(R.string.shift_checkamount)));
}); return; // just stop for now
queryOrder(createOrder.getUuid()); }
} else { if (stageAPrice == requestQuote.getPrice()) {
throw new IllegalStateException("Create Order is not TO_BE_CREATED"); // same price but different BTC amount - something else is wrong (e.g. too many decimals)
Timber.d("Price unchanged");
getView().post(() ->
showStageError(ShiftError.Error.SERVICE.toString(),
getString(R.string.shift_noquote),
getString(R.string.shift_checkamount)));
return; // just stop for now
}
stageAPrice = requestQuote.getPrice();
// recalc XMR and try again
txDataBtc.setAmount(txDataBtc.getBtcAmount() / requestQuote.getPrice());
getView().post(this::stageAOneShot);
return; // stageA will run in the main thread
} }
xmrtoQuote = requestQuote;
getView().post(() -> {
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(12);
final String btcAmount = df.format(xmrtoQuote.getBtcAmount());
final String xmrAmountTotal = df.format(xmrtoQuote.getXmrAmount());
tvTxBtcAmount.setText(getString(R.string.text_send_btc_amount, btcAmount, xmrAmountTotal));
final String xmrPriceBtc = df.format(xmrtoQuote.getPrice());
tvTxBtcRate.setText(getString(R.string.text_send_btc_rate, xmrPriceBtc));
hideProgress();
});
stageB(requestQuote.getId());
} }
private void processCreateOrderError(final Exception ex) { private void processStageAError(final Exception ex) {
Timber.e("processCreateOrderError %s", ex.getLocalizedMessage()); Timber.e("processStageAError %s", ex.getLocalizedMessage());
getView().post(new Runnable() { getView().post(() -> {
@Override if (ex instanceof ShiftException) {
public void run() { ShiftException xmrEx = (ShiftException) ex;
if (ex instanceof XmrToException) { ShiftError xmrErr = xmrEx.getError();
XmrToException xmrEx = (XmrToException) ex; if (xmrErr != null) {
XmrToError xmrErr = xmrEx.getError(); if (xmrErr.isRetryable()) {
if (xmrErr != null) { showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
if (xmrErr.isRetryable()) { getString(R.string.text_retry));
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(), evStageA.setOnClickListener(v -> {
getString(R.string.text_retry)); evStageA.setOnClickListener(null);
evStageA.setOnClickListener(new View.OnClickListener() { stageA();
@Override });
public void onClick(View v) {
evStageA.setOnClickListener(null);
createOrder();
}
});
} else {
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else { } else {
showStageError(getString(R.string.label_generic_xmrto_error), showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else { } else {
evStageA.showMessage(getString(R.string.label_generic_xmrto_error), showStageError(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(), getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else {
evStageA.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
getString(R.string.text_noretry));
} }
}); });
} }
private void createOrder() { private void stageA() {
stageARetries = RETRIES;
stageAOneShot();
}
private void stageAOneShot() {
if (!isResumed) return; if (!isResumed) return;
Timber.d("createOrder"); Timber.d("Request Quote");
xmrtoQuote = null;
xmrtoOrder = null; xmrtoOrder = null;
xmrtoStatus = null;
showProgress(1, getString(R.string.label_send_progress_xmrto_create)); showProgress(1, getString(R.string.label_send_progress_xmrto_create));
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData(); TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
stageAPrice = 0;
XmrToCallback<CreateOrder> callback = new XmrToCallback<CreateOrder>() { ShiftCallback<RequestQuote> callback = new ShiftCallback<RequestQuote>() {
@Override @Override
public void onSuccess(CreateOrder createOrder) { public void onSuccess(RequestQuote requestQuote) {
if (!isResumed) return; if (!isResumed) return;
if (xmrtoOrder != null) { if (xmrtoQuote != null) {
Timber.w("another ongoing create order request"); Timber.w("another ongoing request quote request");
return; return;
} }
processCreateOrder(createOrder); processStageA(requestQuote);
} }
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
if (!isResumed) return; if (!isResumed) return;
if (xmrtoOrder != null) { if (xmrtoQuote != null) {
Timber.w("another ongoing create order request"); Timber.w("another ongoing request quote request");
return; return;
} }
processCreateOrderError(ex); processStageAError(ex);
} }
}; };
if (txDataBtc.getBip70() != null) { getXmrToApi().requestQuote(txDataBtc.getAmountAsDouble(), callback);
getXmrToApi().createOrder(txDataBtc.getBip70(), callback);
} else {
getXmrToApi().createOrder(txDataBtc.getBtcAmount(), txDataBtc.getBtcAddress(), callback);
}
} }
private QueryOrderStatus xmrtoStatus = null; private CreateOrder xmrtoOrder = null;
private void processQueryOrder(final QueryOrderStatus status) { private void processStageB(final CreateOrder order) {
Timber.d("processQueryOrder %s for %s", status.getState().toString(), status.getUuid()); Timber.d("processCreateOrder %s for %s", order.getOrderId(), order.getQuoteId());
xmrtoStatus = status; TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
if (status.isCreated()) { // verify amount & destination
getView().post(new Runnable() { if ((order.getBtcAmount() != txDataBtc.getBtcAmount())
@Override || (!order.getBtcAddress().equals(txDataBtc.getBtcAddress()))) {
public void run() { throw new IllegalStateException("Order does not fulfill quote!"); // something is terribly wrong - die
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(12);
String btcAmount = df.format(status.getBtcAmount());
String xmrAmountTotal = df.format(status.getIncomingAmountTotal());
tvTxBtcAmount.setText(getString(R.string.text_send_btc_amount, btcAmount, xmrAmountTotal));
String xmrPriceBtc = df.format(status.getIncomingPriceBtc());
tvTxBtcRate.setText(getString(R.string.text_send_btc_rate, xmrPriceBtc));
double calcRate = status.getBtcAmount() / status.getIncomingPriceBtc();
Timber.d("Rates: %f / %f", calcRate, status.getIncomingPriceBtc());
tvTxBtcAddress.setText(status.getBtcDestAddress()); // TODO test if this is different?
Timber.d("Expires @ %s, in %s seconds", status.getExpiresAt().toString(), status.getSecondsTillTimeout());
Timber.d("Status = %s", status.getState().toString());
tvTxXmrToKey.setText(status.getUuid());
Timber.d("AmountRemaining=%f, XmrAmountTotal=%f", status.getRemainingAmountIncoming(), status.getIncomingAmountTotal());
hideProgress();
startSendTimer();
prepareSend();
}
});
} else {
Timber.d("try again!");
handler.postDelayed(new Runnable() {
@Override
public void run() {
queryOrder(status.getUuid());
}
}, QUERY_INTERVAL);
} }
xmrtoOrder = order;
getView().post(() -> {
tvTxXmrToKey.setText(order.getOrderId());
tvTxBtcAddress.setText(order.getBtcAddress());
hideProgress();
Timber.d("Expires @ %s", order.getExpiresAt().toString());
final int timeout = (int) (order.getExpiresAt().getTime() - order.getCreatedAt().getTime()) / 1000 - 60; // -1 minute buffer
startSendTimer(timeout);
prepareSend();
});
} }
Handler handler = new Handler(); private void processStageBError(final Exception ex) {
Timber.e("processCreateOrderError %s", ex.getLocalizedMessage());
private void processQueryOrderError(final Exception ex) { getView().post(() -> {
Timber.e("processQueryOrderError %s", ex.getLocalizedMessage()); if (ex instanceof ShiftException) {
getView().post(new Runnable() { ShiftException xmrEx = (ShiftException) ex;
@Override ShiftError xmrErr = xmrEx.getError();
public void run() { if (xmrErr != null) {
if (ex instanceof XmrToException) { if (xmrErr.isRetryable()) {
XmrToException xmrEx = (XmrToException) ex; showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
XmrToError xmrErr = xmrEx.getError(); getString(R.string.text_retry));
if (xmrErr != null) { evStageB.setOnClickListener(v -> {
if (xmrErr.isRetryable()) { evStageB.setOnClickListener(null);
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(), stageB(xmrtoOrder.getOrderId());
getString(R.string.text_retry)); });
evStageB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
evStageB.setOnClickListener(null);
queryOrder(xmrtoOrder.getUuid());
}
});
} else {
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else { } else {
showStageError(getString(R.string.label_generic_xmrto_error), showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else { } else {
evStageB.showMessage(getString(R.string.label_generic_xmrto_error), showStageError(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(), getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
getString(R.string.text_noretry)); getString(R.string.text_noretry));
} }
} else {
evStageB.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
getString(R.string.text_noretry));
} }
}); });
} }
private void queryOrder(final String uuid) { private void stageB(final String quoteId) {
Timber.d("queryOrder(%s)", uuid); Timber.d("createOrder(%s)", quoteId);
if (!isResumed) return; if (!isResumed) return;
getView().post(new Runnable() { final String btcAddress = ((TxDataBtc) sendListener.getTxData()).getBtcAddress();
@Override getView().post(() -> {
public void run() { xmrtoOrder = null;
xmrtoStatus = null; showProgress(2, getString(R.string.label_send_progress_xmrto_query));
showProgress(2, getString(R.string.label_send_progress_xmrto_query)); getXmrToApi().createOrder(quoteId, btcAddress, new ShiftCallback<CreateOrder>() {
getXmrToApi().queryOrderStatus(uuid, new XmrToCallback<QueryOrderStatus>() { @Override
@Override public void onSuccess(CreateOrder order) {
public void onSuccess(QueryOrderStatus status) { if (!isResumed) return;
if (!isResumed) return; if (xmrtoQuote == null) return;
if (xmrtoOrder == null) return; if (!order.getQuoteId().equals(xmrtoQuote.getId())) {
if (!status.getUuid().equals(xmrtoOrder.getUuid())) { Timber.d("Quote ID does not match");
Timber.d("Query UUID does not match"); // ignore (we got a response to a stale request)
// ignore (we got a response to a stale request) return;
return;
}
if (xmrtoStatus != null)
throw new IllegalStateException("xmrtoStatus must be null here!");
processQueryOrder(status);
} }
if (xmrtoOrder != null)
throw new IllegalStateException("xmrtoOrder must be null here!");
processStageB(order);
}
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
if (!isResumed) return; if (!isResumed) return;
processQueryOrderError(ex); processStageBError(ex);
} }
}); });
}
}); });
} }
private XmrToApi xmrToApi = null; private SideShiftApi xmrToApi = null;
private XmrToApi getXmrToApi() { private SideShiftApi getXmrToApi() {
if (xmrToApi == null) { if (xmrToApi == null) {
synchronized (this) { synchronized (this) {
if (xmrToApi == null) { if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(), xmrToApi = new SideShiftApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl()); Helper.getXmrToBaseUrl());
} }
} }

View File

@ -16,6 +16,9 @@
package com.m2049r.xmrwallet.fragment.send; package com.m2049r.xmrwallet.fragment.send;
import android.content.Intent;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -29,13 +32,13 @@ import android.widget.Toast;
import com.m2049r.xmrwallet.R; import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.data.PendingTx; import com.m2049r.xmrwallet.data.PendingTx;
import com.m2049r.xmrwallet.data.TxDataBtc; import com.m2049r.xmrwallet.data.TxDataBtc;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.service.shift.ShiftException;
import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderStatus;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.service.shift.sideshift.network.SideShiftApiImpl;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.OkHttpHelper; import com.m2049r.xmrwallet.util.OkHttpHelper;
import com.m2049r.xmrwallet.xmrto.XmrToException;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderStatus;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.Locale; import java.util.Locale;
@ -52,9 +55,8 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
SendSuccessWizardFragment.Listener sendListener; SendSuccessWizardFragment.Listener sendListener;
public SendBtcSuccessWizardFragment setSendListener(SendSuccessWizardFragment.Listener listener) { public void setSendListener(SendSuccessWizardFragment.Listener listener) {
this.sendListener = listener; this.sendListener = listener;
return this;
} }
ImageButton bCopyTxId; ImageButton bCopyTxId;
@ -69,6 +71,7 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
private ImageView ivXmrToStatusBig; private ImageView ivXmrToStatusBig;
private ProgressBar pbXmrto; private ProgressBar pbXmrto;
private TextView tvTxXmrToKey; private TextView tvTxXmrToKey;
private TextView tvXmrToSupport;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -101,14 +104,14 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
pbXmrto.getIndeterminateDrawable().setColorFilter(0x61000000, android.graphics.PorterDuff.Mode.MULTIPLY); pbXmrto.getIndeterminateDrawable().setColorFilter(0x61000000, android.graphics.PorterDuff.Mode.MULTIPLY);
tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey); tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey);
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() { tvTxXmrToKey.setOnClickListener(v -> {
@Override Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
public void onClick(View v) { Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
}
}); });
tvXmrToSupport = view.findViewById(R.id.tvXmrToSupport);
tvXmrToSupport.setPaintFlags(tvXmrToSupport.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
return view; return view;
} }
@ -149,7 +152,12 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
String btcAmount = df.format(btcData.getBtcAmount()); String btcAmount = df.format(btcData.getBtcAmount());
tvXmrToAmount.setText(getString(R.string.info_send_xmrto_success_btc, btcAmount)); tvXmrToAmount.setText(getString(R.string.info_send_xmrto_success_btc, btcAmount));
//TODO btcData.getBtcAddress(); //TODO btcData.getBtcAddress();
tvTxXmrToKey.setText(btcData.getXmrtoUuid()); tvTxXmrToKey.setText(btcData.getXmrtoOrderId());
tvXmrToSupport.setOnClickListener(v -> {
Uri orderUri = getXmrToApi().getQueryOrderUri(btcData.getXmrtoOrderId());
Intent intent = new Intent(Intent.ACTION_VIEW, orderUri);
startActivity(intent);
});
queryOrder(); queryOrder();
} else { } else {
throw new IllegalStateException("btcData is null"); throw new IllegalStateException("btcData is null");
@ -158,33 +166,23 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
sendListener.enableDone(); sendListener.enableDone();
} }
private final int QUERY_INTERVAL = 1000; // ms
private void processQueryOrder(final QueryOrderStatus status) { private void processQueryOrder(final QueryOrderStatus status) {
Timber.d("processQueryOrder %s for %s", status.getState().toString(), status.getUuid()); Timber.d("processQueryOrder %s for %s", status.getState().toString(), status.getOrderId());
if (!btcData.getXmrtoUuid().equals(status.getUuid())) if (!btcData.getXmrtoOrderId().equals(status.getOrderId()))
throw new IllegalStateException("UUIDs do not match!"); throw new IllegalStateException("UUIDs do not match!");
if (isResumed && (getView() != null)) if (isResumed && (getView() != null))
getView().post(new Runnable() { getView().post(() -> {
@Override showXmrToStatus(status);
public void run() { if (!status.isTerminal()) {
showXmrToStatus(status); getView().postDelayed(this::queryOrder, SideShiftApi.QUERY_INTERVAL);
if (!status.isTerminal()) {
getView().postDelayed(new Runnable() {
@Override
public void run() {
queryOrder();
}
}, QUERY_INTERVAL);
}
} }
}); });
} }
private void queryOrder() { private void queryOrder() {
Timber.d("queryOrder(%s)", btcData.getXmrtoUuid()); Timber.d("queryOrder(%s)", btcData.getXmrtoOrderId());
if (!isResumed) return; if (!isResumed) return;
getXmrToApi().queryOrderStatus(btcData.getXmrtoUuid(), new XmrToCallback<QueryOrderStatus>() { getXmrToApi().queryOrderStatus(btcData.getXmrtoOrderId(), new ShiftCallback<QueryOrderStatus>() {
@Override @Override
public void onSuccess(QueryOrderStatus status) { public void onSuccess(QueryOrderStatus status) {
if (!isAdded()) return; if (!isAdded()) return;
@ -194,38 +192,34 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
@Override @Override
public void onError(final Exception ex) { public void onError(final Exception ex) {
if (!isResumed) return; if (!isResumed) return;
Timber.e(ex); Timber.w(ex);
getActivity().runOnUiThread(new Runnable() { getActivity().runOnUiThread(() -> {
@Override if (ex instanceof ShiftException) {
public void run() { Toast.makeText(getActivity(), ((ShiftException) ex).getError().getErrorMsg(), Toast.LENGTH_LONG).show();
if (ex instanceof XmrToException) { } else {
Toast.makeText(getActivity(), ((XmrToException) ex).getError().getErrorMsg(), Toast.LENGTH_LONG).show(); Toast.makeText(getActivity(), ex.getLocalizedMessage(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), ex.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
} }
}); });
} }
}); });
} }
private int statusResource = 0;
void showXmrToStatus(final QueryOrderStatus status) { void showXmrToStatus(final QueryOrderStatus status) {
int statusResource = 0;
if (status.isError()) { if (status.isError()) {
tvXmrToStatus.setText(getString(R.string.info_send_xmrto_error, status.toString())); tvXmrToStatus.setText(getString(R.string.info_send_xmrto_error, status.toString()));
statusResource = R.drawable.ic_error_red_24dp; statusResource = R.drawable.ic_error_red_24dp;
pbXmrto.getIndeterminateDrawable().setColorFilter(0xff8b0000, android.graphics.PorterDuff.Mode.MULTIPLY); pbXmrto.getIndeterminateDrawable().setColorFilter(0xff8b0000, android.graphics.PorterDuff.Mode.MULTIPLY);
} else if (status.isSent()) { } else if (status.isSent() || status.isPaid()) {
tvXmrToStatus.setText(getString(R.string.info_send_xmrto_sent)); tvXmrToStatus.setText(getString(R.string.info_send_xmrto_sent));
statusResource = R.drawable.ic_success_green_24dp; statusResource = R.drawable.ic_success_green_24dp;
pbXmrto.getIndeterminateDrawable().setColorFilter(0xFF417505, android.graphics.PorterDuff.Mode.MULTIPLY); pbXmrto.getIndeterminateDrawable().setColorFilter(0xFF417505, android.graphics.PorterDuff.Mode.MULTIPLY);
} else if (status.isWaiting()) {
tvXmrToStatus.setText(getString(R.string.info_send_xmrto_unpaid));
statusResource = R.drawable.ic_pending_orange_24dp;
pbXmrto.getIndeterminateDrawable().setColorFilter(0xFFFF6105, android.graphics.PorterDuff.Mode.MULTIPLY);
} else if (status.isPending()) { } else if (status.isPending()) {
if (status.isPaid()) { tvXmrToStatus.setText(getString(R.string.info_send_xmrto_paid));
tvXmrToStatus.setText(getString(R.string.info_send_xmrto_paid));
} else {
tvXmrToStatus.setText(getString(R.string.info_send_xmrto_unpaid));
}
statusResource = R.drawable.ic_pending_orange_24dp; statusResource = R.drawable.ic_pending_orange_24dp;
pbXmrto.getIndeterminateDrawable().setColorFilter(0xFFFF6105, android.graphics.PorterDuff.Mode.MULTIPLY); pbXmrto.getIndeterminateDrawable().setColorFilter(0xFFFF6105, android.graphics.PorterDuff.Mode.MULTIPLY);
} else { } else {
@ -240,13 +234,13 @@ public class SendBtcSuccessWizardFragment extends SendWizardFragment {
} }
} }
private XmrToApi xmrToApi = null; private SideShiftApi xmrToApi = null;
private final XmrToApi getXmrToApi() { private SideShiftApi getXmrToApi() {
if (xmrToApi == null) { if (xmrToApi == null) {
synchronized (this) { synchronized (this) {
if (xmrToApi == null) { if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(), xmrToApi = new SideShiftApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl()); Helper.getXmrToBaseUrl());
} }
} }

View File

@ -563,22 +563,4 @@ public class SendFragment extends Fragment
inflater.inflate(R.menu.send_menu, menu); inflater.inflate(R.menu.send_menu, menu);
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
} }
// xmr.to info box
private static final String PREF_SHOW_XMRTO_ENABLED = "info_xmrto_enabled_send";
boolean showXmrtoEnabled = true;
void loadPrefs() {
SharedPreferences sharedPref = activityCallback.getPrefs();
showXmrtoEnabled = sharedPref.getBoolean(PREF_SHOW_XMRTO_ENABLED, true);
}
void saveXmrToPrefs() {
SharedPreferences sharedPref = activityCallback.getPrefs();
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean(PREF_SHOW_XMRTO_ENABLED, showXmrtoEnabled);
editor.apply();
}
} }

View File

@ -2,7 +2,7 @@
******************************************************************************* *******************************************************************************
* BTChip Bitcoin Hardware Wallet Java API * BTChip Bitcoin Hardware Wallet Java API
* (c) 2014 BTChip - 1BTChip7VfTnrPra5jqci7ejnMguuHogTn * (c) 2014 BTChip - 1BTChip7VfTnrPra5jqci7ejnMguuHogTn
* (c) m2049r * Copyright (c) 2018 m2049r
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2018 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.ledger; package com.m2049r.xmrwallet.ledger;
import android.content.Context; import android.content.Context;

View File

@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.network; package com.m2049r.xmrwallet.service.shift;
import org.json.JSONObject; import org.json.JSONObject;
interface NetworkCallback { public interface NetworkCallback {
void onSuccess(JSONObject jsonObject); void onSuccess(JSONObject jsonObject);

View File

@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.network; package com.m2049r.xmrwallet.service.shift;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import org.json.JSONObject; import org.json.JSONObject;
interface XmrToApiCall { public interface ShiftApiCall {
void call(@NonNull final String path, @NonNull final NetworkCallback callback); void call(@NonNull final String path, @NonNull final NetworkCallback callback);

View File

@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.api; package com.m2049r.xmrwallet.service.shift;
public interface XmrToCallback<T> { public interface ShiftCallback<T> {
void onSuccess(T t); void onSuccess(T t);

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift;
import androidx.annotation.NonNull;
import org.json.JSONException;
import org.json.JSONObject;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class ShiftError {
@Getter
private final Error errorType;
@Getter
private final String errorMsg;
public enum Error {
SERVICE,
INFRASTRUCTURE
}
public boolean isRetryable() {
return errorType == Error.INFRASTRUCTURE;
}
public ShiftError(final JSONObject jsonObject) throws JSONException {
final JSONObject errorObject = jsonObject.getJSONObject("error");
errorType = Error.SERVICE;
errorMsg = errorObject.getString("message");
}
@Override
@NonNull
public String toString() {
return getErrorMsg();
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017 m2049r et al. * Copyright (c) 2017-2021 m2049r et al.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,29 +14,20 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto; package com.m2049r.xmrwallet.service.shift;
public class XmrToException extends Exception { import lombok.Getter;
private int code; import lombok.RequiredArgsConstructor;
private XmrToError error;
public XmrToException(final int code) { @RequiredArgsConstructor
super(); public class ShiftException extends Exception {
@Getter
private final int code;
@Getter
private final ShiftError error;
public ShiftException(int code) {
this.code = code; this.code = code;
this.error = null; this.error = null;
} }
public XmrToException(final int code, final XmrToError error) {
super();
this.code = code;
this.error = error;
}
public int getCode() {
return code;
}
public XmrToError getError() {
return error;
}
} }

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.api;
import java.util.Date;
public interface CreateOrder {
String TAG = "side";
double getBtcAmount();
String getBtcAddress();
String getQuoteId();
String getOrderId();
double getXmrAmount();
String getXmrAddress();
Date getCreatedAt(); // createdAt
Date getExpiresAt(); // expiresAt
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017 m2049r et al. * Copyright (c) 2017-2021 m2049r et al.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,17 +14,14 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.api; package com.m2049r.xmrwallet.service.shift.sideshift.api;
public interface CreateOrder { public interface QueryOrderParameters {
Double getBtcAmount();
String getBtcDestAddress(); double getLowerLimit();
String getBtcBip70(); double getPrice();
String getState(); double getUpperLimit();
String getUuid();
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017 m2049r et al. * Copyright (c) 2017-2021 m2049r et al.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,60 +14,52 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.api; package com.m2049r.xmrwallet.service.shift.sideshift.api;
import java.util.Date; import java.util.Date;
public interface QueryOrderStatus { public interface QueryOrderStatus {
enum State { enum State {
UNDEF, WAITING, // Waiting for mempool
TO_BE_CREATED, // order creation pending PENDING, // Detected (waiting for confirmations)
UNPAID, // waiting for Monero payment by user SETTLING, // Settlement in progress
UNDERPAID, // order partially paid SETTLED, // Settlement completed
PAID_UNCONFIRMED, // order paid, waiting for enough confirmations // no refunding in monerujo so theese are ignored:
PAID, // order paid and sufficiently confirmed // REFUND, // Queued for refund
BTC_SENT, // bitcoin payment sent // REFUNDING, // Refund in progress
TIMED_OUT, // order timed out before payment was complete // REFUNDED // Refund completed
NOT_FOUND // order wasnt found in system (never existed or was purged) UNDEFINED
} }
boolean isCreated(); boolean isCreated();
boolean isTerminal(); boolean isTerminal();
boolean isWaiting();
boolean isPending(); boolean isPending();
boolean isPaid();
boolean isSent(); boolean isSent();
boolean isPaid();
boolean isError(); boolean isError();
QueryOrderStatus.State getState(); QueryOrderStatus.State getState();
double getBtcAmount(); String getOrderId();
String getBtcDestAddress();
String getUuid();
int getBtcNumConfirmationsThreshold();
Date getCreatedAt(); Date getCreatedAt();
Date getExpiresAt(); Date getExpiresAt();
int getSecondsTillTimeout(); double getBtcAmount();
double getIncomingAmountTotal(); String getBtcAddress();
double getRemainingAmountIncoming(); double getXmrAmount();
int getIncomingNumConfirmationsRemaining(); String getXmrAddress();
double getIncomingPriceBtc(); double getPrice();
String getReceivingSubaddress();
int getRecommendedMixin();
} }

View File

@ -0,0 +1,34 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.api;
import java.util.Date;
public interface RequestQuote {
double getBtcAmount(); // settleAmount
String getId(); // id
Date getCreatedAt(); // createdAt
Date getExpiresAt(); // expiresAt
double getXmrAmount(); // depositAmount
double getPrice(); // rate
}

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.api;
import android.net.Uri;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
public interface SideShiftApi {
String ASSET = "btc";
int QUERY_INTERVAL = 5000; // ms
/**
* Queries the order parameter.
*
* @param callback the callback with the OrderParameter object
*/
void queryOrderParameters(@NonNull final ShiftCallback<QueryOrderParameters> callback);
/**
* Creates an order
*
* @param xmrAmount the desired XMR amount
*/
void requestQuote(final double xmrAmount, @NonNull final ShiftCallback<RequestQuote> callback);
/**
* Creates an order
*
* @param quoteId the desired XMR amount
* @param btcAddress the target bitcoin address
*/
void createOrder(final String quoteId, @NonNull final String btcAddress, @NonNull final ShiftCallback<CreateOrder> callback);
/**
* Queries the order status for given current order
*
* @param orderId the order ID
* @param callback the callback with the OrderStatus object
*/
void queryOrderStatus(@NonNull final String orderId, @NonNull final ShiftCallback<QueryOrderStatus> callback);
/*
* Returns the URL for manually querying the order status
*
* @param orderId the order ID
*/
Uri getQueryOrderUri(String orderId);
}

View File

@ -0,0 +1,118 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.service.shift.NetworkCallback;
import com.m2049r.xmrwallet.service.shift.ShiftApiCall;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.service.shift.sideshift.api.CreateOrder;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.util.DateHelper;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.util.Date;
import lombok.Getter;
class CreateOrderImpl implements CreateOrder {
@Getter
private final double btcAmount;
@Getter
private final String btcAddress;
@Getter
private final String quoteId;
@Getter
private final String orderId;
@Getter
private final double xmrAmount;
@Getter
private final String xmrAddress;
@Getter
private final Date createdAt;
@Getter
private final Date expiresAt;
CreateOrderImpl(final JSONObject jsonObject) throws JSONException {
// sanity checks
final String depositMethod = jsonObject.getString("depositMethodId");
final String settleMethod = jsonObject.getString("settleMethodId");
if (!"xmr".equals(depositMethod) || !SideShiftApi.ASSET.equals(settleMethod))
throw new IllegalStateException();
btcAmount = jsonObject.getDouble("settleAmount");
JSONObject settleAddress = jsonObject.getJSONObject("settleAddress");
btcAddress = settleAddress.getString("address");
xmrAmount = jsonObject.getDouble("depositAmount");
JSONObject depositAddress = jsonObject.getJSONObject("depositAddress");
xmrAddress = depositAddress.getString("address");
quoteId = jsonObject.getString("quoteId");
orderId = jsonObject.getString("orderId");
try {
final String created = jsonObject.getString("createdAtISO");
createdAt = DateHelper.parse(created);
final String expires = jsonObject.getString("expiresAtISO");
expiresAt = DateHelper.parse(expires);
} catch (ParseException ex) {
throw new JSONException(ex.getLocalizedMessage());
}
}
public static void call(@NonNull final ShiftApiCall api, final String quoteId, @NonNull final String btcAddress,
@NonNull final ShiftCallback<CreateOrder> callback) {
try {
final JSONObject request = createRequest(quoteId, btcAddress);
api.call("orders", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new CreateOrderImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
} catch (JSONException ex) {
callback.onError(ex);
}
}
static JSONObject createRequest(final String quoteId, final String address) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "fixed");
jsonObject.put("quoteId", quoteId);
jsonObject.put("settleAddress", address);
if (!BuildConfig.ID_A.isEmpty() && !"null".equals(BuildConfig.ID_A)) {
jsonObject.put("affiliateId", BuildConfig.ID_A);
}
return jsonObject;
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017 m2049r et al. * Copyright (c) 2017-2021 m2049r et al.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,23 +14,24 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.network; package com.m2049r.xmrwallet.service.shift.sideshift.network;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback; import com.m2049r.xmrwallet.service.shift.NetworkCallback;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderParameters; import com.m2049r.xmrwallet.service.shift.ShiftApiCall;
import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderParameters;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
class QueryOrderParametersImpl implements QueryOrderParameters { class QueryOrderParametersImpl implements QueryOrderParameters {
private double lowerLimit; // "lower_limit": <lower_order_limit_in_btc_as_float>, private double lowerLimit;
private double price; // "price": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>, private double price;
private double upperLimit; // "upper_limit": <upper_order_limit_in_btc_as_float>, private double upperLimit;
private boolean isZeroConfEnabled; // "zero_conf_enabled": <true_if_zero_conf_is_enabled_as_boolean>,
private double zeroConfMaxAmount; // "zero_conf_max_amount": <up_to_this_amount_zero_conf_is_possible_as_float>
public double getLowerLimit() { public double getLowerLimit() {
return lowerLimit; return lowerLimit;
@ -44,25 +45,15 @@ class QueryOrderParametersImpl implements QueryOrderParameters {
return upperLimit; return upperLimit;
} }
public boolean isZeroConfEnabled() {
return isZeroConfEnabled;
}
public double getZeroConfMaxAmount() {
return zeroConfMaxAmount;
}
QueryOrderParametersImpl(final JSONObject jsonObject) throws JSONException { QueryOrderParametersImpl(final JSONObject jsonObject) throws JSONException {
lowerLimit = jsonObject.getDouble("lower_limit"); lowerLimit = jsonObject.getDouble("min");
price = jsonObject.getDouble("price"); price = jsonObject.getDouble("rate");
upperLimit = jsonObject.getDouble("upper_limit"); upperLimit = jsonObject.getDouble("max");
isZeroConfEnabled = jsonObject.getBoolean("zero_conf_enabled");
zeroConfMaxAmount = jsonObject.getDouble("zero_conf_max_amount");
} }
public static void call(@NonNull final XmrToApiCall api, public static void call(@NonNull final ShiftApiCall api,
@NonNull final XmrToCallback<QueryOrderParameters> callback) { @NonNull final ShiftCallback<QueryOrderParameters> callback) {
api.call("order_parameter_query", new NetworkCallback() { api.call("pairs/xmr/" + SideShiftApi.ASSET, new NetworkCallback() {
@Override @Override
public void onSuccess(JSONObject jsonObject) { public void onSuccess(JSONObject jsonObject) {
try { try {
@ -78,5 +69,4 @@ class QueryOrderParametersImpl implements QueryOrderParameters {
} }
}); });
} }
//{"zero_conf_enabled":true,"price":0.015537,"upper_limit":20.0,"lower_limit":0.001,"zero_conf_max_amount":0.1}
} }

View File

@ -0,0 +1,146 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.service.shift.NetworkCallback;
import com.m2049r.xmrwallet.service.shift.ShiftApiCall;
import com.m2049r.xmrwallet.util.DateHelper;
import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderStatus;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.util.Date;
import lombok.Getter;
import timber.log.Timber;
class QueryOrderStatusImpl implements QueryOrderStatus {
@Getter
private QueryOrderStatus.State state;
@Getter
private final String orderId;
@Getter
private final Date createdAt;
@Getter
private final Date expiresAt;
@Getter
private final double btcAmount;
@Getter
private final String btcAddress;
@Getter
private final double xmrAmount;
@Getter
private final String xmrAddress;
public boolean isCreated() {
return true;
}
public boolean isTerminal() {
return (state.equals(State.SETTLED) || isError());
}
public boolean isError() {
return state.equals(State.UNDEFINED);
}
public boolean isWaiting() {
return state.equals(State.WAITING);
}
public boolean isPending() {
return state.equals(State.PENDING);
}
public boolean isSent() {
return state.equals(State.SETTLING);
}
public boolean isPaid() {
return state.equals(State.SETTLED);
}
public double getPrice() {
return btcAmount / xmrAmount;
}
QueryOrderStatusImpl(final JSONObject jsonObject) throws JSONException {
try {
String created = jsonObject.getString("createdAtISO");
createdAt = DateHelper.parse(created);
String expires = jsonObject.getString("expiresAtISO");
expiresAt = DateHelper.parse(expires);
} catch (ParseException ex) {
throw new JSONException(ex.getLocalizedMessage());
}
orderId = jsonObject.getString("orderId");
btcAmount = jsonObject.getDouble("settleAmount");
JSONObject settleAddress = jsonObject.getJSONObject("settleAddress");
btcAddress = settleAddress.getString("address");
xmrAmount = jsonObject.getDouble("depositAmount");
JSONObject depositAddress = jsonObject.getJSONObject("depositAddress");
xmrAddress = settleAddress.getString("address");
JSONArray deposits = jsonObject.getJSONArray("deposits");
// we only create one deposit, so die if there are more than one:
if (deposits.length() > 1)
throw new IllegalStateException("more than one deposits");
state = State.UNDEFINED;
if (deposits.length() == 0) {
state = State.WAITING;
} else if (deposits.length() == 1) {
// sanity check
if (!orderId.equals(deposits.getJSONObject(0).getString("orderId")))
throw new IllegalStateException("deposit has different order id!");
String stateName = deposits.getJSONObject(0).getString("status");
try {
state = State.valueOf(stateName.toUpperCase());
} catch (IllegalArgumentException ex) {
state = State.UNDEFINED;
}
}
}
public static void call(@NonNull final ShiftApiCall api, @NonNull final String orderId,
@NonNull final ShiftCallback<QueryOrderStatus> callback) {
api.call("orders/" + orderId, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new QueryOrderStatusImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
}
}

View File

@ -0,0 +1,117 @@
/*
* Copyright (c) 2017-2021 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.service.shift.sideshift.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.service.shift.NetworkCallback;
import com.m2049r.xmrwallet.service.shift.ShiftApiCall;
import com.m2049r.xmrwallet.util.DateHelper;
import com.m2049r.xmrwallet.service.shift.sideshift.api.RequestQuote;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Date;
import lombok.Getter;
import timber.log.Timber;
class RequestQuoteImpl implements RequestQuote {
@Getter
private final double btcAmount;
@Getter
private final String id;
@Getter
private final Date createdAt;
@Getter
private final Date expiresAt;
@Getter
private final double xmrAmount;
@Getter
private final double price;
// TODO do something with errors - they always seem to send us 500
RequestQuoteImpl(final JSONObject jsonObject) throws JSONException {
// sanity checks
final String depositMethod = jsonObject.getString("depositMethod");
final String settleMethod = jsonObject.getString("settleMethod");
if (!"xmr".equals(depositMethod) || !SideShiftApi.ASSET.equals(settleMethod))
throw new IllegalStateException();
btcAmount = jsonObject.getDouble("settleAmount");
id = jsonObject.getString("id");
try {
final String created = jsonObject.getString("createdAt");
createdAt = DateHelper.parse(created);
final String expires = jsonObject.getString("expiresAt");
expiresAt = DateHelper.parse(expires);
} catch (ParseException ex) {
throw new JSONException(ex.getLocalizedMessage());
}
xmrAmount = jsonObject.getDouble("depositAmount");
price = jsonObject.getDouble("rate");
}
public static void call(@NonNull final ShiftApiCall api, final double xmrAmount,
@NonNull final ShiftCallback<RequestQuote> callback) {
try {
final JSONObject request = createRequest(xmrAmount);
api.call("quotes", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new RequestQuoteImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
} catch (JSONException ex) {
callback.onError(ex);
}
}
/**
* Create JSON request object
*
* @param xmrAmount how much XMR to shift to BTC
*/
static JSONObject createRequest(final double xmrAmount) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("depositMethod", "xmr");
jsonObject.put("settleMethod", SideShiftApi.ASSET);
// #sideshift is silly and likes numbers as strings
String amount = AmountFormatter.format(xmrAmount);
jsonObject.put("depositAmount", amount);
return jsonObject;
}
static DecimalFormat AmountFormatter = new DecimalFormat("#.############");
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2017 m2049r et al. * Copyright (c) 2017-2021 m2049r et al.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,18 +14,23 @@
* limitations under the License. * limitations under the License.
*/ */
package com.m2049r.xmrwallet.xmrto.network; package com.m2049r.xmrwallet.service.shift.sideshift.network;
import android.net.Uri;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.service.shift.NetworkCallback;
import com.m2049r.xmrwallet.service.shift.ShiftApiCall;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.service.shift.ShiftError;
import com.m2049r.xmrwallet.service.shift.ShiftException;
import com.m2049r.xmrwallet.service.shift.sideshift.api.CreateOrder;
import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderParameters;
import com.m2049r.xmrwallet.service.shift.sideshift.api.QueryOrderStatus;
import com.m2049r.xmrwallet.service.shift.sideshift.api.RequestQuote;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.util.OkHttpHelper; import com.m2049r.xmrwallet.util.OkHttpHelper;
import com.m2049r.xmrwallet.xmrto.XmrToError;
import com.m2049r.xmrwallet.xmrto.XmrToException;
import com.m2049r.xmrwallet.xmrto.api.CreateOrder;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderParameters;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderStatus;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -41,42 +46,45 @@ import okhttp3.RequestBody;
import okhttp3.Response; import okhttp3.Response;
import timber.log.Timber; import timber.log.Timber;
public class XmrToApiImpl implements XmrToApi, XmrToApiCall { public class SideShiftApiImpl implements SideShiftApi, ShiftApiCall {
@NonNull @NonNull
private final OkHttpClient okHttpClient; private final OkHttpClient okHttpClient;
private final HttpUrl baseUrl; private final HttpUrl baseUrl;
public XmrToApiImpl(@NonNull final OkHttpClient okHttpClient, final HttpUrl baseUrl) { public SideShiftApiImpl(@NonNull final OkHttpClient okHttpClient, final HttpUrl baseUrl) {
this.okHttpClient = okHttpClient; this.okHttpClient = okHttpClient;
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
} }
@Override @Override
public void createOrder(final double amount, @NonNull final String address, public void queryOrderParameters(@NonNull final ShiftCallback<QueryOrderParameters> callback) {
@NonNull final XmrToCallback<CreateOrder> callback) { QueryOrderParametersImpl.call(this, callback);
CreateOrderImpl.call(this, amount, address, callback);
} }
@Override @Override
public void createOrder(@NonNull final String url, public void requestQuote(final double xmrAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
@NonNull final XmrToCallback<CreateOrder> callback) { RequestQuoteImpl.call(this, xmrAmount, callback);
CreateOrderImpl.call(this, url, callback); }
@Override
public void createOrder(final String quoteId, @NonNull final String btcAddress,
@NonNull final ShiftCallback<CreateOrder> callback) {
CreateOrderImpl.call(this, quoteId, btcAddress, callback);
} }
@Override @Override
public void queryOrderStatus(@NonNull final String uuid, public void queryOrderStatus(@NonNull final String uuid,
@NonNull final XmrToCallback<QueryOrderStatus> callback) { @NonNull final ShiftCallback<QueryOrderStatus> callback) {
QueryOrderStatusImpl.call(this, uuid, callback); QueryOrderStatusImpl.call(this, uuid, callback);
} }
@Override @Override
public void queryOrderParameters(@NonNull final XmrToCallback<QueryOrderParameters> callback) { public Uri getQueryOrderUri(String orderId) {
QueryOrderParametersImpl.call(this, callback); return Uri.parse("https://sideshift.ai/orders/" + orderId);
} }
@Override @Override
public void call(@NonNull final String path, @NonNull final NetworkCallback callback) { public void call(@NonNull final String path, @NonNull final NetworkCallback callback) {
call(path, null, callback); call(path, null, callback);
@ -85,24 +93,18 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
@Override @Override
public void call(@NonNull final String path, final JSONObject request, @NonNull final NetworkCallback callback) { public void call(@NonNull final String path, final JSONObject request, @NonNull final NetworkCallback callback) {
final HttpUrl url = baseUrl.newBuilder() final HttpUrl url = baseUrl.newBuilder()
.addPathSegment(path) .addPathSegments(path)
.addPathSegment("") // xmr.to needs a trailing slash!
.build(); .build();
Timber.d(url.toString());
final Request httpRequest = createHttpRequest(request, url); final Request httpRequest = createHttpRequest(request, url);
Timber.d(httpRequest.toString());
Timber.d(request == null ? "null request" : request.toString());
okHttpClient.newCall(httpRequest).enqueue(new okhttp3.Callback() { okHttpClient.newCall(httpRequest).enqueue(new okhttp3.Callback() {
@Override @Override
public void onFailure(final Call call, final IOException ex) { public void onFailure(final Call call, final IOException ex) {
Timber.d("A");
callback.onError(ex); callback.onError(ex);
} }
@Override @Override
public void onResponse(final Call call, final Response response) throws IOException { public void onResponse(@NonNull final Call call, @NonNull final Response response) throws IOException {
Timber.d("onResponse code=%d", response.code()); Timber.d("onResponse code=%d", response.code());
if (response.isSuccessful()) { if (response.isSuccessful()) {
try { try {
@ -115,11 +117,11 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
try { try {
final JSONObject json = new JSONObject(response.body().string()); final JSONObject json = new JSONObject(response.body().string());
Timber.d(json.toString(2)); Timber.d(json.toString(2));
final XmrToError error = new XmrToError(json); final ShiftError error = new ShiftError(json);
Timber.e("xmr.to says %d/%s", response.code(), error.toString()); Timber.w("%s says %d/%s", CreateOrder.TAG, response.code(), error.toString());
callback.onError(new XmrToException(response.code(), error)); callback.onError(new ShiftException(response.code(), error));
} catch (JSONException ex) { } catch (JSONException ex) {
callback.onError(new XmrToException(response.code())); callback.onError(new ShiftException(response.code()));
} }
} }
} }
@ -128,8 +130,7 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
private Request createHttpRequest(final JSONObject request, final HttpUrl url) { private Request createHttpRequest(final JSONObject request, final HttpUrl url) {
if (request != null) { if (request != null) {
final RequestBody body = RequestBody.create( final RequestBody body = RequestBody.create(request.toString(), MediaType.parse("application/json"));
MediaType.parse("application/json"), request.toString());
return OkHttpHelper.getPostRequest(url, body); return OkHttpHelper.getPostRequest(url, body);
} else { } else {
return OkHttpHelper.getGetRequest(url); return OkHttpHelper.getGetRequest(url);

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2019 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util; package com.m2049r.xmrwallet.util;
import android.content.Context; import android.content.Context;

View File

@ -1,6 +1,20 @@
package com.m2049r.xmrwallet.util; /*
* Copyright (c) 2018 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.m2049r.xmrwallet.model.WalletManager; package com.m2049r.xmrwallet.util;
import java.math.BigInteger; import java.math.BigInteger;

View File

@ -0,0 +1,29 @@
/*
* Copyright (c) 2017 m2049r er al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateHelper {
public static final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
public static Date parse(String dateString) throws ParseException {
return DATETIME_FORMATTER.parse(dateString.replaceAll("Z$", "+0000"));
}
}

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2020 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util; package com.m2049r.xmrwallet.util;
import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.app.AppCompatDelegate;

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2018-2020 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util; package com.m2049r.xmrwallet.util;
import android.app.KeyguardManager; import android.app.KeyguardManager;

View File

@ -226,16 +226,14 @@ public class Helper {
return displayB; return displayB;
} }
// min 2 significant digits after decimal point static public String getDisplayAmount(double amount) {
static public String getFormattedAmount(double amount) { // a Java bug does not strip zeros properly if the value is 0
if ((amount >= 1.0d) || (amount == 0)) BigDecimal d = new BigDecimal(amount)
return String.format(Locale.US, "%,.2f", amount); .setScale(12, BigDecimal.ROUND_HALF_UP)
else { // amount < 1 .stripTrailingZeros();
int decimals = 1 - (int) Math.floor(Math.log10(amount)); if (d.scale() < 1)
if (decimals < 2) decimals = 2; d = d.setScale(1, BigDecimal.ROUND_UNNECESSARY);
if (decimals > 12) decimals = 12; return d.toPlainString();
return String.format(Locale.US, "%,." + decimals + "f", amount);
}
} }
static public Bitmap getBitmap(Context context, int drawableId) { static public Bitmap getBitmap(Context context, int drawableId) {
@ -328,9 +326,9 @@ public class Helper {
static public HttpUrl getXmrToBaseUrl() { static public HttpUrl getXmrToBaseUrl() {
if ((WalletManager.getInstance() == null) if ((WalletManager.getInstance() == null)
|| (WalletManager.getInstance().getNetworkType() != NetworkType.NetworkType_Mainnet)) { || (WalletManager.getInstance().getNetworkType() != NetworkType.NetworkType_Mainnet)) {
return HttpUrl.parse("https://test.xmr.to/api/v3/xmr2btc/"); throw new IllegalStateException("Only mainnet not supported");
} else { } else {
return HttpUrl.parse("https://xmr.to/api/v3/xmr2btc/"); return HttpUrl.parse("https://sideshift.ai/api/v1/");
} }
} }

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2018-2020 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util; package com.m2049r.xmrwallet.util;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2020 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.util; package com.m2049r.xmrwallet.util;
import android.content.Context; import android.content.Context;

View File

@ -1,102 +0,0 @@
/*
* Copyright (c) 2018 m2049r
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Specs from https://openalias.org/
package com.m2049r.xmrwallet.util;
import com.m2049r.xmrwallet.data.BarcodeData;
import com.m2049r.xmrwallet.xmrto.api.CreateOrder;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import timber.log.Timber;
public class PaymentProtocolHelper {
//https://bitpay.com/i/xxx
public static boolean isHttp(String string) {
if ((string == null) || (string.isEmpty())) return false;
try {
// new URL(string).toURI() checks if its a real url
return new URL(string).toURI().getScheme().startsWith("http");
} catch (MalformedURLException | URISyntaxException ex) {
return false;
}
}
// guess if the string may be a valid payment uri
//https://bitpay.com/i/xxx
//bitcoin:?r=https://bitpay.com/i/xxx
public static String getBip70(String bip72Or70) {
if ((bip72Or70 == null) || (bip72Or70.isEmpty())) return null;
if (isHttp(bip72Or70)) return bip72Or70;
BarcodeData bc = BarcodeData.parseBitcoinUri(bip72Or70);
if (bc == null) return null;
return bc.bip70;
}
public interface OnResolvedListener {
void onResolved(BarcodeData.Asset asset, String address, double amount, String bip70);
void onFailure(Exception ex);
}
static public boolean resolve(final String bip70, final OnResolvedListener resolvedListener) {
if ((bip70 == null) || (bip70.isEmpty()))
return false; //pointless trying to lookup nothing
Timber.d("Resolving %s", bip70);
getXmrToApi().createOrder(bip70, new XmrToCallback<CreateOrder>() {
@Override
public void onSuccess(CreateOrder createOrder) {
if (resolvedListener != null) {
resolvedListener.onResolved(BarcodeData.Asset.BTC,
createOrder.getBtcDestAddress(),
createOrder.getBtcAmount(),
createOrder.getBtcBip70());
}
}
@Override
public void onError(Exception ex) {
if (resolvedListener != null) {
resolvedListener.onFailure(ex);
}
}
});
return true;
}
static private XmrToApi xmrToApi = null;
static private XmrToApi getXmrToApi() {
if (xmrToApi == null) {
synchronized (PaymentProtocolHelper.class) {
if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl());
}
}
}
return xmrToApi;
}
}

View File

@ -1,135 +0,0 @@
/*
* Copyright (c) 2017 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto;
import com.m2049r.xmrwallet.R;
import org.json.JSONException;
import org.json.JSONObject;
public class XmrToError {
private final Error errorId;
private final String errorMsg;
public enum Error {
XMRTO_ERROR_UNDEF,
XMRTO_ERROR_001, // (503) internal services not available try again later
XMRTO_ERROR_002, // (400) malformed bitcoin address check address validity
XMRTO_ERROR_003, // (400) invalid bitcoin amount check amount data type
XMRTO_ERROR_004, // (400) bitcoin amount out of bounds check min and max amount
XMRTO_ERROR_005, // (400) unexpected validation error contact support
XMRTO_ERROR_006, // (404) requested order not found check order UUID
XMRTO_ERROR_007, // (503) third party service not available try again later
XMRTO_ERROR_008, // (503) insufficient funds available try again later
XMRTO_ERROR_009, // (400) invalid request check request parameters
XMRTO_ERROR_010, // (400) payment protocol failed invalid or outdated data served by url
XMRTO_ERROR_011, // (400) malformed payment protocol url url is malformed or cannot be contacted
XMRTO_ERROR_012 // (403) too many requests
}
public boolean isRetryable() {
return (errorId == Error.XMRTO_ERROR_001)
|| (errorId == Error.XMRTO_ERROR_007)
|| (errorId == Error.XMRTO_ERROR_008);
}
public static String getErrorIdString(Error anError) {
return anError.toString().replace('_', '-');
}
// mostly for testing
public XmrToError(String errorId, String message) {
Error error;
try {
error = Error.valueOf(errorId.replace('-', '_'));
} catch (IllegalArgumentException ex) {
error = Error.XMRTO_ERROR_UNDEF;
}
this.errorId = error;
this.errorMsg = message;
}
public XmrToError(final JSONObject jsonObject) throws JSONException {
final String errorId = jsonObject.getString("error");
Error error;
try {
error = Error.valueOf(errorId.replace('-', '_'));
} catch (IllegalArgumentException ex) {
error = Error.XMRTO_ERROR_UNDEF;
}
this.errorId = error;
this.errorMsg = jsonObject.getString("error_msg");
}
public Error getErrorId() {
return errorId;
}
public String getErrorMsg() {
return errorMsg;
}
public int getErrorMsgId() {
switch (errorId) {
case XMRTO_ERROR_001:
return R.string.xmrto_error_001;
case XMRTO_ERROR_004:
return R.string.xmrto_error_004;
case XMRTO_ERROR_010:
return R.string.xmrto_error_010;
case XMRTO_ERROR_012:
return R.string.xmrto_error_012;
default:
return R.string.xmrto_error;
}
}
@Override
public String toString() {
return getErrorIdString(getErrorId()) + ": " + getErrorMsg();
}
/* Errors from Query Parameters
HTTP code XMR.TO error code Error message/reason Solution
503 XMRTO-ERROR-001 internal services not available try again later
503 XMRTO-ERROR-007 third party service not available try again later
503 XMRTO-ERROR-008 insufficient funds available try again later
*/
/* Errors from Create Order
HTTP code XMR.TO error code Error message/reason Solution
503 XMRTO-ERROR-001 internal services not available try again later
400 XMRTO-ERROR-002 malformed bitcoin address check address validity
400 XMRTO-ERROR-003 invalid bitcoin amount check amount data type
503 XMRTO-ERROR-004 bitcoin amount out of bounds check min and max amount
400 XMRTO-ERROR-005 unexpected validation error contact support
Errors from Create Order Payment Protocol
400 XMRTO-ERROR-010 payment protocol failed invalid or outdated data served by url
400 XMRTO-ERROR-011 malformed payment protocol url url is malformed or cannot be contacted
*/
/* Errors from Query Order
HTTP code XMR.TO error code Error message/reason Solution
400 XMRTO-ERROR-009 invalid request check request parameters
404 XMRTO-ERROR-006 requested order not found check order UUID
*/
/* General
403 XMRTO-ERROR-012 too many requests
*/
}

View File

@ -1,31 +0,0 @@
/*
* Copyright (c) 2017 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.api;
public interface QueryOrderParameters {
double getLowerLimit(); // "lower_limit": <lower_order_limit_in_btc_as_float>,
double getPrice(); // "price": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>,
double getUpperLimit(); // "upper_limit": <upper_order_limit_in_btc_as_float>,
boolean isZeroConfEnabled(); // "zero_conf_enabled": <true_if_zero_conf_is_enabled_as_boolean>,
double getZeroConfMaxAmount(); // "zero_conf_max_amount": <up_to_this_amount_zero_conf_is_possible_as_float>
}

View File

@ -1,53 +0,0 @@
/*
* Copyright (c) 2017 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.api;
import androidx.annotation.NonNull;
public interface XmrToApi {
/**
* Queries the order parameter.
*
* @param callback the callback with the OrderParameter object
*/
void queryOrderParameters(@NonNull final XmrToCallback<QueryOrderParameters> callback);
/**
* Creates an order
*
* @param amount the desired amount
* @param address the target bitcoin address
*/
void createOrder(final double amount, @NonNull final String address, @NonNull final XmrToCallback<CreateOrder> callback);
/**
* Creates an order through BIP70 payment protocol like bitpay
*
* @param url the BIP70 URL
*/
void createOrder(@NonNull final String url, @NonNull final XmrToCallback<CreateOrder> callback);
/**
* Queries the order status for given current order
*
* @param uuid the order uuid
* @param callback the callback with the OrderStatus object
*/
void queryOrderStatus(@NonNull final String uuid, @NonNull final XmrToCallback<QueryOrderStatus> callback);
}

View File

@ -1,128 +0,0 @@
/*
* Copyright (c) 2017 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.xmrto.api.CreateOrder;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import org.json.JSONException;
import org.json.JSONObject;
class CreateOrderImpl implements CreateOrder {
private final String state;
private final double btcAmount;
private final String btcDestAddress;
private final String btcBip70;
private final String uuid;
public Double getBtcAmount() {
return btcAmount;
}
public String getBtcDestAddress() {
return btcDestAddress;
}
public String getBtcBip70() {
return btcBip70;
}
public String getUuid() {
return uuid;
}
public String getState() {
return state;
}
CreateOrderImpl(final JSONObject jsonObject) throws JSONException {
this.state = jsonObject.getString("state");
this.btcAmount = jsonObject.getDouble("btc_amount");
this.btcDestAddress = jsonObject.getString("btc_dest_address");
if (jsonObject.has("pp_url"))
this.btcBip70 = jsonObject.getString("pp_url");
else
this.btcBip70 = null;
this.uuid = jsonObject.getString("uuid");
}
public static void call(@NonNull final XmrToApiCall api, final double amount, @NonNull final String address,
@NonNull final XmrToCallback<CreateOrder> callback) {
try {
final JSONObject request = createRequest(amount, address);
api.call("order_create", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new CreateOrderImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
} catch (JSONException ex) {
callback.onError(ex);
}
}
public static void call(@NonNull final XmrToApiCall api, @NonNull final String url,
@NonNull final XmrToCallback<CreateOrder> callback) {
try {
final JSONObject request = createRequest(url);
api.call("order_create_pp", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new CreateOrderImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
} catch (JSONException ex) {
callback.onError(ex);
}
}
static JSONObject createRequest(final double amount, final String address) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("amount", amount);
jsonObject.put("amount_currency", "BTC");
jsonObject.put("btc_dest_address", address);
return jsonObject;
}
static JSONObject createRequest(final String ppUrl) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("pp_url", ppUrl);
return jsonObject;
}
}

View File

@ -1,220 +0,0 @@
/*
* Copyright (c) 2017 m2049r et al.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderStatus;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import timber.log.Timber;
class QueryOrderStatusImpl implements QueryOrderStatus {
public static final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public static Date parseDate(String dateString) throws ParseException {
return DATETIME_FORMATTER.parse(dateString.replaceAll("Z$", "+0000"));
}
private QueryOrderStatus.State state; // "state": "<order_state_as_string>",
private double btcAmount; // "btc_amount": <requested_amount_in_btc_as_float>,
private String btcDestAddress; // "btc_dest_address": "<requested_destination_address_as_string>",
private String uuid; // "uuid": "<unique_order_identifier_as_12_character_string>"
// the following are only returned if the state is "after" TO_BE_CREATED
//private int btcNumConfirmations; // "btc_num_confirmations": <btc_num_confirmations_as_integer>,
private int btcNumConfirmationsThreshold; // "btc_num_confirmations_threshold": <btc_num_confirmations_threshold_as_integer>,
private Date createdAt; // "created_at": "<timestamp_as_string>",
private Date expiresAt; // "expires_at": "<timestamp_as_string>",
private int secondsTillTimeout; // "seconds_till_timeout": <seconds_till_timeout_as_integer>,
private double incomingAmountTotal; // "incoming_amount_total": <amount_in_incoming_currency_for_this_order_as_float>,
private double remainingAmountIncoming; // "remaining_amount_incoming": <amount_in_incoming_currency_that_the_user_must_still_send_as_float>,
private int incomingNumConfirmationsRemaining; // "incoming_num_confirmations_remaining": <num_incoming_currency_confirmations_remaining_before_bitcoins_will_be_sent_as_integer>,
private double incomingPriceBtc; // "incoming_price_btc": <price_of_1_incoming_in_btc_currency_as_offered_by_service_as_float>,
private String receivingSubaddress; // "receiving_subaddress": <xmr_subaddress_user_needs_to_send_funds_to_as_string>,
private int recommendedMixin; // "recommended_mixin": <recommended_mixin_as_integer>,
public QueryOrderStatus.State getState() {
return state;
}
public double getBtcAmount() {
return btcAmount;
}
public String getBtcDestAddress() {
return btcDestAddress;
}
public String getUuid() {
return uuid;
}
public int getBtcNumConfirmationsThreshold() {
return btcNumConfirmationsThreshold;
}
public Date getCreatedAt() {
return createdAt;
}
public Date getExpiresAt() {
return expiresAt;
}
public int getSecondsTillTimeout() {
return secondsTillTimeout;
}
public double getIncomingAmountTotal() {
return incomingAmountTotal;
}
public double getRemainingAmountIncoming() {
return remainingAmountIncoming;
}
public int getIncomingNumConfirmationsRemaining() {
return incomingNumConfirmationsRemaining;
}
public double getIncomingPriceBtc() {
return incomingPriceBtc;
}
public String getReceivingSubaddress() {
return receivingSubaddress;
}
public int getRecommendedMixin() {
return recommendedMixin;
}
public boolean isCreated() {
return (state.equals(State.UNPAID) ||
state.equals(State.BTC_SENT) ||
state.equals(State.PAID) ||
state.equals(State.PAID_UNCONFIRMED) ||
state.equals(State.UNDERPAID));
}
public boolean isTerminal() {
return (state.equals(State.BTC_SENT) || isError());
}
public boolean isError() {
return (state.equals(State.UNDEF) ||
state.equals(State.NOT_FOUND) ||
state.equals(State.TIMED_OUT));
}
public boolean isPending() {
return (state.equals(State.TO_BE_CREATED) ||
state.equals(State.UNPAID) ||
state.equals(State.UNDERPAID) ||
state.equals(State.PAID_UNCONFIRMED) ||
state.equals(State.PAID));
}
public boolean isPaid() {
return (state.equals(State.PAID_UNCONFIRMED) ||
state.equals(State.PAID));
}
public boolean isSent() {
return state.equals(State.BTC_SENT);
}
QueryOrderStatusImpl(final JSONObject jsonObject) throws JSONException {
Timber.d(jsonObject.toString(4));
String stateName = jsonObject.getString("state"); // "state": "<order_state_as_string>",
State state;
try {
state = State.valueOf(stateName);
} catch (IllegalArgumentException ex) {
state = State.UNDEF; //TODO: throws IllegalArgumentException?
}
this.state = state;
btcAmount = jsonObject.getDouble("btc_amount"); // "btc_amount": <requested_amount_in_btc_as_float>,
btcDestAddress = jsonObject.getString("btc_dest_address"); // "btc_dest_address": "<requested_destination_address_as_string>",
uuid = jsonObject.getString("uuid"); // "uuid": "<unique_order_identifier_as_12_character_string>"
if (isCreated()) {
btcNumConfirmationsThreshold = jsonObject.getInt("btc_num_confirmations_threshold");
try {
String created = jsonObject.getString("created_at");
createdAt = parseDate(created);
String expires = jsonObject.getString("expires_at");
expiresAt = parseDate(expires);
} catch (ParseException ex) {
throw new JSONException(ex.getLocalizedMessage());
}
secondsTillTimeout = jsonObject.getInt("seconds_till_timeout");
incomingAmountTotal = jsonObject.getDouble("incoming_amount_total");
remainingAmountIncoming = jsonObject.getDouble("remaining_amount_incoming");
incomingNumConfirmationsRemaining = jsonObject.getInt("incoming_num_confirmations_remaining");
incomingPriceBtc = jsonObject.getDouble("incoming_price_btc");
receivingSubaddress = jsonObject.getString("receiving_subaddress");
recommendedMixin = jsonObject.getInt("recommended_mixin");
}
}
public static void call(@NonNull final XmrToApiCall api, @NonNull final String uuid,
@NonNull final XmrToCallback<QueryOrderStatus> callback) {
try {
final JSONObject request = createRequest(uuid);
api.call("order_status_query", request, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
try {
callback.onSuccess(new QueryOrderStatusImpl(jsonObject));
} catch (JSONException ex) {
callback.onError(ex);
}
}
@Override
public void onError(Exception ex) {
callback.onError(ex);
}
});
} catch (JSONException ex) {
callback.onError(ex);
}
}
/**
* Create JSON request object
*
* @param uuid unique_order_identifier_as_12_character_string
*/
static JSONObject createRequest(final String uuid) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("uuid", uuid);
return jsonObject;
}
}

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z"/>
</vector>

View File

@ -0,0 +1,48 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="648dp"
android:height="80dp"
android:viewportWidth="648"
android:viewportHeight="80">
<path
android:pathData="M65.94,9.56A40,40 0,0 0,9.56 66Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M13.79,70.23a40,40 0,0 0,56.45 -56.5Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M144.75,28a9.12,9.12 0,0 0,-1 -4.48A8.81,8.81 0,0 0,141 20.29a14.14,14.14 0,0 0,-4 -1.95,15.61 15.61,0 0,0 -4.84,-0.68 15.34,15.34 0,0 0,-4.24 0.58,11.88 11.88,0 0,0 -3.55,1.66 7.15,7.15 0,0 0,-2.47 2.63,7.26 7.26,0 0,0 -0.88,3.61v0.49a7.11,7.11 0,0 0,0.88 3.7A6.91,6.91 0,0 0,124.53 33,19 19,0 0,0 129,34.82a58.17,58.17 0,0 0,6.31 1.27C140.9,37 145,38.52 147.61,41a12.31,12.31 0,0 1,3.94 9.66v0.87a16,16 0,0 1,-1.18 6.25,13.23 13.23,0 0,1 -3.55,4.87 17,17 0,0 1,-5.72 3.22,24.6 24.6,0 0,1 -8,1.17A26.21,26.21 0,0 1,124 65.54a18,18 0,0 1,-6.6 -4.1,18.51 18.51,0 0,1 -4.05,-6.14A21.41,21.41 0,0 1,112 47.59V45.35h6.41V47.2c0,4.68 1.28,8.1 3.85,10.44s6.11,3.51 10.75,3.51c4,0 7,-0.88 9,-2.63a8.82,8.82 0,0 0,3 -6.93V51.1a7.26,7.26 0,0 0,-3 -6.33q-3.12,-2.21 -10.06,-3.22a38.07,38.07 0,0 1,-7.3 -1.66,17.24 17.24,0 0,1 -5.53,-2.83 13.62,13.62 0,0 1,-3.55 -4.29,13.48 13.48,0 0,1 -1.18,-5.85V26a11.87,11.87 0,0 1,1.28 -5.65,13.37 13.37,0 0,1 3.65,-4.49A16.94,16.94 0,0 1,124.92 13a26.31,26.31 0,0 1,15.19 0.29,21.17 21.17,0 0,1 6,3.41 14.69,14.69 0,0 1,5 11.12V31h-6.41V28Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M161.91,12.68h33.93v5.85H182.13V59.59h13.71v5.85H161.91V59.59h13.71v-41H161.91Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M207.78,12.68h17.56q9.91,0 14.5,4.68c3,3.12 4.53,8.1 4.53,14.92L244.37,45.84c0,6.82 -1.48,11.8 -4.53,14.92s-7.89,4.68 -14.5,4.68L207.78,65.44L207.78,59.49h4.54L212.32,18.63h-4.54ZM224.45,59.68a22.74,22.74 0,0 0,6.11 -0.69,9.73 9.73,0 0,0 4.24,-2.34 9.43,9.43 0,0 0,2.47 -4.39,26.62 26.62,0 0,0 0.79,-6.82L238.06,32.77a26.2,26.2 0,0 0,-0.79 -6.83,10 10,0 0,0 -2.47,-4.38 9.73,9.73 0,0 0,-4.24 -2.34,22.26 22.26,0 0,0 -6.11,-0.69h-5.62L218.83,59.59h5.62Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M256.21,12.68h32.35v5.85H262.62V36.09h25.55v5.85H262.62V59.59h26.43v5.85H256.21Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M331.67,28a9.12,9.12 0,0 0,-1 -4.48,8.81 8.81,0 0,0 -2.76,-3.22 14.2,14.2 0,0 0,-4.05 -1.95,15.55 15.55,0 0,0 -4.83,-0.68 15.34,15.34 0,0 0,-4.24 0.58,11.77 11.77,0 0,0 -3.55,1.66 7.07,7.07 0,0 0,-2.47 2.63,7.26 7.26,0 0,0 -0.89,3.61v0.49a7.11,7.11 0,0 0,0.89 3.7A6.91,6.91 0,0 0,311.45 33a19,19 0,0 0,4.44 1.85,58.17 58.17,0 0,0 6.31,1.27c5.62,0.87 9.76,2.43 12.33,4.87a12.31,12.31 0,0 1,3.94 9.66v0.87a16,16 0,0 1,-1.18 6.25,13.23 13.23,0 0,1 -3.55,4.87A17,17 0,0 1,328 65.83,24.64 24.64,0 0,1 320,67 26.21,26.21 0,0 1,311 65.54a18.09,18.09 0,0 1,-6.61 -4.1,18.63 18.63,0 0,1 -4,-6.14 21.41,21.41 0,0 1,-1.38 -7.71V45.35h6.41V47.2c0,4.68 1.28,8.1 3.85,10.44s6.11,3.51 10.75,3.51c3.94,0 7,-0.88 9,-2.63A8.8,8.8 0,0 0,332 51.59V51.1a7.24,7.24 0,0 0,-3.06 -6.33q-3.11,-2.21 -10.06,-3.22a38,38 0,0 1,-7.29 -1.66A17.24,17.24 0,0 1,306 37.06a13.62,13.62 0,0 1,-3.55 -4.29,13.48 13.48,0 0,1 -1.18,-5.85V26a11.87,11.87 0,0 1,1.28 -5.65,13.37 13.37,0 0,1 3.65,-4.49A16.94,16.94 0,0 1,311.84 13a26.31,26.31 0,0 1,15.19 0.29,21.17 21.17,0 0,1 6,3.41 14.69,14.69 0,0 1,5 11.12V31h-6.41Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M348,12.68h6.41V36.09h22.79V12.68h6.41V65.54h-6.41V42H354.45V65.63H348Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M395.68,12.68h33.93v5.85H415.9V59.59h13.71v5.85H395.68V59.59h13.71v-41H395.68Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M443.23,12.68h32.84v5.85H449.64V36.09h25.94v5.85H449.64v23.6h-6.41V12.68Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M487.32,12.68H524.9v5.85H509.32v47H502.9V18.63H487.32V12.68Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M537.33,61.34a4.74,4.74 0,0 1,1.58 -3.7,5 5,0 0,1 3.74,-1.56A5.36,5.36 0,0 1,548 61.34a4.76,4.76 0,0 1,-1.58 3.71,5 5,0 0,1 -3.75,1.56 4.86,4.86 0,0 1,-3.74 -1.56A4.76,4.76 0,0 1,537.33 61.34Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M595.82,52.47H572.94l-3.85,13.16h-6.91l16.08,-52.95h12l16.17,52.86h-6.9ZM583.89,15.41l-9.28,31.11H594l-9.27,-31.11Z"
android:fillColor="@color/monerujoPrimary"/>
<path
android:pathData="M614.07,12.68H648v5.85H634.29V59.59H648v5.85H614.07V59.59h13.71v-41H614.07Z"
android:fillColor="@color/monerujoPrimary"/>
</vector>

View File

@ -0,0 +1,51 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="404.08dp"
android:height="115dp"
android:viewportWidth="404.08"
android:viewportHeight="115">
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M62.65,0c1.62,0.49 3.29,0.92 4.9,1.48q40,13.85 48,55.41c0.55,2.9 0.69,5.89 1,9 -0.77,0 -1.24,0.09 -1.72,0.09L63.76,65.98c-0.93,0 -1.73,0.13 -1.72,-1.32q0.06,-32.19 0,-64.39L62.04,0ZM84.65,56.41A14.19,14.19 0,1 0,70.54 42.26,14.24 14.24,0 0,0 84.69,56.42Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M0,64.28c0.45,-2.48 0.76,-5 1.36,-7.43A46.65,46.65 0,0 1,18.08 30.92c0.38,-0.3 0.8,-0.57 1.06,-0.75L54.82,65.85a8.61,8.61 0,0 1,-1 0.12H1c-0.32,0 -0.64,0 -0.95,-0.06Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M404.08,80c-0.3,1.32 -0.54,2.65 -0.92,3.94a18.5,18.5 0,0 1,-17.33 13.41c-5.26,0.28 -10.16,-0.78 -14.34,-4.19 -6.61,-5.39 -8.86,-15.45 -5.33,-23.85A17.89,17.89 0,0 1,377.91 58.7c9.55,-2.91 19.6,0.92 23.81,9.27 1.15,2.29 1.59,5 2.36,7.43ZM384.25,66.48a9.62,9.62 0,0 0,-9.1 5.91,13 13,0 0,0 -0.84,7.83 9.85,9.85 0,0 0,9.53 8.44c5.18,0.14 9.08,-2.76 10.2,-7.87a15.52,15.52 0,0 0,0.19 -5.35A10.18,10.18 0,0 0,384.25 66.48Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M0,70l21.15,0H41.61L12.15,99.4c-0.63,-0.73 -1.44,-1.63 -2.17,-2.56A46.27,46.27 0,0 1,0.24 72.38a7.28,7.28 0,0 0,-0.24 -1Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M46.1,115c-1.2,-0.1 -2.41,-0.23 -3.61,-0.32 -0.76,-0.06 -1.29,-0.25 -1.28,-1.19 0,-6.9 0,-13.81 0,-20.71a0.89,0.89 0,0 1,0.08 -0.32L60.55,111.7a14.44,14.44 0,0 1,-2.31 0.94c-3.1,0.76 -6.22,1.43 -9.33,2.13l-1.18,0.23Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M205,60.58V71.13c0,8 0,15.91 0,23.87 0,1.2 -0.29,1.66 -1.58,1.63q-4.87,-0.13 -9.76,0c-1.3,0 -1.69,-0.35 -1.69,-1.67 0.06,-8.85 0,-17.71 0,-26.57V42.08c0,-0.58 0,-1.16 0.08,-1.81a5.77,5.77 0,0 1,0.83 -0.15c4,0 8,0 12.07,0a2.61,2.61 0,0 1,1.66 1.09c4.79,6.5 9.53,13.06 14.29,19.6 0.29,0.39 0.6,0.78 1,1.28l2,-2.7q6.63,-9.09 13.22,-18.2a2.4,2.4 0,0 1,2.24 -1.14c3.61,0.06 7.23,0 10.84,0 1.07,0 1.51,0.21 1.51,1.4q0,26.85 0,53.69c0,1.16 -0.39,1.45 -1.48,1.43 -3.3,-0.06 -6.6,-0.08 -9.9,0 -1.27,0 -1.59,-0.39 -1.58,-1.61 0,-10.89 0,-21.78 0,-32.67V60.9l-0.27,-0.09c-0.32,0.41 -0.64,0.81 -0.95,1.23l-13,17.36c-1.7,2.27 -4.08,2.22 -5.78,-0.1L205.93,61.67C205.72,61.4 205.49,61.14 205,60.58Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M315.57,96.55h-1.32c-4.43,0 -8.86,0 -13.29,0a2.84,2.84 0,0 1,-2.44 -1.08c-4.51,-5.24 -9.09,-10.42 -13.59,-15.67a3.11,3.11 0,0 0,-2.79 -1.24,46.84 46.84,0 0,1 -4.74,0c-1,0 -1.32,0.31 -1.31,1.32 0,5 0,10 0,15 0,1.2 -0.27,1.66 -1.57,1.63 -3.34,-0.09 -6.68,-0.06 -10,0 -1,0 -1.45,-0.25 -1.45,-1.36q0,-27 0,-53.95c0,-1 0.32,-1.35 1.33,-1.35 9.35,0.08 18.71,0 28,0.25A18.39,18.39 0,0 1,310.34 55c1.46,7.37 0.05,14.08 -6.22,19a40.92,40.92 0,0 1,-5.46 3.12l17.06,19.11ZM276.11,66.42a3,3 0,0 0,0.65 0.19c4.79,0 9.59,0.17 14.37,-0.06A6.75,6.75 0,0 0,298 59.18c-0.18,-4.09 -3.06,-6.83 -7.37,-6.87s-8.76,0 -13.15,0c-1.11,0 -1.37,0.42 -1.35,1.44 0.06,2.12 0,4.24 0,6.37Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M157.7,77.48l-7,10.36c-1.78,2.61 -3.53,5.25 -5.36,7.83a2.1,2.1 0,0 1,-1.36 0.85c-4.43,0.06 -8.86,0 -13.29,0a3,3 0,0 1,-0.57 -0.15c0.27,-0.46 0.5,-0.87 0.77,-1.26 5.95,-8.63 11.88,-17.27 17.87,-25.86a1.9,1.9 0,0 0,0 -2.6q-8.7,-12.53 -17.32,-25.1c-0.27,-0.39 -0.52,-0.81 -0.9,-1.39 0.61,0 1,-0.12 1.36,-0.12 4,0 8,0 11.93,0a2.22,2.22 0,0 1,2.08 1.14q5.46,8.25 11,16.45c0.24,0.36 0.51,0.72 0.86,1.21 1.17,-1.72 2.26,-3.31 3.34,-4.92 2.85,-4.23 5.69,-8.46 8.51,-12.73A2.18,2.18 0,0 1,171.65 40c4,0.05 8,0 12.07,0 0.4,0 0.81,0 1.48,0.08 -0.36,0.59 -0.61,1 -0.9,1.44q-8.79,12.54 -17.61,25.07a1.86,1.86 0,0 0,0 2.59q9.17,12.95 18.23,26c0.26,0.36 0.49,0.74 0.82,1.26 -0.47,0 -0.75,0.1 -1,0.1 -4.2,0 -8.41,0 -12.61,0a2.31,2.31 0,0 1,-2.18 -1.21q-5.61,-8.31 -11.28,-16.59C158.38,78.41 158.11,78.06 157.7,77.48Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M23,27.23c2.89,-1.24 6,-2.79 9.25,-3.9A45.78,45.78 0,0 1,56.86 22c0.9,0.19 1.26,0.55 1.25,1.53q0,19.17 0,38.35a2,2 0,0 1,0 0.43Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M349.05,47.9v8.92c0,1.82 0,1.83 1.88,1.83 2.39,0 4.78,0 7.18,0 1,0 1.49,0.28 1.45,1.38 -0.07,1.85 -0.05,3.7 0,5.55 0,0.94 -0.34,1.27 -1.27,1.25 -2.72,0 -5.43,0 -8.14,0 -0.88,0 -1.2,0.31 -1.19,1.19 0,5.15 0,10.3 0.07,15.46 0.08,3.77 2.56,5.61 6.28,4.84 1,-0.21 2,-0.54 3.11,-0.87L361,95.32A19.21,19.21 0,0 1,351 97c-7.19,-0.66 -11.34,-5.28 -11.48,-12.76 -0.1,-5.29 -0.08,-10.58 0,-15.86 0,-1.29 -0.42,-1.62 -1.63,-1.56 -1.44,0.09 -2.88,0 -4.34,0 -0.78,0 -1.15,-0.23 -1.13,-1.09q0.06,-3 0,-6c0,-0.82 0.29,-1.14 1.1,-1.12 1.58,0 3.16,0 4.74,0 1,0 1.26,-0.34 1.24,-1.27 -0.06,-2.44 0,-4.88 0,-7.32 0,-0.42 0.39,-1.15 0.67,-1.18C343.06,48.51 345.93,48.23 349.05,47.9Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M60,91.89c1.61,-3.39 2.71,-6.55 -0.15,-9.51a4.78,4.78 0,0 0,-5.8 -0.95,6.59 6.59,0 0,1 0.86,0.27c3.52,1.87 3.21,6.48 0.24,8.7 -4.61,3.44 -12.18,0.51 -13.64,-5.32a12.17,12.17 0,0 1,10 -14.78c9.8,-1.74 21.6,3.82 23.87,16.11a28.87,28.87 0,0 1,0.4 4.45c0,0.34 -0.54,1 -0.84,1C70.08,91.91 65.17,91.89 60,91.89Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M15.46,102.57 L37,81v32.54C32.57,113.87 19.14,107 15.46,102.57Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M51.48,96.07h24c-1.07,2.1 -1.9,4 -3,5.79a23.32,23.32 0,0 1,-7.18 7.08,1.32 1.32,0 0,1 -1.24,0c-4.15,-4.07 -8.25,-8.22 -12.36,-12.34C51.61,96.52 51.59,96.37 51.48,96.07Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M322.92,91.56a5.19,5.19 0,0 1,5.6 -5.42,5.52 5.52,0 1,1 -0.17,11A5.24,5.24 0,0 1,322.92 91.56Z"/>
<path
android:fillColor="@color/monerujoPrimary"
android:pathData="M84.91,31.38A10.91,10.91 0,1 1,73.79 42.27,10.9 10.9,0 0,1 84.91,31.38ZM86.45,36.3a3.57,3.57 0,0 0,-3.63 3.51v0.06a3.76,3.76 0,0 0,3.62 3.67,3.65 3.65,0 0,0 3.65,-3.66v-0.06A3.48,3.48 0,0 0,86.45 36.3Z"/>
</vector>

View File

@ -29,7 +29,8 @@
android:id="@+id/evStageA" android:id="@+id/evStageA"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" /> android:layout_gravity="center"
android:visibility="visible" />
<LinearLayout <LinearLayout
android:id="@+id/llStageA" android:id="@+id/llStageA"
@ -39,83 +40,6 @@
android:orientation="vertical" android:orientation="vertical"
android:visibility="invisible"> android:visibility="invisible">
<TextView
style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/label_send_btc_xmrto_key"
card_view:drawableStartCompat="@drawable/ic_xmrto_32dp" />
<TextView
android:id="@+id/tvTxXmrToKey"
style="@style/MoneroText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/colorBackground"
android:drawablePadding="16dp"
android:paddingStart="24dp"
android:paddingTop="8dp"
android:paddingEnd="8dp"
android:paddingBottom="8dp"
android:textColor="?attr/colorPrimary"
card_view:drawableEndCompat="@drawable/ic_content_copy_24dp"
tools:text="XMR.TO-d2KQ" />
<TextView
style="@style/MoneroText.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:text="@string/label_send_btc_xmrto_info" />
<TextView
style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/label_send_btc_address"
android:textAlignment="textStart" />
<TextView
android:id="@+id/tvTxBtcAddress"
style="@style/MoneroText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="textStart"
tools:text="mpQ84J43EURZHkCnXbyQ4PpNDLLBqdsMW2" />
</LinearLayout>
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@android:color/darker_gray" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.m2049r.xmrwallet.widget.SendProgressView
android:id="@+id/evStageB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<LinearLayout
android:id="@+id/llStageB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="invisible">
<TextView <TextView
style="@style/MoneroText.Confirm.Label" style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -142,6 +66,84 @@
tools:text="(Rate: 0.020804 BTC/XMR)" /> tools:text="(Rate: 0.020804 BTC/XMR)" />
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@android:color/darker_gray" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.m2049r.xmrwallet.widget.SendProgressView
android:id="@+id/evStageB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="visible" />
<LinearLayout
android:id="@+id/llStageB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="invisible">
<TextView
style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/label_send_btc_xmrto_key"
card_view:drawableStartCompat="@drawable/ic_xmrto_32dp" />
<TextView
android:id="@+id/tvTxXmrToKey"
style="@style/MoneroText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?android:attr/colorBackground"
android:drawablePadding="16dp"
android:paddingStart="24dp"
android:paddingTop="8dp"
android:paddingEnd="8dp"
android:paddingBottom="8dp"
android:textColor="?attr/colorPrimary"
card_view:drawableEndCompat="@drawable/ic_content_copy_24dp"
tools:text="f173118220f1461841da" />
<TextView
style="@style/MoneroText.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:text="@string/label_send_btc_xmrto_info" />
<TextView
style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/label_send_btc_address"
android:textAlignment="textStart" />
<TextView
android:id="@+id/tvTxBtcAddress"
style="@style/MoneroText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="textStart"
tools:text="mpQ84J43EURZHkCnXbyQ4PpNDLLBqdsMW2" />
</LinearLayout>
</FrameLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
@ -155,7 +157,8 @@
android:id="@+id/evStageC" android:id="@+id/evStageC"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" /> android:layout_gravity="center"
android:visibility="visible" />
<LinearLayout <LinearLayout
android:id="@+id/llStageC" android:id="@+id/llStageC"

View File

@ -212,19 +212,20 @@
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:textColor="?attr/colorPrimary" android:textColor="?attr/colorPrimary"
card_view:drawableEndCompat="@drawable/ic_content_copy_24dp" card_view:drawableEndCompat="@drawable/ic_content_copy_24dp"
tools:text="XMR.TO-d2KQ" /> tools:text="f173118220f1461841da" />
<TextView <TextView
style="@style/MoneroText" android:id="@+id/tvXmrToSupport"
style="@style/MoneroText.Medium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start" android:layout_gravity="center"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:drawablePadding="4dp" android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:gravity="center" android:gravity="center"
android:text="@string/label_send_btc_xmrto_info" android:text="@string/label_send_btc_xmrto_info"
android:textSize="12sp" card_view:drawableEndCompat="@drawable/ic_baseline_launch_24" />
card_view:drawableStartCompat="@drawable/ic_info_outline_gray_24dp" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -64,7 +64,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_margin="16dp"
android:foreground="?android:attr/selectableItemBackground" android:foreground="?android:attr/selectableItemBackground"
android:visibility="gone"
card_view:contentPadding="8dp"> card_view:contentPadding="8dp">
<LinearLayout <LinearLayout
@ -72,15 +71,13 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<TextView <ImageView
style="@style/MoneroText.Medium" android:id="@+id/tvXmrToLogo"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="32dp"
android:layout_gravity="center" android:layout_marginTop="8dp"
android:drawablePadding="8dp" android:layout_marginBottom="8dp"
android:gravity="center" android:src="@drawable/ic_sideshift_white" />
android:text="@string/label_send_btc_xmrto_info"
card_view:drawableStartCompat="@drawable/ic_xmrto_32dp" />
<TableLayout <TableLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -133,6 +130,7 @@
<TableRow> <TableRow>
<TextView <TextView
android:id="@+id/tvXmrToKeyLabel"
style="@style/MoneroLabel.Small" style="@style/MoneroLabel.Small"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -156,11 +154,24 @@
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:textColor="?attr/colorPrimary" android:textColor="?attr/colorPrimary"
card_view:drawableEndCompat="@drawable/ic_content_copy_24dp" card_view:drawableEndCompat="@drawable/ic_content_copy_24dp"
tools:text="XMR.TO-d2KQ" /> tools:text="f173118220f1461841da" />
</LinearLayout> </LinearLayout>
</TableRow> </TableRow>
</TableLayout> </TableLayout>
<TextView
android:id="@+id/tvXmrToSupport"
style="@style/MoneroText.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:gravity="center"
android:text="@string/label_send_btc_xmrto_info"
card_view:drawableEndCompat="@drawable/ic_baseline_launch_24" />
</LinearLayout> </LinearLayout>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@ -30,8 +30,8 @@
<p>Si utilitzeu la funcionalitat dintercanvi (opcional), monerujo obté el canvi <p>Si utilitzeu la funcionalitat dintercanvi (opcional), monerujo obté el canvi
         a través de lAPI pública de coinmarketcap.com.          a través de lAPI pública de coinmarketcap.com.
         Consulteu la seva política de privacitat a https://coinmarketcap.com/privacy per a més detalls sobre com es recullen les dades de les vostres peticions</p>          Consulteu la seva política de privacitat a https://coinmarketcap.com/privacy per a més detalls sobre com es recullen les dades de les vostres peticions</p>
<p>Si utilitzeu laplicació per pagar a adreces BTC, utilitzareu el servei XMR.TO. <p>Si utilitzeu laplicació per pagar a adreces BTC, utilitzareu el servei SideShift.ai.
         Consulteu la seva política de privacitat a https://xmr.to/ per obtenir més informació. Monerujo els envia ladreça de destinació de BTC i la quantitat. La vostra IP també podrà ser recollida.</p>          Consulteu la seva política de privacitat a https://sideshift.ai/ per obtenir més informació. Monerujo els envia ladreça de destinació de BTC i la quantitat. La vostra IP també podrà ser recollida.</p>
<h2>Permisos de la App</h2> <h2>Permisos de la App</h2>
<ul> <ul>
<li>INTERNET : Connectar a la xarxa Monero mitjançant un Node Daemon de Monero</li> <li>INTERNET : Connectar a la xarxa Monero mitjançant un Node Daemon de Monero</li>

View File

@ -117,52 +117,41 @@
<ul> <ul>
<li>un OpenAlias per XMR o BTC</li> <li>un OpenAlias per XMR o BTC</li>
<li>una adreça BTC</li> <li>una adreça BTC</li>
<li>un bitcoin: URI (inclòs BIP70 com bitpay)</li>
</u> </u>
Tingueu en compte que lenviament de BTC es duu a terme a través del servei XMR.TO (consulteu https://xmr.to per a més detalls). Consulteu la secció sobre lenviament de BTC més avall.</p> Tingueu en compte que lenviament de BTC es duu a terme a través del servei SideShift.ai (consulteu https://sideshift.ai per a més detalls). Consulteu la secció sobre lenviament de BTC més avall.</p>
<h2>ID de Pagament</h2>
<p>Podeu utilitzar un ID de pagament per identificar el motiu pel qual heu enviat a Monero entre dues parts. Això és totalment opcional i privat. Per exemple, això pot permetre a una empresa associar la transacció amb un article que heu comprat.<p>
<h1>Enviant BTC</h1> <h1>Enviant BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin. <p>SideShift.ai és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
         Nosaltres fem servir lAPI XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop dull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. Lequip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>          Nosaltres fem servir lAPI SideShift.ai per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop dull a https://sideshift.ai i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. Lequip de Monerujo no està associat amb SideShift.ai i no pot oferir assistència amb el seu servei.</p>
<h2>Tipus de Canvi XMR.TO<h2> <h2>Tipus de Canvi SideShift.ai<h2>
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. Aquests <p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei SideShift.ai. Aquests
         inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment. També veureu          inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment.</p>
         la quantitat fins a la qual la transacció BTC sexecutarà instantàniament sense esperar <h2>Ordre de compra SideShift.ai<h2>
         a confirmacions de XMR (consulteu les preguntes freqüents sobre XMR.TO per obtenir més informació). Tingueu en compte que el servei XMR.TO no suposa càrrecs addicionals: oi que mola?</p> <p>A la pantalla \"Confirmar\", veureu lordre de compra SideShift.ai real. Aquesta comanda és vàlida per a
<h2>Ordre de compra XMR.TO<h2>
<p>A la pantalla \"Confirmar\", veureu lordre de compra XMR.TO real. Aquesta comanda és vàlida per a
         un temps limitat: és possible que veieu un compte enrere en el botó \"Gastar\". El tipus de canvi pot          un temps limitat: és possible que veieu un compte enrere en el botó \"Gastar\". El tipus de canvi pot
         ser diferent del mostrat en pantalles anteriors.</p>          ser diferent del mostrat en pantalles anteriors.</p>
<h2>Clau Secreta XMR.TO<h2> <h2>Clau Secreta SideShift.ai<h2>
<p>Com que Monerujo només gestiona la part Monero de la vostra transacció, la vostra clau secreta per XMR.TO es pot utilitzar per fer el seguiment de la part de Bitcoin de la vostra comanda a la pàgina principal de XMR.TO.</p> <p>Com que Monerujo només gestiona la part Monero de la vostra transacció, la vostra clau secreta per SideShift.ai es pot utilitzar per fer el seguiment de la part de Bitcoin de la vostra comanda a la pàgina principal de SideShift.ai.</p>
<p>Tingueu en compte que aquesta clau secreta només és vàlida durant 24 hores després que la transacció <h2>Compte enrere SideShift.ai!</h2>
         ha començat!</p> <p>Una vegada el compte enrere arribi a zero haureu dobtenir una nova sol·licitud de SideShift.ai tornant enrere al pas anterior i després tornar a la pantalla de \"Confirmar\".</p>
<h2>Compte enrere XMR.TO!</h2>
<p>Una vegada el compte enrere arribi a zero haureu dobtenir una nova sol·licitud de XMR.TO tornant enrere al pas anterior i després tornar a la pantalla de \"Confirmar\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Enviant BTC</h1> <h1>Enviant BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin. <p>SideShift.ai és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
         Nosaltres fem servir lAPI XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop dull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. Lequip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>          Nosaltres fem servir lAPI SideShift.ai per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop dull a https://sideshift.ai i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. Lequip de Monerujo no està associat amb SideShift.ai i no pot oferir assistència amb el seu servei.</p>
<h2>Tipus de Canvi XMR.TO<h2> <h2>Tipus de Canvi SideShift.ai<h2>
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. Aquests <p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei SideShift.ai. Aquests
         inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment. També veureu          inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment.</p>
         la quantitat fins a la qual la transacció BTC sexecutarà instantàniament sense esperar <h2>Ordre de compra SideShift.ai<h2>
         a confirmacions de XMR (consulteu les preguntes freqüents sobre XMR.TO per obtenir més informació). Tingueu en compte que el servei XMR.TO no suposa càrrecs addicionals: oi que mola?</p> <p>A la pantalla \"Confirmar\", veureu lordre de compra SideShift.ai real. Aquesta comanda és vàlida per a
<h2>Ordre de compra XMR.TO<h2>
<p>A la pantalla \"Confirmar\", veureu lordre de compra XMR.TO real. Aquesta comanda és vàlida per a
         un temps limitat: és possible que veieu un compte enrere en el botó \"Gastar\". El tipus de canvi pot          un temps limitat: és possible que veieu un compte enrere en el botó \"Gastar\". El tipus de canvi pot
         ser diferent del mostrat en pantalles anteriors.</p>          ser diferent del mostrat en pantalles anteriors.</p>
<h2>Clau Secreta XMR.TO<h2> <h2>Clau Secreta SideShift.ai<h2>
<p>Com que Monerujo només gestiona la part Monero de la vostra transacció, la vostra clau secreta per XMR.TO es pot utilitzar per fer el seguiment de la part de Bitcoin de la vostra comanda a la pàgina principal de XMR.TO.</p> <p>Com que Monerujo només gestiona la part Monero de la vostra transacció, la vostra clau secreta per SideShift.ai es pot utilitzar per fer el seguiment de la part de Bitcoin de la vostra comanda a la pàgina principal de SideShift.ai.</p>
<p>Tingueu en compte que aquesta clau secreta només és vàlida durant 24 hores després que la transacció <h2>Compte enrere SideShift.ai!</h2>
         ha començat!</p> <p>Una vegada el compte enrere arribi a zero haureu dobtenir una nova sol·licitud de SideShift.ai tornant enrere al pas anterior i després tornar a la pantalla de \"Confirmar\".</p>
<h2>Compte enrere XMR.TO!</h2>
<p>Una vegada el compte enrere arribi a zero haureu dobtenir una nova sol·licitud de XMR.TO tornant enrere al pas anterior i després tornar a la pantalla de \"Confirmar\".</p>
]]></string> ]]></string>
<string name="help_wallet"><![CDATA[ <string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Heu introduït una adreça de Bitcoin.</b><br/> <b>Heu introduït una adreça de Bitcoin.</b><br/>
<i>Està a punt d\'enviar XMR i el destinatari rebrà BTC a través del servei <b>XMR.TO</b> service.</i> <i>Està a punt d\'enviar XMR i el destinatari rebrà BTC a través del servei <b>SideShift.ai</b> service.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Ordre XMR.TO</string> <string name="info_send_xmrto_success_order_label">Ordre SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Confirmació Pendent</string> <string name="info_send_xmrto_paid">Confirmació Pendent</string>
<string name="info_send_xmrto_unpaid">Pagament Pendent</string> <string name="info_send_xmrto_unpaid">Pagament Pendent</string>
<string name="info_send_xmrto_error">Error de XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Error de SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Enviats!</string> <string name="info_send_xmrto_sent">BTC Enviats!</string>
<string name="info_send_xmrto_query">Consultant &#8230;</string> <string name="info_send_xmrto_query">Consultant &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>You can send %1$s &#8212; %2$s BTC</b>.<br/> <b>You can send %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> està oferint una tasa de canvi de <b>%3$s BTC</b> <u>en aquest moment</u></i>. <i><b>SideShift.ai</b> està oferint una tasa de canvi de <b>%3$s BTC</b> <u>en aquest moment</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Quantitats fins a <b>%1$s BTC</b> seran enviats <u>a l\'instant</u>!</i> <i>Quantitats fins a <b>%1$s BTC</b> seran enviats <u>a l\'instant</u>!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; ID de pagment integrat</string> <string name="info_paymentid_integrated">&#x2714; ID de pagment integrat</string>
<string name="info_prepare_tx">Preparant la seva transacció</string> <string name="info_prepare_tx">Preparant la seva transacció</string>
<string name="label_send_progress_xmrto_create">Creant ordre XMR.TO</string> <string name="label_send_progress_xmrto_create">Creant ordre SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Consultant ordre XMR.TO</string> <string name="label_send_progress_xmrto_query">Consultant ordre SideShift.ai</string>
<string name="label_send_progress_create_tx">Preparant transacció Monero</string> <string name="label_send_progress_create_tx">Preparant transacció Monero</string>
<string name="label_send_progress_queryparms">Consultant paràmetres XMR.TO</string> <string name="label_send_progress_queryparms">Consultant paràmetres SideShift.ai</string>
<string name="label_generic_xmrto_error">ERROR XMR.TO</string> <string name="label_generic_xmrto_error">ERROR SideShift.ai</string>
<string name="text_generic_xmrto_error">Codi: %1$d</string> <string name="text_generic_xmrto_error">Codi: %1$d</string>
<string name="text_retry">Premi aquí per tornar-ho a intentar</string> <string name="text_retry">Premi aquí per tornar-ho a intentar</string>
<string name="text_noretry_monero">Vatua l\'olla! Sembla ser que estem encallats!</string> <string name="text_noretry_monero">Vatua l\'olla! Sembla ser que estem encallats!</string>
<string name="text_noretry">Ups, sembla que XMR.TO no està disponible ara mateix!</string> <string name="text_noretry">Ups, sembla que SideShift.ai no està disponible ara mateix!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Canvi: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Canvi: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Visita xmr.to per suport i seguiment</string> <string name="label_send_btc_xmrto_info">Visita SideShift.ai per suport i seguiment</string>
<string name="label_send_btc_xmrto_key_lb">Clau secreta\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Clau secreta\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Clau secreta XMR.TO</string> <string name="label_send_btc_xmrto_key">Clau secreta SideShift.ai</string>
<string name="label_send_btc_address">Adreça BTC de destí</string> <string name="label_send_btc_address">Adreça BTC de destí</string>
<string name="label_send_btc_amount">Quantitat</string> <string name="label_send_btc_amount">Quantitat</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Clau de visualització</string> <string name="label_copy_viewkey">Clau de visualització</string>
<string name="label_copy_address">Adreça Pública</string> <string name="label_copy_address">Adreça Pública</string>
<string name="label_copy_xmrtokey">Clau de XMR.TO</string> <string name="label_copy_xmrtokey">Clau</string>
<string name="message_copy_viewkey">Clau de visualització copiada al porta-retalls!</string> <string name="message_copy_viewkey">Clau de visualització copiada al porta-retalls!</string>
<string name="message_copy_xmrtokey">Clau de XMR.TO copiada al porta-retalls!</string> <string name="message_copy_xmrtokey">Clau de SideShift.ai copiada al porta-retalls!</string>
<string name="message_copy_address">Adreça del portamonedes copiada al porta-retalls!</string> <string name="message_copy_address">Adreça del portamonedes copiada al porta-retalls!</string>
<string name="message_copy_txid">ID de transacció copiada al porta-retalls!</string> <string name="message_copy_txid">ID de transacció copiada al porta-retalls!</string>
<string name="message_nocopy">S\'ha inhabilitat la funció de copiar per raons de seguretat!</string> <string name="message_nocopy">S\'ha inhabilitat la funció de copiar per raons de seguretat!</string>
@ -352,12 +352,9 @@
<string name="node_nobookmark">S\'han marcat de forma automàtica els millors %1$d nodes</string> <string name="node_nobookmark">S\'han marcat de forma automàtica els millors %1$d nodes</string>
<string name="label_test">Provar</string><!--note: as in "Test a network connection"--> <string name="label_test">Provar</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolució del Pagament URI&#8230;</string>
<string name="send_address_not_bip70">No s\'ha pogut resoldre el pagament URI</string>
<string name="send_address_bip70">S\'ha resolt el pagament URI &#x2714;</string>
<string name="send_address_hint">Receptor</string> <string name="send_address_hint">Receptor</string>
<string name="xmrto_error_001">XMR.TO fora de línia - intenti-ho més tard</string> <string name="xmrto_error_001">SideShift.ai fora de línia - intenti-ho més tard</string>
<string name="xmrto_error_004">Quantitat de BTC fora dels límits</string> <string name="xmrto_error_004">Quantitat de BTC fora dels límits</string>
<string name="xmrto_error_010">URL de pagament no vàlida o obsoleta</string> <string name="xmrto_error_010">URL de pagament no vàlida o obsoleta</string>
<string name="xmrto_error_012">Massa peticions</string> <string name="xmrto_error_012">Massa peticions</string>
@ -385,7 +382,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -406,4 +403,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -33,8 +33,8 @@
den aktuellen Kurs über die öffentliche Schnittstelle von coinmarketcap.com ab. den aktuellen Kurs über die öffentliche Schnittstelle von coinmarketcap.com ab.
Siehe dir ihre Datenschutzerklärung unter https://coinmarketcap.com/privacy für Siehe dir ihre Datenschutzerklärung unter https://coinmarketcap.com/privacy für
Details darüber an, wie Daten in deinen Anfragen gesammelt werden.</p> Details darüber an, wie Daten in deinen Anfragen gesammelt werden.</p>
<p>Wenn du die App zum Bezahlen an BTC-Adressen verwendest, verwendest du den Dienst XMR.TO. <p>Wenn du die App zum Bezahlen an BTC-Adressen verwendest, verwendest du den Dienst SideShift.ai.
Weitere Informationen findest du in der Datenschutzerklärung unter https://xmr.to/. Weitere Informationen findest du in der Datenschutzerklärung unter https://sideshift.ai/.
Monerujo schickt dem Anbieter die BTC-Zieladresse und den Betrag. Monerujo schickt dem Anbieter die BTC-Zieladresse und den Betrag.
Deine IP-Adresse kann dabei aufgezeichnet werden.</p> Deine IP-Adresse kann dabei aufgezeichnet werden.</p>
<h2>App-Berechtigungen</h2> <h2>App-Berechtigungen</h2>

View File

@ -148,62 +148,50 @@
<ul> <ul>
<li>einen OpenAlias für XMR oder BTC</li> <li>einen OpenAlias für XMR oder BTC</li>
<li>eine BTC-Adresse</li> <li>eine BTC-Adresse</li>
<li>eine Bitcoin: URI (inklusive BIP70 wie BitPay)</li>
</u> </u>
nutzen. Beachte bitte, dass das Senden von BTC über den Service von XMR.TO erfolgt. (Siehe https://xmr.to nutzen. Beachte bitte, dass das Senden von BTC über den Service von SideShift.ai erfolgt. (Siehe https://sideshift.ai
für Details). Weitere Details sind weiter unten unter "BTC senden".</p> für Details). Weitere Details sind weiter unten unter "BTC senden".</p>
<h2>Zahlungs-ID</h2>
<p>Du kannst eine Zahlungs-ID benutzen, um den Grund einer Transaktion zwischen zwei Parteien zu identifizieren. Dies ist optional
und nicht öffentlich einsehbar. Zum Beispiel kann ein Unternehmen damit Zahlungen und Verkäufe miteinander verbinden.<p>
<h1>BTC senden</h1> <h1>BTC senden</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO ist ein Drittanbieter-Service, welcher als Wechselservice von Monero zu Bitcoin fungiert. <p>SideShift.ai ist ein Drittanbieter-Service, welcher als Wechselservice von Monero zu Bitcoin fungiert.
Wir nutzen die XMR.TO-Schnittstelle, um Bitcoin-Zahlungen in Monerujo zu integrieren. Bitte schaue dir Wir nutzen die SideShift.ai-Schnittstelle, um Bitcoin-Zahlungen in Monerujo zu integrieren. Bitte schaue dir
https://xmr.to an und entscheide selbst, ob du diesen Service nutzen willst. Das Monerujo-Team https://sideshift.ai an und entscheide selbst, ob du diesen Service nutzen willst. Das Monerujo-Team
gehört nicht zu XMR.TO und kann keinen Support für dessen Service bieten.</p> gehört nicht zu SideShift.ai und kann keinen Support für dessen Service bieten.</p>
<h2>XMR.TO-Wechselkurs<h2> <h2>SideShift.ai-Wechselkurs<h2>
<p>Auf dem \"Menge\" Bildschirm siehst du die aktuellen Werte des XMR.TO-Service. Diese beinhalten den aktuellen Tauschkurs <p>Auf dem \"Menge\" Bildschirm siehst du die aktuellen Werte des SideShift.ai-Service. Diese beinhalten den aktuellen Tauschkurs
sowie die oberen und unteren BTC-Limits. Bitte bedenke, dass dieser Kurs zu diesem Zeitpunkt nicht garantiert ist. sowie die oberen und unteren BTC-Limits. Bitte bedenke, dass dieser Kurs zu diesem Zeitpunkt nicht garantiert ist.</p>
Außerdem siehst du den Wert, bis zu dem eine BTC-Zahlung sofort ausgeführt wird, <h2>SideShift.ai-Auftrag<h2>
ohne auf XMR-Bestätigungen warten zu müssen (siehe die XMR.TO-FAQ für mehr Details). <p>Auf dem \"Bestätigen\" Bildschirm siehst du das genaue SideShift.ai-Angebot. Dieses Angebot gilt
XMR.TO erhebt keine zusätzlichen Gebühren wie cool ist das denn?</p>
<h2>XMR.TO-Auftrag<h2>
<p>Auf dem \"Bestätigen\" Bildschirm siehst du das genaue XMR.TO-Angebot. Dieses Angebot gilt
für eine bestimmte Zeit du siehst einen Countdown auf dem \"Ausgeben\" Button. Der Wechselkurs kann für eine bestimmte Zeit du siehst einen Countdown auf dem \"Ausgeben\" Button. Der Wechselkurs kann
sich von den vorherigen Angaben unterscheiden.</p> sich von den vorherigen Angaben unterscheiden.</p>
<h2>Geheimer XMR.TO-Schlüssel<h2> <h2>Geheimer SideShift.ai-Schlüssel<h2>
<p>Da Monerujo nur den Monero-Teil deiner Transaktion verarbeitet, kann dein geheimer XMR.TO-Schlüssel <p>Da Monerujo nur den Monero-Teil deiner Transaktion verarbeitet, kann dein geheimer SideShift.ai-Schlüssel
dazu benutzt werden, den Bitcoin-Teil deines Auftrags auf der XMR.TO-Homepage zu verfolgen.</p> dazu benutzt werden, den Bitcoin-Teil deines Auftrags auf der SideShift.ai-Homepage zu verfolgen.</p>
<p>Dieser geheime Schlüssel ist für 24h nach Start der Transaktion gültig!</p> <h2>SideShift.ai-Countdown!</h2>
<h2>XMR.TO-Countdown!</h2> <p>Wenn der Countdown 0 erreicht, musst du ein neues Angebot von SideShift.ai anfordern, indem du zum vorherigen Schritt
<p>Wenn der Countdown 0 erreicht, musst du ein neues Angebot von XMR.TO anfordern, indem du zum vorherigen Schritt
zurückkehrst und wieder zum \"Bestätigen\"-Bildschirm zurückkommst.</p> zurückkehrst und wieder zum \"Bestätigen\"-Bildschirm zurückkommst.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>BTC senden</h1> <h1>BTC senden</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO ist ein Drittanbieter-Service, der als Wechselservice von Monero zu Bitcoin fungiert. <p>SideShift.ai ist ein Drittanbieter-Service, welcher als Wechselservice von Monero zu Bitcoin fungiert.
Wir verwenden die XMR.TO-Schnittstelle, um Bitcoin-Zahlungen in Monerujo zu integrieren. Bitte sieh dir Wir nutzen die SideShift.ai-Schnittstelle, um Bitcoin-Zahlungen in Monerujo zu integrieren. Bitte schaue dir
https://xmr.to an und entscheide selbst, ob es etwas ist, was du verwenden möchtest. Das Monerujo-Team https://sideshift.ai an und entscheide selbst, ob du diesen Service nutzen willst. Das Monerujo-Team
ist nicht mit XMR.TO verbunden und kann keinen Support für dessen Service bieten.</p> gehört nicht zu SideShift.ai und kann keinen Support für dessen Service bieten.</p>
<h2>XMR.TO-Wechselkurs<h2> <h2>SideShift.ai-Wechselkurs<h2>
<p>Auf dem Bildschirm \"Menge\" werden dir die aktuellen Parameter des XMR.TO-Dienstes angezeigt. Diese <p>Auf dem \"Menge\" Bildschirm siehst du die aktuellen Werte des SideShift.ai-Service. Diese beinhalten den aktuellen Tauschkurs
beinhalten den aktuellen Wechselkurs sowie Ober- und Untergrenzen von BTC. Bitte beachte, dass diese Rate sowie die oberen und unteren BTC-Limits. Bitte bedenke, dass dieser Kurs zu diesem Zeitpunkt nicht garantiert ist.</p>
zu diesem Zeitpunkt noch nicht garantiert werden kann. Du siehst auch den Betrag, bis zu dem die BTC-Transaktion <h2>SideShift.ai-Auftrag<h2>
sofort ausgeführt wird, ohne auf XMR-Bestätigungen zu warten (siehe XMR.TO-FAQ für weitere Details). <p>Auf dem \"Bestätigen\" Bildschirm siehst du das genaue SideShift.ai-Angebot. Dieses Angebot gilt
Bitte beachte, dass XMR.TO keine zusätzlichen Gebühren berechnet ist doch cool, oder?</p> für eine bestimmte Zeit du siehst einen Countdown auf dem \"Ausgeben\" Button. Der Wechselkurs kann
<h2>XMR.TO-Auftrag<h2> sich von den vorherigen Angaben unterscheiden.</p>
<p>Auf dem Bildschirm \"Bestätigen\" siehst du das aktuelle XMR.TO-Angebot. Dieses Angebot ist nur für eine <h2>Geheimer SideShift.ai-Schlüssel<h2>
bestimmte Zeit gültig du wirst vielleicht einen Countdown auf dem \"Ausgeben\"-Knopf sehen. Der Wechselkurs <p>Da Monerujo nur den Monero-Teil deiner Transaktion verarbeitet, kann dein geheimer SideShift.ai-Schlüssel
kann sich von dem auf den vorherigen Bildschirmen angezeigten, indikativen Wechselkurs unterscheiden.</p> dazu benutzt werden, den Bitcoin-Teil deines Auftrags auf der SideShift.ai-Homepage zu verfolgen.</p>
<h2>Geheimer XMR.TO-Schlüssel<h2> <h2>SideShift.ai-Countdown!</h2>
<p>Da Monerujo nur den Monero-Teil deiner Transaktion bearbeitet, kann dein geheimer XMR.TO-Schlüssel verwendet werden, <p>Wenn der Countdown 0 erreicht, musst du ein neues Angebot von SideShift.ai anfordern, indem du zum vorherigen Schritt
um den Bitcoin-Teil der Bestellung auf der XMR.TO-Homepage zu verfolgen.</p> zurückkehrst und wieder zum \"Bestätigen\"-Bildschirm zurückkommst.</p>
<p>Bitte beachte, dass dieser geheime Schlüssel nur bis zu 24 Stunden nach Start der Transaktion gültig ist!</p>
<h2>XMR.TO-Countdown!</h2>
<p>Sobald der Countdown Null erreicht hat, musst du ein neues Angebot von XMR.TO anfordern,
indem du zum vorherigen Schritt zurückgehst und dann zum Bildschirm "Bestätigen" zurückkehrst.</p>
]]></string> ]]></string>
<string name="help_create_ledger"><![CDATA[ <string name="help_create_ledger"><![CDATA[

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Du hast eine BTC-Adresse eingegeben.</b><br/> <b>Du hast eine BTC-Adresse eingegeben.</b><br/>
<i>Du wirst XMR versenden und der Empfänger durch den <b>XMR.TO</b> Service BTC erhalten.</i> <i>Du wirst XMR versenden und der Empfänger durch den <b>SideShift.ai</b> Service BTC erhalten.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO-Auftrag</string> <string name="info_send_xmrto_success_order_label">SideShift.ai-Auftrag</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Bestätigung ausstehend</string> <string name="info_send_xmrto_paid">Bestätigung ausstehend</string>
<string name="info_send_xmrto_unpaid">Bezahlung ausstehend</string> <string name="info_send_xmrto_unpaid">Bezahlung ausstehend</string>
<string name="info_send_xmrto_error">XMR.TO-Fehler (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai-Fehler (%1$s)</string>
<string name="info_send_xmrto_sent">BTC gesendet!</string> <string name="info_send_xmrto_sent">BTC gesendet!</string>
<string name="info_send_xmrto_query">Frage ab &#8230;</string> <string name="info_send_xmrto_query">Frage ab &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Du kannst %1$s &#8212; %2$s BTC senden</b>.<br/> <b>Du kannst %1$s &#8212; %2$s BTC senden</b>.<br/>
<i><b>XMR.TO</b> gibt dir <u>aktuell</u> einen Wechselkurs von <b>%3$s BTC</b></i>. <i><b>SideShift.ai</b> gibt dir <u>aktuell</u> einen Wechselkurs von <b>%3$s BTC</b></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Beträge bis zu <b>%1$s BTC</b> werden <u>sofort</u> versendet!</i> <i>Beträge bis zu <b>%1$s BTC</b> werden <u>sofort</u> versendet!</i>
@ -63,25 +63,25 @@
<string name="info_paymentid_integrated">&#x2714; Zahlungs-ID integriert</string> <string name="info_paymentid_integrated">&#x2714; Zahlungs-ID integriert</string>
<string name="info_prepare_tx">Bereite deine Transaktion vor</string> <string name="info_prepare_tx">Bereite deine Transaktion vor</string>
<string name="label_send_progress_xmrto_create">Erstelle XMR.TO-Auftrag</string> <string name="label_send_progress_xmrto_create">Erstelle SideShift.ai-Auftrag</string>
<string name="label_send_progress_xmrto_query">Frage XMR.TO-Auftrag ab</string> <string name="label_send_progress_xmrto_query">Frage SideShift.ai-Auftrag ab</string>
<string name="label_send_progress_create_tx">Bereite Monero-Transaktion vor</string> <string name="label_send_progress_create_tx">Bereite Monero-Transaktion vor</string>
<string name="label_send_progress_queryparms">Frage XMR.TO-Parameter ab</string> <string name="label_send_progress_queryparms">Frage SideShift.ai-Parameter ab</string>
<string name="label_generic_xmrto_error">XMR.TO-FEHLER</string> <string name="label_generic_xmrto_error">SideShift.ai-FEHLER</string>
<string name="text_generic_xmrto_error">Code: %1$d</string> <string name="text_generic_xmrto_error">Code: %1$d</string>
<string name="text_retry">Berühre zum Wiederholen</string> <string name="text_retry">Berühre zum Wiederholen</string>
<string name="text_noretry_monero">Jetzt hängen wir hier fest!</string> <string name="text_noretry_monero">Jetzt hängen wir hier fest!</string>
<string name="text_noretry">Oh oh XMR.TO scheint im Moment nicht verfügbar zu sein!</string> <string name="text_noretry">Oh oh SideShift.ai scheint im Moment nicht verfügbar zu sein!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Kurs: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Kurs: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Besuche XMR.TO für Support &amp; Nachverfolgung</string> <string name="label_send_btc_xmrto_info">Besuche SideShift.ai für Support &amp; Nachverfolgung</string>
<string name="label_send_btc_xmrto_key_lb">Geheimer Schlüssel\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Geheimer Schlüssel\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO Geheimer Schlüssel</string> <string name="label_send_btc_xmrto_key">SideShift.ai Geheimer Schlüssel</string>
<string name="label_send_btc_address">BTC-Zieladresse</string> <string name="label_send_btc_address">BTC-Zieladresse</string>
<string name="label_send_btc_amount">Betrag</string> <string name="label_send_btc_amount">Betrag</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">View-Key</string> <string name="label_copy_viewkey">View-Key</string>
<string name="label_copy_address">Empfangsadresse</string> <string name="label_copy_address">Empfangsadresse</string>
<string name="label_copy_xmrtokey">XMR.TO-Schlüssel</string> <string name="label_copy_xmrtokey">Schlüssel</string>
<string name="message_copy_viewkey">View-Key in Zwischenablage kopiert!</string> <string name="message_copy_viewkey">View-Key in Zwischenablage kopiert!</string>
<string name="message_copy_xmrtokey">XMR.TO-Schlüssel in Zwischenablage kopiert!</string> <string name="message_copy_xmrtokey">Schlüssel in Zwischenablage kopiert!</string>
<string name="message_copy_address">Wallet-Adresse in Zwischenablage kopiert!</string> <string name="message_copy_address">Wallet-Adresse in Zwischenablage kopiert!</string>
<string name="message_copy_txid">Transaktions-ID in Zwischenablage kopiert!</string> <string name="message_copy_txid">Transaktions-ID in Zwischenablage kopiert!</string>
<string name="message_nocopy">Kopieren aus Sicherheitsgründen deaktiviert!</string> <string name="message_nocopy">Kopieren aus Sicherheitsgründen deaktiviert!</string>
@ -355,12 +355,9 @@
<string name="node_nobookmark">Beste %1$d Nodes automatisch vorgemerkt</string> <string name="node_nobookmark">Beste %1$d Nodes automatisch vorgemerkt</string>
<string name="label_test">Testen</string><!--note: as in "Test a network connection"--> <string name="label_test">Testen</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Löse Zahlungs-URI auf&#8230;</string>
<string name="send_address_not_bip70">Konnte Zahlungs-URI nicht auflösen</string>
<string name="send_address_bip70">Zahlungs-URI aufgelöst &#x2714;</string>
<string name="send_address_hint">Empfänger</string> <string name="send_address_hint">Empfänger</string>
<string name="xmrto_error_001">XMR.TO nicht erreichbar versuche es später nochmal</string> <string name="xmrto_error_001">SideShift.ai nicht erreichbar versuche es später nochmal</string>
<string name="xmrto_error_004">BTC-Betrag außerhalb des gültigen Bereiches</string> <string name="xmrto_error_004">BTC-Betrag außerhalb des gültigen Bereiches</string>
<string name="xmrto_error_010">Ungültige oder veraltete Zahlungs-URL</string> <string name="xmrto_error_010">Ungültige oder veraltete Zahlungs-URL</string>
<string name="xmrto_error_012">Zu viele Anfragen</string> <string name="xmrto_error_012">Zu viele Anfragen</string>
@ -388,7 +385,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -409,4 +406,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -34,8 +34,8 @@
rate through the public API of coinmarketcap.com. rate through the public API of coinmarketcap.com.
See their privacy policy at https://coinmarketcap.com/privacy for See their privacy policy at https://coinmarketcap.com/privacy for
details on how data in your requests is collected.</p> details on how data in your requests is collected.</p>
<p>If you use the app to pay to BTC addresses, you will be using the XMR.TO service. <p>If you use the app to pay to BTC addresses, you will be using the SideShift.ai service.
See their privacy policy at https://xmr.to/ for details. Monerujo send them the BTC See their privacy policy at https://sideshift.ai/ for details. Monerujo send them the BTC
destination address and amount. Your IP will also be collectable.</p> destination address and amount. Your IP will also be collectable.</p>
<h2>App Permissions</h2> <h2>App Permissions</h2>
<ul> <ul>

View File

@ -127,66 +127,51 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>ID Πληρωμής</h2>
<p>Μπορείς να χρησιμοποιήσεις ένα ID Πληρωμής(Payment ID) για να προσδιορίσεις τον λόγο που στέλνεις Monero
ανάμεσα σε δύο ενδιαφερόμενους αυτό είναι προεραιτικό και ιδωτικό. Για παράδειγμα μπορεί να επιτρέψει σε μια επιχείρηση
να κανονίσει την συναλλαγή σου με ένα αντικείμενο που αγόρασες.<p>
<h1>Αποστολή BTC</h1> <h1>Αποστολή BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>Το XMR.TO είναι τρίτος πάροχος που δρα σαν ανταλλακτήριο από Monero σε Bitcoin. <p>Το SideShift.ai είναι τρίτος πάροχος που δρα σαν ανταλλακτήριο από Monero σε Bitcoin.
Χρησιμοποιούμε το API του XMR.TO για να ενσωματώσουμε πληρωμές Bitcoin στο Monerujo. Παρακαλώ δες το Χρησιμοποιούμε το API του SideShift.ai για να ενσωματώσουμε πληρωμές Bitcoin στο Monerujo. Παρακαλώ δες το
https://xmr.to και αποφάσισε για τον εαυτό σου εαν αυτό είναι κάτι που θες να χρησιμοποιήσεις. Η Ομάδα του https://sideshift.ai και αποφάσισε για τον εαυτό σου εαν αυτό είναι κάτι που θες να χρησιμοποιήσεις. Η Ομάδα του
Monerujo δεν συνδέεται με το XMR.TO και δεν μπορεί να σε βοηθήσει με την υπηρεσία.</p> Monerujo δεν συνδέεται με το SideShift.ai και δεν μπορεί να σε βοηθήσει με την υπηρεσία.</p>
<h2>Ισοτιμία συναλλάγματος XMR.TO<h2> <h2>Ισοτιμία συναλλάγματος SideShift.ai<h2>
<p>Στην οθόνη \"Ποσό\" θα σου δωθούν οι τρέχουσες παράμετροι της υπηρεσίας XMR.TO. Αυτές <p>Στην οθόνη \"Ποσό\" θα σου δωθούν οι τρέχουσες παράμετροι της υπηρεσίας SideShift.ai. Αυτές
περιλαμβάνουν την τρέχουσα ισοτιμία καθώς και τα μέγιστα και ελάχιστα όρια BTC. Σημειωτέον ότι αυτή η περιλαμβάνουν την τρέχουσα ισοτιμία καθώς και τα μέγιστα και ελάχιστα όρια BTC. Σημειωτέον ότι αυτή η
ισοτιμία δεν εξασφαλίζεται σε αυτό το σημείο. Θα δεις επίσης το ποσό για το οποιό ισοτιμία δεν εξασφαλίζεται σε αυτό το σημείο.</p>
η συναλλαγή BTC θα εκτελεσθέι άμεσα χωρίς αναμονή για επιβαιώσεις στο δίκτυο του <h2>Εντολή SideShift.ai<h2>
XMR (δες το FAQ του XMR.TO για περισσότερες λεπτομέρειες). Σημειωτέο, ότι το XMR.TO <p>Στην οθόνη \"Επιβεβαίωση\", θα δεις την πραγματική εντολή SideShift.ai. Αυτή η εντολή ισχύει για
δεν χρεώνει επιπλέον προμήθειες - πόσο πρώτο είναι αυτό;</p>
<h2>Εντολή XMR.TO<h2>
<p>Στην οθόνη \"Επιβεβαίωση\", θα δεις την πραγματική εντολή XMR.TO. Αυτή η εντολή ισχύει για
περιορισμένο χρόνο - μπορεί να προσέξεις μια αντίστροφη μέτρηση στο κουμπί \"Ξόδεψε\". Η ισοτιμία περιορισμένο χρόνο - μπορεί να προσέξεις μια αντίστροφη μέτρηση στο κουμπί \"Ξόδεψε\". Η ισοτιμία
μπορεί να είναι διαφορετική από την ενδεικτική που φαινόταν σε προηγούμενες οθόνες.</p> μπορεί να είναι διαφορετική από την ενδεικτική που φαινόταν σε προηγούμενες οθόνες.</p>
<h2>Μυστικό Κλειδί XMR.TO<h2> <h2>Μυστικό Κλειδί SideShift.ai<h2>
<p>Μιας και το Monerujo διαχειρίζεται μόνο την πλευρά του Monero της συναλλαγής το μυστικό κλειδί XMR.TO <p>Μιας και το Monerujo διαχειρίζεται μόνο την πλευρά του Monero της συναλλαγής το μυστικό κλειδί SideShift.ai
μπορεί να χρησιμοποιηθεί για να εντοπίσει την συναλλαγή απο μεριάς Bitcoin στην XMR.TO εντολή σου στην αρχική τους σελίδα.</p> μπορεί να χρησιμοποιηθεί για να εντοπίσει την συναλλαγή απο μεριάς Bitcoin στην SideShift.ai εντολή σου στην αρχική τους σελίδα.</p>
<p>Σημειωτέο ότι, αυτό το μυστικό κλειδί θα ισχύει για 24 ώρες από όταν ξεκίνησες <h2>Αντίστροφη μέτρηση SideShift.ai!</h2>
την συναλλαγή!</p> <p>Μόλις η αντίστροφη μέτρηση φθάσει στο μηδέν, χρειάζεται να ξεκινήσεις πάλι την συναλλαγή στο SideShift.ai πηγαίνοντας
<h2>Αντίστροφη μέτρηση XMR.TO!</h2>
<p>Μόλις η αντίστροφη μέτρηση φθάσει στο μηδέν, χρειάζεται να ξεκινήσεις πάλι την συναλλαγή στο XMR.TO πηγαίνοντας
πίσω στο προηγούμενο βήμα και μετά επιστρέφοντας στην οθόνη \"Επιβεβαίωση\".</p> πίσω στο προηγούμενο βήμα και μετά επιστρέφοντας στην οθόνη \"Επιβεβαίωση\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Αποστολή BTC</h1> <h1>Αποστολή BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>Το XMR.TO είναι τρίτος πάροχος που δρα σαν ανταλλακτήριο από Monero σε Bitcoin <p>Το SideShift.ai είναι τρίτος πάροχος που δρα σαν ανταλλακτήριο από Monero σε Bitcoin.
Χρησιμοποιούμε το API του XMR.TO για να ενσωματώσουμε πληρωμές Bitcoin στο Monerujo. Παρακαλώ δες το Χρησιμοποιούμε το API του SideShift.ai για να ενσωματώσουμε πληρωμές Bitcoin στο Monerujo. Παρακαλώ δες το
https://xmr.to και αποφάσισε για τον εαυτό σου εαν αυτό είναι κάτι που θες να χρησιμοποιήσεις. Η Ομάδα του https://sideshift.ai και αποφάσισε για τον εαυτό σου εαν αυτό είναι κάτι που θες να χρησιμοποιήσεις. Η Ομάδα του
Monerujo δεν συνδέεται με το XMR.TO και δεν μπορεί να σε βοηθήσει με την υπηρεσία.</p> Monerujo δεν συνδέεται με το SideShift.ai και δεν μπορεί να σε βοηθήσει με την υπηρεσία.</p>
<h2>Ισοτιμία συναλλάγματος XMR.TO<h2> <h2>Ισοτιμία συναλλάγματος SideShift.ai<h2>
<p>Στην οθόνη \"Ποσό\" θα σου δωθούν οι τρέχουσες παράμετροι της υπηρεσίας XMR.TO. Αυτές <p>Στην οθόνη \"Ποσό\" θα σου δωθούν οι τρέχουσες παράμετροι της υπηρεσίας SideShift.ai. Αυτές
περιλαμβάνουν την τρέχουσα ισοτιμία καθώς και τα μέγιστα και ελάχιστα όρια BTC. Σημειωτέον ότι αυτή η περιλαμβάνουν την τρέχουσα ισοτιμία καθώς και τα μέγιστα και ελάχιστα όρια BTC. Σημειωτέον ότι αυτή η
ισοτιμία δεν εξασφαλίζεται σε αυτό το σημείο. Θα δεις επίσης το ποσό για το οποιό ισοτιμία δεν εξασφαλίζεται σε αυτό το σημείο.</p>
η συναλλαγή BTC θα εκτελεσθέι άμεσα χωρίς αναμονή για επιβαιώσεις στο δίκτυο του <h2>Εντολή SideShift.ai<h2>
XMR (δες το FAQ του XMR.TO για περισσότερες λεπτομέρειες). Σημειωτέο, ότι το XMR.TO <p>Στην οθόνη \"Επιβεβαίωση\", θα δεις την πραγματική εντολή SideShift.ai. Αυτή η εντολή ισχύει για
δεν χρεώνει επιπλέον προμήθειες - πόσο πρώτο είναι αυτό;</p>
<h2>Εντολή XMR.TO<h2>
<p>Στην οθόνη \"Επιβεβαίωση\", θα δεις την πραγματική εντολή XMR.TO. Αυτή η εντολή ισχύει για
περιορισμένο χρόνο - μπορεί να προσέξεις μια αντίστροφη μέτρηση στο κουμπί \"Ξόδεψε\". Η ισοτιμία περιορισμένο χρόνο - μπορεί να προσέξεις μια αντίστροφη μέτρηση στο κουμπί \"Ξόδεψε\". Η ισοτιμία
μπορεί να είναι διαφορετική από την ενδεικτική που φαινόταν σε προηγούμενες οθόνες.</p> μπορεί να είναι διαφορετική από την ενδεικτική που φαινόταν σε προηγούμενες οθόνες.</p>
<h2>Μυστικό Κλειδί XMR.TO<h2> <h2>Μυστικό Κλειδί SideShift.ai<h2>
<p>Μιας και το Monerujo διαχειρίζεται μόνο την πλευρά του Monero της συναλλαγής το μυστικό κλειδί XMR.TO <p>Μιας και το Monerujo διαχειρίζεται μόνο την πλευρά του Monero της συναλλαγής το μυστικό κλειδί SideShift.ai
μπορεί να χρησιμοποιηθεί για να εντοπίσει την συναλλαγή απο μεριάς Bitcoin στην XMR.TO εντολή σου στην αρχική τους σελίδα.</p> μπορεί να χρησιμοποιηθεί για να εντοπίσει την συναλλαγή απο μεριάς Bitcoin στην SideShift.ai εντολή σου στην αρχική τους σελίδα.</p>
<p>Σημειωτέο ότι, αυτό το μυστικό κλειδί θα ισχύει για 24 ώρες από όταν ξεκίνησες <h2>Αντίστροφη μέτρηση SideShift.ai!</h2>
την συναλλαγή!</p> <p>Μόλις η αντίστροφη μέτρηση φθάσει στο μηδέν, χρειάζεται να ξεκινήσεις πάλι την συναλλαγή στο SideShift.ai πηγαίνοντας
<h2>Αντίστροφη μέτρηση XMR.TO!</h2>
<p>Μόλις η αντίστροφη μέτρηση φθάσει στο μηδέν, χρειάζεται να ξεκινήσεις πάλι την συναλλαγή στο XMR.TO πηγαίνοντας
πίσω στο προηγούμενο βήμα και μετά επιστρέφοντας στην οθόνη \"Επιβεβαίωση\".</p> πίσω στο προηγούμενο βήμα και μετά επιστρέφοντας στην οθόνη \"Επιβεβαίωση\".</p>
]]></string> ]]></string>

View File

@ -35,22 +35,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Έβαλες μια διεύθυνση bitcoin.</b><br/> <b>Έβαλες μια διεύθυνση bitcoin.</b><br/>
<i>Θα στείλεις XMR και ο παραλήπτης θα πάρει BTC μέσο της υπηρεσίας <b>XMR.TO</b>.</i> <i>Θα στείλεις XMR και ο παραλήπτης θα πάρει BTC μέσο της υπηρεσίας <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Εντολή XMR.TO</string> <string name="info_send_xmrto_success_order_label">Εντολή SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Επιβεβαίωση Εκκρεμεί</string> <string name="info_send_xmrto_paid">Επιβεβαίωση Εκκρεμεί</string>
<string name="info_send_xmrto_unpaid">Πληρωμή σε εκκρεμότητα</string> <string name="info_send_xmrto_unpaid">Πληρωμή σε εκκρεμότητα</string>
<string name="info_send_xmrto_error">XMR.TO Σφάλμα (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai Σφάλμα (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Αποστάλθηκαν!</string> <string name="info_send_xmrto_sent">BTC Αποστάλθηκαν!</string>
<string name="info_send_xmrto_query">Αίτηση &#8230;</string> <string name="info_send_xmrto_query">Αίτηση &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Μπορείς να στείλεις %1$s &#8212; %2$s BTC</b>.<br/> <b>Μπορείς να στείλεις %1$s &#8212; %2$s BTC</b>.<br/>
<i>Το <b>XMR.TO</b> σου δίνει ισοτιμία ανταλλαγής <b>%3$s BTC</b> <u>αυτή τη στιγμή</u></i>. <i>Το <b>SideShift.ai</b> σου δίνει ισοτιμία ανταλλαγής <b>%3$s BTC</b> <u>αυτή τη στιγμή</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Ποσά μέχρι <b>%1$s BTC</b> θα σταλούν <u>άμεσα</u>!</i> <i>Ποσά μέχρι <b>%1$s BTC</b> θα σταλούν <u>άμεσα</u>!</i>
@ -61,25 +61,25 @@
<string name="info_paymentid_integrated">&#x2714; ID πληρωμής ενσωματωμένο</string> <string name="info_paymentid_integrated">&#x2714; ID πληρωμής ενσωματωμένο</string>
<string name="info_prepare_tx">Προετοιμασία της συναλλαγής σου</string> <string name="info_prepare_tx">Προετοιμασία της συναλλαγής σου</string>
<string name="label_send_progress_xmrto_create">Δημιουργία εντολής με XMR.TO</string> <string name="label_send_progress_xmrto_create">Δημιουργία εντολής με SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Αίτηση εντολής στο XMR.TO</string> <string name="label_send_progress_xmrto_query">Αίτηση εντολής στο SideShift.ai</string>
<string name="label_send_progress_create_tx">Προετοιμασά συναλλαγής Monero</string> <string name="label_send_progress_create_tx">Προετοιμασά συναλλαγής Monero</string>
<string name="label_send_progress_queryparms">Αίτηση στο xmr.to για παραμέτρους</string> <string name="label_send_progress_queryparms">Αίτηση στο SideShift.ai για παραμέτρους</string>
<string name="label_generic_xmrto_error">XMR.TO ΣΦΑΛΜΑ</string> <string name="label_generic_xmrto_error">SideShift.ai ΣΦΑΛΜΑ</string>
<string name="text_generic_xmrto_error">Κωδικός σφάλματος: %1$d</string> <string name="text_generic_xmrto_error">Κωδικός σφάλματος: %1$d</string>
<string name="text_retry">Πάτησε για να προσπαθήσεις ξανά</string> <string name="text_retry">Πάτησε για να προσπαθήσεις ξανά</string>
<string name="text_noretry_monero">Τώρα έχουμε κολλήσει εδώ!</string> <string name="text_noretry_monero">Τώρα έχουμε κολλήσει εδώ!</string>
<string name="text_noretry">Ωχ,το XMR.TO φαίνεται να μην ειναι προσωρινά διαθέσιμο!</string> <string name="text_noretry">Ωχ,το SideShift.ai φαίνεται να μην ειναι προσωρινά διαθέσιμο!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Rate: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Rate: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Επίσκεψη στο xmr.to για υποστήριξη &amp; με εντοπισμό συναλλαγής</string> <string name="label_send_btc_xmrto_info">Επίσκεψη στο SideShift.ai για υποστήριξη &amp; με εντοπισμό συναλλαγής</string>
<string name="label_send_btc_xmrto_key_lb">Μυστικό Κλειδί\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Μυστικό Κλειδί\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO Μυστικό Κλειδί</string> <string name="label_send_btc_xmrto_key">SideShift.ai Μυστικό Κλειδί</string>
<string name="label_send_btc_address">BTC Διεύθυνση Παραλήπτη</string> <string name="label_send_btc_address">BTC Διεύθυνση Παραλήπτη</string>
<string name="label_send_btc_amount">Ποσό</string> <string name="label_send_btc_amount">Ποσό</string>
@ -142,9 +142,9 @@
<string name="label_copy_viewkey">Κλειδί Προβολής(View Key)</string> <string name="label_copy_viewkey">Κλειδί Προβολής(View Key)</string>
<string name="label_copy_address">Δημόσια Διεύθυνση(Public Address)</string> <string name="label_copy_address">Δημόσια Διεύθυνση(Public Address)</string>
<string name="label_copy_xmrtokey">Κλειδή XMR.TO</string> <string name="label_copy_xmrtokey">Κλειδή</string>
<string name="message_copy_viewkey">Το Κλειδί Προβολής αντιγράφηκε στο πρόχειρο!</string> <string name="message_copy_viewkey">Το Κλειδί Προβολής αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_xmrtokey">Το Κλειδή XMR.TO αντιγράφηκε στο πρόχειρο!</string> <string name="message_copy_xmrtokey">Το Κλειδή αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_address">Η διύθυνση πορτοφολιού αντιγράφηκε στο πρόχειρο!</string> <string name="message_copy_address">Η διύθυνση πορτοφολιού αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_txid">Το ID συναλλαγής αντιγράφηκε στο πρόχειρο!</string> <string name="message_copy_txid">Το ID συναλλαγής αντιγράφηκε στο πρόχειρο!</string>
<string name="message_nocopy">Η αντιγραφή είναι απενεργοποιημένη για λόγους ασφαλείας!</string> <string name="message_nocopy">Η αντιγραφή είναι απενεργοποιημένη για λόγους ασφαλείας!</string>
@ -354,12 +354,9 @@
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string> <string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
<string name="label_test">Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Test</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Receiver</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -387,7 +384,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -408,4 +405,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -30,8 +30,8 @@
monerujo informpetos pri la kurzo per la publika interfaco de coinmarketcap.com. monerujo informpetos pri la kurzo per la publika interfaco de coinmarketcap.com.
Vidu ilian privatecan politikon je https://coinmarketcap.com/privacy por detaloj pri Vidu ilian privatecan politikon je https://coinmarketcap.com/privacy por detaloj pri
kiel la datumo de viaj petoj kolektiĝos.</p> kiel la datumo de viaj petoj kolektiĝos.</p>
<p>Se vi uzas la aplikaĵon por pagi al Bitmono-adresoj, vi uzos la XMR.TO-servon. <p>Se vi uzas la aplikaĵon por pagi al Bitmono-adresoj, vi uzos la SideShift.ai-servon.
Vidu ilian privatecan politikon je https://xmr.to/ por detaloj. Monerujo sendos al ili la Vidu ilian privatecan politikon je https://sideshift.ai/ por detaloj. Monerujo sendos al ili la
BTC-ricevontadreson kaj kvanton. Via IP-adreso ankaŭ kolekteblos.</p> BTC-ricevontadreson kaj kvanton. Via IP-adreso ankaŭ kolekteblos.</p>
<h2>Permesoj de la aplikaĵo</h2> <h2>Permesoj de la aplikaĵo</h2>
<ul> <ul>

View File

@ -180,66 +180,58 @@
<ul> <ul>
<li>iun OpenAlias por XMR aŭ BTC</li> <li>iun OpenAlias por XMR aŭ BTC</li>
<li>bitmonan-adreson (BTC)<li> <li>bitmonan-adreson (BTC)<li>
<li>bitmonan pag-URI (inkluzive BIP70 kiel bitpay)</li>
</ul> </ul>
<h2>Paga ID</h2> Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
<p>Vi povas uzi pagan IDon por identigi la kialon de la transakcio. Tio estas tute opcia kaj for details). See the section on sending BTC below.</p>
privata. Ekzemple, tio ebligas komercon kunligi vian transakcion kun varo kiun vi aĉetis.</p>
<h1>Sendi BTC</h1> <h1>Sendi BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO estas ekstera liveranto kiu agas kiel ŝanĝisto de Monero al Bitmono. Ni uzas la <p>SideShift.ai estas ekstera liveranto kiu agas kiel ŝanĝisto de Monero al Bitmono. Ni uzas la
interfacon de XMR.TR por integrigi pagojn de bitmono en Monerujo. Bonvolu mem legi ĉe interfacon de XMR.TR por integrigi pagojn de bitmono en Monerujo. Bonvolu mem legi ĉe
https://xmr.to kaj decidu ĉu vi volas uzi tion. La Monerujo-teamo ne asocias kun XMR.TO kaj ne https://sideshift.ai kaj decidu ĉu vi volas uzi tion. La Monerujo-teamo ne asocias kun SideShift.ai kaj ne
kapablas helpi vin kun ilia servo.</p> kapablas helpi vin kun ilia servo.</p>
<h2>Kurzo de XMR.TO<h2> <h2>Kurzo de SideShift.ai<h2>
<p>Sur la \"Kvanto\"-ekrano montriĝos la nunaj parametroj de la XMR.TO-servo. Ili inkludas la <p>Sur la \"Kvanto\"-ekrano montriĝos la nunaj parametroj de la SideShift.ai-servo. Ili inkludas la
nunan XMR/BTC-kurzon, la superan limon kaj suban limon de la eblaj BTC-transakcioj. Bonvolu nunan XMR/BTC-kurzon, la superan limon kaj suban limon de la eblaj BTC-transakcioj. Bonvolu
noti ke tiu kurzo ĉiam ŝanĝiĝas. Vi ankaŭ vidos la limon ĝis kiu ĉiu BTC-transakcio pleniĝos noti ke tiu kurzo ĉiam ŝanĝiĝas.</p>
tuj, sen atendi XMR-konfirmojn (vidu la informpaĝon de XMR.TO por pliaj detaloj). Bonvolu noti <h2>Mendo al SideShift.ai<h2>
ke XMR.TO ne postulas pliajn honorariojn. Ĉu ne mojose?</p> <p>Sur la \"konfirmi\"-ekrano, vi vidos la efektivan SideShift.ai-mendon. Tiu mendo validas nur dum
<h2>Mendo al XMR.TO<h2>
<p>Sur la \"konfirmi\"-ekrano, vi vidos la efektivan XMR.TO-mendon. Tiu mendo validas nur dum
limigita tempo - vi certe ekvidos retrokalkulon sur la \"Spendi\"-butonon. La kurzo estos limigita tempo - vi certe ekvidos retrokalkulon sur la \"Spendi\"-butonon. La kurzo estos
eble malsama ol tiu antaŭe montrita.</p> eble malsama ol tiu antaŭe montrita.</p>
<h2>Sekreta ŝlosilo de XMR.TO<h2> <h2>Sekreta ŝlosilo de SideShift.ai<h2>
<p>Ĉar Monerujo nur traktas la Monero-flankon de via transakcio, vi uzu la sekretan <p>Ĉar Monerujo nur traktas la Monero-flankon de via transakcio, vi uzu la sekretan
XMR.TO-ŝlosilon por sekvi la Bitmono-parton de via mendo sur la hejmpaĝo de XMR.TO.</p> SideShift.ai-ŝlosilon por sekvi la Bitmono-parton de via mendo sur la hejmpaĝo de SideShift.ai.</p>
<p>Bonvolu noti, ke tiu sekreta ŝlosilo validas nur 24 horoj post kiam via transakcio <h2>La retrokalkulo de SideShift.ai!</h2>
komenciĝis!</p> <p>Kiam la retrokalkulo atingas nulon, vi devos akiri novan QUOTE de SideShift.ai, reirante al la
<h2>La retrokalkulo de XMR.TO!</h2>
<p>Kiam la retrokalkulo atingas nulon, vi devos akiri novan QUOTE de XMR.TO, reirante al la
antaŭa fazo kaj el tie repaŝi ĝis la \"Konfirmi\"-ekrano.</p> antaŭa fazo kaj el tie repaŝi ĝis la \"Konfirmi\"-ekrano.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Elspezi Bitmonon</h1> <h1>Elspezi Bitmonon</h1>
<h2>XMR.TO</h2>
<p>XMR.TO estas ekstera liveranto kiu aga kiel ŝanĝisto de Monero al Bitmono. Ni uzas la
interfacon de XMR.TR por integrigi pagojn de bitmono en Monerujo. Bonvolu mem legi ĉe
https://xmr.to kaj decidu ĉu vi volas uzi tion. La Monerujo-teamo ne asocias kun XMR.TO kaj ne
kapablas helpi vin kun ilia servo.</p>
<h2>Kurzo de XMR.TO<h2>
<p>Sur la \"Kvanto\"-ekrano montriĝos la nunaj parametroj de la XMR.TO-servo. Ili inkludas la
nunan XMR/BTC-kurzon, la superan limon kaj suban limon de la eblaj BTC-transakcioj. Bonvolu
noti ke tiu kurzo ĉiam ŝanĝiĝas. Vi ankaŭ vidos la limon ĝis kiu ĉiu BTC-transakcio pleniĝos
tuj, sen atendi XMR-konfirmojn (vidu la informpaĝon de XMR.TO por pliaj detaloj). Bonvolu noti
ke XMR.TO ne postulas pliajn honorariojn. Ĉu ne mojose?</p>
<h2>Mendo al XMR.TO<h2>
<p>Sur la \"konfirmi\"-ekrano, vi vidos la efektivan XMR.TO-mendon. Tiu mendo validas nur dum
limigita tempo - vi certe ekvidos retrokalkulon sur la \"Spendi\"-butonon. La kurzo estos
eble malsama de tiu antaŭe montrita.</p>
<h2>Sekreta ŝlosilo de XMR.TO<h2> <h2>SideShift.ai</h2>
<p>Ĉar Monerujo nur traktas la Monero-parton de via transakcio, vi uzu la sekretan <p>SideShift.ai estas ekstera liveranto kiu agas kiel ŝanĝisto de Monero al Bitmono. Ni uzas la
XMR.TO-ŝlosilon por sekvi la Bitmono-flankon de via mendo sur la hejmpaĝo de XMR.TO.</p> interfacon de XMR.TR por integrigi pagojn de bitmono en Monerujo. Bonvolu mem legi ĉe
<p>Bonvolu noti, ke tiu sekreta ŝlosilo validas nur dum 24 horoj post kiam via transakcio https://sideshift.ai kaj decidu ĉu vi volas uzi tion. La Monerujo-teamo ne asocias kun SideShift.ai kaj ne
komenciĝis!</p> kapablas helpi vin kun ilia servo.</p>
<h2>La retrokalkulo de XMR.TO!</h2>
<p>Kiam la retrokalkulo atingas nulon, vi devos akiri novan kurzproponon de XMR.TO, reirante al la <h2>Kurzo de SideShift.ai<h2>
<p>Sur la \"Kvanto\"-ekrano montriĝos la nunaj parametroj de la SideShift.ai-servo. Ili inkludas la
nunan XMR/BTC-kurzon, la superan limon kaj suban limon de la eblaj BTC-transakcioj. Bonvolu
noti ke tiu kurzo ĉiam ŝanĝiĝas.</p>
<h2>Mendo al SideShift.ai<h2>
<p>Sur la \"konfirmi\"-ekrano, vi vidos la efektivan SideShift.ai-mendon. Tiu mendo validas nur dum
limigita tempo - vi certe ekvidos retrokalkulon sur la \"Spendi\"-butonon. La kurzo estos
eble malsama ol tiu antaŭe montrita.</p>
<h2>Sekreta ŝlosilo de SideShift.ai<h2>
<p>Ĉar Monerujo nur traktas la Monero-flankon de via transakcio, vi uzu la sekretan
SideShift.ai-ŝlosilon por sekvi la Bitmono-parton de via mendo sur la hejmpaĝo de SideShift.ai.</p>
<h2>La retrokalkulo de SideShift.ai!</h2>
<p>Kiam la retrokalkulo atingas nulon, vi devos akiri novan QUOTE de SideShift.ai, reirante al la
antaŭa fazo kaj el tie repaŝi ĝis la \"Konfirmi\"-ekrano.</p> antaŭa fazo kaj el tie repaŝi ĝis la \"Konfirmi\"-ekrano.</p>
]]></string> ]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Vi entajpis Bitmono-adreson.</b><br/> <b>Vi entajpis Bitmono-adreson.</b><br/>
<i>Vi sendos XMR-on, kaj per la<b>XMR.to</b>-servo, la ricevanto havos BTC-on.</i> <i>Vi sendos XMR-on, kaj per la<b>SideShift.ai</b>-servo, la ricevanto havos BTC-on.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">mendo al XMR.TO</string> <string name="info_send_xmrto_success_order_label">mendo al SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Konfirmo okazonta</string> <string name="info_send_xmrto_paid">Konfirmo okazonta</string>
<string name="info_send_xmrto_unpaid">Pago okazonta</string> <string name="info_send_xmrto_unpaid">Pago okazonta</string>
<string name="info_send_xmrto_error">XMR.TO eraro (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai eraro (%1$s)</string>
<string name="info_send_xmrto_sent">BTC sendiĝis!</string> <string name="info_send_xmrto_sent">BTC sendiĝis!</string>
<string name="info_send_xmrto_query">Informpetante &#8230;</string> <string name="info_send_xmrto_query">Informpetante &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Vi povas sendi %1$s &#8212; %2$s BTC</b>.<br/> <b>Vi povas sendi %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> proponas al vi tiun kurzon: <b>%3$s BTC</b> <u>nun</u></i>. <i><b>SideShift.ai</b> proponas al vi tiun kurzon: <b>%3$s BTC</b> <u>nun</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Kvantoj ĝis <b>%1$s BTC</b> sendiĝos <u>senatende</u>!</i> <i>Kvantoj ĝis <b>%1$s BTC</b> sendiĝos <u>senatende</u>!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; Paga-ID integriĝis</string> <string name="info_paymentid_integrated">&#x2714; Paga-ID integriĝis</string>
<string name="info_prepare_tx">Preparante vian transakcion</string> <string name="info_prepare_tx">Preparante vian transakcion</string>
<string name="label_send_progress_xmrto_create">Kreante mendon al XMR.TO</string> <string name="label_send_progress_xmrto_create">Kreante mendon al SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Petante XMR.TO-mendon </string> <string name="label_send_progress_xmrto_query">Petante SideShift.ai-mendon </string>
<string name="label_send_progress_create_tx">Preparante la Monero-transakcion</string> <string name="label_send_progress_create_tx">Preparante la Monero-transakcion</string>
<string name="label_send_progress_queryparms">Petante la XMR.TO-parametrojn</string> <string name="label_send_progress_queryparms">Petante la SideShift.ai-parametrojn</string>
<string name="label_generic_xmrto_error">ERARO JE XMR.TO</string> <string name="label_generic_xmrto_error">ERARO JE SideShift.ai</string>
<string name="text_generic_xmrto_error">kodo: %1$d</string> <string name="text_generic_xmrto_error">kodo: %1$d</string>
<string name="text_retry">Tuŝu por reprovi</string> <string name="text_retry">Tuŝu por reprovi</string>
<string name="text_noretry_monero">Ni blokiĝis ĉi tie!</string> <string name="text_noretry_monero">Ni blokiĝis ĉi tie!</string>
<string name="text_noretry">Uh-oh, ŝajne XMR.TO ne disponas momente!</string> <string name="text_noretry">Uh-oh, ŝajne SideShift.ai ne disponas momente!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(kurzo: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(kurzo: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Vizitu xmr.to por helpo kaj sekvado</string> <string name="label_send_btc_xmrto_info">Vizitu SideShift.ai por helpo kaj sekvado</string>
<string name="label_send_btc_xmrto_key_lb">Sekreta ŝlosilo\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Sekreta ŝlosilo\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO sekreta ŝlosilo</string> <string name="label_send_btc_xmrto_key">SideShift.ai sekreta ŝlosilo</string>
<string name="label_send_btc_address">Ricevanta BTC-adreso</string> <string name="label_send_btc_address">Ricevanta BTC-adreso</string>
<string name="label_send_btc_amount">Kvanto</string> <string name="label_send_btc_amount">Kvanto</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Vida ŝlosilo</string> <string name="label_copy_viewkey">Vida ŝlosilo</string>
<string name="label_copy_address">Publika adreso</string> <string name="label_copy_address">Publika adreso</string>
<string name="label_copy_xmrtokey">XMR.TO ŝlosilo</string> <string name="label_copy_xmrtokey">Ŝlosilo</string>
<string name="message_copy_viewkey">Vida ŝlosilo kopiiĝis en la tondujon!</string> <string name="message_copy_viewkey">Vida ŝlosilo kopiiĝis en la tondujon!</string>
<string name="message_copy_xmrtokey">XMR.TO ŝlosilo kopiiĝis en la tondujon!</string> <string name="message_copy_xmrtokey">Ŝlosilo kopiiĝis en la tondujon!</string>
<string name="message_copy_address">La monujadreso kopiiĝis en la tondujon!</string> <string name="message_copy_address">La monujadreso kopiiĝis en la tondujon!</string>
<string name="message_copy_txid">La transakcia ID kopiiĝis en la tondujon!</string> <string name="message_copy_txid">La transakcia ID kopiiĝis en la tondujon!</string>
<string name="message_nocopy">Por pli da sekureco, vi ne rajtas kopii tion!</string> <string name="message_nocopy">Por pli da sekureco, vi ne rajtas kopii tion!</string>
@ -354,12 +354,9 @@
<string name="node_nobookmark">Aŭtomate memoris la %1$d plej bonajn nodojn</string> <string name="node_nobookmark">Aŭtomate memoris la %1$d plej bonajn nodojn</string>
<string name="label_test">Testo</string><!--note: as in "Test a network connection"--> <string name="label_test">Testo</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Solvante la pagan URI&#8230;</string>
<string name="send_address_not_bip70">Ne sukcesis solvi la pagan URI</string>
<string name="send_address_bip70">Sukcesis solvi la pagan URI&#x2714;</string>
<string name="send_address_hint">Ricevanto</string> <string name="send_address_hint">Ricevanto</string>
<string name="xmrto_error_001">XMR.TO ne enretas - provu pli poste</string> <string name="xmrto_error_001">SideShift.ai ne enretas - provu pli poste</string>
<string name="xmrto_error_004">BTC-kvanto tro grandas</string> <string name="xmrto_error_004">BTC-kvanto tro grandas</string>
<string name="xmrto_error_010">La paga URL malvalidas aŭ ne ĝisdatiĝis</string> <string name="xmrto_error_010">La paga URL malvalidas aŭ ne ĝisdatiĝis</string>
<string name="xmrto_error_012">Tro da mendoj</string> <string name="xmrto_error_012">Tro da mendoj</string>
@ -387,7 +384,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -408,4 +405,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -164,68 +164,53 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>ID de Pago</h2>
Al ser Monero ofuscado por naturaleza, puedes usar un ID de Pago para identificar un envío de Monero entre
dos partes. Esto es completamente opcional y privado. Por ejemplo, esto permitiría que un
negocio pueda asociar inequívocamente tu transacción con un producto que has comprado.</p>
<h1>Enviar BTC</h1> <h1>Enviar BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin. <p>SideShift.ai es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
Usamos la API de XMR.TO para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa Usamos la API de SideShift.ai para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
https://xmr.to y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo https://sideshift.ai y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
no está asociado con XMR.TO y no puede ayudarte con su servicio.</p> no está asociado con SideShift.ai y no puede ayudarte con su servicio.</p>
<h2>Tipo de cambio XMR.TO<h2> <h2>Tipo de cambio SideShift.ai<h2>
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO. <p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio SideShift.ai.
Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC. Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC.
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el Toma nota de que el tipo de cambio aún no está garantizado en esa instancia.</p>
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a <h2>Orden SideShift.ai<h2>
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que <p> En la pantalla \"Confirmar\" verás la orden SideShift.ai final. Esta orden es válida por un
XMR.TO no cobra comisiones extra - increíble, verdad?</p>
<h2>Orden XMR.TO<h2>
<p> En la pantalla \"Confirmar\" verás la orden XMR.TO final. Esta orden es válida por un
tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a
esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p> esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p>
<h2>Clave secreta XMR.TO<h2> <h2>Clave secreta SideShift.ai<h2>
<p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu <p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p> clave secreta SideShift.ai para rastrear la parte en Bitcoin de tu orden en la página de SideShift.ai.</p>
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de <h2>Cuenta atrás SideShift.ai!</h2>
iniciada la transacción!</p>
<h2>Cuenta atrás XMR.TO!</h2>
<p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de <p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de
parte de XMR.TO, esto se logra dando un paso atrás y luego volviendo a la pantalla de parte de SideShift.ai, esto se logra dando un paso atrás y luego volviendo a la pantalla de
\"Confirmar\".</p> \"Confirmar\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Enviar BTC</h1> <h1>Enviar BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin. <p>SideShift.ai es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
Usamos la API de XMR.TO para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa Usamos la API de SideShift.ai para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
https://xmr.to y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo https://sideshift.ai y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
no está asociado con XMR.TO y no puede ayudarte con su servicio.</p> no está asociado con SideShift.ai y no puede ayudarte con su servicio.</p>
<h2>Tipo de cambio XMR.TO<h2> <h2>Tipo de cambio SideShift.ai<h2>
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO. <p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio SideShift.ai.
Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC. Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC.
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el Toma nota de que el tipo de cambio aún no está garantizado en esa instancia.</p>
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a <h2>Orden SideShift.ai<h2>
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que <p> En la pantalla \"Confirmar\" verás la orden SideShift.ai final. Esta orden es válida por un
XMR.TO no cobra comisiones extra - increíble, verdad?</p>
<h2>Orden XMR.TO<h2>
<p> En la pantalla \"Confirmar\" verás la orden XMR.TO final. Esta orden es válida por un
tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a
esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p> esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p>
<h2>Clave secreta XMR.TO<h2> <h2>Clave secreta SideShift.ai<h2>
<p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu <p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p> clave secreta SideShift.ai para rastrear la parte en Bitcoin de tu orden en la página de SideShift.ai.</p>
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de <h2>Cuenta atrás SideShift.ai!</h2>
iniciada la transacción!</p>
<h2>Cuenta atrás XMR.TO!</h2>
<p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de <p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de
parte de XMR.TO, esto se logra dando un paso atrás y luego volviendo a la pantalla de parte de SideShift.ai, esto se logra dando un paso atrás y luego volviendo a la pantalla de
\"Confirmar\".</p> \"Confirmar\".</p>
]]></string> ]]></string>

View File

@ -219,41 +219,41 @@
<string name="fab_restore_seed">Restaurar monedero con semilla de 25 palabras</string> <string name="fab_restore_seed">Restaurar monedero con semilla de 25 palabras</string>
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Ingresaste una dirección Bitcoin</b><br/> <b>Ingresaste una dirección Bitcoin</b><br/>
<i>Vas a enviar XMR y el destinatario recibirá BTC usando el servicio <b>XMR.TO</b>.</i> <i>Vas a enviar XMR y el destinatario recibirá BTC usando el servicio <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Confirmación pendiente</string> <string name="info_send_xmrto_paid">Confirmación pendiente</string>
<string name="info_send_xmrto_unpaid">Pago pendiente</string> <string name="info_send_xmrto_unpaid">Pago pendiente</string>
<string name="info_send_xmrto_error">Error de XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Error de SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Enviados!</string> <string name="info_send_xmrto_sent">BTC Enviados!</string>
<string name="info_send_xmrto_query">Consultando &#8230;</string> <string name="info_send_xmrto_query">Consultando &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Puedes enviar %1$s &#8212; %2$s BTC</b>.<br/> <b>Puedes enviar %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> está ofreciendo una tasa de cambio de <b>%3$s BTC</b> <u>en este momento</u></i>. <i><b>SideShift.ai</b> está ofreciendo una tasa de cambio de <b>%3$s BTC</b> <u>en este momento</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Montos hasta <b>%1$s BTC</b> serán enviados <u>en el momento</u>!</i> <i>Montos hasta <b>%1$s BTC</b> serán enviados <u>en el momento</u>!</i>
]]></string> ]]></string>
<string name="send_available_btc">Saldo: %2$s BTC (%1$s XMR)</string> <string name="send_available_btc">Saldo: %2$s BTC (%1$s XMR)</string>
<string name="label_send_progress_xmrto_create">Creando orden XMR.TO</string> <string name="label_send_progress_xmrto_create">Creando orden SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Consultando orden XMR.TO</string> <string name="label_send_progress_xmrto_query">Consultando orden SideShift.ai</string>
<string name="label_send_progress_create_tx">Preparando transacción Monero</string> <string name="label_send_progress_create_tx">Preparando transacción Monero</string>
<string name="label_send_progress_queryparms">Consultando parámetros XMR.TO</string> <string name="label_send_progress_queryparms">Consultando parámetros SideShift.ai</string>
<string name="label_generic_xmrto_error">ERROR XMR.TO</string> <string name="label_generic_xmrto_error">ERROR SideShift.ai</string>
<string name="text_generic_xmrto_error">Código: %1$d</string> <string name="text_generic_xmrto_error">Código: %1$d</string>
<string name="text_retry">Toca para reintentar</string> <string name="text_retry">Toca para reintentar</string>
<string name="text_noretry_monero">Parece que estamos atascados!</string> <string name="text_noretry_monero">Parece que estamos atascados!</string>
<string name="text_noretry">Oh-oh, parece que XMR.TO no está disponible ahora!</string> <string name="text_noretry">Oh-oh, parece que SideShift.ai no está disponible ahora!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Cambio: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Cambio: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Visita https://xmr.to para soporte y rastreo</string> <string name="label_send_btc_xmrto_info">Visita https://sideshift.ai para soporte y rastreo</string>
<string name="label_send_btc_xmrto_key_lb">Clave secreta\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Clave secreta\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Clave secreta XMR.TO</string> <string name="label_send_btc_xmrto_key">Clave secreta SideShift.ai</string>
<string name="label_send_btc_address">Dirección BTC destino</string> <string name="label_send_btc_address">Dirección BTC destino</string>
<string name="label_send_btc_amount">Monto</string> <string name="label_send_btc_amount">Monto</string>
<string name="send_xmrto_timeout">Oye, esperaste demasiado!</string> <string name="send_xmrto_timeout">Oye, esperaste demasiado!</string>
<string name="label_copy_xmrtokey">Clave XMR.TO</string> <string name="label_copy_xmrtokey">Clave</string>
<string name="message_copy_xmrtokey">¡Clave XMR.TO copiada al portapapeles!</string> <string name="message_copy_xmrtokey">¡Clave copiada al portapapeles!</string>
<string name="send_send_label">Enviar mis preciados moneroj</string> <string name="send_send_label">Enviar mis preciados moneroj</string>
<string name="send_send_timed_label">Gastar mis preciados moneroj (%1$s)</string> <string name="send_send_timed_label">Gastar mis preciados moneroj (%1$s)</string>
<string name="send_address_invalid">No es una dirección válida</string> <string name="send_address_invalid">No es una dirección válida</string>
@ -264,7 +264,7 @@
<string name="tx_destination_btc">Destino\n(BTC)</string> <string name="tx_destination_btc">Destino\n(BTC)</string>
<string name="tx_amount_btc">Monto\n(BTC)</string> <string name="tx_amount_btc">Monto\n(BTC)</string>
<string name="about_whoami">Soy monerujo</string> <string name="about_whoami">Soy monerujo</string>
<string name="info_send_xmrto_success_order_label">Orden XMR.TO</string> <string name="info_send_xmrto_success_order_label">Orden SideShift.ai</string>
<string name="info_xmrto_enabled">Pago en BTC activado, toca para más info.</string> <string name="info_xmrto_enabled">Pago en BTC activado, toca para más info.</string>
<string name="info_ledger_enabled">Ledger activado, toca para más info.</string> <string name="info_ledger_enabled">Ledger activado, toca para más info.</string>
@ -344,13 +344,10 @@
<string name="node_nobookmark">Mejores %1$d nodos marcados automáticamente</string> <string name="node_nobookmark">Mejores %1$d nodos marcados automáticamente</string>
<string name="label_test">Probar</string><!--note: as in "Test a network connection"--> <string name="label_test">Probar</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Receptor</string> <string name="send_address_hint">Receptor</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -378,7 +375,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -399,4 +396,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -33,8 +33,8 @@
https://coinmarketcap.com/privacy, et saada üksikasju, kuidas teie päringute kohta https://coinmarketcap.com/privacy, et saada üksikasju, kuidas teie päringute kohta
andmeid kogutakse.</p> andmeid kogutakse.</p>
<p>Kui kasutate äppi BTC-aadressitele raha saatmiseks, siis kasutatakse selleks <p>Kui kasutate äppi BTC-aadressitele raha saatmiseks, siis kasutatakse selleks
XMR.TO teenust. Lisateabe saamiseks vaadake nende privaatsuspoliitikat aadressil SideShift.ai teenust. Lisateabe saamiseks vaadake nende privaatsuspoliitikat aadressil
https://xmr.to/. Monerujo saadab neile BTC sihtkoha aadressi ja summa. Koguda https://sideshift.ai/. Monerujo saadab neile BTC sihtkoha aadressi ja summa. Koguda
võidakse ka teie IP aadressi.</p> võidakse ka teie IP aadressi.</p>
<h2>Äpi õigused</h2> <h2>Äpi õigused</h2>
<ul> <ul>

View File

@ -159,78 +159,51 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>Makse ID</h2>
<p>You can use a Payment ID to identify the reason you sent Monero between two parties. This
is fully optional and private. For example it can allow a business to reconcile your
transaction with an item you bought.<p>
<h2><em>Ring<em>\'i suurus</h2>
<p>There are a number of ring sizes to choose from in Monerujo. If you are a beginner user
we recommend you stick with a ring size of 7. Increasing the ring size above 7 increases
the amount of signers in a ring signature, theoretically providing increased plausible
deniability. However setting high ring sizes can also make your transaction stand out on
the blockchain.</p>
<h2>Tähtsus</h2>
<p>This setting determines the speed at which your transaction will be included in the
blockchain. A high priority setting will correlate directly with a higher transaction fee
and the inverse is true for a low priority. Please note that if you set your transaction to
a low priority it can be hours before it is included on the blockchain. The default priority
is \"Medium\".</p>
<h1>Bitcoini (BTC) saatmine</h1> <h1>Bitcoini (BTC) saatmine</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO is a third party service which acts as an exchange from Monero to Bitcoin. <p>SideShift.ai is a third party service which acts as an exchange from Monero to Bitcoin.
We use the XMR.TO API to integrate Bitcoin payments into Monerujo. Please check out We use the SideShift.ai API to integrate Bitcoin payments into Monerujo. Please check out
https://xmr.to and decide for yourself if this is something you want to use. The Monerujo https://sideshift.ai and decide for yourself if this is something you want to use. The Monerujo
Team is not associated with XMR.TO and cannot help you with their service.</p> Team is not associated with SideShift.ai and cannot help you with their service.</p>
<h2>XMR.TO vahetuskurss<h2> <h2>SideShift.ai vahetuskurss<h2>
<p>On the \"Amount\" screen you will be shown the current parameters of the XMR.TO service. These <p>On the \"Amount\" screen you will be shown the current parameters of the SideShift.ai service. These
include the current exchange rate as well as upper and lower BTC limits. Note that this include the current exchange rate as well as upper and lower BTC limits. Note that this
rate is not guaranteed at this point. You will also see rate is not guaranteed at this point.</p>
the amount up to which the BTC transaction will be executed instantly without waiting for <h2>SideShift.ai tellimus<h2>
XMR confirmations (see the XMR.TO FAQ for more details). Please note, that XMR.TO does <p>On the \"Confirm\" screen, you will see the actual SideShift.ai order. This order is valid for
not charge extra fees - how cool is that?</p>
<h2>XMR.TO tellimus<h2>
<p>On the \"Confirm\" screen, you will see the actual XMR.TO order. This order is valid for
a limited time - you may notice a countdown on the \"Spend\" button. The exchange rate may a limited time - you may notice a countdown on the \"Spend\" button. The exchange rate may
be different to the indicative one shown on previous screens.</p> be different to the indicative one shown on previous screens.</p>
<h2>XMR.TO privaatvõti<h2> <h2>SideShift.ai privaatvõti<h2>
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key <p>Since Monerujo only handles the Monero part of your transaction your SideShift.ai secret key
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p> can be used to track the Bitcoin part of your order on the SideShift.ai homepage.</p>
<p>Please note, that this secret key is only valid for 24 hours after the transaction is <h2>SideShift.ai loendur</h2>
started!</p> <p>Once the countdown reaches zero, you need to get a new quote from SideShift.ai by going back to the
<h2>XMR.TO loendur</h2>
<p>Once the countdown reaches zero, you need to get a new quote from XMR.TO by going back to the
previous step and then coming back to the \"Confirm\" screen.</p> previous step and then coming back to the \"Confirm\" screen.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Bitcoini (BTC) saatmine</h1> <h1>Bitcoini (BTC) saatmine</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO is a third party service which acts as an exchange from Monero to Bitcoin. <p>SideShift.ai is a third party service which acts as an exchange from Monero to Bitcoin.
We use the XMR.TO API to integrate Bitcoin payments into Monerujo. Please check out We use the SideShift.ai API to integrate Bitcoin payments into Monerujo. Please check out
https://xmr.to and decide for yourself if this is something you want to use. The Monerujo https://sideshift.ai and decide for yourself if this is something you want to use. The Monerujo
Team is not associated with XMR.TO and cannot help you with their service.</p> Team is not associated with SideShift.ai and cannot help you with their service.</p>
<h2>XMR.TO vahetuskurss<h2> <h2>SideShift.ai vahetuskurss<h2>
<p>On the \"Amount\" screen you will be shown the current parameters of the XMR.TO service. These <p>On the \"Amount\" screen you will be shown the current parameters of the SideShift.ai service. These
include the current exchange rate as well as upper and lower BTC limits. Note that this include the current exchange rate as well as upper and lower BTC limits. Note that this
rate is not guaranteed at this point. You will also see rate is not guaranteed at this point.</p>
the amount up to which the BTC transaction will be executed instantly without waiting for <h2>SideShift.ai tellimus<h2>
XMR confirmations (see the XMR.TO FAQ for more details). Please note, that XMR.TO does <p>On the \"Confirm\" screen, you will see the actual SideShift.ai order. This order is valid for
not charge extra fees - how cool is that?</p>
<h2>XMR.TO tellimus<h2>
<p>On the \"Confirm\" screen, you will see the actual XMR.TO order. This order is valid for
a limited time - you may notice a countdown on the \"Spend\" button. The exchange rate may a limited time - you may notice a countdown on the \"Spend\" button. The exchange rate may
be different to the indicative one shown on previous screens.</p> be different to the indicative one shown on previous screens.</p>
<h2>XMR.TO privaatvõti<h2> <h2>SideShift.ai privaatvõti<h2>
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key <p>Since Monerujo only handles the Monero part of your transaction your SideShift.ai secret key
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p> can be used to track the Bitcoin part of your order on the SideShift.ai homepage.</p>
<p>Please note, that this secret key is only valid for 24 hours after the transaction is <h2>SideShift.ai loendur</h2>
started!</p> <p>Once the countdown reaches zero, you need to get a new quote from SideShift.ai by going back to the
<h2>XMR.TO loendur</h2>
<p>Once the countdown reaches zero, you need to get a new quote from XMR.TO by going back to the
previous step and then coming back to the \"Confirm\" screen.</p> previous step and then coming back to the \"Confirm\" screen.</p>
]]></string> ]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Sa sisestasid Bitcoini aadressi.</b><br/> <b>Sa sisestasid Bitcoini aadressi.</b><br/>
<i>See tähendab, et sa saadad Monerosid ning kohale jõuavad Bitcoinid kasutades XMR.TO teenust.</i> <i>See tähendab, et sa saadad Monerosid ning kohale jõuavad Bitcoinid kasutades SideShift.ai teenust.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO tellimus</string> <string name="info_send_xmrto_success_order_label">SideShift.ai tellimus</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Ootan kinnitust</string> <string name="info_send_xmrto_paid">Ootan kinnitust</string>
<string name="info_send_xmrto_unpaid">Ootan makset</string> <string name="info_send_xmrto_unpaid">Ootan makset</string>
<string name="info_send_xmrto_error">XMR.TO viga (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai viga (%1$s)</string>
<string name="info_send_xmrto_sent">BTC saadetud!</string> <string name="info_send_xmrto_sent">BTC saadetud!</string>
<string name="info_send_xmrto_query">Küsin &#8230;</string> <string name="info_send_xmrto_query">Küsin &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Sa saad saata %1$s &#8212; %2$s BTC</b>.<br/> <b>Sa saad saata %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> annab <u>hetkel</u> vahetuskursiks <b>%3$s BTC</b></i>. <i><b>SideShift.ai</b> annab <u>hetkel</u> vahetuskursiks <b>%3$s BTC</b></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Kuni <b>%1$s BTC</b> saadetakse <u>viivitamatult</u>!</i> <i>Kuni <b>%1$s BTC</b> saadetakse <u>viivitamatult</u>!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; Makse ID integreeritud</string> <string name="info_paymentid_integrated">&#x2714; Makse ID integreeritud</string>
<string name="info_prepare_tx">Valmistan ülekannet ette</string> <string name="info_prepare_tx">Valmistan ülekannet ette</string>
<string name="label_send_progress_xmrto_create">Loon XMR.TO tellimust</string> <string name="label_send_progress_xmrto_create">Loon SideShift.ai tellimust</string>
<string name="label_send_progress_xmrto_query">Küsin XMR.TO tellimust</string> <string name="label_send_progress_xmrto_query">Küsin SideShift.ai tellimust</string>
<string name="label_send_progress_create_tx">Valmistan ette Monero ülekannet</string> <string name="label_send_progress_create_tx">Valmistan ette Monero ülekannet</string>
<string name="label_send_progress_queryparms">Küsin XMR.TO parameetreid</string> <string name="label_send_progress_queryparms">Küsin SideShift.ai parameetreid</string>
<string name="label_generic_xmrto_error">XMR.TO viga</string> <string name="label_generic_xmrto_error">SideShift.ai viga</string>
<string name="text_generic_xmrto_error">Kood: %1$d</string> <string name="text_generic_xmrto_error">Kood: %1$d</string>
<string name="text_retry">Puuduta uuesti proovimiseks</string> <string name="text_retry">Puuduta uuesti proovimiseks</string>
<string name="text_noretry_monero">Nüüd jõudsime küll tupikusse!</string> <string name="text_noretry_monero">Nüüd jõudsime küll tupikusse!</string>
<string name="text_noretry">Oh ei, XMR.TO ei ole hetkel saadaval!</string> <string name="text_noretry">Oh ei, SideShift.ai ei ole hetkel saadaval!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Kurss: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Kurss: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Külasta xmr.to lisainfo saamiseks &amp; jälgin</string> <string name="label_send_btc_xmrto_info">Külasta SideShift.ai lisainfo saamiseks &amp; jälgin</string>
<string name="label_send_btc_xmrto_key_lb">Privaatvõti\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Privaatvõti\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO privaatvõti</string> <string name="label_send_btc_xmrto_key">SideShift.ai privaatvõti</string>
<string name="label_send_btc_address">Sihtkoha Bitcoini aadress</string> <string name="label_send_btc_address">Sihtkoha Bitcoini aadress</string>
<string name="label_send_btc_amount">Kogus</string> <string name="label_send_btc_amount">Kogus</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Vaatamise võti</string> <string name="label_copy_viewkey">Vaatamise võti</string>
<string name="label_copy_address">Avalik aadress</string> <string name="label_copy_address">Avalik aadress</string>
<string name="label_copy_xmrtokey">XMR.TO võti</string> <string name="label_copy_xmrtokey">Võti</string>
<string name="message_copy_viewkey">Vaatamise võti on kopeeritud lõikepuhvrisse!</string> <string name="message_copy_viewkey">Vaatamise võti on kopeeritud lõikepuhvrisse!</string>
<string name="message_copy_xmrtokey">XMR.TO võti on kopeeritud lõikepuhvrisse!</string> <string name="message_copy_xmrtokey">Võti on kopeeritud lõikepuhvrisse!</string>
<string name="message_copy_address">Rahakoti aadress on kopeeritud lõikepuhvrisse!</string> <string name="message_copy_address">Rahakoti aadress on kopeeritud lõikepuhvrisse!</string>
<string name="message_copy_txid">Ülekande ID on kopeeritud lõikepuhvrisse!</string> <string name="message_copy_txid">Ülekande ID on kopeeritud lõikepuhvrisse!</string>
<string name="message_nocopy">Lõikepuhvrisse kopeerimine on turvakaalutlustel keelatud!</string> <string name="message_nocopy">Lõikepuhvrisse kopeerimine on turvakaalutlustel keelatud!</string>
@ -351,13 +351,10 @@
<string name="backup_success">Tagavarakoopia õnnestus</string> <string name="backup_success">Tagavarakoopia õnnestus</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Saaja</string> <string name="send_address_hint">Saaja</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -385,7 +382,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -406,4 +403,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -36,7 +36,7 @@
Consultez leur politique de confidentialité sur https://coinmarketcap.com/privacy Consultez leur politique de confidentialité sur https://coinmarketcap.com/privacy
pour des détails sur la façon dont les données de vos requêtes sont collectées.</p> pour des détails sur la façon dont les données de vos requêtes sont collectées.</p>
<p>Si vous utilisez lapplication pour payer à une adresse BTC, vous utiliserez <p>Si vous utilisez lapplication pour payer à une adresse BTC, vous utiliserez
le service XMR.TO. Consultez leur politique de confidentialité sur https://xmr.to/ le service SideShift.ai. Consultez leur politique de confidentialité sur https://sideshift.ai/
pour plus de détails. Monerujo leur transmet ladresse de destination BTC et le pour plus de détails. Monerujo leur transmet ladresse de destination BTC et le
montant. Votre IP serait également collectable.</p> montant. Votre IP serait également collectable.</p>
<h2>Permissions de lapplication</h2> <h2>Permissions de lapplication</h2>

View File

@ -157,68 +157,54 @@
<ul> <ul>
<li>une adresse OpenAlias pour XMR ou BTC</li> <li>une adresse OpenAlias pour XMR ou BTC</li>
<li>une adresse BTC</li> <li>une adresse BTC</li>
<li>une URI bitcoin: (incluant BIP70 comme bitpay)</li>
</u> </u>
Notez que lenvoi de BTC est traité à travers le service XMR.TO (voir https://xmr.to pour Notez que lenvoi de BTC est traité à travers le service SideShift.ai (voir https://sideshift.ai pour
plus de détails). Voir la rubrique sur lenvoi de BTC plus bas.</p> plus de détails). Voir la rubrique sur lenvoi de BTC plus bas.</p>
<h2>ID de Paiement</h2>
<p>Vous pouvez utiliser un ID de paiement pour identifier la raison pour laquelle vous avez
envoyé des Moneroj entre deux parties. Cest totallement privé et optionnel. Il permet par
exemple à une société de faire concorder votre transaction avec un article que vous avez
acheté.</p>
<h1>Envoyer des BTC</h1> <h1>Envoyer des BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin. <p>SideShift.ai est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin.
Nous utilisons lAPI XMR.TO pour intégrer les paiements Bitcoin dans Monerujo. Veuillez Nous utilisons lAPI SideShift.ai pour intégrer les paiements Bitcoin dans Monerujo. Veuillez
consulter https://xmr.to et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo consulter https://sideshift.ai et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo
nest pas affiliée à XMR.TO et ne peut pas vous aider concernant leurs services.</p> nest pas affiliée à SideShift.ai et ne peut pas vous aider concernant leurs services.</p>
<h2>Taux de change XMR.TO<h2> <h2>Taux de change SideShift.ai<h2>
<p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive XMR.TO. Cela <p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive SideShift.ai. Cela
inclus le taux de change actuel, ainsi que les limites BTC hautes et basses. Notez que ce taux inclus le taux de change actuel, ainsi que les limites BTC hautes et basses. Notez que ce taux
nest pas garantit à ce stade. Vous verrez également le montnt jusquauquel la transaction BTC nest pas garantit à ce stade.</p>
sera exécutée instantanément sans attendre de confirmation XMR (voir la FAQ XMR.TO pour plus de <h2>Ordre SideShift.ai<h2>
détails). Veuillez noter que XMR.TO najoute pas de frais additionnels - cest pas cool ça ?</p> <p>Sur lécran \"Confirmation\", vous verez lordre SideShift.ai actuel. Cette ordre est valide pour
<h2>Ordre XMR.TO<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre XMR.TO actuel. Cette ordre est valide pour
un temps limité - vous pouvez remarquer le compte à rebours sur le bouton \"Dépenser\". Ce taux un temps limité - vous pouvez remarquer le compte à rebours sur le bouton \"Dépenser\". Ce taux
de change peut être différent du taux indicatif de lécran précédent.</p> de change peut être différent du taux indicatif de lécran précédent.</p>
<h2>Clef Secrète XMR.TO<h2> <h2>Clef Secrète SideShift.ai<h2>
<p>Comme Monerujo ne traite que le volet Monero de votre transaction, votre clef secrète <p>Comme Monerujo ne traite que le volet Monero de votre transaction, votre clef secrète
XMR.TO peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil SideShift.ai peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de XMR.TO.</p> de SideShift.ai.</p>
<p>Veuillez noter que cette clef secrète est seulement valable 24h après le lancement de la <h2>Compte à Rebours SideShift.ai !</h2>
transaction !</p>
<h2>Compte à Rebours XMR.TO !</h2>
<p>Une fois que le compte à rebours atteint zéro, vous devrez obtenir un nouveau devis depuis <p>Une fois que le compte à rebours atteint zéro, vous devrez obtenir un nouveau devis depuis
XMR.TO en retournant à létape précédente puis en revenant à lécran \"Confirmation\".</p> SideShift.ai en retournant à létape précédente puis en revenant à lécran \"Confirmation\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Envoyer des BTC</h1> <h1>Envoyer des BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin. <p>SideShift.ai est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin.
Nous utilisons lAPI XMR.TO pour intégrer les paiements Bitcoin dans Monerujo. Veuillez Nous utilisons lAPI SideShift.ai pour intégrer les paiements Bitcoin dans Monerujo. Veuillez
consulter https://xmr.to et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo consulter https://sideshift.ai et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo
nest pas affiliée à XMR.TO et ne peut pas vous aider concernant leurs services.</p> nest pas affiliée à SideShift.ai et ne peut pas vous aider concernant leurs services.</p>
<h2>Taux de change XMR.TO<h2> <h2>Taux de change SideShift.ai<h2>
<p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive XMR.TO. Cela <p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive SideShift.ai. Cela
inclus le taux de change actuel, ainsi que les limites BTC hautes et basses. Notez que ce taux inclus le taux de change actuel, ainsi que les limites BTC hautes et basses. Notez que ce taux
nest pas garantit à ce stade. Vous verrez également le montnt jusquauquel la transaction BTC nest pas garantit à ce stade.</p>
sera exécutée instantanément sans attendre de confirmation XMR (voir la FAQ XMR.TO pour plus de <h2>Ordre SideShift.ai<h2>
détails). Veuillez noter que XMR.TO najoute pas de frais additionnels - cest pas cool ça ?</p> <p>Sur lécran \"Confirmation\", vous verez lordre SideShift.ai actuel. Cette ordre est valide pour
<h2>Ordre XMR.TO<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre XMR.TO actuel. Cette ordre est valide pour
un temps limité - vous pouvez remarquer le compte à rebours sur le bouton \"Dépenser\". Ce taux un temps limité - vous pouvez remarquer le compte à rebours sur le bouton \"Dépenser\". Ce taux
de change peut être différent du taux indicatif de lécran précédent.</p> de change peut être différent du taux indicatif de lécran précédent.</p>
<h2>Clef Secrète XMR.TO<h2> <h2>Clef Secrète SideShift.ai<h2>
<p>Comme Monerujo ne traite que le volet Monero de votre transaction, votre clef secrète <p>Comme Monerujo ne traite que le volet Monero de votre transaction, votre clef secrète
XMR.TO peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil SideShift.ai peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de XMR.TO.</p> de SideShift.ai.</p>
<p>Veuillez noter que cette clef secrète est seulement valable 24h après le lancement de la <h2>Compte à Rebours SideShift.ai !</h2>
transaction !</p>
<h2>Compte à Rebours XMR.TO !</h2>
<p>Une fois que le compte à rebours atteint zéro, vous devrez obtenir un nouveau devis depuis <p>Une fois que le compte à rebours atteint zéro, vous devrez obtenir un nouveau devis depuis
XMR.TO en retournant à létape précédente puis en revenant à lécran \"Confirmation\".</p> SideShift.ai en retournant à létape précédente puis en revenant à lécran \"Confirmation\".</p>
]]></string> ]]></string>
<string name="help_create_ledger"><![CDATA[ <string name="help_create_ledger"><![CDATA[

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Vous avez entré une adresse Bitcoin.</b><br/> <b>Vous avez entré une adresse Bitcoin.</b><br/>
<i>Vous envoyez des XMR et le destinataire recevra des BTC via le service <b>XMR.TO</b>.</i> <i>Vous envoyez des XMR et le destinataire recevra des BTC via le service <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Ordres XMR.TO</string> <string name="info_send_xmrto_success_order_label">Ordres SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">En Attente de Confirmation</string> <string name="info_send_xmrto_paid">En Attente de Confirmation</string>
<string name="info_send_xmrto_unpaid">En Attente de Paiement</string> <string name="info_send_xmrto_unpaid">En Attente de Paiement</string>
<string name="info_send_xmrto_error">Erreur XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Erreur SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Envoyé !</string> <string name="info_send_xmrto_sent">BTC Envoyé !</string>
<string name="info_send_xmrto_query">Interrogation &#8230;</string> <string name="info_send_xmrto_query">Interrogation &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Vous pouvez envoyer %1$s &#8212; %2$s BTC</b>.<br/> <b>Vous pouvez envoyer %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> vous donne un taux de change de <b>%3$s BTC</b> <u>actuellement</u></i>. <i><b>SideShift.ai</b> vous donne un taux de change de <b>%3$s BTC</b> <u>actuellement</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Les montant n\'excédant pas <b>%1$s BTC</b> seront envoyés <u>immédiatement</u>!</i> <i>Les montant n\'excédant pas <b>%1$s BTC</b> seront envoyés <u>immédiatement</u>!</i>
@ -63,25 +63,25 @@
<string name="info_paymentid_integrated">&#x2714; ID de Paiement intégré</string> <string name="info_paymentid_integrated">&#x2714; ID de Paiement intégré</string>
<string name="info_prepare_tx">Préparation de votre transaction</string> <string name="info_prepare_tx">Préparation de votre transaction</string>
<string name="label_send_progress_xmrto_create">Création de l\'ordre XMR.TO</string> <string name="label_send_progress_xmrto_create">Création de l\'ordre SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Interrogation de l\'ordre XMR.TO</string> <string name="label_send_progress_xmrto_query">Interrogation de l\'ordre SideShift.ai</string>
<string name="label_send_progress_create_tx">Préparation de la Transaction Monero</string> <string name="label_send_progress_create_tx">Préparation de la Transaction Monero</string>
<string name="label_send_progress_queryparms">Interrogation des paramètres xmr.to</string> <string name="label_send_progress_queryparms">Interrogation des paramètres SideShift.ai</string>
<string name="label_generic_xmrto_error">ERREUR XMR.TO</string> <string name="label_generic_xmrto_error">ERREUR SideShift.ai</string>
<string name="text_generic_xmrto_error">Code : %1$d</string> <string name="text_generic_xmrto_error">Code : %1$d</string>
<string name="text_retry">Touchez pour réessayer</string> <string name="text_retry">Touchez pour réessayer</string>
<string name="text_noretry_monero">Maintenant on est coincé ici !</string> <string name="text_noretry_monero">Maintenant on est coincé ici !</string>
<string name="text_noretry">Oh-oh, XMR.TO n\'a pas l\'air disponible pour le moment !</string> <string name="text_noretry">Oh-oh, SideShift.ai n\'a pas l\'air disponible pour le moment !</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Taux : %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Taux : %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Visitez xmr.to pour l\'assistance &amp; le suivi</string> <string name="label_send_btc_xmrto_info">Visitez SideShift.ai pour l\'assistance &amp; le suivi</string>
<string name="label_send_btc_xmrto_key_lb">Clef Secrète\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Clef Secrète\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Clef Secrète XMR.TO</string> <string name="label_send_btc_xmrto_key">Clef Secrète SideShift.ai</string>
<string name="label_send_btc_address">Adresse BTC Destination</string> <string name="label_send_btc_address">Adresse BTC Destination</string>
<string name="label_send_btc_amount">Montant</string> <string name="label_send_btc_amount">Montant</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Clef d\'Audit</string> <string name="label_copy_viewkey">Clef d\'Audit</string>
<string name="label_copy_address">Adresse Publique</string> <string name="label_copy_address">Adresse Publique</string>
<string name="label_copy_xmrtokey">Clef XMR.TO</string> <string name="label_copy_xmrtokey">Clef</string>
<string name="message_copy_viewkey">Clef d\'audit copiée !</string> <string name="message_copy_viewkey">Clef d\'audit copiée !</string>
<string name="message_copy_xmrtokey">Clef XMR.TO copiée !</string> <string name="message_copy_xmrtokey">Clef copiée !</string>
<string name="message_copy_address">Adresse du Portefeuille copiée !</string> <string name="message_copy_address">Adresse du Portefeuille copiée !</string>
<string name="message_copy_txid">ID de Transaction copié !</string> <string name="message_copy_txid">ID de Transaction copié !</string>
<string name="message_nocopy">Copie désactivée par sécurité !</string> <string name="message_nocopy">Copie désactivée par sécurité !</string>
@ -357,13 +357,10 @@
<string name="node_nobookmark">%1$d meilleurs nœuds mis en favoris automatiquement</string> <string name="node_nobookmark">%1$d meilleurs nœuds mis en favoris automatiquement</string>
<string name="label_test">Tester</string><!--note: as in "Test a network connection"--> <string name="label_test">Tester</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Résolution de l\'URI de Paiement&#8230;</string>
<string name="send_address_not_bip70">Résolution de l\'URI de Paiement impossible</string>
<string name="send_address_bip70">URI de Paiement Résolue &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Destinataire</string> <string name="send_address_hint">Destinataire</string>
<string name="xmrto_error_001">XMR.TO hors ligne - réessayer ultérieurement</string> <string name="xmrto_error_001">SideShift.ai hors ligne - réessayer ultérieurement</string>
<string name="xmrto_error_004">Montant BTC hors limites</string> <string name="xmrto_error_004">Montant BTC hors limites</string>
<string name="xmrto_error_010">URL de Paiement invalide ou périmée</string> <string name="xmrto_error_010">URL de Paiement invalide ou périmée</string>
<string name="xmrto_error_012">Trop de requêtes</string> <string name="xmrto_error_012">Trop de requêtes</string>
@ -391,7 +388,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -412,4 +409,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -34,8 +34,8 @@
nyilvános API-ján keresztül kéri le az árfolyamot. nyilvános API-ján keresztül kéri le az árfolyamot.
A kéréseid során történő adatgyűjtés módjával kapcsolatban tekintsd meg az adatvédelmi A kéréseid során történő adatgyűjtés módjával kapcsolatban tekintsd meg az adatvédelmi
irányelveiket a https://coinmarketcap.com/privacy weboldalon.</p> irányelveiket a https://coinmarketcap.com/privacy weboldalon.</p>
<p>Ha BTC-címekre való fizetésre használod az applikációt, akkor az XMR.TO szolgáltatását <p>Ha BTC-címekre való fizetésre használod az applikációt, akkor az SideShift.ai szolgáltatását
használod. Részletes adatvédelmi irányelveiket a https://xmr.to/ weboldalon tekintheted meg. használod. Részletes adatvédelmi irányelveiket a https://sideshift.ai/ weboldalon tekintheted meg.
A monerujo számukra a kedvezményezett BTC-címet és a küldeni kívánt mennyiséget közli meg, A monerujo számukra a kedvezményezett BTC-címet és a küldeni kívánt mennyiséget közli meg,
ám az IP-címed is begyűjthető.</p> ám az IP-címed is begyűjthető.</p>
<h2>Applikációengedélyek</h2> <h2>Applikációengedélyek</h2>

View File

@ -146,68 +146,53 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>Fizetési azonosító</h2>
<p>Fizetési azonosítót (payment ID) használhatsz arra a célra, hogy beazonosítsd, miért történt
tranzakció két fél között. Ez teljes mértékben opcionális és privát. A fizetési azonosító például
lehetővé teszi egy üzlet számára a tranzakciód és a megvásárolt tételed összeegyeztetését.<p>
<h1>BTC-küldés</h1> <h1>BTC-küldés</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>Az XMR.TO egy harmadik féltől származó szolgáltatás, mely Moneróról Bitcoinra való átváltóként <p>Az SideShift.ai egy harmadik féltől származó szolgáltatás, mely Moneróról Bitcoinra való átváltóként
viselkedik. Az XMR.TO API-ját használjuk a Bitcoinban való fizetés monerujóba való integrálásához. viselkedik. Az SideShift.ai API-ját használjuk a Bitcoinban való fizetés monerujóba való integrálásához.
Kérlek, látogass el a https://xmr.to weboldalra, és döntsd el magad, hogy szeretnéd-e használni. Kérlek, látogass el a https://sideshift.ai weboldalra, és döntsd el magad, hogy szeretnéd-e használni.
A monerujo csapata nincsen kapcsolatban az XMR.TO-val és nem tudnak segítséget nyújtani a A monerujo csapata nincsen kapcsolatban az SideShift.ai-val és nem tudnak segítséget nyújtani a
szolgáltatásaikkal kapcsolatban.</p> szolgáltatásaikkal kapcsolatban.</p>
<h2>XMR.TO árfolyam<h2> <h2>SideShift.ai árfolyam<h2>
<p>A Mennyiség oldalon kerülnek megjelenítésre az XMR.TO szolgáltatás paraméterei. Ez magában <p>A Mennyiség oldalon kerülnek megjelenítésre az SideShift.ai szolgáltatás paraméterei. Ez magában
foglalja az aktuális árfolyamot, valamint a BTC alsó és felső határértékeit. Vedd figyelembe, foglalja az aktuális árfolyamot, valamint a BTC alsó és felső határértékeit. Vedd figyelembe,
hogy ez az árfolyam ekkor még nem garantált. Megjelenítésre kerül az a mennyiség is, amely mellett hogy ez az árfolyam ekkor még nem garantált.</p>
a BTC-tranzakció azonnal megvalósításra kerül XMR-megerősítések nélkül (részletekért olvad el az <h2>SideShift.ai megrendelés<h2>
XMR.TO oldalán a gyakran ismételt kérdéseket). Az XMR.TO nem számol fel extra költségeket - milyen
király már ez?</p>
<h2>XMR.TO megrendelés<h2>
<p>A Megerősítés oldalon láthatod a tényleges megrendelést. A megrendelés korlátozott ideig <p>A Megerősítés oldalon láthatod a tényleges megrendelést. A megrendelés korlátozott ideig
érvényes - láthatod a visszaszámlálást a Küldés gombon. Az árfolyam különbözhet a korábbi képernyőkön érvényes - láthatod a visszaszámlálást a Küldés gombon. Az árfolyam különbözhet a korábbi képernyőkön
látottaktól.</p> látottaktól.</p>
<h2>XMR.TO titkos kulcs<h2> <h2>SideShift.ai titkos kulcs<h2>
<p>Mivel a monerujo csak a tranzakciód Monero részét kezeli, így az XMR.TO titkos kulcsod <p>Mivel a monerujo csak a tranzakciód Monero részét kezeli, így az SideShift.ai titkos kulcsod
használható a megrendelésed Bitcoin részének nyomonkövetésére az XMR.TO kezdőlapján.</p> használható a megrendelésed Bitcoin részének nyomonkövetésére az SideShift.ai kezdőlapján.</p>
<p>Kérjük vedd figyelembe, hogy ez a titkos kulcs csak a tranzakció kezdetétől számított <h2>SideShift.ai visszaszámlálás!</h2>
24 óráig érvényes!</p> <p>Amint a visszaszámlálás eléri a nullát, új ajánlatot kell kérned az SideShift.ai-tól azáltal, hogy
<h2>XMR.TO visszaszámlálás!</h2>
<p>Amint a visszaszámlálás eléri a nullát, új ajánlatot kell kérned az XMR.TO-tól azáltal, hogy
visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p> visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>BTC-küldés</h1> <h1>BTC-küldés</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>Az XMR.TO egy harmadik féltől származó szolgáltatás, mely Moneróról Bitcoinra való átváltóként <p>Az SideShift.ai egy harmadik féltől származó szolgáltatás, mely Moneróról Bitcoinra való átváltóként
viselkedik. Az XMR.TO API-ját használjuk a Bitcoinban való fizetés monerujóba való integrálásához. viselkedik. Az SideShift.ai API-ját használjuk a Bitcoinban való fizetés monerujóba való integrálásához.
Kérlek, látogass el a https://xmr.to weboldalra, és döntsd el magad, hogy szeretnéd-e használni. Kérlek, látogass el a https://sideshift.ai weboldalra, és döntsd el magad, hogy szeretnéd-e használni.
A monerujo csapata nincsen kapcsolatban az XMR.TO-val és nem tudnak segítséget nyújtani a A monerujo csapata nincsen kapcsolatban az SideShift.ai-val és nem tudnak segítséget nyújtani a
szolgáltatásaikkal kapcsolatban.</p> szolgáltatásaikkal kapcsolatban.</p>
<h2>XMR.TO árfolyam<h2> <h2>SideShift.ai árfolyam<h2>
<p>A Mennyiség oldalon kerülnek megjelenítésre az XMR.TO szolgáltatás paraméterei. Ez magában <p>A Mennyiség oldalon kerülnek megjelenítésre az SideShift.ai szolgáltatás paraméterei. Ez magában
foglalja az aktuális árfolyamot, valamint a BTC alsó és felső határértékeit. Vedd figyelembe, foglalja az aktuális árfolyamot, valamint a BTC alsó és felső határértékeit. Vedd figyelembe,
hogy ez az árfolyam ekkor még nem garantált. Megjelenítésre kerül az a mennyiség is, amely mellett hogy ez az árfolyam ekkor még nem garantált.</p>
a BTC-tranzakció azonnal megvalósításra kerül XMR-megerősítések nélkül (részletekért olvad el az <h2>SideShift.ai megrendelés<h2>
XMR.TO oldalán a gyakran ismételt kérdéseket). Az XMR.TO nem számol fel extra költségeket - milyen
király már ez?</p>
<h2>XMR.TO megrendelés<h2>
<p>A Megerősítés oldalon láthatod a tényleges megrendelést. A megrendelés korlátozott ideig <p>A Megerősítés oldalon láthatod a tényleges megrendelést. A megrendelés korlátozott ideig
érvényes - láthatod a visszaszámlálást a Küldés gombon. Az árfolyam különbözhet a korábbi képernyőkön érvényes - láthatod a visszaszámlálást a Küldés gombon. Az árfolyam különbözhet a korábbi képernyőkön
látottaktól.</p> látottaktól.</p>
<h2>XMR.TO titkos kulcs<h2> <h2>SideShift.ai titkos kulcs<h2>
<p>ivel a monerujo csak a tranzakciód Monero részét kezeli, így az XMR.TO titkos kulcsod <p>Mivel a monerujo csak a tranzakciód Monero részét kezeli, így az SideShift.ai titkos kulcsod
használható a megrendelésed Bitcoin részének nyomonkövetésére az XMR.TO kezdőlapján.</p> használható a megrendelésed Bitcoin részének nyomonkövetésére az SideShift.ai kezdőlapján.</p>
<p>Kérjük vedd figyelembe, hogy ez a titkos kulcs csak a tranzakció kezdetétől számított <h2>SideShift.ai visszaszámlálás!</h2>
24 óráig érvényes!</p> <p>Amint a visszaszámlálás eléri a nullát, új ajánlatot kell kérned az SideShift.ai-tól azáltal, hogy
<h2>XMR.TO visszaszámlálás!</h2>
<p>Amint a visszaszámlálás eléri a nullát, új ajánlatot kell kérned az XMR.TO-tól azáltal, hogy
visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p> visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p>
]]></string> ]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Bitcoin-címet adtál meg.</b><br/> <b>Bitcoin-címet adtál meg.</b><br/>
<i>XMR-t fogsz küldeni, a fogadó pedig BTC-t fog kapni az <b>XMR.TO</b> szolgáltatásán keresztül.</i> <i>XMR-t fogsz küldeni, a fogadó pedig BTC-t fog kapni az <b>SideShift.ai</b> szolgáltatásán keresztül.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO megrendelés</string> <string name="info_send_xmrto_success_order_label">SideShift.ai megrendelés</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Megerősítés folyamatban</string> <string name="info_send_xmrto_paid">Megerősítés folyamatban</string>
<string name="info_send_xmrto_unpaid">Kifizetés folyamatban</string> <string name="info_send_xmrto_unpaid">Kifizetés folyamatban</string>
<string name="info_send_xmrto_error">XMR.TO-hiba (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai-hiba (%1$s)</string>
<string name="info_send_xmrto_sent">BTC elküldve!</string> <string name="info_send_xmrto_sent">BTC elküldve!</string>
<string name="info_send_xmrto_query">Lekérdezés&#8230;</string> <string name="info_send_xmrto_query">Lekérdezés&#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Elküldhetsz: %1$s &#8212; %2$s BTC</b>.<br/> <b>Elküldhetsz: %1$s &#8212; %2$s BTC</b>.<br/>
<i>Az <b>XMR.TO</b> <u>aktuális</u> árfolyama: <b>%3$s BTC</b></i>. <i>Az <b>SideShift.ai</b> <u>aktuális</u> árfolyama: <b>%3$s BTC</b></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>A legfeljebb <b>%1$s BTC</b> nagyságú összegek <u>azonnal</u> elküldésre kerülnek!</i> <i>A legfeljebb <b>%1$s BTC</b> nagyságú összegek <u>azonnal</u> elküldésre kerülnek!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; Fizetési azonosító integrálva</string> <string name="info_paymentid_integrated">&#x2714; Fizetési azonosító integrálva</string>
<string name="info_prepare_tx">Tranzakció előkészítése</string> <string name="info_prepare_tx">Tranzakció előkészítése</string>
<string name="label_send_progress_xmrto_create">XMR.TO megrendelés létrehozása</string> <string name="label_send_progress_xmrto_create">SideShift.ai megrendelés létrehozása</string>
<string name="label_send_progress_xmrto_query">XMR.TO megrendelés lekérdezése</string> <string name="label_send_progress_xmrto_query">SideShift.ai megrendelés lekérdezése</string>
<string name="label_send_progress_create_tx">Monero-tranzakció előkészítése</string> <string name="label_send_progress_create_tx">Monero-tranzakció előkészítése</string>
<string name="label_send_progress_queryparms">XMR.TO paraméterek lekérdezése</string> <string name="label_send_progress_queryparms">SideShift.ai paraméterek lekérdezése</string>
<string name="label_generic_xmrto_error">XMR.TO HIBA</string> <string name="label_generic_xmrto_error">SideShift.ai HIBA</string>
<string name="text_generic_xmrto_error">Kód: %1$d</string> <string name="text_generic_xmrto_error">Kód: %1$d</string>
<string name="text_retry">Koppints az újrapróbálkozáshoz</string> <string name="text_retry">Koppints az újrapróbálkozáshoz</string>
<string name="text_noretry_monero">Itt most elakadtunk!</string> <string name="text_noretry_monero">Itt most elakadtunk!</string>
<string name="text_noretry">Ajjaj! Úgy néz ki, az XMR.TO most nem elérhető!</string> <string name="text_noretry">Ajjaj! Úgy néz ki, az SideShift.ai most nem elérhető!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Arány: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Arány: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Segítségért és nyomonkövetésért látogass el az XMR.TO weboldalra</string> <string name="label_send_btc_xmrto_info">Segítségért és nyomonkövetésért látogass el az SideShift.ai weboldalra</string>
<string name="label_send_btc_xmrto_key_lb">Titkos kulcs\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Titkos kulcs\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO titkos kulcs</string> <string name="label_send_btc_xmrto_key">SideShift.ai titkos kulcs</string>
<string name="label_send_btc_address">Kedvezményezett BTC-címe</string> <string name="label_send_btc_address">Kedvezményezett BTC-címe</string>
<string name="label_send_btc_amount">Mennyiség</string> <string name="label_send_btc_amount">Mennyiség</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Figyelőkulcs</string> <string name="label_copy_viewkey">Figyelőkulcs</string>
<string name="label_copy_address">Nyilvános cím</string> <string name="label_copy_address">Nyilvános cím</string>
<string name="label_copy_xmrtokey">XMR.TO kulcs</string> <string name="label_copy_xmrtokey">Kulcs</string>
<string name="message_copy_viewkey">Figyelőkulcs vágólapra másolva!</string> <string name="message_copy_viewkey">Figyelőkulcs vágólapra másolva!</string>
<string name="message_copy_xmrtokey">XMR.TO kulcs vágólapra másolva!</string> <string name="message_copy_xmrtokey">Kulcs vágólapra másolva!</string>
<string name="message_copy_address">Tárcacím vágólapra másolva!</string> <string name="message_copy_address">Tárcacím vágólapra másolva!</string>
<string name="message_copy_txid">Tranzakcióazonosító vágólapra másolva!</string> <string name="message_copy_txid">Tranzakcióazonosító vágólapra másolva!</string>
<string name="message_nocopy">A másolás biztonsági okokból tiltásra került!</string> <string name="message_nocopy">A másolás biztonsági okokból tiltásra került!</string>
@ -356,12 +356,9 @@
<string name="backup_success">Backup successful</string> <string name="backup_success">Backup successful</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Receiver</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -389,7 +386,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -410,4 +407,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -27,8 +27,8 @@
<p>Altri dati personali non sono raccolti dall\'app.</p> <p>Altri dati personali non sono raccolti dall\'app.</p>
<p>Se usi la funzionalità (opzionale) del cambio, monerujo recupera il tasso di cambio attraverso le API pubbliche di coinmarketcap.com. <p>Se usi la funzionalità (opzionale) del cambio, monerujo recupera il tasso di cambio attraverso le API pubbliche di coinmarketcap.com.
Controlla la loro politica per la privacy (in lingua inglese) su https://coinmarketcap.com/privacy per conoscere i dettagli su come vengono raccolti i dati nelle tue richieste.</p> Controlla la loro politica per la privacy (in lingua inglese) su https://coinmarketcap.com/privacy per conoscere i dettagli su come vengono raccolti i dati nelle tue richieste.</p>
<p>Se utilizzi l\'app per effettuare pagamenti ad indirizzi BTC, stai usando il servizio XMR.TO. <p>Se utilizzi l\'app per effettuare pagamenti ad indirizzi BTC, stai usando il servizio SideShift.ai.
Controlla la loro politica per la privacy (in lingua inglese) su https://xmr.to/ per conoscere i dettagli. Monerujo invia a loro l\'indirizzo di destinazione BTC e l\'ammontare della transazione. Anche il tuo IP potrebbe essere raccolto.</p> Controlla la loro politica per la privacy (in lingua inglese) su https://sideshift.ai/ per conoscere i dettagli. Monerujo invia a loro l\'indirizzo di destinazione BTC e l\'ammontare della transazione. Anche il tuo IP potrebbe essere raccolto.</p>
<h2>Permessi app</h2> <h2>Permessi app</h2>
<ul> <ul>
<li>INTERNET : Connessione alla rete Monero attraverso un nodo </li> <li>INTERNET : Connessione alla rete Monero attraverso un nodo </li>

View File

@ -152,61 +152,51 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>ID Pagamento</h2>
<p>Puoi usare un ID Pagamento per identificare la causale della transazione. Questa è un&apos;informazione
opzionale e privata. Ad esempio può aiutare un venditore ad associare una transazione ricevuta ad un bene da te acquistato.<p>
<h1>Inviare BTC</h1> <h1>Inviare BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin. <p>SideShift.ai è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all&apos;interno di Monerujo. Controlla https://xmr.to Utilizziamo le API SideShift.ai per integrare pagamenti Bitcoin all&apos;interno di Monerujo. Controlla https://sideshift.ai
e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo
con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p> con SideShift.ai e non è in grado di aiutarti con il servizio da loro offerto.</p>
<h2>Tasso di cambio XMR.TO<h2> <h2>Tasso di cambio SideShift.ai<h2>
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri <p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio SideShift.ai. Questi parametri
includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato
non è ancora garantito in questa fase. Vedrai inoltre l&apos;ammontare fino al quale la transazione BTC verrà eseguita non è ancora garantito in questa fase.</p>
istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio <h2>Ordine SideShift.ai<h2>
XMR.TO non aggiunge commissioni extra - bello vero?</p> <p>Sulla schermata \"Conferma\", troverai il vero ordine SideShift.ai. Questo ordine è valido per un tempo limitato - potresti
<h2>Ordine XMR.TO<h2>
<p>Sulla schermata \"Conferma\", troverai il vero ordine XMR.TO. Questo ordine è valido per un tempo limitato - potresti
notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello indicativo notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello indicativo
mostrato nelle schermate precedenti.</p> mostrato nelle schermate precedenti.</p>
<h2>Chiave segreta XMR.TO<h2> <h2>Chiave segreta SideShift.ai<h2>
<p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave <p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave
segreta XMR.TO per tracciare il versante Bitcoin del tuo ordine sulla homepage XMR.TO.</p> segreta SideShift.ai per tracciare il versante Bitcoin del tuo ordine sulla homepage SideShift.ai.</p>
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall&apos;inizio della transazione!</p> <h2>Conto alla rovescia SideShift.ai!</h2>
<h2>Conto alla rovescia XMR.TO!</h2> <p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a SideShift.ai tornando
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando
indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p> indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Inviare BTC</h1> <h1>Inviare BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin. <p>SideShift.ai è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
Utilizziamo le API XMR.TO per integrare pagamenti Bitcoin all&apos;interno di Monerujo. Controlla https://xmr.to e decidi Utilizziamo le API SideShift.ai per integrare pagamenti Bitcoin all&apos;interno di Monerujo. Controlla https://sideshift.ai
tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo con XMR.TO e e decidi tu stesso se questa è una funzionalità che vuoi usare. Il team Monerujo non è associato in alcun modo
non è in grado di aiutarti con il servizio da loro offerto.</p> con SideShift.ai e non è in grado di aiutarti con il servizio da loro offerto.</p>
<h2>Tasso di cambio XMR.TO<h2> <h2>Tasso di cambio SideShift.ai<h2>
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri includono <p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio SideShift.ai. Questi parametri
il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato non è ancora includono il tasso di cambio attuale oltre ai limiti massimo e minimo di BTC. Considera che il tasso che ti viene mostrato
garantito in questa fase. Vedrai inoltre l&apos;ammontare fino al quale la transazione BTC verrà eseguita istantaneamente non è ancora garantito in questa fase.</p>
senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non <h2>Ordine SideShift.ai<h2>
aggiunge commissioni extra - bello vero?</p> <p>Sulla schermata \"Conferma\", troverai il vero ordine SideShift.ai. Questo ordine è valido per un tempo limitato - potresti
<h2>XMR.TO Order<h2> notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello indicativo
<p>Sulla schermata \"Conferma\", troverai il vero ordine XMR.TO. Questo ordine è valido per un tempo limitato - mostrato nelle schermate precedenti.</p>
potresti notare un conto alla rovescia sul pulsante \"Spendi\". Il tasso di cambio potrebbe essere diverso da quello <h2>Chiave segreta SideShift.ai<h2>
indicativo mostrato nelle schermate precedenti.</p>
<h2>Chiave segreta XMR.TO<h2>
<p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave <p>Dal momento che Monerujo gestisce soltanto il versante Monero della tua transazione, può essere usata la chiave
segreta XMR.TO per tracciare il versante Bitcoin del tuo ordine sulla homepage XMR.TO.</p> segreta SideShift.ai per tracciare il versante Bitcoin del tuo ordine sulla homepage SideShift.ai.</p>
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall&apos;inizio della transazione!</p> <h2>Conto alla rovescia SideShift.ai!</h2>
<h2>Conto alla rovescia XMR.TO!</h2> <p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a SideShift.ai tornando
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando
indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p> indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
]]></string> ]]></string>

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Hai inserito un indirizzo Bitcoin.</b><br/> <b>Hai inserito un indirizzo Bitcoin.</b><br/>
<i>Invierai XMR e il destinatario riceverà BTC tramite il servizio <b>XMR.TO</b>.</i> <i>Invierai XMR e il destinatario riceverà BTC tramite il servizio <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Ordine XMR.TO</string> <string name="info_send_xmrto_success_order_label">Ordine SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">In attesa di conferma</string> <string name="info_send_xmrto_paid">In attesa di conferma</string>
<string name="info_send_xmrto_unpaid">In attesa del pagamento</string> <string name="info_send_xmrto_unpaid">In attesa del pagamento</string>
<string name="info_send_xmrto_error">Errore XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Errore SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Inviati!</string> <string name="info_send_xmrto_sent">BTC Inviati!</string>
<string name="info_send_xmrto_query">Richiedendo &#8230;</string> <string name="info_send_xmrto_query">Richiedendo &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Puoi inviare %1$s &#8212; %2$s BTC</b>.<br/> <b>Puoi inviare %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> ti sta <u>attualmente</u> concedendo un tasso di cambio di <b>%3$s BTC</b></i>. <i><b>SideShift.ai</b> ti sta <u>attualmente</u> concedendo un tasso di cambio di <b>%3$s BTC</b></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Ammontare fino a <b>%1$s BTC</b> inviati <u>istantaneamente</u>!</i> <i>Ammontare fino a <b>%1$s BTC</b> inviati <u>istantaneamente</u>!</i>
@ -63,25 +63,25 @@
<string name="info_paymentid_integrated">&#x2714; ID pagamento integrato</string> <string name="info_paymentid_integrated">&#x2714; ID pagamento integrato</string>
<string name="info_prepare_tx">Preparando la tua transazione</string> <string name="info_prepare_tx">Preparando la tua transazione</string>
<string name="label_send_progress_xmrto_create">Creando l\'ordine XMR.TO</string> <string name="label_send_progress_xmrto_create">Creando l\'ordine SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Richiedendo l\'ordine XMR.TO</string> <string name="label_send_progress_xmrto_query">Richiedendo l\'ordine SideShift.ai</string>
<string name="label_send_progress_create_tx">Preparando la transazione Monero</string> <string name="label_send_progress_create_tx">Preparando la transazione Monero</string>
<string name="label_send_progress_queryparms">Richiedendo i parametri XMR.TO</string> <string name="label_send_progress_queryparms">Richiedendo i parametri SideShift.ai</string>
<string name="label_generic_xmrto_error">ERRORE XMR.TO</string> <string name="label_generic_xmrto_error">ERRORE SideShift.ai</string>
<string name="text_generic_xmrto_error">Codice: %1$d</string> <string name="text_generic_xmrto_error">Codice: %1$d</string>
<string name="text_retry">Tocca per riprovare</string> <string name="text_retry">Tocca per riprovare</string>
<string name="text_noretry_monero">Ora siamo bloccati qui!!</string> <string name="text_noretry_monero">Ora siamo bloccati qui!!</string>
<string name="text_noretry">Oh Oh, XMR.TO sembra non essere disponibile in questo momento!</string> <string name="text_noretry">Oh Oh, SideShift.ai sembra non essere disponibile in questo momento!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Tasso: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Tasso: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Visita xmr.to per supporto e tracciamento</string> <string name="label_send_btc_xmrto_info">Visita SideShift.ai per supporto e tracciamento</string>
<string name="label_send_btc_xmrto_key_lb">Chiave segreta\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Chiave segreta\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Chiave segreta XMR.TO</string> <string name="label_send_btc_xmrto_key">Chiave segreta SideShift.ai</string>
<string name="label_send_btc_address">Indirizzo BTC di destinazione</string> <string name="label_send_btc_address">Indirizzo BTC di destinazione</string>
<string name="label_send_btc_amount">Ammontare</string> <string name="label_send_btc_amount">Ammontare</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Chiave di visualizzazione</string> <string name="label_copy_viewkey">Chiave di visualizzazione</string>
<string name="label_copy_address">Indirizzo pubblico</string> <string name="label_copy_address">Indirizzo pubblico</string>
<string name="label_copy_xmrtokey">Chiave XMR.TO</string> <string name="label_copy_xmrtokey">Chiave</string>
<string name="message_copy_viewkey">Chiave di visualizzazione copiata negli appunti!</string> <string name="message_copy_viewkey">Chiave di visualizzazione copiata negli appunti!</string>
<string name="message_copy_xmrtokey">Chiave XMR.TO copiata negli appunti!</string> <string name="message_copy_xmrtokey">Chiave copiata negli appunti!</string>
<string name="message_copy_address">Indirizzo del portafoglio copiato negli appunti!</string> <string name="message_copy_address">Indirizzo del portafoglio copiato negli appunti!</string>
<string name="message_copy_txid">ID transazione copiato negli appunti!</string> <string name="message_copy_txid">ID transazione copiato negli appunti!</string>
<string name="message_nocopy">Copia disabilitata per ragioni di sicurezza!</string> <string name="message_nocopy">Copia disabilitata per ragioni di sicurezza!</string>
@ -356,13 +356,10 @@
<string name="node_nobookmark">Aggiunti automaticamente ai segnalibri i %1$d nodi migliori</string> <string name="node_nobookmark">Aggiunti automaticamente ai segnalibri i %1$d nodi migliori</string>
<string name="label_test">Effettua Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Effettua Test</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Risolvendo URI pagamento&#8230;</string>
<string name="send_address_not_bip70">Impossibile risolvere pagamento URI</string>
<string name="send_address_bip70">Risolto URI pagamento&#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Ricevente</string> <string name="send_address_hint">Ricevente</string>
<string name="xmrto_error_001">XMR.TO è offline - prova più tardi</string> <string name="xmrto_error_001">SideShift.ai è offline - prova più tardi</string>
<string name="xmrto_error_004">Ammontare in BTC fuori dai limiti</string> <string name="xmrto_error_004">Ammontare in BTC fuori dai limiti</string>
<string name="xmrto_error_010">URL di pagamento obsoleto o invalido</string> <string name="xmrto_error_010">URL di pagamento obsoleto o invalido</string>
<string name="xmrto_error_012">Troppe richieste</string> <string name="xmrto_error_012">Troppe richieste</string>
@ -390,7 +387,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -411,4 +408,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -36,9 +36,9 @@
詳細については、coinmarketcap.com のプライバシーポリシーを 詳細については、coinmarketcap.com のプライバシーポリシーを
https://coinmarketcap.com/privacy にて参照してください。</p> https://coinmarketcap.com/privacy にて参照してください。</p>
<p>もしあなたがこのアプリをビットコインアドレス宛に支払う場合、 <p>もしあなたがこのアプリをビットコインアドレス宛に支払う場合、
あなたは XMR.TO のサービスを使うことになります。 あなたは SideShift.ai のサービスを使うことになります。
https://xmr.to/ を参照して XMR.TO のプライバシーポリシーを https://sideshift.ai/ を参照して SideShift.ai のプライバシーポリシーを
ご覧ください。Monerujoは XMR.TO にビットコインの支払先アドレスと ご覧ください。Monerujoは SideShift.ai にビットコインの支払先アドレスと
数量を送信します。あなたのIPアドレスもまた収集されます。</p> 数量を送信します。あなたのIPアドレスもまた収集されます。</p>
<h2>アプリの権限</h2> <h2>アプリの権限</h2>
<ul> <ul>

View File

@ -243,89 +243,70 @@
<ul> <ul>
<li>XMRやBTCのOpenAlias</li> <li>XMRやBTCのOpenAlias</li>
<li>BTCアドレス</li> <li>BTCアドレス</li>
<li>bitcoin: URI (bitpayのようなBIP70もいい)</li>
</u> </u>
BTCの送信はXMR.TOサービスhttps://xmr.to)を介して処理されることに注意してください。 BTCの送信はSideShift.aiサービスhttps://sideshift.ai)を介して処理されることに注意してください。
下記のBTCの送信に関するセクションを参照してください。</p> 下記のBTCの送信に関するセクションを参照してください。</p>
<h2>ペイメントID(Payment ID)</h2>
<p>あなたは2者間でモネロを送金した理由を特定するために
ペイメントIDを使うことができます。
これはオプションの機能であり、内容は秘匿化されます。
例えば、ペイメントIDを使うことで販売者が
トランザクションと商品を紐付けることができます。</p>
<h1>BTCの送金</h1> <h1>BTCの送金</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO はモネロからビットコインに換金する交換所として <p>SideShift.ai はモネロからビットコインに換金する交換所として
機能するサードパーティ製のサービスです。私達は 機能するサードパーティ製のサービスです。私達は
XMR.TO のAPIを使うことでビットコインの支払い機能を SideShift.ai のAPIを使うことでビットコインの支払い機能を
Monerujoに組み込んでいます。 Monerujoに組み込んでいます。
https://xmr.to を確認して、これがあなたが使いたい https://sideshift.ai を確認して、これがあなたが使いたい
機能であるかどうかをご自身で判断してください。 機能であるかどうかをご自身で判断してください。
Monerujoの開発チームは XMR.TO とは無関係であり、 Monerujoの開発チームは SideShift.ai とは無関係であり、
XMR.TOのサービスに関してあなたをサポートすることはできません。</p> SideShift.aiのサービスに関してあなたをサポートすることはできません。</p>
<h2>XMR.TO の交換レート<h2> <h2>SideShift.ai の交換レート<h2>
<p>「数量」(Amount)の画面では XMR.TO の現在の <p>「数量」(Amount)の画面では SideShift.ai の現在の
パラメータが表示されます。これらは現在の交換レートに加えて パラメータが表示されます。これらは現在の交換レートに加えて
送金可能なBTCの上限・下限を含みます。この交換レートは 送金可能なBTCの上限・下限を含みます。この交換レートは
現時点では保証されたものではないことに注意してください。 現時点では保証されたものではないことに注意してください。</p>
また、XMRの送金が承認されるのを待つことなく <h2>SideShift.ai の注文<h2>
直ちにビットコインと交換できる数量も表示されるでしょう <p>「確認」(Confirm)の画面で、あなたは実際の SideShift.ai
(詳細は XMR.TO のFAQをご覧ください。また、XMR.TO は
余分な手数料を取ることはしません。かっこいいと思いませんか?</p>
<h2>XMR.TO の注文<h2>
<p>「確認」(Confirm)の画面で、あなたは実際の XMR.TO
の注文を見ることになります。この注文は制限時間内でのみ有効です。 の注文を見ることになります。この注文は制限時間内でのみ有効です。
あなたは送金(Spend)ボタンにカウントダウンが あなたは送金(Spend)ボタンにカウントダウンが
表示されていることに気づくかもしれません。 表示されていることに気づくかもしれません。
交換レートは前の画面で表示されたものとは異なる可能性が有ります。</p> 交換レートは前の画面で表示されたものとは異なる可能性が有ります。</p>
<h2>XMR.TO のシークレットキー<h2> <h2>SideShift.ai のシークレットキー<h2>
<p>Monerujo はBTCとXMRのうち、XMRの方だけを取り扱います。 <p>Monerujo はBTCとXMRのうち、XMRの方だけを取り扱います。
XMR.TO のシークレットキーは、 XMR.TO のホームページにて SideShift.ai のシークレットキーは、 SideShift.ai のホームページにて
BTCの方の注文を追跡するのに使用できます。</p> BTCの方の注文を追跡するのに使用できます。</p>
<p>このシークレットキーは取引が始まってから <h2>SideShift.ai カウントダウン!</h2>
24時間のみ有効であることに注意してください!</p>
<h2>XMR.TO カウントダウン!</h2>
<p>一旦カウントダウンがゼロに到達すると、 <p>一旦カウントダウンがゼロに到達すると、
あなたは一度前のステップに戻って「確認」(Confirm)の画面に戻って、 あなたは一度前のステップに戻って「確認」(Confirm)の画面に戻って、
もう一度 XMR.TO から新しい見積もりを取得する必要があります。</p> もう一度 SideShift.ai から新しい見積もりを取得する必要があります。</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>BTCの送金</h1> <h1>BTCの送金</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO はモネロからビットコインに換金する交換所として <p>SideShift.ai はモネロからビットコインに換金する交換所として
機能するサードパーティ製のサービスです。私達は 機能するサードパーティ製のサービスです。私達は
XMR.TO のAPIを使うことでビットコインの支払い機能を SideShift.ai のAPIを使うことでビットコインの支払い機能を
Monerujoに組み込んでいます。 Monerujoに組み込んでいます。
https://xmr.to を確認して、これがあなたが使いたい https://sideshift.ai を確認して、これがあなたが使いたい
機能であるかどうかをご自身で判断してください。 機能であるかどうかをご自身で判断してください。
Monerujoの開発チームは XMR.TO とは無関係であり、 Monerujoの開発チームは SideShift.ai とは無関係であり、
XMR.TOのサービスに関してあなたをサポートすることはできません。</p> SideShift.aiのサービスに関してあなたをサポートすることはできません。</p>
<h2>XMR.TO の交換レート<h2> <h2>SideShift.ai の交換レート<h2>
<p>「数量」(Amount)の画面では XMR.TO の現在の <p>「数量」(Amount)の画面では SideShift.ai の現在の
パラメータが表示されます。これらは現在の交換レートに加えて パラメータが表示されます。これらは現在の交換レートに加えて
送金可能なBTCの上限・下限を含みます。この交換レートは 送金可能なBTCの上限・下限を含みます。この交換レートは
現時点では保証されたものではないことに注意してください。 現時点では保証されたものではないことに注意してください。</p>
また、XMRの送金が承認されるのを待つことなく <h2>SideShift.ai の注文<h2>
直ちにビットコインと交換できる数量も表示されるでしょう <p>「確認」(Confirm)の画面で、あなたは実際の SideShift.ai
(詳細は XMR.TO のFAQをご覧ください。また、XMR.TO は
余分な手数料を取ることはしません。かっこいいと思いませんか?</p>
<h2>XMR.TO の注文<h2>
<p>「確認」(Confirm)の画面で、あなたは実際の XMR.TO
の注文を見ることになります。この注文は制限時間内でのみ有効です。 の注文を見ることになります。この注文は制限時間内でのみ有効です。
あなたは送金(Spend)ボタンにカウントダウンが あなたは送金(Spend)ボタンにカウントダウンが
表示されていることに気づくかもしれません。 表示されていることに気づくかもしれません。
交換レートは前の画面で表示されたものとは異なる可能性が有ります。</p> 交換レートは前の画面で表示されたものとは異なる可能性が有ります。</p>
<h2>XMR.TO のシークレットキー<h2> <h2>SideShift.ai のシークレットキー<h2>
<p>Monerujo はBTCとXMRのうち、XMRの方だけを取り扱います。 <p>Monerujo はBTCとXMRのうち、XMRの方だけを取り扱います。
XMR.TO のシークレットキーは、 XMR.TO のホームページにて SideShift.ai のシークレットキーは、 SideShift.ai のホームページにて
BTCの方の注文を追跡するのに使用できます。</p> BTCの方の注文を追跡するのに使用できます。</p>
<p>このシークレットキーは取引が始まってから <h2>SideShift.ai カウントダウン!</h2>
24時間のみ有効であることに注意してください!</p>
<h2>XMR.TO カウントダウン!</h2>
<p>一旦カウントダウンがゼロに到達すると、 <p>一旦カウントダウンがゼロに到達すると、
あなたは一度前のステップに戻って「確認」(Confirm)の画面に戻って、 あなたは一度前のステップに戻って「確認」(Confirm)の画面に戻って、
もう一度 XMR.TO から新しい見積もりを取得する必要があります。</p> もう一度 SideShift.ai から新しい見積もりを取得する必要があります。</p>
]]></string> ]]></string>
<string name="help_wallet"><![CDATA[ <string name="help_wallet"><![CDATA[

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name" translatable="false">monerujo</string>
<string name="wallet_activity_name">ウォレット</string> <string name="wallet_activity_name">ウォレット</string>
<string name="menu_about">Monerujoについて</string> <string name="menu_about">Monerujoについて</string>
@ -37,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>あなたが入力したのはビットコインのアドレスです。</b><br/> <b>あなたが入力したのはビットコインのアドレスです。</b><br/>
<i>あなたはXMRを送金し、受け手は XMR.TO のサービスを利用してBTCを受取ります。</i> <i>あなたはXMRを送金し、受け手は SideShift.ai のサービスを利用してBTCを受取ります。</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO の注文</string> <string name="info_send_xmrto_success_order_label">SideShift.ai の注文</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">承認を待っています</string> <string name="info_send_xmrto_paid">承認を待っています</string>
<string name="info_send_xmrto_unpaid">支払いを待っています</string> <string name="info_send_xmrto_unpaid">支払いを待っています</string>
<string name="info_send_xmrto_error">XMR.TO のエラー (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai のエラー (%1$s)</string>
<string name="info_send_xmrto_sent">BTCが送金されました!</string> <string name="info_send_xmrto_sent">BTCが送金されました!</string>
<string name="info_send_xmrto_query">問い合わせ中 &#8230;</string> <string name="info_send_xmrto_query">問い合わせ中 &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>%1$s から %2$s BTC を送金することができます。</b><br/> <b>%1$s から %2$s BTC を送金することができます。</b><br/>
<i><b>XMR.TO</b> での交換レートは<u>現在</u><b>%3$s BTC</b>です。</i> <i><b>SideShift.ai</b> での交換レートは<u>現在</u><b>%3$s BTC</b>です。</i>
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i><b>%1$s BTC</b> までの数量は <u>即時に</u>送金可能です!</i> <i><b>%1$s BTC</b> までの数量は <u>即時に</u>送金可能です!</i>
@ -63,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; ペイメントID組み込み済み</string> <string name="info_paymentid_integrated">&#x2714; ペイメントID組み込み済み</string>
<string name="info_prepare_tx">取引を準備しています</string> <string name="info_prepare_tx">取引を準備しています</string>
<string name="label_send_progress_xmrto_create">XMR.TO の注文を作成しています</string> <string name="label_send_progress_xmrto_create">SideShift.ai の注文を作成しています</string>
<string name="label_send_progress_xmrto_query">XMR.TO の注文を問い合わせています</string> <string name="label_send_progress_xmrto_query">SideShift.ai の注文を問い合わせています</string>
<string name="label_send_progress_create_tx">モネロの取引を準備しています</string> <string name="label_send_progress_create_tx">モネロの取引を準備しています</string>
<string name="label_send_progress_queryparms">XMR.TO のパラメータを問い合わせています</string> <string name="label_send_progress_queryparms">SideShift.ai のパラメータを問い合わせています</string>
<string name="label_generic_xmrto_error">XMR.TO のエラー</string> <string name="label_generic_xmrto_error">SideShift.ai のエラー</string>
<string name="text_generic_xmrto_error">コード: %1$d</string> <string name="text_generic_xmrto_error">コード: %1$d</string>
<string name="text_retry">タッチして再試行</string> <string name="text_retry">タッチして再試行</string>
<string name="text_noretry_monero">私達はここで立ち往生のようです!</string> <string name="text_noretry_monero">私達はここで立ち往生のようです!</string>
<string name="text_noretry">あーあ、 XMR.TO は現在利用不能のようです!</string> <string name="text_noretry">あーあ、 SideShift.ai は現在利用不能のようです!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(レート: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(レート: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">サポートと追跡については xmr.to をご覧ください</string> <string name="label_send_btc_xmrto_info">サポートと追跡については SideShift.ai をご覧ください</string>
<string name="label_send_btc_xmrto_key_lb">シークレットキー\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">シークレットキー\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO のシークレットキー</string> <string name="label_send_btc_xmrto_key">SideShift.ai のシークレットキー</string>
<string name="label_send_btc_address">支払先の BTC アドレス</string> <string name="label_send_btc_address">支払先の BTC アドレス</string>
<string name="label_send_btc_amount">数量</string> <string name="label_send_btc_amount">数量</string>
@ -155,9 +154,9 @@
<string name="label_copy_viewkey">表示用キー</string> <string name="label_copy_viewkey">表示用キー</string>
<string name="label_copy_address">公開アドレス</string> <string name="label_copy_address">公開アドレス</string>
<string name="label_copy_xmrtokey">XMR.TO キー</string> <string name="label_copy_xmrtokey">キー</string>
<string name="message_copy_viewkey">表示用キーがクリップボードにコピーされました!</string> <string name="message_copy_viewkey">表示用キーがクリップボードにコピーされました!</string>
<string name="message_copy_xmrtokey">XMR.TO キーがクリップボードにコピーされました!</string> <string name="message_copy_xmrtokey">キーがクリップボードにコピーされました!</string>
<string name="message_copy_address">ウォレットアドレスがクリップボードにコピーされました!</string> <string name="message_copy_address">ウォレットアドレスがクリップボードにコピーされました!</string>
<string name="message_copy_txid">取引IDがクリップボードにコピーされました!</string> <string name="message_copy_txid">取引IDがクリップボードにコピーされました!</string>
<string name="message_nocopy">セキュリティ上の理由でコピーは無効化されています!</string> <string name="message_nocopy">セキュリティ上の理由でコピーは無効化されています!</string>
@ -288,9 +287,6 @@
<string name="fab_restore_key">秘密鍵からウォレットを復元</string> <string name="fab_restore_key">秘密鍵からウォレットを復元</string>
<string name="fab_restore_seed">25単語のシードからウォレットを復元</string> <string name="fab_restore_seed">25単語のシードからウォレットを復元</string>
<string name="accounts_balance" translatable="false">%1$s XMR</string>
<string name="tx_account_formatted" translatable="false">(%1$d, %2$d)</string>
<string name="accounts_drawer_new">アカウントを作成</string> <string name="accounts_drawer_new">アカウントを作成</string>
<string name="accounts_new">新しいアカウントを追加 #%1$d</string> <string name="accounts_new">新しいアカウントを追加 #%1$d</string>
<string name="tx_account">アカウント #</string> <string name="tx_account">アカウント #</string>
@ -326,8 +322,6 @@
<string name="nfc_tag_read_what">あなたが何をしたいのかわかりません!</string> <string name="nfc_tag_read_what">あなたが何をしたいのかわかりません!</string>
<string name="nfc_tag_tap">NFCが利用可能です!</string> <string name="nfc_tag_tap">NFCが利用可能です!</string>
<string name="unknown_amount" translatable="false">\?\?\?</string>
<string name="menu_info">シークレットを見せてください!</string> <string name="menu_info">シークレットを見せてください!</string>
<string name="menu_streetmode">ストリートモード</string> <string name="menu_streetmode">ストリートモード</string>
@ -362,13 +356,10 @@
<string name="backup_success">バックアップ成功</string> <string name="backup_success">バックアップ成功</string>
<string name="send_address_resolve_bip70">ペイメントIDの名前解決中&#8230;</string>
<string name="send_address_not_bip70">ペイメントIDの名前解決できませんでした</string>
<string name="send_address_bip70">ペイメントIDの名前解決しました &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">受け取り手</string> <string name="send_address_hint">受け取り手</string>
<string name="xmrto_error_001">XMR.TOはオフラインです。もう一度お試しください</string> <string name="xmrto_error_001">SideShift.aiはオフラインです。もう一度お試しください</string>
<string name="xmrto_error_004">BTCの金額は範囲外</string> <string name="xmrto_error_004">BTCの金額は範囲外</string>
<string name="xmrto_error_010">ペイメントURLは不正古いです</string> <string name="xmrto_error_010">ペイメントURLは不正古いです</string>
<string name="xmrto_error_012">リクエストは多すぎます</string> <string name="xmrto_error_012">リクエストは多すぎます</string>
@ -396,7 +387,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -417,4 +408,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -34,8 +34,8 @@
rate through the public API of coinmarketcap.com. rate through the public API of coinmarketcap.com.
See their privacy policy at https://coinmarketcap.com/privacy for See their privacy policy at https://coinmarketcap.com/privacy for
details on how data in your requests is collected.</p> details on how data in your requests is collected.</p>
<p>If you use the app to pay to BTC addresses, you will be using the XMR.TO service. <p>If you use the app to pay to BTC addresses, you will be using the SideShift.ai service.
See their privacy policy at https://xmr.to/ for details. Monerujo send them the BTC See their privacy policy at https://sideshift.ai/ for details. Monerujo send them the BTC
destination address and amount. Your IP will also be collectable.</p> destination address and amount. Your IP will also be collectable.</p>
<h2>App Permissions</h2> <h2>App Permissions</h2>
<ul> <ul>

View File

@ -147,66 +147,51 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>Betalings-ID</h2>
<p>Du kan bruke betalings-ID til å identifisere hvorfor du sendte Monero mellom to parter. Dette er
helt frivillig og privat. For eksempel lar det en bedrift tilknytte transaksjonen din med
en vare du har kjøpt.<p>
<h1>Å sende BTC</h1> <h1>Å sende BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin. <p>SideShift.ai er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker XMR.TO-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut Vi bruker SideShift.ai-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut
https://xmr.to og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne https://sideshift.ai og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne
er ikke assosierte med XMR.TO og kan ikke hjelpe deg med deres tjeneste.</p> er ikke assosierte med SideShift.ai og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>XMR.TO vekslingskurs<h2> <h2>SideShift.ai vekslingskurs<h2>
<p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til XMR.TO-tjenesten. Disse <p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til SideShift.ai-tjenesten. Disse
inkluderer den nåværende vekslingskursen så vel som nedre og øvre BTC-grenser. Vær oppmerksom på at inkluderer den nåværende vekslingskursen så vel som nedre og øvre BTC-grenser. Vær oppmerksom på at
kursen ikke er garantert på dette punktet. Du vil også se kursen ikke er garantert på dette punktet.</p>
den øvre grensa for at BTC-transaksjonen skal gå igjennom uten å vente på <h2>SideShift.ai ordre<h2>
XMR-bekreftelser (se XMR.TO-FAQen for fler detaljer). Legg merke til at XMR.TO <p>På \"Bekreft\" skjermen, vil du se den faktiske SideShift.ai ordren. Denne ordren er gyldig for
ikke har noen ekstra avgifter - hvor kult er ikke det?</p>
<h2>XMR.TO ordre<h2>
<p>På \"Bekreft\" skjermen, vil du se den faktiske XMR.TO ordren. Denne ordren er gyldig for
en begrensa tid - du legger kanskje til en nedtelling på \"Bruk\" knappen. Veklingskursen kan være en begrensa tid - du legger kanskje til en nedtelling på \"Bruk\" knappen. Veklingskursen kan være
enn den veiledende kursen vist på de tidligere skjermene.</p> enn den veiledende kursen vist på de tidligere skjermene.</p>
<h2>XMR.TO hemmelig nøkkel<h2> <h2>SideShift.ai hemmelig nøkkel<h2>
<p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din XMR.TO hemmelige nøkkel <p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din SideShift.ai hemmelige nøkkel
bli brukt til å spore BTC-transaksjonen på XMR.TO sine hjemmesider.</p> bli brukt til å spore BTC-transaksjonen på SideShift.ai sine hjemmesider.</p>
<p>Vær oppmerksom på at denne nøkkelen kun er tilgjengelig for 24-timer etter transaksjonen <h2>SideShift.ai nedtelling!</h2>
har blitt utført!</p> <p>Når nedtellinga når null, må du få en ny kvote fra SideShift.ai ved å gå tilbake til
<h2>XMR.TO nedtelling!</h2>
<p>Når nedtellinga når null, må du få en ny kvote fra XMR.TO ved å gå tilbake til
det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p> det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Å sende BTC</h1> <h1>Å sende BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin. <p>SideShift.ai er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker XMR.TO-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut Vi bruker SideShift.ai-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut
https://xmr.to og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne https://sideshift.ai og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne
er ikke assosierte med XMR.TO og kan ikke hjelpe deg med deres tjeneste.</p> er ikke assosierte med SideShift.ai og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>XMR.TO vekslingskurs<h2> <h2>SideShift.ai vekslingskurs<h2>
<p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til XMR.TO-tjenesten. Disse <p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til SideShift.ai-tjenesten. Disse
inkluderer den nåværende vekslingskursen så vel som nedre og øvre BTC-grenser. Vær oppmerksom på at inkluderer den nåværende vekslingskursen så vel som nedre og øvre BTC-grenser. Vær oppmerksom på at
kursen ikke er garantert på dette punktet. Du vil også se kursen ikke er garantert på dette punktet.</p>
den øvre grensa for at BTC-transaksjonen skal gå igjennom uten å vente på <h2>SideShift.ai ordre<h2>
XMR-bekreftelser (se XMR.TO-FAQen for fler detaljer). Legg merke til at XMR.TO <p>På \"Bekreft\" skjermen, vil du se den faktiske SideShift.ai ordren. Denne ordren er gyldig for
ikke har noen ekstra avgifter - hvor kult er ikke det?</p>
<h2>XMR.TO ordre<h2>
<p>På \"Bekreft\" skjermen, vil du se den faktiske XMR.TO ordren. Denne ordren er gyldig for
en begrensa tid - du legger kanskje til en nedtelling på \"Bruk\" knappen. Veklingskursen kan være en begrensa tid - du legger kanskje til en nedtelling på \"Bruk\" knappen. Veklingskursen kan være
enn den veiledende kursen vist på de tidligere skjermene.</p> enn den veiledende kursen vist på de tidligere skjermene.</p>
<h2>XMR.TO hemmelig nøkkel<h2> <h2>SideShift.ai hemmelig nøkkel<h2>
<p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din XMR.TO hemmelige nøkkel <p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din SideShift.ai hemmelige nøkkel
bli brukt til å spore BTC-transaksjonen på XMR.TO sine hjemmesider.</p> bli brukt til å spore BTC-transaksjonen på SideShift.ai sine hjemmesider.</p>
<p>Vær oppmerksom på at denne nøkkelen kun er tilgjengelig for 24-timer etter transaksjonen <h2>SideShift.ai nedtelling!</h2>
har blitt utført!</p> <p>Når nedtellinga når null, må du få en ny kvote fra SideShift.ai ved å gå tilbake til
<h2>XMR.TO nedtelling!</h2>
<p>Når nedtellinga når null, må du få en ny kvote fra XMR.TO ved å gå tilbake til
det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p> det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p>
]]></string> ]]></string>

View File

@ -36,21 +36,21 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Du skrev inn en Bitcoin addresse.</b><br/> <b>Du skrev inn en Bitcoin addresse.</b><br/>
<i>Du vil sende XMR og mottakeren vil få BTC gjennom <b>XMR.TO</b> tjenesten.</i> <i>Du vil sende XMR og mottakeren vil få BTC gjennom <b>SideShift.ai</b> tjenesten.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO Ordre</string> <string name="info_send_xmrto_success_order_label">SideShift.ai Ordre</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Bekreftelse venter</string> <string name="info_send_xmrto_paid">Bekreftelse venter</string>
<string name="info_send_xmrto_unpaid">Betaling venter</string> <string name="info_send_xmrto_unpaid">Betaling venter</string>
<string name="info_send_xmrto_error">XMR.TO error (%1$s)</string> <string name="info_send_xmrto_error">SideShift.ai error (%1$s)</string>
<string name="info_send_xmrto_sent">BTC sendt!</string> <string name="info_send_xmrto_sent">BTC sendt!</string>
<string name="info_send_xmrto_query">Spør &#8230;</string> <string name="info_send_xmrto_query">Spør &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Du kan sende %1$s &#8212; %2$s BTC</b>.<br/> <b>Du kan sende %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> gir deg en vekslingskurs på <b>%3$s BTC</b> <u>akkurat nå</u></i>. <i><b>SideShift.ai</b> gir deg en vekslingskurs på <b>%3$s BTC</b> <u>akkurat nå</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Mengder opp til <b>%1$s BTC</b> vil bli sendt <u>umiddelbart</u>!</i> <i>Mengder opp til <b>%1$s BTC</b> vil bli sendt <u>umiddelbart</u>!</i>
@ -61,25 +61,25 @@
<string name="info_paymentid_integrated">&#x2714; Betalings ID integrert</string> <string name="info_paymentid_integrated">&#x2714; Betalings ID integrert</string>
<string name="info_prepare_tx">Forbereder din transaksjon</string> <string name="info_prepare_tx">Forbereder din transaksjon</string>
<string name="label_send_progress_xmrto_create">Lager XMR.TO ordre</string> <string name="label_send_progress_xmrto_create">Lager SideShift.ai ordre</string>
<string name="label_send_progress_xmrto_query">Spør etter XMR.TO ordre</string> <string name="label_send_progress_xmrto_query">Spør etter SideShift.ai ordre</string>
<string name="label_send_progress_create_tx">Forbereder Monero transaksjon</string> <string name="label_send_progress_create_tx">Forbereder Monero transaksjon</string>
<string name="label_send_progress_queryparms">Spør etter xmr.to parametre</string> <string name="label_send_progress_queryparms">Spør etter SideShift.ai parametre</string>
<string name="label_generic_xmrto_error">XMR.TO ERROR</string> <string name="label_generic_xmrto_error">SideShift.ai ERROR</string>
<string name="text_generic_xmrto_error">Kode: %1$d</string> <string name="text_generic_xmrto_error">Kode: %1$d</string>
<string name="text_retry">Trykk for å prøve igjen</string> <string name="text_retry">Trykk for å prøve igjen</string>
<string name="text_noretry_monero">Nå sitter vi fast her!</string> <string name="text_noretry_monero">Nå sitter vi fast her!</string>
<string name="text_noretry">Ops, det ser ikke ut til at XMR.TO er tilgjengelig for øyeblikket!</string> <string name="text_noretry">Ops, det ser ikke ut til at SideShift.ai er tilgjengelig for øyeblikket!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Rate: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Rate: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Besøk xmr.to for støtte og sporing</string> <string name="label_send_btc_xmrto_info">Besøk SideShift.ai for støtte og sporing</string>
<string name="label_send_btc_xmrto_key_lb">Hemmelig nøkkel\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Hemmelig nøkkel\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO Hemmelig nøkkel</string> <string name="label_send_btc_xmrto_key">SideShift.ai Hemmelig nøkkel</string>
<string name="label_send_btc_address">BTC destinasjonsadresse</string> <string name="label_send_btc_address">BTC destinasjonsadresse</string>
<string name="label_send_btc_amount">Mengde</string> <string name="label_send_btc_amount">Mengde</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">View-nøkkel</string> <string name="label_copy_viewkey">View-nøkkel</string>
<string name="label_copy_address">Offentlig adresse</string> <string name="label_copy_address">Offentlig adresse</string>
<string name="label_copy_xmrtokey">XMR.TO nøkkel</string> <string name="label_copy_xmrtokey">Nøkkel</string>
<string name="message_copy_viewkey">View-nøkkel kopiert til utklippstavle!</string> <string name="message_copy_viewkey">View-nøkkel kopiert til utklippstavle!</string>
<string name="message_copy_xmrtokey">XMR.TO-nøkkel kopiert til utklippstavle!</string> <string name="message_copy_xmrtokey">Nøkkel kopiert til utklippstavle!</string>
<string name="message_copy_address">Lommebokadresse kopiert til utklippstavle!</string> <string name="message_copy_address">Lommebokadresse kopiert til utklippstavle!</string>
<string name="message_copy_txid">Transaksjons-ID kopiert til utklippstavle!</string> <string name="message_copy_txid">Transaksjons-ID kopiert til utklippstavle!</string>
<string name="message_nocopy">Kopiering skrudd av for sikkerhetsgrunner!</string> <string name="message_nocopy">Kopiering skrudd av for sikkerhetsgrunner!</string>
@ -354,12 +354,9 @@
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string> <string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
<string name="label_test">Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Test</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Receiver</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -387,7 +384,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -408,4 +405,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -27,8 +27,8 @@
<p>Verder worden er geen persoonlijke gegevens verzameld door de app.</p> <p>Verder worden er geen persoonlijke gegevens verzameld door de app.</p>
<p>Als je de optionele wisselkoersfunctie gebruikt, haalt monerujo de wisselkoers op via de openbare API van coinmarketcap.com. <p>Als je de optionele wisselkoersfunctie gebruikt, haalt monerujo de wisselkoers op via de openbare API van coinmarketcap.com.
Zie het privacybeleid op https://coinmarketcap.com/privacy voor meer informatie over hoe de gegevens in je aanvragen worden verzameld.</p> Zie het privacybeleid op https://coinmarketcap.com/privacy voor meer informatie over hoe de gegevens in je aanvragen worden verzameld.</p>
<p>Als je de app gebruikt om naar BTC-adressen te betalen, maak je gebruik van de service XMR.TO. <p>Als je de app gebruikt om naar BTC-adressen te betalen, maak je gebruik van de service SideShift.ai.
Zie hun privacybeleid op https://xmr.to/ voor meer informatie. Monerujo verzendt het BTC-adres en -bedrag van de bestemming naar XMR.TO. Je IP-adres kan ook worden bewaard.</p> Zie hun privacybeleid op https://sideshift.ai/ voor meer informatie. Monerujo verzendt het BTC-adres en -bedrag van de bestemming naar SideShift.ai. Je IP-adres kan ook worden bewaard.</p>
<h2>App-machtigingen</h2> <h2>App-machtigingen</h2>
<ul> <ul>
<li>INTERNET: Verbinding maken met het Monero-netwerk via een Monero-node</li> <li>INTERNET: Verbinding maken met het Monero-netwerk via een Monero-node</li>

View File

@ -116,41 +116,36 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>Betalings-ID</h2>
<p>Je kunt een Betalings-ID gebruiken om aan te geven waarom je Monero verzendt. Dit is volledig optioneel en blijft vertrouwelijk tussen beide partijen. Een bedrijf kan bijvoorbeeld jouw transactie koppelen aan een artikel dat je hebt gekocht.<p>
<h1>BTC verzenden</h1> <h1>BTC verzenden</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO is een externe service waarmee je Monero kunt inwisselen voor Bitcoin. <p>SideShift.ai is een externe service waarmee je Monero kunt inwisselen voor Bitcoin.
We gebruiken de API van XMR.TO om Bitcoin-betalingen te integreren in Monerujo. Neem eens een kijkje op https://xmr.to en besluit zelf of je dit wilt gebruiken. Het Monerujo-team is niet verbonden aan XMR.TO en kan je niet helpen met deze service.</p> We gebruiken de API van SideShift.ai om Bitcoin-betalingen te integreren in Monerujo. Neem eens een kijkje op https://sideshift.ai en besluit zelf of je dit wilt gebruiken. Het Monerujo-team is niet verbonden aan SideShift.ai en kan je niet helpen met deze service.</p>
<h2>Wisselkoers XMR.TO<h2> <h2>Wisselkoers SideShift.ai<h2>
<p>Op het scherm \"Bedrag\" worden de huidige waarden voor het gebruik van XMR.TO weergegeven. Hierbij staat de huidige wisselkoers, maar ook het maximale en minimale BTC-bedrag. Houd er rekening mee dat deze koers op dit moment nog niet wordt gegarandeerd. Je ziet hier ook het maximale bedrag waarvoor de BTC-transactie meteen wordt uitgevoerd zonder te wachten op XMR-bevestigingen (zie de FAQ van XMR.TO voor meer informatie). En het mooiste is dat XMR.TO geen extra transactiekosten rekent. Hoe cool is dat?</p> <p>Op het scherm \"Bedrag\" worden de huidige waarden voor het gebruik van SideShift.ai weergegeven. Hierbij staat de huidige wisselkoers, maar ook het maximale en minimale BTC-bedrag. Houd er rekening mee dat deze koers op dit moment nog niet wordt gegarandeerd.</p>
<h2>XMR.TO-opdracht<h2> <h2>SideShift.ai-opdracht<h2>
<p>Op het scherm \"Bevestigen\" wordt de eigenlijke XMR.TO-opdracht weergegeven. Deze opdracht is geldig voor een beperkte tijd. Er wordt afgeteld op de knop \"Uitgeven\". De wisselkoers kan hier anders zijn dan de schatting die op eerdere schermen is weergegeven.</p> <p>Op het scherm \"Bevestigen\" wordt de eigenlijke SideShift.ai-opdracht weergegeven. Deze opdracht is geldig voor een beperkte tijd. Er wordt afgeteld op de knop \"Uitgeven\". De wisselkoers kan hier anders zijn dan de schatting die op eerdere schermen is weergegeven.</p>
<h2>Geheime sleutel XMR.TO<h2> <h2>Geheime sleutel SideShift.ai<h2>
<p>Omdat Monerujo alleen het Monero-gedeelte van je transactie verwerkt, kun je je geheime sleutel voor XMR.TO gebruiken om het Bitcoin-gedeelte van de opdracht te volgen op de XMR.TO-website.</p> <p>Omdat Monerujo alleen het Monero-gedeelte van je transactie verwerkt, kun je je geheime sleutel voor SideShift.ai gebruiken om het Bitcoin-gedeelte van de opdracht te volgen op de SideShift.ai-website.</p>
<p>Houd er rekening mee dat deze geheime sleutel maar 24 uur geldig is nadat de transactie is gestart!</p> <h2>SideShift.ai telt af!</h2>
<h2>XMR.TO telt af!</h2> <p>Als de knop heeft afgeteld naar nul, moet je een nieuw aanbod van SideShift.ai aanvragen. Ga daarvoor terug naar de vorige stap en open het scherm \"Bevestigen\" opnieuw.</p>
<p>Als de knop heeft afgeteld naar nul, moet je een nieuw aanbod van XMR.TO aanvragen. Ga daarvoor terug naar de vorige stap en open het scherm \"Bevestigen\" opnieuw.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>BTC verzenden</h1> <h1>BTC verzenden</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO is een externe service waarmee je Monero kunt inwisselen voor Bitcoin. <p>SideShift.ai is een externe service waarmee je Monero kunt inwisselen voor Bitcoin.
We gebruiken de API van XMR.TO om Bitcoin-betalingen te integreren in Monerujo. Neem eens een kijkje op https://xmr.to en besluit zelf of je dit wilt gebruiken. Het Monerujo-team is niet verbonden aan XMR.TO en kan je niet helpen met deze service.</p> We gebruiken de API van SideShift.ai om Bitcoin-betalingen te integreren in Monerujo. Neem eens een kijkje op https://sideshift.ai en besluit zelf of je dit wilt gebruiken. Het Monerujo-team is niet verbonden aan SideShift.ai en kan je niet helpen met deze service.</p>
<h2>Wisselkoers XMR.TO<h2> <h2>Wisselkoers SideShift.ai<h2>
<p>Op het scherm \"Bedrag\" worden de huidige waarden voor het gebruik van XMR.TO weergegeven. Hierbij staat de huidige wisselkoers, maar ook het maximale en minimale BTC-bedrag. Houd er rekening mee dat deze koers op dit moment nog niet wordt gegarandeerd. Je ziet hier ook het maximale bedrag waarvoor de BTC-transactie meteen wordt uitgevoerd zonder te wachten op XMR-bevestigingen (zie de FAQ van XMR.TO voor meer informatie). En het mooiste is dat XMR.TO geen extra transactiekosten rekent. Hoe cool is dat?</p> <p>Op het scherm \"Bedrag\" worden de huidige waarden voor het gebruik van SideShift.ai weergegeven. Hierbij staat de huidige wisselkoers, maar ook het maximale en minimale BTC-bedrag. Houd er rekening mee dat deze koers op dit moment nog niet wordt gegarandeerd.</p>
<h2>XMR.TO-opdracht<h2> <h2>SideShift.ai-opdracht<h2>
<p>Op het scherm \"Bevestigen\" wordt de eigenlijke XMR.TO-opdracht weergegeven. Deze opdracht is geldig voor een beperkte tijd. Er wordt afgeteld op de knop \"Uitgeven\". De wisselkoers kan hier anders zijn dan de schatting die op eerdere schermen is weergegeven.</p> <p>Op het scherm \"Bevestigen\" wordt de eigenlijke SideShift.ai-opdracht weergegeven. Deze opdracht is geldig voor een beperkte tijd. Er wordt afgeteld op de knop \"Uitgeven\". De wisselkoers kan hier anders zijn dan de schatting die op eerdere schermen is weergegeven.</p>
<h2>Geheime sleutel XMR.TO<h2> <h2>Geheime sleutel SideShift.ai<h2>
<p>Omdat Monerujo alleen het Monero-gedeelte van je transactie verwerkt, kun je je geheime sleutel voor XMR.TO gebruiken om het Bitcoin-gedeelte van de opdracht te volgen op de XMR.TO-website.</p> <p>Omdat Monerujo alleen het Monero-gedeelte van je transactie verwerkt, kun je je geheime sleutel voor SideShift.ai gebruiken om het Bitcoin-gedeelte van de opdracht te volgen op de SideShift.ai-website.</p>
<p>Houd er rekening mee dat deze geheime sleutel maar 24 uur geldig is nadat de transactie is gestart!</p> <h2>SideShift.ai telt af!</h2>
<h2>XMR.TO telt af!</h2> <p>Als de knop heeft afgeteld naar nul, moet je een nieuw aanbod van SideShift.ai aanvragen. Ga daarvoor terug naar de vorige stap en open het scherm \"Bevestigen\" opnieuw.</p>
<p>Als de knop heeft afgeteld naar nul, moet je een nieuw aanbod van XMR.TO aanvragen. Ga daarvoor terug naar de vorige stap en open het scherm \"Bevestigen\" opnieuw.</p>
]]></string> ]]></string>
<string name="help_wallet"><![CDATA[ <string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Je hebt een Bitcoin-adres ingevoerd.</b><br/> <b>Je hebt een Bitcoin-adres ingevoerd.</b><br/>
<i>Je verzendt XMR en de ontvanger krijgt BTC via <b>XMR.TO</b>.</i> <i>Je verzendt XMR en de ontvanger krijgt BTC via <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO-opdracht</string> <string name="info_send_xmrto_success_order_label">SideShift.ai-opdracht</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Wacht op bevestiging</string> <string name="info_send_xmrto_paid">Wacht op bevestiging</string>
<string name="info_send_xmrto_unpaid">Wacht op betaling</string> <string name="info_send_xmrto_unpaid">Wacht op betaling</string>
<string name="info_send_xmrto_error">Fout bij XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Fout bij SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC verzonden!</string> <string name="info_send_xmrto_sent">BTC verzonden!</string>
<string name="info_send_xmrto_query">Aanvragen…</string> <string name="info_send_xmrto_query">Aanvragen…</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Je kunt %1$s &#8212; %2$s BTC verzenden</b>.<br/> <b>Je kunt %1$s &#8212; %2$s BTC verzenden</b>.<br/>
<i><b>XMR.TO</b> biedt <u>nu</u> een wisselkoers van <b>%3$s BTC</b> aan</i>. <i><b>SideShift.ai</b> biedt <u>nu</u> een wisselkoers van <b>%3$s BTC</b> aan</i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Bedragen tot <b>%1$s BTC</b> worden <u>meteen</u> verzonden!</i> <i>Bedragen tot <b>%1$s BTC</b> worden <u>meteen</u> verzonden!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; Betalings-ID geïntegreerd</string> <string name="info_paymentid_integrated">&#x2714; Betalings-ID geïntegreerd</string>
<string name="info_prepare_tx">Transactie wordt voorbereid</string> <string name="info_prepare_tx">Transactie wordt voorbereid</string>
<string name="label_send_progress_xmrto_create">XMR.TO-opdracht maken</string> <string name="label_send_progress_xmrto_create">SideShift.ai-opdracht maken</string>
<string name="label_send_progress_xmrto_query">XMR.TO-opdracht aanvragen</string> <string name="label_send_progress_xmrto_query">SideShift.ai-opdracht aanvragen</string>
<string name="label_send_progress_create_tx">Monero-transactie voorbereiden</string> <string name="label_send_progress_create_tx">Monero-transactie voorbereiden</string>
<string name="label_send_progress_queryparms">XMR.TO-parameters aanvragen</string> <string name="label_send_progress_queryparms">SideShift.ai-parameters aanvragen</string>
<string name="label_generic_xmrto_error">FOUT BIJ XMR.TO</string> <string name="label_generic_xmrto_error">FOUT BIJ SideShift.ai</string>
<string name="text_generic_xmrto_error">Code: %1$d</string> <string name="text_generic_xmrto_error">Code: %1$d</string>
<string name="text_retry">Opnieuw proberen</string> <string name="text_retry">Opnieuw proberen</string>
<string name="text_noretry_monero">Nu zitten we vast…</string> <string name="text_noretry_monero">Nu zitten we vast…</string>
<string name="text_noretry">Oeps, XMR.TO is op dit moment niet beschikbaar.</string> <string name="text_noretry">Oeps, SideShift.ai is op dit moment niet beschikbaar.</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Koers: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Koers: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Ga naar xmr.to voor hulp en traceren</string> <string name="label_send_btc_xmrto_info">Ga naar SideShift.ai voor hulp en traceren</string>
<string name="label_send_btc_xmrto_key_lb">Geheime sleutel\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Geheime sleutel\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Geheime sleutel XMR.TO</string> <string name="label_send_btc_xmrto_key">Geheime sleutel SideShift.ai</string>
<string name="label_send_btc_address">BTC-doeladres</string> <string name="label_send_btc_address">BTC-doeladres</string>
<string name="label_send_btc_amount">Bedrag</string> <string name="label_send_btc_amount">Bedrag</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Alleen-lezen sleutel</string> <string name="label_copy_viewkey">Alleen-lezen sleutel</string>
<string name="label_copy_address">Openbaar adres</string> <string name="label_copy_address">Openbaar adres</string>
<string name="label_copy_xmrtokey">Sleutel XMR.TO</string> <string name="label_copy_xmrtokey">Sleutel</string>
<string name="message_copy_viewkey">Alleen-lezen sleutel gekopieerd naar klembord!</string> <string name="message_copy_viewkey">Alleen-lezen sleutel gekopieerd naar klembord!</string>
<string name="message_copy_xmrtokey">Sleutel XMR.TO gekopieerd naar klembord!</string> <string name="message_copy_xmrtokey">Sleutel gekopieerd naar klembord!</string>
<string name="message_copy_address">Portemonnee-adres gekopieerd naar klembord!</string> <string name="message_copy_address">Portemonnee-adres gekopieerd naar klembord!</string>
<string name="message_copy_txid">Transactie-ID gekopieerd naar klembord!</string> <string name="message_copy_txid">Transactie-ID gekopieerd naar klembord!</string>
<string name="message_nocopy">Kopiëren uitgeschakeld voor de veiligheid!</string> <string name="message_nocopy">Kopiëren uitgeschakeld voor de veiligheid!</string>
@ -353,13 +353,10 @@
<string name="backup_success">Backup successful</string> <string name="backup_success">Backup successful</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Ontvanger</string> <string name="send_address_hint">Ontvanger</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -387,7 +384,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -408,4 +405,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -35,7 +35,7 @@
detalhes de como as requisições são coletadas. detalhes de como as requisições são coletadas.
</p> </p>
<p>Se você usar nosso aplicativo para fazer pagamentos em BTC, você estará <p>Se você usar nosso aplicativo para fazer pagamentos em BTC, você estará
usando o serviço XMR.TO. Verifique sua política de privacidade em https://xmr.to/ usando o serviço SideShift.ai. Verifique sua política de privacidade em https://sideshift.ai/
para detalhes. O monerujo envia o endereço de destino e valor ao serviço. Seu para detalhes. O monerujo envia o endereço de destino e valor ao serviço. Seu
IP também pode ser coletado. IP também pode ser coletado.
<h2>Permissões do aplicativo</h2> <h2>Permissões do aplicativo</h2>

View File

@ -158,63 +158,52 @@
<ul> <ul>
<li>um OpenAlias para XMR ou BTC</li> <li>um OpenAlias para XMR ou BTC</li>
<li>um endereço BTC</li> <li>um endereço BTC</li>
<li>um URI bitcoin: (incluindo o BIP70 usado em serviços como o bitpay)</li>
</u> </u>
Observe que o envio de BTC é processado pelo serviço XMR.TO (veja https://xmr.to para detalhes). Observe que o envio de BTC é processado pelo serviço SideShift.ai (veja https://sideshift.ai para detalhes).
Consulte a seção sobre envio de BTC abaixo.</p> Consulte a seção sobre envio de BTC abaixo.</p>
<h2>ID do Pagamento</h2>
<p>Você pode usar o ID do Pagamento para identificar a razão pela qual você transacionou com a contraparte.
Essa opção é opcional e privada. Por exemplo, lojistas podem reconciliar o seu pagamento com
o produto que você comprou.</p>
<h1>Enviando BTC</h1> <h1>Enviando BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin. <p>SideShift.ai é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin.
Nós usamos a API do XMR.TO para integrar pagamentos em Bitcoin direto na carteira Monerujo. Consulte https://xmr.to Nós usamos a API do SideShift.ai para integrar pagamentos em Bitcoin direto na carteira Monerujo. Consulte https://sideshift.ai
e decide por sua própria conta se este é um serviço que você quer usar. A equipe Monerujo não está associada com o XMR.TO e decide por sua própria conta se este é um serviço que você quer usar. A equipe Monerujo não está associada com o SideShift.ai
e não podemos ajudá-lo caso algo não funcione no serviço.</p> e não podemos ajudá-lo caso algo não funcione no serviço.</p>
<h2>Cotação XMR.TO<h2> <h2>Cotação SideShift.ai<h2>
<p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do XMR.TO. <p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do SideShift.ai.
Nos quais estão incluídos a cotação, assim como os limites máximos e mínimos de envio de BTC. Nos quais estão incluídos a cotação, assim como os limites máximos e mínimos de envio de BTC.
Note que nesse momento a cotação ainda não é garantida. Você também verá o valor máximo no qual Note que nesse momento a cotação ainda não é garantida.</p>
a transação será executada de forma instantânea, sem esperar alguma confirmação da transação em XMR. <h2>Ordem SideShift.ai<h2>
(consulte o FAQ do XMR.TO para mais detalhes). O XMR.TO não cobra taxas extras, legal né?</p> <p>Na tela de confirmação você verá a ordem criada no SideShift.ai. A ordem é válida somente por
<h2>Ordem XMR.TO<h2>
<p>Na tela de confirmação você verá a ordem criada no XMR.TO. A ordem é válida somente por
um período limitado - você pode observar uma contagem regressiva no botão de confirmação. A cotação pode um período limitado - você pode observar uma contagem regressiva no botão de confirmação. A cotação pode
ser diferente do que estava indicado na tela anterior.</p> ser diferente do que estava indicado na tela anterior.</p>
<h2>Chave secreta do XMR.TO<h2> <h2>Chave secreta do SideShift.ai<h2>
<p>Como o Monerujo somente lida com a parte da transação que é em Monero, você pode usar sua chave secreta do <p>Como o Monerujo somente lida com a parte da transação que é em Monero, você pode usar sua chave secreta do
XMR.TO para rastrear a parte da transação que é em Bitcoin no website do XMR.TO.</p> SideShift.ai para rastrear a parte da transação que é em Bitcoin no website do SideShift.ai.</p>
<p>Lembre-se que essa chave secreta só é válida por 24 horas depois do início da transação!</p> <h2>Contagem regressiva do SideShift.ai</h2>
<h2>Contagem regressiva do XMR.TO</h2> <p>Quando o contador chega a zero será preciso iniciar uma nova ordem e solicitar uma nova cotação ao SideShift.ai. Volte para a tela
<p>Quando o contador chega a zero será preciso iniciar uma nova ordem e solicitar uma nova cotação ao XMR.TO. Volte para a tela
anterior e faça o processo novamente.</p> anterior e faça o processo novamente.</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Enviando BTC</h1> <h1>Enviando BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin. <p>SideShift.ai é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin.
Nós usamos a API do XMR.TO para integrar pagamentos em Bitcoin direto na carteira Monerujo. Consulte https://xmr.to Nós usamos a API do SideShift.ai para integrar pagamentos em Bitcoin direto na carteira Monerujo. Consulte https://sideshift.ai
e decida por sua própria conta se este é um serviço que você quer usar. A equipe Monerujo não está associada com o XMR.TO e decide por sua própria conta se este é um serviço que você quer usar. A equipe Monerujo não está associada com o SideShift.ai
e não podemos ajudá-lo caso algo não funcione no serviço.</p> e não podemos ajudá-lo caso algo não funcione no serviço.</p>
<h2>Cotação XMR.TO<h2> <h2>Cotação SideShift.ai<h2>
<p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do XMR.TO. <p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do SideShift.ai.
Nos quais estão incluídos a cotação, assim como os limites máximos e mínimos de envio de BTC. Nos quais estão incluídos a cotação, assim como os limites máximos e mínimos de envio de BTC.
Note que nesse momento a cotação ainda não é garantida. Você também verá o valor máximo no qual Note que nesse momento a cotação ainda não é garantida.</p>
a transação será executada de forma instantânea, sem esperar alguma confirmação da transação em XMR. <h2>Ordem SideShift.ai<h2>
(consulte o FAQ do XMR.TO para mais detalhes). O XMR.TO não cobra taxas extras, legal né?</p> <p>Na tela de confirmação você verá a ordem criada no SideShift.ai. A ordem é válida somente por
<h2>Ordem XMR.TO<h2> um período limitado - você pode observar uma contagem regressiva no botão de confirmação. A cotação pode
<p>Na tela de confirmação você verá a ordem criada no XMR.TO. A ordem é válida somente por ser diferente do que estava indicado na tela anterior.</p>
um período limitado - você pode observar uma contagem regressiva no botão de confirmação. A cotação pode <h2>Chave secreta do SideShift.ai<h2>
ser diferente do que estava indicado na tela anterior.</p> <p>Como o Monerujo somente lida com a parte da transação que é em Monero, você pode usar sua chave secreta do
<h2>Chave secreta do XMR.TO<h2> SideShift.ai para rastrear a parte da transação que é em Bitcoin no website do SideShift.ai.</p>
<p>Como o Monerujo somente lida com a parte da transação que é em Monero, você pode usar sua chave secreta do <h2>Contagem regressiva do SideShift.ai</h2>
XMR.TO para rastrear a parte da transação que é em Bitcoin no website do XMR.TO.</p> <p>Quando o contador chega a zero será preciso iniciar uma nova ordem e solicitar uma nova cotação ao SideShift.ai. Volte para a tela
<p>Lembre-se que essa chave secreta só é válida por 24 horas depois do início da transação!</p> anterior e faça o processo novamente.</p>
<h2>Contagem regressiva do XMR.TO</h2>
<p>Quando o contador chega a zero será preciso iniciar uma nova ordem e solicitar uma nova cotação ao XMR.TO. Volte para a tela
anterior e faça o processo novamente.</p>
]]></string> ]]></string>
<string name="help_wallet"><![CDATA[ <string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Você colocou um endereço Bitcoin.</b><br/> <b>Você colocou um endereço Bitcoin.</b><br/>
<i>Você enviará XMR e o destinatário receberá BTC via o serviço <b>XMR.TO</b></i> <i>Você enviará XMR e o destinatário receberá BTC via o serviço <b>SideShift.ai</b></i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Ordem no XMR.TO</string> <string name="info_send_xmrto_success_order_label">Ordem no SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Confirmação Pendente</string> <string name="info_send_xmrto_paid">Confirmação Pendente</string>
<string name="info_send_xmrto_unpaid">Pagamento Pendente</string> <string name="info_send_xmrto_unpaid">Pagamento Pendente</string>
<string name="info_send_xmrto_error">Erro XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Erro SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Enviado!</string> <string name="info_send_xmrto_sent">BTC Enviado!</string>
<string name="info_send_xmrto_query">Consultando &#8230;</string> <string name="info_send_xmrto_query">Consultando &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Você pode enviar %1$s &#8212; %2$s BTC</b>.<br/> <b>Você pode enviar %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> enviou a cotação de <b>%3$s BTC</b> <u>neste momento</u></i>. <i><b>SideShift.ai</b> enviou a cotação de <b>%3$s BTC</b> <u>neste momento</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Quantias até <b>%1$s BTC</b> serão enviadas <u>instantaneamente</u>!</i> <i>Quantias até <b>%1$s BTC</b> serão enviadas <u>instantaneamente</u>!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; ID do pagamento integrado</string> <string name="info_paymentid_integrated">&#x2714; ID do pagamento integrado</string>
<string name="info_prepare_tx">Preparando sua transação</string> <string name="info_prepare_tx">Preparando sua transação</string>
<string name="label_send_progress_xmrto_create">Criando a ordem no XMR.TO</string> <string name="label_send_progress_xmrto_create">Criando a ordem no SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Atualizando a ordem no XMR.TO</string> <string name="label_send_progress_xmrto_query">Atualizando a ordem no SideShift.ai</string>
<string name="label_send_progress_create_tx">Preparando a transação em Monero</string> <string name="label_send_progress_create_tx">Preparando a transação em Monero</string>
<string name="label_send_progress_queryparms">Consultando os parâmetros no XMR.TO</string> <string name="label_send_progress_queryparms">Consultando os parâmetros no SideShift.ai</string>
<string name="label_generic_xmrto_error">ERRO XMR.TO</string> <string name="label_generic_xmrto_error">ERRO SideShift.ai</string>
<string name="text_generic_xmrto_error">Código: %1$d</string> <string name="text_generic_xmrto_error">Código: %1$d</string>
<string name="text_retry">Toque aqui para tentar novamente</string> <string name="text_retry">Toque aqui para tentar novamente</string>
<string name="text_noretry_monero">Opa, estamos travados aqui!</string> <string name="text_noretry_monero">Opa, estamos travados aqui!</string>
<string name="text_noretry">Hm, parece que o XMR.TO não está disponível no momento</string> <string name="text_noretry">Hm, parece que o SideShift.ai não está disponível no momento</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Cotação: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Cotação: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Visite o XMR.TO para suporte &amp; rastreio da ordem</string> <string name="label_send_btc_xmrto_info">Visite o SideShift.ai para suporte &amp; rastreio da ordem</string>
<string name="label_send_btc_xmrto_key_lb">Chave secreta\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Chave secreta\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Chave secreta XMR.TO</string> <string name="label_send_btc_xmrto_key">Chave secreta SideShift.ai</string>
<string name="label_send_btc_address">Endereço BTC de destino</string> <string name="label_send_btc_address">Endereço BTC de destino</string>
<string name="label_send_btc_amount">Valor</string> <string name="label_send_btc_amount">Valor</string>
@ -152,9 +152,9 @@
<string name="label_copy_viewkey">Chave de visualização</string> <string name="label_copy_viewkey">Chave de visualização</string>
<string name="label_copy_address">Endereço público</string> <string name="label_copy_address">Endereço público</string>
<string name="label_copy_xmrtokey">Chave XMR.TO</string> <string name="label_copy_xmrtokey">Chave</string>
<string name="message_copy_viewkey">Chave de visualização copiada para a área de transferência!</string> <string name="message_copy_viewkey">Chave de visualização copiada para a área de transferência!</string>
<string name="message_copy_xmrtokey">Chave XMR.TO copiada para a área de transferência!</string> <string name="message_copy_xmrtokey">Chave copiada para a área de transferência!</string>
<string name="message_copy_address">Endereço da carteira copiado para a área de transferência!</string> <string name="message_copy_address">Endereço da carteira copiado para a área de transferência!</string>
<string name="message_copy_txid">ID da transação copiado para a área de transferência!</string> <string name="message_copy_txid">ID da transação copiado para a área de transferência!</string>
<string name="message_nocopy">Copiar está desativado por razões de segurança!</string> <string name="message_nocopy">Copiar está desativado por razões de segurança!</string>
@ -346,12 +346,9 @@
<string name="backup_success">Backup feito com successo</string> <string name="backup_success">Backup feito com successo</string>
<string name="send_address_resolve_bip70">Resolvendo URI do Pagamento&#8230;</string>
<string name="send_address_not_bip70">Não foi possível resolver o URI do pagamento</string>
<string name="send_address_bip70">URI do Pagamento resolvido &#x2714;</string>
<string name="send_address_hint">Destinatário</string> <string name="send_address_hint">Destinatário</string>
<string name="xmrto_error_001">XMR.TO offline - tente novamente mais tarde</string> <string name="xmrto_error_001">SideShift.ai offline - tente novamente mais tarde</string>
<string name="xmrto_error_004">Valor BTC fora dos limites</string> <string name="xmrto_error_004">Valor BTC fora dos limites</string>
<string name="xmrto_error_010">URL de pagamento inválido</string> <string name="xmrto_error_010">URL de pagamento inválido</string>
<string name="xmrto_error_012">Solicitações em excesso</string> <string name="xmrto_error_012">Solicitações em excesso</string>
@ -379,7 +376,7 @@
<string name="onboarding_seed_title">Mantenha sua semente em segurança</string> <string name="onboarding_seed_title">Mantenha sua semente em segurança</string>
<string name="onboarding_seed_information">A semente dá acesso total a qualquer pessoa que a tenha. Se você perdê-la, nós não conseguiremos lhe ajudar a recuperá-la e você perderá seus amados moneroj.</string> <string name="onboarding_seed_information">A semente dá acesso total a qualquer pessoa que a tenha. Se você perdê-la, nós não conseguiremos lhe ajudar a recuperá-la e você perderá seus amados moneroj.</string>
<string name="onboarding_xmrto_title">Enviar Bitcoin</string> <string name="onboarding_xmrto_title">Enviar Bitcoin</string>
<string name="onboarding_xmrto_information">A Monerujo possui o XMR.to integrado. Basta colar ou escaner um endereço Bitcoin e você estará enviando BTC, mas gastando em XMR.</string> <string name="onboarding_xmrto_information">A Monerujo possui o SideShift.ai integrado. Basta colar ou escaner um endereço Bitcoin e você estará enviando BTC, mas gastando em XMR.</string>
<string name="onboarding_nodes_title">"Nós", do seu jeito</string> <string name="onboarding_nodes_title">"Nós", do seu jeito</string>
<string name="onboarding_nodes_information">Os nós conectam você à rede Monero. Escolha entre nós públicos ou seja completamente "cypherpunk" e utilize seu próprio nó.</string> <string name="onboarding_nodes_information">Os nós conectam você à rede Monero. Escolha entre nós públicos ou seja completamente "cypherpunk" e utilize seu próprio nó.</string>
<string name="onboarding_fpsend_title">Enviar usando a digital</string> <string name="onboarding_fpsend_title">Enviar usando a digital</string>
@ -400,4 +397,7 @@
<string name="node_updated_mins">Último Bloco: %1$d minutos atrás</string> <string name="node_updated_mins">Último Bloco: %1$d minutos atrás</string>
<string name="node_updated_hours">Último Bloco: %1$d horas atrás</string> <string name="node_updated_hours">Último Bloco: %1$d horas atrás</string>
<string name="node_updated_days">Último Bloco: %1$d dias atrás</string> <string name="node_updated_days">Último Bloco: %1$d dias atrás</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -35,8 +35,8 @@
Confirme a política de privacidade deste serviço em https://www.kraken.com/legal/privacy para Confirme a política de privacidade deste serviço em https://www.kraken.com/legal/privacy para
mais detalhes em como estes pedidos são processados (especialmente a mais detalhes em como estes pedidos são processados (especialmente a
secção "Informação que recolhemos automaticament").</p> secção "Informação que recolhemos automaticament").</p>
<p>Se utilizar esta app para pagar em BTC, você estará a utilizar o serviço XMR.TO. <p>Se utilizar esta app para pagar em BTC, você estará a utilizar o serviço SideShift.ai.
Veja a sua política de privacidade em https://xmr.to/ para mais detalhes. O monerujo envia Veja a sua política de privacidade em https://sideshift.ai/ para mais detalhes. O monerujo envia
para este serviço a quantidade e o endereço de destino das BTC. O seu IP vai ser registado.</p> para este serviço a quantidade e o endereço de destino das BTC. O seu IP vai ser registado.</p>
<h2>Permissões da app</h2> <h2>Permissões da app</h2>
<ul> <ul>

View File

@ -145,70 +145,55 @@
<ul> <ul>
<li>Um OpenAlias para XMR ou BTC</li> <li>Um OpenAlias para XMR ou BTC</li>
<li>um endereço de BTC</li> <li>um endereço de BTC</li>
<li>um enderço bitcoin: URI (incluindo BIP70 tipo bitpay)</li>
</u> </u>
Não deixar de notar que, enviar BTC é processado através do serviço XMR.TO (ver https://xmr.to Não deixar de notar que, enviar BTC é processado através do serviço SideShift.ai (ver https://sideshift.ai
para detalhes). Ver a secção enviar BTC.</p> para detalhes). Ver a secção enviar BTC.</p>
<h2>ID do Pagamento</h2>
<p>Utiliza-se o ID do Pagamento para identificar a razão porque foram transaccionados Moneroj.
Isto é opcional e privado. Por exemplo, isto permite que um negócio identifique que item
é que uma determinada transacção está a pagar.</p>
<h1>Enviar BTC</h1> <h1>Enviar BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin. <p>SideShift.ai é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin.
Nós utilizamos a API do XMR.TO para integrar pagamentos de Bitcoin no Monerujo. Por favor Nós utilizamos a API do SideShift.ai para integrar pagamentos de Bitcoin no Monerujo. Por favor
vai a https://xmr.to e decide por ti próprio se queres utilizar este serviço. A equipa vai a https://sideshift.ai e decide por ti próprio se queres utilizar este serviço. A equipa
do Monerujo não está associada com o XMR.TO e não te pode ajudar com este serviço.</p> do Monerujo não está associada com o SideShift.ai e não te pode ajudar com este serviço.</p>
<h2>Taxa de câmbio XMR.TO<h2> <h2>Taxa de câmbio SideShift.ai<h2>
<p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço XMR.TO. Estes <p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço SideShift.ai. Estes
incluem a taxa de câmbio assim como os limites superiores e inferiores em BTC. Nota que incluem a taxa de câmbio assim como os limites superiores e inferiores em BTC. Nota que
esta taxa ainda não é garantido. Também vais ver a quantidade máxima de BTC para que esta taxa ainda não é garantido.</p>
a transação seja executada instantaneamente sem ter que esperar pelas confirmações XMR <h2>Pedido SideShift.ai<h2>
(ver o FAQ do XMR.TO para mais detalhes). Nota que o XMR.TO não cobra nenhumas taxas <p>No ecrão de \"Confirmação\", vais ver o pedido actual SideShift.ai. Este pedido é válido
extra - isto não é brutal?</p>
<h2>Pedido XMR.TO<h2>
<p>No ecrão de \"Confirmação\", vais ver o pedido actual XMR.TO. Este pedido é válido
por um período limitado de tempo - podes reparar que exite uma contagem decrescente no por um período limitado de tempo - podes reparar que exite uma contagem decrescente no
botão de \"Enviar\". A taxa de câmbio pode ser diferente da taxa indicativa mostrada botão de \"Enviar\". A taxa de câmbio pode ser diferente da taxa indicativa mostrada
nos ecrãs anteriores.</p> nos ecrãs anteriores.</p>
<h2>Chave Secreta XMR.TO<h2> <h2>Chave Secreta SideShift.ai<h2>
<p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta XMR.TO <p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta SideShift.ai
pode ser utilizada para monitorar a parte Bitcoin da transacção na página pricipal do pode ser utilizada para monitorar a parte Bitcoin da transacção na página pricipal do
XMR.TO.</p> SideShift.ai.</p>
<p>Nota que esta chave secreta só é válida por 24 horas depois de a transacção ter <h2>Contagem decrescente SideShift.ai!</h2>
iniciado!</p> <p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do SideShift.ai
<h2>Contagem decrescente XMR.TO!</h2>
<p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do XMR.TO
indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p> indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Enviar BTC</h1> <h1>Enviar BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin. <p>SideShift.ai é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin.
Nós utilizamos a API do XMR.TO para integrar pagamentos de Bitcoin no Monerujo. Por favor Nós utilizamos a API do SideShift.ai para integrar pagamentos de Bitcoin no Monerujo. Por favor
vai a https://xmr.to e decide por ti próprio se queres utilizar este serviço. A equipa vai a https://sideshift.ai e decide por ti próprio se queres utilizar este serviço. A equipa
do Monerujo não está associada com o XMR.TO e não te pode ajudar com este serviço.</p> do Monerujo não está associada com o SideShift.ai e não te pode ajudar com este serviço.</p>
<h2>Taxa de câmbio XMR.TO<h2> <h2>Taxa de câmbio SideShift.ai<h2>
<p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço XMR.TO. Estes <p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço SideShift.ai. Estes
incluem a taxa de câmbio assim como os limites superiores e inferiores em BTC. Nota que incluem a taxa de câmbio assim como os limites superiores e inferiores em BTC. Nota que
este taxa ainda não é garantido. Também vais ver a quantidade máxima de BTC para que esta taxa ainda não é garantido.</p>
a transação seja executada instantaneamente sem ter que esperar pelas confirmações XMR <h2>Pedido SideShift.ai<h2>
(ver o FAQ do XMR.TO para mais detalhes). Nota que o XMR.TO não cobra nenhumas taxas <p>No ecrão de \"Confirmação\", vais ver o pedido actual SideShift.ai. Este pedido é válido
extra - isto não é brutal?</p>
<h2>Pedido XMR.TO<h2>
<p>No ecrão de \"Confirmação\", vais ver o pedido actual XMR.TO. Este pedido é válido
por um período limitado de tempo - podes reparar que exite uma contagem decrescente no por um período limitado de tempo - podes reparar que exite uma contagem decrescente no
botão de \"Enviar\". A taxa de câmbio pode ser diferente da taxa indicativa mostrada botão de \"Enviar\". A taxa de câmbio pode ser diferente da taxa indicativa mostrada
nos ecrãs anteriores.</p> nos ecrãs anteriores.</p>
<h2>Chave Secreta XMR.TO<h2> <h2>Chave Secreta SideShift.ai<h2>
<p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta XMR.TO <p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta SideShift.ai
pode ser utilizada para monitorar a parte Bitcoin da transacção na página pricipal do pode ser utilizada para monitorar a parte Bitcoin da transacção na página pricipal do
XMR.TO.</p> SideShift.ai.</p>
<p>Nota que esta chave secreta só é válida por 24 horas depois de a transacção ter <h2>Contagem decrescente SideShift.ai!</h2>
iniciado!</p> <p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do SideShift.ai
<h2>Contagem decrescente XMR.TO!</h2>
<p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do XMR.TO
indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p> indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p>
]]></string> ]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Introduziu um endereço Bitcoin.</b><br/> <b>Introduziu um endereço Bitcoin.</b><br/>
<i>Vai enviar em XMR e o destinatário vai receber BTC através do serviço <b>XMR.TO</b></i> <i>Vai enviar em XMR e o destinatário vai receber BTC através do serviço <b>SideShift.ai</b></i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">XMR.TO Order</string> <string name="info_send_xmrto_success_order_label">SideShift.ai Order</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Confirmação Pendente</string> <string name="info_send_xmrto_paid">Confirmação Pendente</string>
<string name="info_send_xmrto_unpaid">Pagamento Pendente</string> <string name="info_send_xmrto_unpaid">Pagamento Pendente</string>
<string name="info_send_xmrto_error">Erro XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Erro SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC Enviadas!</string> <string name="info_send_xmrto_sent">BTC Enviadas!</string>
<string name="info_send_xmrto_query">A comunicar &#8230;</string> <string name="info_send_xmrto_query">A comunicar &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Pode enviar %1$s &#8212; %2$s BTC</b>.<br/> <b>Pode enviar %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> está com uma taxa de conversão de <b>%3$s BTC</b> <u>neste momento</u></i>. <i><b>SideShift.ai</b> está com uma taxa de conversão de <b>%3$s BTC</b> <u>neste momento</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Quantidades até <b>%1$s BTC</b> serão enviadas <u>instantaneament</u>!</i> <i>Quantidades até <b>%1$s BTC</b> serão enviadas <u>instantaneament</u>!</i>
@ -62,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; ID do pagamento integrado</string> <string name="info_paymentid_integrated">&#x2714; ID do pagamento integrado</string>
<string name="info_prepare_tx">A preparar a transacção</string> <string name="info_prepare_tx">A preparar a transacção</string>
<string name="label_send_progress_xmrto_create">A criar um pedido XMR.TO</string> <string name="label_send_progress_xmrto_create">A criar um pedido SideShift.ai</string>
<string name="label_send_progress_xmrto_query">A actualizar o pedido XMR.TO</string> <string name="label_send_progress_xmrto_query">A actualizar o pedido SideShift.ai</string>
<string name="label_send_progress_create_tx">A preparar a transacção Monero</string> <string name="label_send_progress_create_tx">A preparar a transacção Monero</string>
<string name="label_send_progress_queryparms">A obter os parâmetros xmr.to</string> <string name="label_send_progress_queryparms">A obter os parâmetros SideShift.ai</string>
<string name="label_generic_xmrto_error">ERRO XMR.TO</string> <string name="label_generic_xmrto_error">ERRO SideShift.ai</string>
<string name="text_generic_xmrto_error">Código: %1$d</string> <string name="text_generic_xmrto_error">Código: %1$d</string>
<string name="text_retry">Toca para voltar a tentar</string> <string name="text_retry">Toca para voltar a tentar</string>
<string name="text_noretry_monero">Agora estamos emperrados aqui!</string> <string name="text_noretry_monero">Agora estamos emperrados aqui!</string>
<string name="text_noretry">Ups, XMR.TO não parece estar disponível neste momento!</string> <string name="text_noretry">Ups, SideShift.ai não parece estar disponível neste momento!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Rácio: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Rácio: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Vai a xmr.to para suporte &amp; seguimento</string> <string name="label_send_btc_xmrto_info">Vai a SideShift.ai para suporte &amp; seguimento</string>
<string name="label_send_btc_xmrto_key_lb">Chave secreta\nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Chave secreta\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">XMR.TO Chave secreta</string> <string name="label_send_btc_xmrto_key">SideShift.ai Chave secreta</string>
<string name="label_send_btc_address">Endereço BTC de destino</string> <string name="label_send_btc_address">Endereço BTC de destino</string>
<string name="label_send_btc_amount">Quantidade</string> <string name="label_send_btc_amount">Quantidade</string>
@ -149,9 +149,9 @@
<string name="label_copy_viewkey">Ver chave</string> <string name="label_copy_viewkey">Ver chave</string>
<string name="label_copy_address">Endereço público</string> <string name="label_copy_address">Endereço público</string>
<string name="label_copy_xmrtokey">Chave XMR.TO</string> <string name="label_copy_xmrtokey">Chave</string>
<string name="message_copy_viewkey">Chave de visualização copiada para a área de transferência</string> <string name="message_copy_viewkey">Chave de visualização copiada para a área de transferência</string>
<string name="message_copy_xmrtokey">Chave XMR.TO copiada para a área de transferência!</string> <string name="message_copy_xmrtokey">Chave copiada para a área de transferência!</string>
<string name="message_copy_address">Endereço da carteira copiado para a área de transferência!</string> <string name="message_copy_address">Endereço da carteira copiado para a área de transferência!</string>
<string name="message_copy_txid">ID da transacção copiado para a área de transferência!</string> <string name="message_copy_txid">ID da transacção copiado para a área de transferência!</string>
<string name="message_nocopy">Copiar está desactivo por razões de segurança!</string> <string name="message_nocopy">Copiar está desactivo por razões de segurança!</string>
@ -358,12 +358,9 @@
<string name="backup_success">Backup bem sucedido</string> <string name="backup_success">Backup bem sucedido</string>
<string name="send_address_resolve_bip70">A resolver URI&#8230; de pagamento</string>
<string name="send_address_not_bip70">Não foi possivel resolver URI de pagamento</string>
<string name="send_address_bip70">Pagemento URI &#x2714; resolvido</string>
<string name="send_address_hint">Receptor</string> <string name="send_address_hint">Receptor</string>
<string name="xmrto_error_001">XMR.TO offline - tenta mais tarde</string> <string name="xmrto_error_001">SideShift.ai offline - tenta mais tarde</string>
<string name="xmrto_error_004">Montante de BTC fora dos limites</string> <string name="xmrto_error_004">Montante de BTC fora dos limites</string>
<string name="xmrto_error_010">URL de pagamento invalido ou fora de prazo</string> <string name="xmrto_error_010">URL de pagamento invalido ou fora de prazo</string>
<string name="xmrto_error_012">Demasiadas solicitações</string> <string name="xmrto_error_012">Demasiadas solicitações</string>
@ -391,7 +388,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -412,4 +409,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -35,8 +35,8 @@
Vizualizează politica de confidențialitate la adresa https://www.kraken.com/legal/privacy pentru a vedea Vizualizează politica de confidențialitate la adresa https://www.kraken.com/legal/privacy pentru a vedea
cum este procesată informația (În special secțiunea "Information We Collect Automatically").</p> cum este procesată informația (În special secțiunea "Information We Collect Automatically").</p>
<p>În cazul in care folosești aplicația pentru a face o plată către o adresă de portofel BTC, <p>În cazul in care folosești aplicația pentru a face o plată către o adresă de portofel BTC,
vei folosi serviciul oferit de XMR.TO. vei folosi serviciul oferit de SideShift.ai.
Vizualizează politica lor de confidențialitate la adresa https://xmr.to/ pentru detalii. Monerujo le va trimite lor Vizualizează politica lor de confidențialitate la adresa https://sideshift.ai/ pentru detalii. Monerujo le va trimite lor
adresa de destinație și suma BTC. Adresa ta de IP poate fi colectată.</p> adresa de destinație și suma BTC. Adresa ta de IP poate fi colectată.</p>
<h2>Permisiunile aplicației</h2> <h2>Permisiunile aplicației</h2>
<ul> <ul>

View File

@ -137,62 +137,51 @@
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li> <li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Please note, that sending BTC is processed through the SideShift.ai service (see https://sideshift.ai
for details). See the section on sending BTC below.</p> for details). See the section on sending BTC below.</p>
<h2>Payment ID</h2>
<p>Poți utiliza un ID de plată pentru a identifica suma trimisă între două terțe, acest lucru
este complet opțional și privat. Ca exemplu, poate permite identificare într-o activitate comercială
pentru a reconcilia pentru un produs pe care l-ați achiziționat.<p>
<h1>Transferul de BTC</h1> <h1>Transferul de BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin. <p>SideShift.ai este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin.
Noi folosim API-ul XMR.TO pentru a integra plățile Bitcoin în Monerujo. Verifică Noi folosim API-ul SideShift.ai pentru a integra plățile Bitcoin în Monerujo. Verifică
https://xmr.to and și decide singur dacă este un serviciu pe care dorești să îl folosești. Echipa Monerujo https://sideshift.ai and și decide singur dacă este un serviciu pe care dorești să îl folosești. Echipa Monerujo
nu este asociată în niciun fel cu XMR.TO și nu te poate ajuta cu serviciile oferite de ei.</p> nu este asociată în niciun fel cu SideShift.ai și nu te poate ajuta cu serviciile oferite de ei.</p>
<h2>Rata de schimb al XMR.TO<h2> <h2>Rata de schimb al SideShift.ai<h2>
<p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului XMR.TO. Aceștia includ cursul de <p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului SideShift.ai. Aceștia includ cursul de
schimb actual precum și limitele superioare și inferioare ale BTC. Reține că aceste rate de schimb schimb actual precum și limitele superioare și inferioare ale BTC. Reține că aceste rate de schimb
nu sunt garantate în acest moment. Vei vedea, de asemenea, suma până la care tranzacția BTC va fi nu sunt garantate în acest moment.</p>
executată instantaneu fără a aștepta confirmarea XMR (verifică FAQ-ul XMR.TO pentru detalii). Notează că, XMR.TO <h2>Dispoziție SideShift.ai<h2>
nu percepe comisioane extra - nu e așa că este cool?</p> <p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a SideShift.ai. Această comandă este valabilă pentru
<h2>Dispoziție XMR.TO<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a XMR.TO. Această comandă este valabilă pentru
un timp limitat - este posibil să observi o numărătoare inversă pe butonul \"Consum\". Rata de schimb poate un timp limitat - este posibil să observi o numărătoare inversă pe butonul \"Consum\". Rata de schimb poate
fi diferită de cea indicată pe ecranele anterioare.</p> fi diferită de cea indicată pe ecranele anterioare.</p>
<h2>Cheia secretă XMR.TO<h2> <h2>Cheia secretă SideShift.ai<h2>
<p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a XMR.TO <p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a SideShift.ai
poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul XMR.TO.</p> poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul SideShift.ai.</p>
<p>Te rog notează, că această cheie secretă este validă doar pentru 24 ore din momentul începerii tranzacției!</p> <h2>Numerotarea inversă SideShift.ai</h2>
<h2>Numerotarea inversă XMR.TO</h2> <p>În momentul în care numerotarea inversă ajunge la zero, va trebui să obți o noua cotație de la SideShift.ai mergând
<p>În momentul în care numerotarea inversă ajunge la zero, va trebui să obți o noua cotație de la XMR.TO mergând
înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p> înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p>
]]></string> ]]></string>
<string name="help_xmrto"><![CDATA[ <string name="help_xmrto"><![CDATA[
<h1>Transferul de BTC</h1> <h1>Transferul de BTC</h1>
<h2>XMR.TO</h2> <h2>SideShift.ai</h2>
<p>XMR.TO este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin. <p>SideShift.ai este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin.
Noi folosim API-ul XMR.TO pentru a integra plățile Bitcoin în Monerujo. Verifică Noi folosim API-ul SideShift.ai pentru a integra plățile Bitcoin în Monerujo. Verifică
https://xmr.to and și decide singur dacă este un serviciu pe care dorești să îl folosești. https://sideshift.ai and și decide singur dacă este un serviciu pe care dorești să îl folosești. Echipa Monerujo
Echipa Monerujo nu este asociată în niciun fel cu XMR.TO și nu te poate ajuta cu serviciile oferite de ei.</p> nu este asociată în niciun fel cu SideShift.ai și nu te poate ajuta cu serviciile oferite de ei.</p>
<h2>Rata de schimb al XMR.TO<h2> <h2>Rata de schimb al SideShift.ai<h2>
<p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului XMR.TO. Aceștia includ cursul de <p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului SideShift.ai. Aceștia includ cursul de
schimb actual precum și limitele superioare și inferioare ale BTC. Reține că aceste rate de schimb schimb actual precum și limitele superioare și inferioare ale BTC. Reține că aceste rate de schimb
nu sunt garantate în acest moment. Vei vedea, de asemenea, suma până la care tranzacția BTC va fi nu sunt garantate în acest moment.</p>
executată instantaneu fără a aștepta confirmarea XMR (verifică FAQ-ul XMR.TO pentru detalii). Notează că, XMR.TO <h2>Dispoziție SideShift.ai<h2>
nu percepe comisioane extra - nu e așa că este cool?</p> <p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a SideShift.ai. Această comandă este valabilă pentru
<h2>Dispoziție XMR.TO<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a XMR.TO. Această comandă este valabilă pentru
un timp limitat - este posibil să observi o numărătoare inversă pe butonul \"Consum\". Rata de schimb poate un timp limitat - este posibil să observi o numărătoare inversă pe butonul \"Consum\". Rata de schimb poate
fi diferită de cea indicată pe ecranele anterioare.</p> fi diferită de cea indicată pe ecranele anterioare.</p>
<h2>Cheia secretă XMR.TO<h2> <h2>Cheia secretă SideShift.ai<h2>
<p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a XMR.TO <p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a SideShift.ai
poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul XMR.TO.</p> poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul SideShift.ai.</p>
<p>Te rog notează, că această cheie secretă este validă doar pentru 24 ore din momentul începerii tranzacției!</p> <h2>Numerotarea inversă SideShift.ai</h2>
<h2>Numerotarea inversă XMR.TO</h2> <p>În momentul în care numerotarea inversă ajunge la zero, va trebui să obți o noua cotație de la SideShift.ai mergând
<p>În momentul în care numerotarea inversă ajunge la zero, va trebui să obți o noua cotație de la XMR.TO mergând
înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p> înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p>
]]></string> ]]></string>

View File

@ -35,22 +35,22 @@
<string name="info_xmrto"><![CDATA[ <string name="info_xmrto"><![CDATA[
<b>Ai introdus o adresă de Bitcoin.</b><br/> <b>Ai introdus o adresă de Bitcoin.</b><br/>
<i>Vei trimite XMR și destinatarul va primi BTC folosind serviciul <b>XMR.TO</b>.</i> <i>Vei trimite XMR și destinatarul va primi BTC folosind serviciul <b>SideShift.ai</b>.</i>
]]></string> ]]></string>
<string name="info_send_xmrto_success_order_label">Ordin XMR.TO</string> <string name="info_send_xmrto_success_order_label">Ordin SideShift.ai</string>
<string name="info_send_xmrto_success_btc">%1$s BTC</string> <string name="info_send_xmrto_success_btc">%1$s BTC</string>
<string name="info_send_xmrto_paid">Confirmare în așteptare</string> <string name="info_send_xmrto_paid">Confirmare în așteptare</string>
<string name="info_send_xmrto_unpaid">Plată în așteptare</string> <string name="info_send_xmrto_unpaid">Plată în așteptare</string>
<string name="info_send_xmrto_error">Eroare XMR.TO (%1$s)</string> <string name="info_send_xmrto_error">Eroare SideShift.ai (%1$s)</string>
<string name="info_send_xmrto_sent">BTC trimis!</string> <string name="info_send_xmrto_sent">BTC trimis!</string>
<string name="info_send_xmrto_query">Interogare &#8230;</string> <string name="info_send_xmrto_query">Interogare &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[ <string name="info_send_xmrto_parms"><![CDATA[
<b>Poți trimite %1$s &#8212; %2$s BTC</b>.<br/> <b>Poți trimite %1$s &#8212; %2$s BTC</b>.<br/>
<i><b>XMR.TO</b> îți oferă un curs de <b>%3$s BTC</b> <u>în acest moment</u></i>. <i><b>SideShift.ai</b> îți oferă un curs de <b>%3$s BTC</b> <u>în acest moment</u></i>.
]]></string> ]]></string>
<string name="info_send_xmrto_zeroconf"><![CDATA[ <string name="info_send_xmrto_zeroconf"><![CDATA[
<i>Sume până la <b>%1$s BTC</b> vor fi trimise <u>instantaneu</u>!</i> <i>Sume până la <b>%1$s BTC</b> vor fi trimise <u>instantaneu</u>!</i>
@ -61,25 +61,25 @@
<string name="info_paymentid_integrated">&#x2714; Payment ID integrat</string> <string name="info_paymentid_integrated">&#x2714; Payment ID integrat</string>
<string name="info_prepare_tx">Se pregătește tranzacția</string> <string name="info_prepare_tx">Se pregătește tranzacția</string>
<string name="label_send_progress_xmrto_create">Creearea ordinului XMR.TO</string> <string name="label_send_progress_xmrto_create">Creearea ordinului SideShift.ai</string>
<string name="label_send_progress_xmrto_query">Interogare ordin XMR.TO</string> <string name="label_send_progress_xmrto_query">Interogare ordin SideShift.ai</string>
<string name="label_send_progress_create_tx">Pregătirea tranzacției Monero</string> <string name="label_send_progress_create_tx">Pregătirea tranzacției Monero</string>
<string name="label_send_progress_queryparms">Interogare parametrii xmr.to</string> <string name="label_send_progress_queryparms">Interogare parametrii SideShift.ai</string>
<string name="label_generic_xmrto_error">EROARE XMR.TO</string> <string name="label_generic_xmrto_error">EROARE SideShift.ai</string>
<string name="text_generic_xmrto_error">Cod: %1$d</string> <string name="text_generic_xmrto_error">Cod: %1$d</string>
<string name="text_retry">Atinge pentru reîncercare</string> <string name="text_retry">Atinge pentru reîncercare</string>
<string name="text_noretry_monero">Pff.. ne-am blocat cum!</string> <string name="text_noretry_monero">Pff.. ne-am blocat cum!</string>
<string name="text_noretry">Oh, serviciul XMR.TO este momentan indisponibil!</string> <string name="text_noretry">Oh, serviciul SideShift.ai este momentan indisponibil!</string>
<string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string> <string name="text_send_btc_amount">%1$s BTC = %2$s XMR</string>
<string name="text_send_btc_rate">(Rată: %1$s BTC/XMR)</string> <string name="text_send_btc_rate">(Rată: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Vizitează xmr.to pentru suport &amp; interogare</string> <string name="label_send_btc_xmrto_info">Vizitează SideShift.ai pentru suport &amp; interogare</string>
<string name="label_send_btc_xmrto_key_lb">Cheia secretă \nXMR.TO</string> <string name="label_send_btc_xmrto_key_lb">Cheia secretă \nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">Cheia secretă XMR.TO </string> <string name="label_send_btc_xmrto_key">Cheia secretă SideShift.ai </string>
<string name="label_send_btc_address">Destinație adresă BTC</string> <string name="label_send_btc_address">Destinație adresă BTC</string>
<string name="label_send_btc_amount">Sumă</string> <string name="label_send_btc_amount">Sumă</string>
@ -142,9 +142,9 @@
<string name="label_copy_viewkey">Cheie Vizualizare</string> <string name="label_copy_viewkey">Cheie Vizualizare</string>
<string name="label_copy_address">Adresă publică</string> <string name="label_copy_address">Adresă publică</string>
<string name="label_copy_xmrtokey">Cheie XMR.TO</string> <string name="label_copy_xmrtokey">Cheie</string>
<string name="message_copy_viewkey">Cheie vizualizre copiată la clipboard!</string> <string name="message_copy_viewkey">Cheie vizualizre copiată la clipboard!</string>
<string name="message_copy_xmrtokey">Cheie XMR.TO copiată la clipboard!</string> <string name="message_copy_xmrtokey">Cheie copiată la clipboard!</string>
<string name="message_copy_address">Adresă portofel copiatp la clipboard!</string> <string name="message_copy_address">Adresă portofel copiatp la clipboard!</string>
<string name="message_copy_txid">ID tranzacție copiată la clipboard!</string> <string name="message_copy_txid">ID tranzacție copiată la clipboard!</string>
<string name="message_nocopy">Copierea dezactivată din motive de securitate!</string> <string name="message_nocopy">Copierea dezactivată din motive de securitate!</string>
@ -354,12 +354,9 @@
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string> <string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
<string name="label_test">Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Test</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Receiver</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">SideShift.ai offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Too many requests</string>
@ -387,7 +384,7 @@
<string name="onboarding_seed_title">Keep your seed safe</string> <string name="onboarding_seed_title">Keep your seed safe</string>
<string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string> <string name="onboarding_seed_information">The seed grants full access to whoever has it. If you lose it, we cannot help you recover it and you lose your beloved moneroj.</string>
<string name="onboarding_xmrto_title">Send Bitcoin</string> <string name="onboarding_xmrto_title">Send Bitcoin</string>
<string name="onboarding_xmrto_information">Monerujo has XMR.to support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string> <string name="onboarding_xmrto_information">Monerujo has SideShift.ai support built-in. Just paste or scan a Bitcoin address and you\'ll be sending BTC by spending XMR.</string>
<string name="onboarding_nodes_title">Nodes, your way</string> <string name="onboarding_nodes_title">Nodes, your way</string>
<string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string> <string name="onboarding_nodes_information">Nodes connect you to the Monero network. Choose between public nodes or go full cypherpunk using your own.</string>
<string name="onboarding_fpsend_title">Send with fingerprint</string> <string name="onboarding_fpsend_title">Send with fingerprint</string>
@ -408,4 +405,7 @@
<string name="node_updated_mins">Last Block: %1$d minutes ago</string> <string name="node_updated_mins">Last Block: %1$d minutes ago</string>
<string name="node_updated_hours">Last Block: %1$d hours ago</string> <string name="node_updated_hours">Last Block: %1$d hours ago</string>
<string name="node_updated_days">Last Block: %1$d days ago</string> <string name="node_updated_days">Last Block: %1$d days ago</string>
<string name="shift_noquote">Cannot get quote</string>
<string name="shift_checkamount">Check amount and try again</string>
</resources> </resources>

View File

@ -34,8 +34,8 @@
Перейдите по адресу https://coinmarketcap.com/privacy для получения подробной Перейдите по адресу https://coinmarketcap.com/privacy для получения подробной
информации о том, как собираются ваши персональные данные в запросах.</p> информации о том, как собираются ваши персональные данные в запросах.</p>
<p>Если вы используете приложение для оплаты по адресам BTC, <p>Если вы используете приложение для оплаты по адресам BTC,
вы будете использовать сервис XMR.TO. Их политика конфиденциальности подробно вы будете использовать сервис SideShift.ai. Их политика конфиденциальности подробно
изложена на вебсайте https://xmr.to/. Monerujo отправляет им адрес изложена на вебсайте https://sideshift.ai/. Monerujo отправляет им адрес
назначения BTC и сумму. Ваш IP также указывается.</p> назначения BTC и сумму. Ваш IP также указывается.</p>
<h2>Разрешения, необходимые приложению</h2> <h2>Разрешения, необходимые приложению</h2>
<ul> <ul>

Some files were not shown because too many files have changed in this diff Show More