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"
minSdkVersion 21
targetSdkVersion 29
versionCode 602
versionName "1.16.2 'Karmic Nodes'"
versionCode 702
versionName "1.17.2 'Druk'"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
@ -56,6 +56,9 @@ android {
debug {
applicationIdSuffix ".debug"
}
applicationVariants.all { variant ->
variant.buildConfigField "String", "ID_A", "\"" + getId("ID_A") + "\""
}
}
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 {
implementation 'androidx.core:core:1.3.2'
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.recyclerview:recyclerview:1.1.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;
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;
import android.app.PendingIntent;

View File

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

View File

@ -56,6 +56,7 @@ import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.data.BarcodeData;
import com.m2049r.xmrwallet.ledger.LedgerProgressDialog;
import com.m2049r.xmrwallet.model.Wallet;
@ -468,7 +469,7 @@ public class ReceiveFragment extends Fragment {
Timber.d("CLEARQR");
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());
Bitmap qr = generate(bcData.getUriString(), size, size);
if (qr != null) {

View File

@ -16,8 +16,11 @@
package com.m2049r.xmrwallet;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
@ -25,6 +28,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@ -77,6 +81,9 @@ public class TxFragment extends Fragment {
private TextView tvTxXmrToKey;
private TextView tvDestinationBtc;
private TextView tvTxAmountBtc;
private TextView tvXmrToSupport;
private TextView tvXmrToKeyLabel;
private ImageView tvXmrToLogo;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -88,6 +95,9 @@ public class TxFragment extends Fragment {
tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey);
tvDestinationBtc = view.findViewById(R.id.tvDestinationBtc);
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);
tvAddress = view.findViewById(R.id.tvAddress);
@ -104,12 +114,9 @@ public class TxFragment extends Fragment {
etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT);
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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();
}
tvTxXmrToKey.setOnClickListener(v -> {
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();
@ -283,12 +290,36 @@ public class TxFragment extends Fragment {
showBtcInfo();
}
@SuppressLint("SetTextI18n")
void showBtcInfo() {
if (userNotes.xmrtoKey != null) {
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);
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 {
cvXmrTo.setVisibility(View.GONE);
}

View File

@ -16,14 +16,13 @@
package com.m2049r.xmrwallet;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import com.m2049r.xmrwallet.BuildConfig;
import com.m2049r.xmrwallet.model.NetworkType;
import com.m2049r.xmrwallet.util.DayNightMode;
import com.m2049r.xmrwallet.util.LocaleHelper;
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.util.BitcoinAddressValidator;
import com.m2049r.xmrwallet.util.OpenAliasHelper;
import com.m2049r.xmrwallet.util.PaymentProtocolHelper;
import java.net.URI;
import java.net.URISyntaxException;
@ -43,7 +42,6 @@ public class BarcodeData {
static final String BTC_SCHEME = "bitcoin";
static final String BTC_DESCRIPTION = "message";
static final String BTC_AMOUNT = "amount";
static final String BTC_BIP70_PARM = "r";
public enum Asset {
XMR, BTC
@ -52,8 +50,7 @@ public class BarcodeData {
public enum Security {
NORMAL,
OA_NO_DNSSEC,
OA_DNSSEC,
BIP70
OA_DNSSEC
}
final public Asset asset;
@ -62,7 +59,6 @@ public class BarcodeData {
final public String amount;
final public String description;
final public Security security;
final public String bip70;
public BarcodeData(Asset asset, String address) {
this(asset, address, null, null, null, Security.NORMAL);
@ -80,21 +76,19 @@ public class BarcodeData {
this(asset, address, null, description, amount, Security.NORMAL);
}
public BarcodeData(Asset asset, String address, String addressName, String description, String amount, Security security) {
this(asset, address, addressName, null, description, amount, security);
public BarcodeData(Asset asset, String address, String description, String amount) {
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.address = address;
this.bip70 = bip70;
this.addressName = addressName;
this.description = description;
this.amount = amount;
this.security = security;
}
public Uri getUri() {
return Uri.parse(getUriString());
}
@ -127,10 +121,6 @@ public class BarcodeData {
if (bcData == null) {
bcData = parseBitcoinUri(qrCode);
}
// check for btc payment uri (like bitpay)
if (bcData == null) {
bcData = parseBitcoinPaymentUrl(qrCode);
}
// check for naked btc address
if (bcData == null) {
bcData = parseBitcoinNaked(qrCode);
@ -195,7 +185,7 @@ public class BarcodeData {
Timber.d("address invalid");
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) {
@ -245,17 +235,9 @@ public class BarcodeData {
}
String description = parms.get(BTC_DESCRIPTION);
String address = parts[0]; // no need to decode as there can bo no special characters
if (address.isEmpty()) { // possibly a BIP72 uri
String bip70 = parms.get(BTC_BIP70_PARM);
if (bip70 == 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 (address.isEmpty()) {
Timber.d("no address");
return null;
}
if (!BitcoinAddressValidator.validate(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 new BarcodeData(BarcodeData.Asset.BTC, address, null, 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);
return new BarcodeData(BarcodeData.Asset.BTC, address, description, amount);
}
static public BarcodeData parseBitcoinNaked(String address) {
@ -333,6 +300,10 @@ public class BarcodeData {
}
String paymentId = oaAttrs.get(OpenAliasHelper.OA1_PAYMENTID);
if (paymentId != null) {
Timber.e("paymentId not supported");
return null;
}
String description = oaAttrs.get(OpenAliasHelper.OA1_DESCRIPTION);
if (description == null) {
description = oaAttrs.get(OpenAliasHelper.OA1_NAME);
@ -348,13 +319,9 @@ public class BarcodeData {
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;
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;
import lombok.AllArgsConstructor;

View File

@ -20,6 +20,7 @@ import android.os.Parcel;
import android.os.Parcelable;
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
public class TxData implements Parcelable {
@ -52,6 +53,10 @@ public class TxData implements Parcelable {
return amount;
}
public double getAmountAsDouble() {
return 1.0 * amount / 1000000000000L;
}
public int getMixin() {
return mixin;
}
@ -68,6 +73,10 @@ public class TxData implements Parcelable {
this.amount = amount;
}
public void setAmount(double amount) {
this.amount = Wallet.getAmountFromDouble(amount);
}
public void setMixin(int mixin) {
this.mixin = mixin;
}

View File

@ -18,11 +18,20 @@ package com.m2049r.xmrwallet.data;
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 bip70;
@Getter
@Setter
private double btcAmount;
public TxDataBtc() {
@ -33,44 +42,11 @@ public class TxDataBtc extends TxData {
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
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeString(xmrtoUuid);
out.writeString(xmrtoOrderId);
out.writeString(btcAddress);
out.writeString(bip70);
out.writeDouble(btcAmount);
}
@ -87,21 +63,19 @@ public class TxDataBtc extends TxData {
protected TxDataBtc(Parcel in) {
super(in);
xmrtoUuid = in.readString();
xmrtoOrderId = in.readString();
btcAddress = in.readString();
bip70 = in.readString();
btcAmount = in.readDouble();
}
@NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(",xmrtoUuid:");
sb.append(xmrtoUuid);
sb.append("xmrtoOrderId:");
sb.append(xmrtoOrderId);
sb.append(",btcAddress:");
sb.append(btcAddress);
sb.append(",bip70:");
sb.append(bip70);
sb.append(",btcAmount:");
sb.append(btcAmount);
return sb.toString();

View File

@ -16,16 +16,16 @@
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.Pattern;
import timber.log.Timber;
public class UserNotes {
public String txNotes = "";
public String note = "";
public String xmrtoTag = null;
public String xmrtoKey = null;
public String xmrtoAmount = null; // could be a double - but we are not doing any calculations
public String xmrtoDestination = null;
@ -35,13 +35,14 @@ public class UserNotes {
return;
}
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);
if (m.find()) {
xmrtoKey = m.group(1);
xmrtoAmount = m.group(2);
xmrtoDestination = m.group(3);
note = m.group(4);
xmrtoTag = m.group(1);
xmrtoKey = m.group(2);
xmrtoAmount = m.group(3);
xmrtoDestination = m.group(4);
note = m.group(5);
} else {
note = txNotes;
}
@ -56,12 +57,14 @@ public class UserNotes {
txNotes = buildTxNote();
}
public void setXmrtoStatus(QueryOrderStatus xmrtoStatus) {
if (xmrtoStatus != null) {
xmrtoKey = xmrtoStatus.getUuid();
xmrtoAmount = String.valueOf(xmrtoStatus.getBtcAmount());
xmrtoDestination = xmrtoStatus.getBtcDestAddress();
public void setXmrtoOrder(CreateOrder order) {
if (order != null) {
xmrtoTag = order.TAG;
xmrtoKey = order.getOrderId();
xmrtoAmount = Helper.getDisplayAmount(order.getBtcAmount());
xmrtoDestination = order.getBtcAddress();
} else {
xmrtoTag = null;
xmrtoKey = null;
xmrtoAmount = null;
xmrtoDestination = null;
@ -70,11 +73,13 @@ public class UserNotes {
}
private String buildTxNote() {
StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
if (xmrtoKey != null) {
if ((xmrtoAmount == null) || (xmrtoDestination == null))
throw new IllegalArgumentException("Broken notes");
sb.append("{");
sb.append(xmrtoTag);
sb.append("-");
sb.append(xmrtoKey);
sb.append(",");
sb.append(xmrtoAmount);

View File

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

View File

@ -34,6 +34,8 @@ import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.material.textfield.TextInputLayout;
import com.m2049r.xmrwallet.R;
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.Helper;
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;
@ -92,8 +91,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
private ImageButton bPasteAddress;
private boolean resolvingOA = false;
private boolean resolvingPP = false;
private String resolvedPP = null;
OnScanListener onScanListener;
@ -125,20 +122,11 @@ public class SendAddressWizardFragment extends SendWizardFragment {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
View next = etAddress;
String enteredAddress = etAddress.getEditText().getText().toString().trim();
String dnsOA = dnsFromOpenAlias(enteredAddress);
Timber.d("OpenAlias is %s", dnsOA);
if (dnsOA != null) {
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
public void afterTextChanged(Editable editable) {
Timber.d("AFTER: %s", editable.toString());
if (editable.toString().equals(resolvedPP)) return; // no change required
resolvedPP = null;
etAddress.setError(null);
if (isIntegratedAddress()) {
Timber.d("isIntegratedAddress");
@ -156,7 +142,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
tvPaymentIdIntegrated.setVisibility(View.VISIBLE);
llXmrTo.setVisibility(View.INVISIBLE);
sendListener.setMode(SendFragment.Mode.XMR);
} else if (isBitcoinAddress() || (resolvedPP != null)) {
} else if (isBitcoinAddress()) {
Timber.d("isBitcoinAddress");
setBtcMode();
} else {
@ -190,14 +176,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
et.setSelection(et.getText().length());
etAddress.requestFocus();
} else {
final String bip70 = PaymentProtocolHelper.getBip70(clip);
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();
Toast.makeText(getActivity(), getString(R.string.send_address_invalid), Toast.LENGTH_SHORT).show();
}
}
});
@ -273,62 +252,10 @@ public class SendAddressWizardFragment extends SendWizardFragment {
} // 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() {
String address = etAddress.getEditText().getText().toString();
return Wallet.isAddressValid(address)
|| BitcoinAddressValidator.validate(address)
|| (resolvedPP != null);
|| BitcoinAddressValidator.validate(address);
}
private boolean checkAddress() {
@ -365,11 +292,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
Timber.d("OpenAlias is %s", dnsOA);
if (dnsOA != null) {
processOpenAlias(dnsOA);
} else {
String bip70 = PaymentProtocolHelper.getBip70(enteredAddress);
if (bip70 != null) {
processBip70(bip70);
}
}
return false;
}
@ -377,15 +299,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
if (sendListener != null) {
TxData txData = sendListener.getTxData();
if (txData instanceof TxDataBtc) {
if (resolvedPP != null) {
// 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);
}
((TxDataBtc) txData).setBtcAddress(etAddress.getEditText().getText().toString());
txData.setDestinationAddress(null);
} else {
txData.setDestinationAddress(etAddress.getEditText().getText().toString());
@ -398,7 +312,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
}
@Override
public void onAttach(Context context) {
public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof OnScanListener) {
onScanListener = (OnScanListener) context;
@ -424,21 +338,11 @@ public class SendAddressWizardFragment extends SendWizardFragment {
}
public void processScannedData() {
resolvedPP = null;
BarcodeData barcodeData = sendListener.getBarcodeData();
if (barcodeData != null) {
Timber.d("GOT DATA");
if (barcodeData.bip70 != 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) {
if (barcodeData.address != null) {
etAddress.getEditText().setText(barcodeData.address);
if (checkAddress()) {
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.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -31,15 +30,14 @@ import com.m2049r.xmrwallet.data.TxDataBtc;
import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.OkHttpHelper;
import com.m2049r.xmrwallet.widget.ExchangeEditText;
import com.m2049r.xmrwallet.widget.ExchangeOtherEditText;
import com.m2049r.xmrwallet.widget.SendProgressView;
import com.m2049r.xmrwallet.xmrto.XmrToError;
import com.m2049r.xmrwallet.xmrto.XmrToException;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderParameters;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl;
import com.m2049r.xmrwallet.service.shift.ShiftError;
import com.m2049r.xmrwallet.service.shift.ShiftException;
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 com.m2049r.xmrwallet.service.shift.sideshift.network.SideShiftApiImpl;
import java.text.NumberFormat;
import java.util.Locale;
@ -93,17 +91,22 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
@Override
public boolean onValidateFields() {
Timber.i(maxBtc + "/" + minBtc);
if (!etAmount.validate(maxBtc, minBtc)) {
return false;
}
if (orderParameters == null) {
return false; // this should never happen
}
if (sendListener != null) {
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
String btcString = etAmount.getNativeAmount();
if (btcString != null) {
try {
double btc = Double.parseDouble(btcString);
Timber.d("setAmount %f", btc);
Timber.d("setBtcAmount %f", btc);
txDataBtc.setBtcAmount(btc);
txDataBtc.setAmount(btc / orderParameters.getPrice());
} catch (NumberFormatException ex) {
Timber.d(ex.getLocalizedMessage());
txDataBtc.setBtcAmount(0);
@ -115,17 +118,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
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 minBtc = 0;
@ -152,7 +144,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
etAmount.setAmount(data.amount);
}
}
setBip70Mode();
callXmrTo();
}
@ -164,45 +155,37 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
private void processOrderParms(final QueryOrderParameters orderParameters) {
this.orderParameters = orderParameters;
getView().post(new Runnable() {
@Override
public void run() {
etAmount.setExchangeRate(1.0d / orderParameters.getPrice());
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(6);
String min = df.format(orderParameters.getLowerLimit());
String max = df.format(orderParameters.getUpperLimit());
String rate = df.format(orderParameters.getPrice());
Spanned xmrParmText = Html.fromHtml(getString(R.string.info_send_xmrto_parms, min, max, rate));
if (orderParameters.isZeroConfEnabled()) {
String zeroConf = df.format(orderParameters.getZeroConfMaxAmount());
Spanned zeroConfText = Html.fromHtml(getString(R.string.info_send_xmrto_zeroconf, zeroConf));
xmrParmText = (Spanned) TextUtils.concat(xmrParmText, " ", zeroConfText);
}
tvXmrToParms.setText(xmrParmText);
maxBtc = orderParameters.getUpperLimit();
minBtc = orderParameters.getLowerLimit();
Timber.d("minBtc=%f / maxBtc=%f", minBtc, maxBtc);
getView().post(() -> {
final double price = orderParameters.getPrice();
etAmount.setExchangeRate(1 / price);
maxBtc = price * orderParameters.getUpperLimit();
minBtc = price * orderParameters.getLowerLimit();
Timber.d("minBtc=%f / maxBtc=%f", minBtc, maxBtc);
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(6);
String min = df.format(minBtc);
String max = df.format(maxBtc);
String rate = df.format(price);
Spanned xmrParmText = Html.fromHtml(getString(R.string.info_send_xmrto_parms, min, max, rate));
tvXmrToParms.setText(xmrParmText);
final long funds = getTotalFunds();
double availableXmr = 1.0 * funds / 1000000000000L;
maxBtc = Math.min(maxBtc, availableXmr * orderParameters.getPrice());
final long funds = getTotalFunds();
double availableXmr = 1.0 * funds / 1000000000000L;
String availBtcString;
String availXmrString;
if (!sendListener.getActivityCallback().isStreetMode()) {
availBtcString = df.format(availableXmr * orderParameters.getPrice());
availXmrString = df.format(availableXmr);
} else {
availBtcString = getString(R.string.unknown_amount);
availXmrString = availBtcString;
}
tvFunds.setText(getString(R.string.send_available_btc,
availXmrString,
availBtcString));
llXmrToParms.setVisibility(View.VISIBLE);
evParams.hideProgress();
String availBtcString;
String availXmrString;
if (!sendListener.getActivityCallback().isStreetMode()) {
availBtcString = df.format(availableXmr * price);
availXmrString = df.format(availableXmr);
} else {
availBtcString = getString(R.string.unknown_amount);
availXmrString = availBtcString;
}
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;
minBtc = 0;
Timber.e(ex);
getView().post(new Runnable() {
@Override
public void run() {
if (ex instanceof XmrToException) {
XmrToException xmrEx = (XmrToException) ex;
XmrToError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
evParams.showMessage(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_retry));
evParams.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
evParams.setOnClickListener(null);
callXmrTo();
}
});
} else {
evParams.showMessage(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
getView().post(() -> {
if (ex instanceof ShiftException) {
ShiftException xmrEx = (ShiftException) ex;
ShiftError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
evParams.showMessage(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_retry));
evParams.setOnClickListener(v -> {
evParams.setOnClickListener(null);
callXmrTo();
});
} else {
evParams.showMessage(getString(R.string.label_generic_xmrto_error),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
evParams.showMessage(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else {
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));
}
} else {
evParams.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
getString(R.string.text_noretry));
}
});
}
private void callXmrTo() {
evParams.showProgress(getString(R.string.label_send_progress_queryparms));
getXmrToApi().queryOrderParameters(new XmrToCallback<QueryOrderParameters>() {
getXmrToApi().queryOrderParameters(new ShiftCallback<QueryOrderParameters>() {
@Override
public void onSuccess(final QueryOrderParameters 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) {
synchronized (this) {
if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(),
xmrToApi = new SideShiftApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl());
}
}

View File

@ -17,13 +17,6 @@
package com.m2049r.xmrwallet.fragment.send;
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.View;
import android.view.ViewGroup;
@ -31,8 +24,6 @@ import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.data.TxData;
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.OkHttpHelper;
import com.m2049r.xmrwallet.widget.SendProgressView;
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.QueryOrderStatus;
import com.m2049r.xmrwallet.xmrto.api.XmrToApi;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.network.XmrToApiImpl;
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.RequestQuote;
import com.m2049r.xmrwallet.service.shift.sideshift.api.SideShiftApi;
import com.m2049r.xmrwallet.service.shift.ShiftCallback;
import com.m2049r.xmrwallet.service.shift.sideshift.network.SideShiftApiImpl;
import java.text.NumberFormat;
import java.util.Locale;
@ -55,8 +46,6 @@ import java.util.Locale;
import timber.log.Timber;
public class SendBtcConfirmWizardFragment extends SendWizardFragment implements SendConfirm {
private final int QUERY_INTERVAL = 500;//ms
public static SendBtcConfirmWizardFragment newInstance(SendConfirmWizardFragment.Listener listener) {
SendBtcConfirmWizardFragment instance = new SendBtcConfirmWizardFragment();
instance.setSendListener(listener);
@ -65,9 +54,8 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
SendConfirmWizardFragment.Listener sendListener;
public SendBtcConfirmWizardFragment setSendListener(SendConfirmWizardFragment.Listener listener) {
public void setSendListener(SendConfirmWizardFragment.Listener listener) {
this.sendListener = listener;
return this;
}
private View llStageA;
@ -103,7 +91,6 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
tvTxFee = view.findViewById(R.id.tvTxFee);
tvTxTotal = view.findViewById(R.id.tvTxTotal);
llStageA = view.findViewById(R.id.llStageA);
evStageA = view.findViewById(R.id.evStageA);
llStageB = view.findViewById(R.id.llStageB);
@ -111,12 +98,9 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
llStageC = view.findViewById(R.id.llStageC);
evStageC = view.findViewById(R.id.evStageC);
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
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();
}
tvTxXmrToKey.setOnClickListener(v -> {
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);
@ -125,13 +109,10 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
bSend = view.findViewById(R.id.bSend);
bSend.setEnabled(false);
bSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Timber.d("bSend.setOnClickListener");
bSend.setEnabled(false);
preSend();
}
bSend.setOnClickListener(v -> {
Timber.d("bSend.setOnClickListener");
bSend.setEnabled(false);
preSend();
});
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();
return;
}
sendListener.getTxData().getUserNotes().setXmrtoStatus(xmrtoStatus);
((TxDataBtc) sendListener.getTxData()).setXmrtoUuid(xmrtoStatus.getUuid());
sendListener.getTxData().getUserNotes().setXmrtoOrder(xmrtoOrder); // note the transaction in the TX notes
((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
sendListener.commitTransaction();
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) {
if (isResumed
&& (inProgress == STAGE_C)
&& (xmrtoStatus != null)
&& (xmrtoStatus.isCreated()
&& (xmrtoStatus.getUuid().equals(txTag)))) {
&& (xmrtoOrder != null)
&& (xmrtoOrder.getOrderId().equals(txTag))) {
this.pendingTransaction = pendingTransaction;
getView().post(new Runnable() {
@Override
public void run() {
hideProgress();
tvTxFee.setText(Wallet.getDisplayAmount(pendingTransaction.getFee()));
tvTxTotal.setText(Wallet.getDisplayAmount(
pendingTransaction.getFee() + pendingTransaction.getAmount()));
updateSendButton();
}
getView().post(() -> {
hideProgress();
tvTxFee.setText(Wallet.getDisplayAmount(pendingTransaction.getFee()));
tvTxTotal.setText(Wallet.getDisplayAmount(
pendingTransaction.getFee() + pendingTransaction.getAmount()));
updateSendButton();
});
} else {
this.pendingTransaction = null;
@ -291,20 +268,19 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
evStageC.hideProgress();
isResumed = true;
if ((pendingTransaction == null) && (inProgress == STAGE_X)) {
createOrder();
stageA();
} // otherwise just sit there blank
// TODO: don't sit there blank - can this happen? should we just die?
}
private int sendCountdown = 0;
private static final int XMRTO_COUNTDOWN = 10 * 60; // 10 minutes
private static final int XMRTO_COUNTDOWN_STEP = 1; // 1 second
Runnable updateRunnable = null;
void startSendTimer() {
void startSendTimer(int timeout) {
Timber.d("startSendTimer()");
sendCountdown = XMRTO_COUNTDOWN;
sendCountdown = timeout;
updateRunnable = new Runnable() {
@Override
public void run() {
@ -363,240 +339,228 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
// or createTransactionFailed()
void prepareSend() {
if (!isResumed) return;
if ((xmrtoStatus == null)) {
throw new IllegalStateException("xmrtoStatus is null");
}
if ((!xmrtoStatus.isCreated())) {
throw new IllegalStateException("order is not created");
if ((xmrtoOrder == null)) {
throw new IllegalStateException("xmrtoOrder is null");
}
showProgress(3, getString(R.string.label_send_progress_create_tx));
TxData txData = sendListener.getTxData();
txData.setDestinationAddress(xmrtoStatus.getReceivingSubaddress());
txData.setAmount(Wallet.getAmountFromDouble(xmrtoStatus.getIncomingAmountTotal()));
getActivityCallback().onPrepareSend(xmrtoStatus.getUuid(), txData);
final TxData txData = sendListener.getTxData();
txData.setDestinationAddress(xmrtoOrder.getXmrAddress());
txData.setAmount(xmrtoOrder.getXmrAmount());
getActivityCallback().onPrepareSend(xmrtoOrder.getOrderId(), txData);
}
SendFragment.Listener 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) {
Timber.d("processCreateOrder %s", createOrder.getUuid());
xmrtoOrder = createOrder;
if (QueryOrderStatus.State.TO_BE_CREATED.toString().equals(createOrder.getState())) {
getView().post(new Runnable() {
@Override
public void run() {
tvTxXmrToKey.setText(createOrder.getUuid());
tvTxBtcAddress.setText(createOrder.getBtcDestAddress());
hideProgress();
}
});
queryOrder(createOrder.getUuid());
} else {
throw new IllegalStateException("Create Order is not TO_BE_CREATED");
private void processStageA(final RequestQuote requestQuote) {
Timber.d("processCreateOrder %s", requestQuote.getId());
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
// verify the BTC amount is correct (price can change and we can only specify XMR amount)
if (requestQuote.getBtcAmount() != txDataBtc.getBtcAmount()) {
if (--stageARetries <= 0) {
Timber.d("Failed to get quote");
getView().post(() ->
showStageError(ShiftError.Error.SERVICE.toString(),
getString(R.string.shift_noquote),
getString(R.string.shift_checkamount)));
return; // just stop for now
}
if (stageAPrice == requestQuote.getPrice()) {
// 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) {
Timber.e("processCreateOrderError %s", ex.getLocalizedMessage());
getView().post(new Runnable() {
@Override
public void run() {
if (ex instanceof XmrToException) {
XmrToException xmrEx = (XmrToException) ex;
XmrToError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_retry));
evStageA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
evStageA.setOnClickListener(null);
createOrder();
}
});
} else {
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
private void processStageAError(final Exception ex) {
Timber.e("processStageAError %s", ex.getLocalizedMessage());
getView().post(() -> {
if (ex instanceof ShiftException) {
ShiftException xmrEx = (ShiftException) ex;
ShiftError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_retry));
evStageA.setOnClickListener(v -> {
evStageA.setOnClickListener(null);
stageA();
});
} else {
showStageError(getString(R.string.label_generic_xmrto_error),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else {
evStageA.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
showStageError(getString(R.string.label_generic_xmrto_error),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
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;
Timber.d("createOrder");
Timber.d("Request Quote");
xmrtoQuote = null;
xmrtoOrder = null;
xmrtoStatus = null;
showProgress(1, getString(R.string.label_send_progress_xmrto_create));
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
stageAPrice = 0;
XmrToCallback<CreateOrder> callback = new XmrToCallback<CreateOrder>() {
ShiftCallback<RequestQuote> callback = new ShiftCallback<RequestQuote>() {
@Override
public void onSuccess(CreateOrder createOrder) {
public void onSuccess(RequestQuote requestQuote) {
if (!isResumed) return;
if (xmrtoOrder != null) {
Timber.w("another ongoing create order request");
if (xmrtoQuote != null) {
Timber.w("another ongoing request quote request");
return;
}
processCreateOrder(createOrder);
processStageA(requestQuote);
}
@Override
public void onError(Exception ex) {
if (!isResumed) return;
if (xmrtoOrder != null) {
Timber.w("another ongoing create order request");
if (xmrtoQuote != null) {
Timber.w("another ongoing request quote request");
return;
}
processCreateOrderError(ex);
processStageAError(ex);
}
};
if (txDataBtc.getBip70() != null) {
getXmrToApi().createOrder(txDataBtc.getBip70(), callback);
} else {
getXmrToApi().createOrder(txDataBtc.getBtcAmount(), txDataBtc.getBtcAddress(), callback);
}
getXmrToApi().requestQuote(txDataBtc.getAmountAsDouble(), callback);
}
private QueryOrderStatus xmrtoStatus = null;
private CreateOrder xmrtoOrder = null;
private void processQueryOrder(final QueryOrderStatus status) {
Timber.d("processQueryOrder %s for %s", status.getState().toString(), status.getUuid());
xmrtoStatus = status;
if (status.isCreated()) {
getView().post(new Runnable() {
@Override
public void run() {
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);
private void processStageB(final CreateOrder order) {
Timber.d("processCreateOrder %s for %s", order.getOrderId(), order.getQuoteId());
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
// verify amount & destination
if ((order.getBtcAmount() != txDataBtc.getBtcAmount())
|| (!order.getBtcAddress().equals(txDataBtc.getBtcAddress()))) {
throw new IllegalStateException("Order does not fulfill quote!"); // something is terribly wrong - die
}
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 processQueryOrderError(final Exception ex) {
Timber.e("processQueryOrderError %s", ex.getLocalizedMessage());
getView().post(new Runnable() {
@Override
public void run() {
if (ex instanceof XmrToException) {
XmrToException xmrEx = (XmrToException) ex;
XmrToError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
showStageError(xmrErr.getErrorId().toString(), xmrErr.getErrorMsg(),
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));
}
private void processStageBError(final Exception ex) {
Timber.e("processCreateOrderError %s", ex.getLocalizedMessage());
getView().post(() -> {
if (ex instanceof ShiftException) {
ShiftException xmrEx = (ShiftException) ex;
ShiftError xmrErr = xmrEx.getError();
if (xmrErr != null) {
if (xmrErr.isRetryable()) {
showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_retry));
evStageB.setOnClickListener(v -> {
evStageB.setOnClickListener(null);
stageB(xmrtoOrder.getOrderId());
});
} else {
showStageError(getString(R.string.label_generic_xmrto_error),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
showStageError(xmrErr.getErrorType().toString(), xmrErr.getErrorMsg(),
getString(R.string.text_noretry));
}
} else {
evStageB.showMessage(getString(R.string.label_generic_xmrto_error),
ex.getLocalizedMessage(),
showStageError(getString(R.string.label_generic_xmrto_error),
getString(R.string.text_generic_xmrto_error, xmrEx.getCode()),
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) {
Timber.d("queryOrder(%s)", uuid);
private void stageB(final String quoteId) {
Timber.d("createOrder(%s)", quoteId);
if (!isResumed) return;
getView().post(new Runnable() {
@Override
public void run() {
xmrtoStatus = null;
showProgress(2, getString(R.string.label_send_progress_xmrto_query));
getXmrToApi().queryOrderStatus(uuid, new XmrToCallback<QueryOrderStatus>() {
@Override
public void onSuccess(QueryOrderStatus status) {
if (!isResumed) return;
if (xmrtoOrder == null) return;
if (!status.getUuid().equals(xmrtoOrder.getUuid())) {
Timber.d("Query UUID does not match");
// ignore (we got a response to a stale request)
return;
}
if (xmrtoStatus != null)
throw new IllegalStateException("xmrtoStatus must be null here!");
processQueryOrder(status);
final String btcAddress = ((TxDataBtc) sendListener.getTxData()).getBtcAddress();
getView().post(() -> {
xmrtoOrder = null;
showProgress(2, getString(R.string.label_send_progress_xmrto_query));
getXmrToApi().createOrder(quoteId, btcAddress, new ShiftCallback<CreateOrder>() {
@Override
public void onSuccess(CreateOrder order) {
if (!isResumed) return;
if (xmrtoQuote == null) return;
if (!order.getQuoteId().equals(xmrtoQuote.getId())) {
Timber.d("Quote ID does not match");
// ignore (we got a response to a stale request)
return;
}
if (xmrtoOrder != null)
throw new IllegalStateException("xmrtoOrder must be null here!");
processStageB(order);
}
@Override
public void onError(Exception ex) {
if (!isResumed) return;
processQueryOrderError(ex);
}
});
}
@Override
public void onError(Exception ex) {
if (!isResumed) return;
processStageBError(ex);
}
});
});
}
private XmrToApi xmrToApi = null;
private SideShiftApi xmrToApi = null;
private XmrToApi getXmrToApi() {
private SideShiftApi getXmrToApi() {
if (xmrToApi == null) {
synchronized (this) {
if (xmrToApi == null) {
xmrToApi = new XmrToApiImpl(OkHttpHelper.getOkHttpClient(),
xmrToApi = new SideShiftApiImpl(OkHttpHelper.getOkHttpClient(),
Helper.getXmrToBaseUrl());
}
}

View File

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

View File

@ -563,22 +563,4 @@ public class SendFragment extends Fragment
inflater.inflate(R.menu.send_menu, menu);
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
* (c) 2014 BTChip - 1BTChip7VfTnrPra5jqci7ejnMguuHogTn
* (c) m2049r
* 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.

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;
import android.content.Context;

View File

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

View File

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

View File

@ -14,9 +14,9 @@
* 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);

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");
* you may not use this file except in compliance with the License.
@ -14,29 +14,20 @@
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto;
package com.m2049r.xmrwallet.service.shift;
public class XmrToException extends Exception {
private int code;
private XmrToError error;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
public XmrToException(final int code) {
super();
@RequiredArgsConstructor
public class ShiftException extends Exception {
@Getter
private final int code;
@Getter
private final ShiftError error;
public ShiftException(int code) {
this.code = code;
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");
* you may not use this file except in compliance with the License.
@ -14,17 +14,14 @@
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.api;
package com.m2049r.xmrwallet.service.shift.sideshift.api;
public interface CreateOrder {
Double getBtcAmount();
public interface QueryOrderParameters {
String getBtcDestAddress();
double getLowerLimit();
String getBtcBip70();
double getPrice();
String getState();
String getUuid();
double getUpperLimit();
}

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

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");
* you may not use this file except in compliance with the License.
@ -14,23 +14,24 @@
* limitations under the License.
*/
package com.m2049r.xmrwallet.xmrto.network;
package com.m2049r.xmrwallet.service.shift.sideshift.network;
import androidx.annotation.NonNull;
import com.m2049r.xmrwallet.xmrto.api.XmrToCallback;
import com.m2049r.xmrwallet.xmrto.api.QueryOrderParameters;
import com.m2049r.xmrwallet.service.shift.NetworkCallback;
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.JSONObject;
class QueryOrderParametersImpl implements QueryOrderParameters {
private double lowerLimit; // "lower_limit": <lower_order_limit_in_btc_as_float>,
private double price; // "price": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>,
private double upperLimit; // "upper_limit": <upper_order_limit_in_btc_as_float>,
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>
private double lowerLimit;
private double price;
private double upperLimit;
public double getLowerLimit() {
return lowerLimit;
@ -44,25 +45,15 @@ class QueryOrderParametersImpl implements QueryOrderParameters {
return upperLimit;
}
public boolean isZeroConfEnabled() {
return isZeroConfEnabled;
}
public double getZeroConfMaxAmount() {
return zeroConfMaxAmount;
}
QueryOrderParametersImpl(final JSONObject jsonObject) throws JSONException {
lowerLimit = jsonObject.getDouble("lower_limit");
price = jsonObject.getDouble("price");
upperLimit = jsonObject.getDouble("upper_limit");
isZeroConfEnabled = jsonObject.getBoolean("zero_conf_enabled");
zeroConfMaxAmount = jsonObject.getDouble("zero_conf_max_amount");
lowerLimit = jsonObject.getDouble("min");
price = jsonObject.getDouble("rate");
upperLimit = jsonObject.getDouble("max");
}
public static void call(@NonNull final XmrToApiCall api,
@NonNull final XmrToCallback<QueryOrderParameters> callback) {
api.call("order_parameter_query", new NetworkCallback() {
public static void call(@NonNull final ShiftApiCall api,
@NonNull final ShiftCallback<QueryOrderParameters> callback) {
api.call("pairs/xmr/" + SideShiftApi.ASSET, new NetworkCallback() {
@Override
public void onSuccess(JSONObject jsonObject) {
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");
* you may not use this file except in compliance with the License.
@ -14,18 +14,23 @@
* 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 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.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.JSONObject;
@ -41,42 +46,45 @@ import okhttp3.RequestBody;
import okhttp3.Response;
import timber.log.Timber;
public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
public class SideShiftApiImpl implements SideShiftApi, ShiftApiCall {
@NonNull
private final OkHttpClient okHttpClient;
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.baseUrl = baseUrl;
}
@Override
public void createOrder(final double amount, @NonNull final String address,
@NonNull final XmrToCallback<CreateOrder> callback) {
CreateOrderImpl.call(this, amount, address, callback);
public void queryOrderParameters(@NonNull final ShiftCallback<QueryOrderParameters> callback) {
QueryOrderParametersImpl.call(this, callback);
}
@Override
public void createOrder(@NonNull final String url,
@NonNull final XmrToCallback<CreateOrder> callback) {
CreateOrderImpl.call(this, url, callback);
public void requestQuote(final double xmrAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
RequestQuoteImpl.call(this, xmrAmount, callback);
}
@Override
public void createOrder(final String quoteId, @NonNull final String btcAddress,
@NonNull final ShiftCallback<CreateOrder> callback) {
CreateOrderImpl.call(this, quoteId, btcAddress, callback);
}
@Override
public void queryOrderStatus(@NonNull final String uuid,
@NonNull final XmrToCallback<QueryOrderStatus> callback) {
@NonNull final ShiftCallback<QueryOrderStatus> callback) {
QueryOrderStatusImpl.call(this, uuid, callback);
}
@Override
public void queryOrderParameters(@NonNull final XmrToCallback<QueryOrderParameters> callback) {
QueryOrderParametersImpl.call(this, callback);
public Uri getQueryOrderUri(String orderId) {
return Uri.parse("https://sideshift.ai/orders/" + orderId);
}
@Override
public void call(@NonNull final String path, @NonNull final NetworkCallback callback) {
call(path, null, callback);
@ -85,24 +93,18 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
@Override
public void call(@NonNull final String path, final JSONObject request, @NonNull final NetworkCallback callback) {
final HttpUrl url = baseUrl.newBuilder()
.addPathSegment(path)
.addPathSegment("") // xmr.to needs a trailing slash!
.addPathSegments(path)
.build();
Timber.d(url.toString());
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() {
@Override
public void onFailure(final Call call, final IOException ex) {
Timber.d("A");
callback.onError(ex);
}
@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());
if (response.isSuccessful()) {
try {
@ -115,11 +117,11 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
try {
final JSONObject json = new JSONObject(response.body().string());
Timber.d(json.toString(2));
final XmrToError error = new XmrToError(json);
Timber.e("xmr.to says %d/%s", response.code(), error.toString());
callback.onError(new XmrToException(response.code(), error));
final ShiftError error = new ShiftError(json);
Timber.w("%s says %d/%s", CreateOrder.TAG, response.code(), error.toString());
callback.onError(new ShiftException(response.code(), error));
} 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) {
if (request != null) {
final RequestBody body = RequestBody.create(
MediaType.parse("application/json"), request.toString());
final RequestBody body = RequestBody.create(request.toString(), MediaType.parse("application/json"));
return OkHttpHelper.getPostRequest(url, body);
} else {
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;
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;

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;
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;
import android.app.KeyguardManager;

View File

@ -226,16 +226,14 @@ public class Helper {
return displayB;
}
// min 2 significant digits after decimal point
static public String getFormattedAmount(double amount) {
if ((amount >= 1.0d) || (amount == 0))
return String.format(Locale.US, "%,.2f", amount);
else { // amount < 1
int decimals = 1 - (int) Math.floor(Math.log10(amount));
if (decimals < 2) decimals = 2;
if (decimals > 12) decimals = 12;
return String.format(Locale.US, "%,." + decimals + "f", amount);
}
static public String getDisplayAmount(double amount) {
// a Java bug does not strip zeros properly if the value is 0
BigDecimal d = new BigDecimal(amount)
.setScale(12, BigDecimal.ROUND_HALF_UP)
.stripTrailingZeros();
if (d.scale() < 1)
d = d.setScale(1, BigDecimal.ROUND_UNNECESSARY);
return d.toPlainString();
}
static public Bitmap getBitmap(Context context, int drawableId) {
@ -328,9 +326,9 @@ public class Helper {
static public HttpUrl getXmrToBaseUrl() {
if ((WalletManager.getInstance() == null)
|| (WalletManager.getInstance().getNetworkType() != NetworkType.NetworkType_Mainnet)) {
return HttpUrl.parse("https://test.xmr.to/api/v3/xmr2btc/");
throw new IllegalStateException("Only mainnet not supported");
} 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;
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;
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" />
android:layout_gravity="center"
android:visibility="visible" />
<LinearLayout
android:id="@+id/llStageA"
@ -39,83 +40,6 @@
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="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
style="@style/MoneroText.Confirm.Label"
android:layout_width="wrap_content"
@ -142,6 +66,84 @@
tools:text="(Rate: 0.020804 BTC/XMR)" />
</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"
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>
</com.google.android.material.card.MaterialCardView>
@ -155,7 +157,8 @@
android:id="@+id/evStageC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" />
android:layout_gravity="center"
android:visibility="visible" />
<LinearLayout
android:id="@+id/llStageC"

View File

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

View File

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

View File

@ -30,8 +30,8 @@
<p>Si utilitzeu la funcionalitat dintercanvi (opcional), monerujo obté el canvi
         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>
<p>Si utilitzeu laplicació per pagar a adreces BTC, utilitzareu el servei XMR.TO.
         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>
<p>Si utilitzeu laplicació per pagar a adreces BTC, utilitzareu el servei SideShift.ai.
         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>
<ul>
<li>INTERNET : Connectar a la xarxa Monero mitjançant un Node Daemon de Monero</li>

View File

@ -117,52 +117,41 @@
<ul>
<li>un OpenAlias per XMR o BTC</li>
<li>una adreça BTC</li>
<li>un bitcoin: URI (inclòs BIP70 com bitpay)</li>
</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>
<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>
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>
<h1>Enviant BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO é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>
<h2>Tipus de Canvi XMR.TO<h2>
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. 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
         la quantitat fins a la qual la transacció BTC sexecutarà instantàniament sense esperar
         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>
<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
<h2>SideShift.ai</h2>
<p>SideShift.ai és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
         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 SideShift.ai<h2>
<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.</p>
<h2>Ordre de compra SideShift.ai<h2>
<p>A la pantalla \"Confirmar\", veureu lordre de compra SideShift.ai 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
         ser diferent del mostrat en pantalles anteriors.</p>
<h2>Clau Secreta XMR.TO<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>Tingueu en compte que aquesta clau secreta només és vàlida durant 24 hores després que la transacció
         ha començat!</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>
<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 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>
<h2>Compte enrere SideShift.ai!</h2>
<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>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Enviant BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO é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>
<h2>Tipus de Canvi XMR.TO<h2>
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. 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
         la quantitat fins a la qual la transacció BTC sexecutarà instantàniament sense esperar
         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>
<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
<h2>SideShift.ai</h2>
<p>SideShift.ai és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
         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 SideShift.ai<h2>
<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.</p>
<h2>Ordre de compra SideShift.ai<h2>
<p>A la pantalla \"Confirmar\", veureu lordre de compra SideShift.ai 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
         ser diferent del mostrat en pantalles anteriors.</p>
<h2>Clau Secreta XMR.TO<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>Tingueu en compte que aquesta clau secreta només és vàlida durant 24 hores després que la transacció
         ha començat!</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>
<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 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>
<h2>Compte enrere SideShift.ai!</h2>
<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>
]]></string>
<string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Confirmació 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_query">Consultant &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Consultant 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 SideShift.ai</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_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">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_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_key_lb">Clau secreta\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Clau secreta XMR.TO</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\nSideShift.ai</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_amount">Quantitat</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Clau de visualització</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_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_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>
@ -352,12 +352,9 @@
<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="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="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_010">URL de pagament no vàlida o obsoleta</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_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_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_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>
@ -406,4 +403,7 @@
<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_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>

View File

@ -33,8 +33,8 @@
den aktuellen Kurs über die öffentliche Schnittstelle von coinmarketcap.com ab.
Siehe dir ihre Datenschutzerklärung unter https://coinmarketcap.com/privacy für
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.
Weitere Informationen findest du in der Datenschutzerklärung unter https://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://sideshift.ai/.
Monerujo schickt dem Anbieter die BTC-Zieladresse und den Betrag.
Deine IP-Adresse kann dabei aufgezeichnet werden.</p>
<h2>App-Berechtigungen</h2>

View File

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

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Bestätigung 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_query">Frage ab &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Frage XMR.TO-Auftrag ab</string>
<string name="label_send_progress_xmrto_create">Erstelle SideShift.ai-Auftrag</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_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_retry">Berühre zum Wiederholen</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_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_key_lb">Geheimer Schlüssel\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO Geheimer Schlüssel</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\nSideShift.ai</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_amount">Betrag</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">View-Key</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_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_txid">Transaktions-ID in Zwischenablage kopiert!</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="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="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_010">Ungültige oder veraltete Zahlungs-URL</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_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_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_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>
@ -409,4 +406,7 @@
<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_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>

View File

@ -34,8 +34,8 @@
rate through the public API of coinmarketcap.com.
See their privacy policy at https://coinmarketcap.com/privacy for
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.
See their privacy policy at https://xmr.to/ for details. Monerujo send them the BTC
<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://sideshift.ai/ for details. Monerujo send them the BTC
destination address and amount. Your IP will also be collectable.</p>
<h2>App Permissions</h2>
<ul>

View File

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

View File

@ -35,22 +35,22 @@
<string name="info_xmrto"><![CDATA[
<b>Έβαλες μια διεύθυνση bitcoin.</b><br/>
<i>Θα στείλεις XMR και ο παραλήπτης θα πάρει BTC μέσο της υπηρεσίας <b>XMR.TO</b>.</i>
<i>Θα στείλεις XMR και ο παραλήπτης θα πάρει BTC μέσο της υπηρεσίας <b>SideShift.ai</b>.</i>
]]></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_paid">Επιβεβαίωση Εκκρεμεί</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_query">Αίτηση &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<i>Ποσά μέχρι <b>%1$s BTC</b> θα σταλούν <u>άμεσα</u>!</i>
@ -61,25 +61,25 @@
<string name="info_paymentid_integrated">&#x2714; ID πληρωμής ενσωματωμένο</string>
<string name="info_prepare_tx">Προετοιμασία της συναλλαγής σου</string>
<string name="label_send_progress_xmrto_create">Δημιουργία εντολής με XMR.TO</string>
<string name="label_send_progress_xmrto_query">Αίτηση εντολής στο XMR.TO</string>
<string name="label_send_progress_xmrto_create">Δημιουργία εντολής με SideShift.ai</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_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_retry">Πάτησε για να προσπαθήσεις ξανά</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_rate">(Rate: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">Επίσκεψη στο xmr.to για υποστήριξη &amp; με εντοπισμό συναλλαγής</string>
<string name="label_send_btc_xmrto_key_lb">Μυστικό Κλειδί\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO Μυστικό Κλειδί</string>
<string name="label_send_btc_xmrto_info">Επίσκεψη στο SideShift.ai για υποστήριξη &amp; με εντοπισμό συναλλαγής</string>
<string name="label_send_btc_xmrto_key_lb">Μυστικό Κλειδί\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">SideShift.ai Μυστικό Κλειδί</string>
<string name="label_send_btc_address">BTC Διεύθυνση Παραλήπτη</string>
<string name="label_send_btc_amount">Ποσό</string>
@ -142,9 +142,9 @@
<string name="label_copy_viewkey">Κλειδί Προβολής(View Key)</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_xmrtokey">Το Κλειδή XMR.TO αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_xmrtokey">Το Κλειδή αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_address">Η διύθυνση πορτοφολιού αντιγράφηκε στο πρόχειρο!</string>
<string name="message_copy_txid">Το ID συναλλαγής αντιγράφηκε στο πρόχειρο!</string>
<string name="message_nocopy">Η αντιγραφή είναι απενεργοποιημένη για λόγους ασφαλείας!</string>
@ -354,12 +354,9 @@
<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="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="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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -408,4 +405,7 @@
<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_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>

View File

@ -30,8 +30,8 @@
monerujo informpetos pri la kurzo per la publika interfaco de coinmarketcap.com.
Vidu ilian privatecan politikon je https://coinmarketcap.com/privacy por detaloj pri
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.
Vidu ilian privatecan politikon je https://xmr.to/ por detaloj. Monerujo sendos al ili la
<p>Se vi uzas la aplikaĵon por pagi al Bitmono-adresoj, vi uzos la SideShift.ai-servon.
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>
<h2>Permesoj de la aplikaĵo</h2>
<ul>

View File

@ -180,66 +180,58 @@
<ul>
<li>iun OpenAlias por XMR aŭ BTC</li>
<li>bitmonan-adreson (BTC)<li>
<li>bitmonan pag-URI (inkluzive BIP70 kiel bitpay)</li>
</ul>
<h2>Paga ID</h2>
<p>Vi povas uzi pagan IDon por identigi la kialon de la transakcio. Tio estas tute opcia kaj
privata. Ekzemple, tio ebligas komercon kunligi vian transakcion kun varo kiun vi aĉetis.</p>
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>
<h1>Sendi BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO estas ekstera liveranto kiu agas kiel ŝanĝisto de Monero al Bitmono. Ni uzas la
<h2>SideShift.ai</h2>
<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
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>
<h2>Kurzo de XMR.TO<h2>
<p>Sur la \"Kvanto\"-ekrano montriĝos la nunaj parametroj de la XMR.TO-servo. Ili inkludas 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. 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
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 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
XMR.TO-ŝlosilon por sekvi la Bitmono-parton de via mendo sur la hejmpaĝo de XMR.TO.</p>
<p>Bonvolu noti, ke tiu sekreta ŝlosilo validas nur 24 horoj post kiam via transakcio
komenciĝis!</p>
<h2>La retrokalkulo de XMR.TO!</h2>
<p>Kiam la retrokalkulo atingas nulon, vi devos akiri novan QUOTE de XMR.TO, reirante al la
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>
]]></string>
<string name="help_xmrto"><![CDATA[
<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>
<p>Ĉar Monerujo nur traktas la Monero-parton de via transakcio, vi uzu la sekretan
XMR.TO-ŝlosilon por sekvi la Bitmono-flankon de via mendo sur la hejmpaĝo de XMR.TO.</p>
<p>Bonvolu noti, ke tiu sekreta ŝlosilo validas nur dum 24 horoj post kiam via transakcio
komenciĝis!</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>SideShift.ai</h2>
<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
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>
<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>
]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Konfirmo 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_query">Informpetante &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Petante XMR.TO-mendon </string>
<string name="label_send_progress_xmrto_create">Kreante mendon al SideShift.ai</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_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_retry">Tuŝu por reprovi</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_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_key_lb">Sekreta ŝlosilo\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO sekreta ŝlosilo</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\nSideShift.ai</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_amount">Kvanto</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Vida ŝlosilo</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_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_txid">La transakcia ID kopiiĝis en la tondujon!</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="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="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_010">La paga URL malvalidas aŭ ne ĝisdatiĝis</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_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_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_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>
@ -408,4 +405,7 @@
<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_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>

View File

@ -164,68 +164,53 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO 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
https://xmr.to 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>
<h2>Tipo de cambio XMR.TO<h2>
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO.
<h2>SideShift.ai</h2>
<p>SideShift.ai es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
Usamos la API de SideShift.ai para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
https://sideshift.ai y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
no está asociado con SideShift.ai y no puede ayudarte con su servicio.</p>
<h2>Tipo de cambio SideShift.ai<h2>
<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.
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que
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
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia.</p>
<h2>Orden SideShift.ai<h2>
<p> En la pantalla \"Confirmar\" verás la orden SideShift.ai 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
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
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p>
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de
iniciada la transacción!</p>
<h2>Cuenta atrás XMR.TO!</h2>
clave secreta SideShift.ai para rastrear la parte en Bitcoin de tu orden en la página de SideShift.ai.</p>
<h2>Cuenta atrás SideShift.ai!</h2>
<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>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Enviar BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO 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
https://xmr.to 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>
<h2>Tipo de cambio XMR.TO<h2>
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO.
<h2>SideShift.ai</h2>
<p>SideShift.ai es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
Usamos la API de SideShift.ai para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
https://sideshift.ai y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
no está asociado con SideShift.ai y no puede ayudarte con su servicio.</p>
<h2>Tipo de cambio SideShift.ai<h2>
<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.
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que
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
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia.</p>
<h2>Orden SideShift.ai<h2>
<p> En la pantalla \"Confirmar\" verás la orden SideShift.ai 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
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
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p>
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de
iniciada la transacción!</p>
<h2>Cuenta atrás XMR.TO!</h2>
clave secreta SideShift.ai para rastrear la parte en Bitcoin de tu orden en la página de SideShift.ai.</p>
<h2>Cuenta atrás SideShift.ai!</h2>
<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>
]]></string>

View File

@ -219,41 +219,41 @@
<string name="fab_restore_seed">Restaurar monedero con semilla de 25 palabras</string>
<string name="info_xmrto"><![CDATA[
<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 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_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_query">Consultando &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<i>Montos hasta <b>%1$s BTC</b> serán enviados <u>en el momento</u>!</i>
]]></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_query">Consultando 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 SideShift.ai</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_generic_xmrto_error">ERROR XMR.TO</string>
<string name="label_send_progress_queryparms">Consultando parámetros SideShift.ai</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_retry">Toca para reintentar</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_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_key_lb">Clave secreta\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Clave secreta XMR.TO</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\nSideShift.ai</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_amount">Monto</string>
<string name="send_xmrto_timeout">Oye, esperaste demasiado!</string>
<string name="label_copy_xmrtokey">Clave XMR.TO</string>
<string name="message_copy_xmrtokey">¡Clave XMR.TO copiada al portapapeles!</string>
<string name="label_copy_xmrtokey">Clave</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_timed_label">Gastar mis preciados moneroj (%1$s)</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_amount_btc">Monto\n(BTC)</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_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="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" -->
<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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -399,4 +396,7 @@
<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_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>

View File

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

View File

@ -159,78 +159,51 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO 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
https://xmr.to 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>
<h2>XMR.TO vahetuskurss<h2>
<p>On the \"Amount\" screen you will be shown the current parameters of the XMR.TO service. These
<h2>SideShift.ai</h2>
<p>SideShift.ai is a third party service which acts as an exchange from Monero to Bitcoin.
We use the SideShift.ai API to integrate Bitcoin payments into Monerujo. Please check out
https://sideshift.ai and decide for yourself if this is something you want to use. The Monerujo
Team is not associated with SideShift.ai and cannot help you with their service.</p>
<h2>SideShift.ai vahetuskurss<h2>
<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
rate is not guaranteed at this point. You will also see
the amount up to which the BTC transaction will be executed instantly without waiting for
XMR confirmations (see the XMR.TO FAQ for more details). Please note, that XMR.TO does
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
rate is not guaranteed at this point.</p>
<h2>SideShift.ai tellimus<h2>
<p>On the \"Confirm\" screen, you will see the actual SideShift.ai order. This order is valid for
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>
<h2>XMR.TO privaatvõti<h2>
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p>
<p>Please note, that this secret key is only valid for 24 hours after the transaction is
started!</p>
<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
<h2>SideShift.ai privaatvõti<h2>
<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 SideShift.ai homepage.</p>
<h2>SideShift.ai loendur</h2>
<p>Once the countdown reaches zero, you need to get a new quote from SideShift.ai by going back to the
previous step and then coming back to the \"Confirm\" screen.</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Bitcoini (BTC) saatmine</h1>
<h2>XMR.TO</h2>
<p>XMR.TO 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
https://xmr.to 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>
<h2>XMR.TO vahetuskurss<h2>
<p>On the \"Amount\" screen you will be shown the current parameters of the XMR.TO service. These
<h2>SideShift.ai</h2>
<p>SideShift.ai is a third party service which acts as an exchange from Monero to Bitcoin.
We use the SideShift.ai API to integrate Bitcoin payments into Monerujo. Please check out
https://sideshift.ai and decide for yourself if this is something you want to use. The Monerujo
Team is not associated with SideShift.ai and cannot help you with their service.</p>
<h2>SideShift.ai vahetuskurss<h2>
<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
rate is not guaranteed at this point. You will also see
the amount up to which the BTC transaction will be executed instantly without waiting for
XMR confirmations (see the XMR.TO FAQ for more details). Please note, that XMR.TO does
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
rate is not guaranteed at this point.</p>
<h2>SideShift.ai tellimus<h2>
<p>On the \"Confirm\" screen, you will see the actual SideShift.ai order. This order is valid for
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>
<h2>XMR.TO privaatvõti<h2>
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p>
<p>Please note, that this secret key is only valid for 24 hours after the transaction is
started!</p>
<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
<h2>SideShift.ai privaatvõti<h2>
<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 SideShift.ai homepage.</p>
<h2>SideShift.ai loendur</h2>
<p>Once the countdown reaches zero, you need to get a new quote from SideShift.ai by going back to the
previous step and then coming back to the \"Confirm\" screen.</p>
]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Ootan kinnitust</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_query">Küsin &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_prepare_tx">Valmistan ülekannet ette</string>
<string name="label_send_progress_xmrto_create">Loon XMR.TO tellimust</string>
<string name="label_send_progress_xmrto_query">Küsin 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 SideShift.ai tellimust</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_retry">Puuduta uuesti proovimiseks</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_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_key_lb">Privaatvõti\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO privaatvõti</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\nSideShift.ai</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_amount">Kogus</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Vaatamise võti</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_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_txid">Ülekande ID on kopeeritud lõikepuhvrisse!</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="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" -->
<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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -406,4 +403,7 @@
<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_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>

View File

@ -36,7 +36,7 @@
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>
<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
montant. Votre IP serait également collectable.</p>
<h2>Permissions de lapplication</h2>

View File

@ -157,68 +157,54 @@
<ul>
<li>une adresse OpenAlias pour XMR ou BTC</li>
<li>une adresse BTC</li>
<li>une URI bitcoin: (incluant BIP70 comme bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO 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
consulter https://xmr.to 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>
<h2>Taux de change XMR.TO<h2>
<p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive XMR.TO. Cela
<h2>SideShift.ai</h2>
<p>SideShift.ai est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin.
Nous utilisons lAPI SideShift.ai pour intégrer les paiements Bitcoin dans Monerujo. Veuillez
consulter https://sideshift.ai et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo
nest pas affiliée à SideShift.ai et ne peut pas vous aider concernant leurs services.</p>
<h2>Taux de change SideShift.ai<h2>
<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
nest pas garantit à ce stade. Vous verrez également le montnt jusquauquel la transaction BTC
sera exécutée instantanément sans attendre de confirmation XMR (voir la FAQ XMR.TO pour plus de
détails). Veuillez noter que XMR.TO najoute pas de frais additionnels - cest pas cool ça ?</p>
<h2>Ordre XMR.TO<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre XMR.TO actuel. Cette ordre est valide pour
nest pas garantit à ce stade.</p>
<h2>Ordre SideShift.ai<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre SideShift.ai actuel. Cette ordre est valide pour
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>
<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
XMR.TO peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de XMR.TO.</p>
<p>Veuillez noter que cette clef secrète est seulement valable 24h après le lancement de la
transaction !</p>
<h2>Compte à Rebours XMR.TO !</h2>
SideShift.ai peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de SideShift.ai.</p>
<h2>Compte à Rebours SideShift.ai !</h2>
<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 name="help_xmrto"><![CDATA[
<h1>Envoyer des BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO 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
consulter https://xmr.to 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>
<h2>Taux de change XMR.TO<h2>
<p>Sur lécran \"Montant\" vous seront indiqué les paramètres actuels du serive XMR.TO. Cela
<h2>SideShift.ai</h2>
<p>SideShift.ai est un service tierce-partie qui agit commme un change depuis Monero vers Bitcoin.
Nous utilisons lAPI SideShift.ai pour intégrer les paiements Bitcoin dans Monerujo. Veuillez
consulter https://sideshift.ai et décidez vous-même si vous souhaitez lutiliser. Léquipe Monerujo
nest pas affiliée à SideShift.ai et ne peut pas vous aider concernant leurs services.</p>
<h2>Taux de change SideShift.ai<h2>
<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
nest pas garantit à ce stade. Vous verrez également le montnt jusquauquel la transaction BTC
sera exécutée instantanément sans attendre de confirmation XMR (voir la FAQ XMR.TO pour plus de
détails). Veuillez noter que XMR.TO najoute pas de frais additionnels - cest pas cool ça ?</p>
<h2>Ordre XMR.TO<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre XMR.TO actuel. Cette ordre est valide pour
nest pas garantit à ce stade.</p>
<h2>Ordre SideShift.ai<h2>
<p>Sur lécran \"Confirmation\", vous verez lordre SideShift.ai actuel. Cette ordre est valide pour
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>
<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
XMR.TO peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de XMR.TO.</p>
<p>Veuillez noter que cette clef secrète est seulement valable 24h après le lancement de la
transaction !</p>
<h2>Compte à Rebours XMR.TO !</h2>
SideShift.ai peut être utilisée pour suivre le volet Bitcoin de votre ordre sur la page daccueil
de SideShift.ai.</p>
<h2>Compte à Rebours SideShift.ai !</h2>
<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 name="help_create_ledger"><![CDATA[

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">En Attente de Confirmation</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_query">Interrogation &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 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>
@ -63,25 +63,25 @@
<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="label_send_progress_xmrto_create">Création de l\'ordre XMR.TO</string>
<string name="label_send_progress_xmrto_query">Interrogation 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 SideShift.ai</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_retry">Touchez pour réessayer</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_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_key_lb">Clef Secrète\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Clef Secrète XMR.TO</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\nSideShift.ai</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_amount">Montant</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Clef d\'Audit</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_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_txid">ID de Transaction copié !</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="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" -->
<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_010">URL de Paiement invalide ou périmée</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_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_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_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>
@ -412,4 +409,7 @@
<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_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>

View File

@ -34,8 +34,8 @@
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
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
használod. Részletes adatvédelmi irányelveiket a https://xmr.to/ weboldalon tekintheted meg.
<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://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,
ám az IP-címed is begyűjthető.</p>
<h2>Applikációengedélyek</h2>

View File

@ -146,68 +146,53 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</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
viselkedik. Az XMR.TO 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.
A monerujo csapata nincsen kapcsolatban az XMR.TO-val és nem tudnak segítséget nyújtani a
<h2>SideShift.ai</h2>
<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 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://sideshift.ai weboldalra, és döntsd el magad, hogy szeretnéd-e használni.
A monerujo csapata nincsen kapcsolatban az SideShift.ai-val és nem tudnak segítséget nyújtani a
szolgáltatásaikkal kapcsolatban.</p>
<h2>XMR.TO árfolyam<h2>
<p>A Mennyiség oldalon kerülnek megjelenítésre az XMR.TO szolgáltatás paraméterei. Ez magában
<h2>SideShift.ai árfolyam<h2>
<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,
hogy ez az árfolyam ekkor még nem garantált. Megjelenítésre kerül az a mennyiség is, amely mellett
a BTC-tranzakció azonnal megvalósításra kerül XMR-megerősítések nélkül (részletekért olvad el az
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>
hogy ez az árfolyam ekkor még nem garantált.</p>
<h2>SideShift.ai megrendelés<h2>
<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
látottaktól.</p>
<h2>XMR.TO titkos kulcs<h2>
<p>Mivel a monerujo csak a tranzakciód Monero részét kezeli, így az XMR.TO titkos kulcsod
használható a megrendelésed Bitcoin részének nyomonkövetésére az XMR.TO kezdőlapján.</p>
<p>Kérjük vedd figyelembe, hogy ez a titkos kulcs csak a tranzakció kezdetétől számított
24 óráig érvényes!</p>
<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
<h2>SideShift.ai titkos kulcs<h2>
<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 SideShift.ai kezdőlapján.</p>
<h2>SideShift.ai visszaszámlálás!</h2>
<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
visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>BTC-küldés</h1>
<h2>XMR.TO</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
viselkedik. Az XMR.TO 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.
A monerujo csapata nincsen kapcsolatban az XMR.TO-val és nem tudnak segítséget nyújtani a
<h2>SideShift.ai</h2>
<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 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://sideshift.ai weboldalra, és döntsd el magad, hogy szeretnéd-e használni.
A monerujo csapata nincsen kapcsolatban az SideShift.ai-val és nem tudnak segítséget nyújtani a
szolgáltatásaikkal kapcsolatban.</p>
<h2>XMR.TO árfolyam<h2>
<p>A Mennyiség oldalon kerülnek megjelenítésre az XMR.TO szolgáltatás paraméterei. Ez magában
<h2>SideShift.ai árfolyam<h2>
<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,
hogy ez az árfolyam ekkor még nem garantált. Megjelenítésre kerül az a mennyiség is, amely mellett
a BTC-tranzakció azonnal megvalósításra kerül XMR-megerősítések nélkül (részletekért olvad el az
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>
hogy ez az árfolyam ekkor még nem garantált.</p>
<h2>SideShift.ai megrendelés<h2>
<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
látottaktól.</p>
<h2>XMR.TO titkos kulcs<h2>
<p>ivel a monerujo csak a tranzakciód Monero részét kezeli, így az XMR.TO titkos kulcsod
használható a megrendelésed Bitcoin részének nyomonkövetésére az XMR.TO kezdőlapján.</p>
<p>Kérjük vedd figyelembe, hogy ez a titkos kulcs csak a tranzakció kezdetétől számított
24 óráig érvényes!</p>
<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
<h2>SideShift.ai titkos kulcs<h2>
<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 SideShift.ai kezdőlapján.</p>
<h2>SideShift.ai visszaszámlálás!</h2>
<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
visszamész az előző lépésre, majd visszajössz a Megerősítés oldalra.</p>
]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Megerősíté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_query">Lekérdezés&#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 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>
@ -62,25 +62,25 @@
<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="label_send_progress_xmrto_create">XMR.TO 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_create">SideShift.ai megrendelés létrehozása</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_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_retry">Koppints az újrapróbálkozáshoz</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_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_key_lb">Titkos kulcs\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO titkos kulcs</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\nSideShift.ai</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_amount">Mennyiség</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Figyelőkulcs</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_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_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>
@ -356,12 +356,9 @@
<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="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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -410,4 +407,7 @@
<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_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>

View File

@ -27,8 +27,8 @@
<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.
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.
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>
<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://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>
<ul>
<li>INTERNET : Connessione alla rete Monero attraverso un nodo </li>

View File

@ -152,61 +152,51 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO è 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
<h2>SideShift.ai</h2>
<p>SideShift.ai è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
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
con XMR.TO e non è in grado di aiutarti con il servizio da loro offerto.</p>
<h2>Tasso di cambio XMR.TO<h2>
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri
con SideShift.ai e non è in grado di aiutarti con il servizio da loro offerto.</p>
<h2>Tasso di cambio SideShift.ai<h2>
<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
non è ancora garantito in questa fase. Vedrai inoltre l&apos;ammontare fino al quale la transazione BTC verrà eseguita
istantaneamente senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio
XMR.TO non aggiunge commissioni extra - bello vero?</p>
<h2>Ordine XMR.TO<h2>
<p>Sulla schermata \"Conferma\", troverai il vero ordine XMR.TO. Questo ordine è valido per un tempo limitato - potresti
non è ancora garantito in questa fase.</p>
<h2>Ordine SideShift.ai<h2>
<p>Sulla schermata \"Conferma\", troverai il vero ordine SideShift.ai. 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
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
segreta XMR.TO per tracciare il versante Bitcoin del tuo ordine sulla homepage XMR.TO.</p>
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall&apos;inizio della transazione!</p>
<h2>Conto alla rovescia XMR.TO!</h2>
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando
segreta SideShift.ai per tracciare il versante Bitcoin del tuo ordine sulla homepage SideShift.ai.</p>
<h2>Conto alla rovescia SideShift.ai!</h2>
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a SideShift.ai tornando
indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Inviare BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO è 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
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>
<h2>Tasso di cambio XMR.TO<h2>
<p>Sulla schermata \"Ammontare\" ti verranno mostrati i parametri attuali del servizio XMR.TO. Questi parametri 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 istantaneamente
senza attendere conferme XMR (vedi le FAQ XMR.TO per maggiori informazioni). Considera inoltre che il servizio XMR.TO non
aggiunge commissioni extra - bello vero?</p>
<h2>XMR.TO Order<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 mostrato nelle schermate precedenti.</p>
<h2>Chiave segreta XMR.TO<h2>
<h2>SideShift.ai</h2>
<p>SideShift.ai è un servizio di terze parti che funziona come cambiavaluta da Monero a Bitcoin.
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
con SideShift.ai e non è in grado di aiutarti con il servizio da loro offerto.</p>
<h2>Tasso di cambio SideShift.ai<h2>
<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
non è ancora garantito in questa fase.</p>
<h2>Ordine SideShift.ai<h2>
<p>Sulla schermata \"Conferma\", troverai il vero ordine SideShift.ai. 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
mostrato nelle schermate precedenti.</p>
<h2>Chiave segreta SideShift.ai<h2>
<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>
<p>Considera che questa chiave segreta è valida solamente per 24 ore dall&apos;inizio della transazione!</p>
<h2>Conto alla rovescia XMR.TO!</h2>
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a XMR.TO tornando
segreta SideShift.ai per tracciare il versante Bitcoin del tuo ordine sulla homepage SideShift.ai.</p>
<h2>Conto alla rovescia SideShift.ai!</h2>
<p>Non appena il conto alla rovescia arriva a zero, è necessario richiedere una nuova quotazione a SideShift.ai tornando
indietro al passo precedente e tornando poi di nuovo alla schermata \"Conferma\".</p>
]]></string>

View File

@ -36,23 +36,23 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">In attesa di conferma</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_query">Richiedendo &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Richiedendo 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 SideShift.ai</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_retry">Tocca per riprovare</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_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_key_lb">Chiave segreta\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Chiave segreta XMR.TO</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\nSideShift.ai</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_amount">Ammontare</string>
@ -153,9 +153,9 @@
<string name="label_copy_viewkey">Chiave di visualizzazione</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_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_txid">ID transazione copiato negli appunti!</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="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" -->
<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_010">URL di pagamento obsoleto o invalido</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_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_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_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>
@ -411,4 +408,7 @@
<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_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>

View File

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

View File

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

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">monerujo</string>
<string name="wallet_activity_name">ウォレット</string>
<string name="menu_about">Monerujoについて</string>
@ -37,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<b>あなたが入力したのはビットコインのアドレスです。</b><br/>
<i>あなたはXMRを送金し、受け手は XMR.TO のサービスを利用してBTCを受取ります。</i>
<i>あなたはXMRを送金し、受け手は SideShift.ai のサービスを利用してBTCを受取ります。</i>
]]></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_paid">承認を待っています</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_query">問い合わせ中 &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<i><b>%1$s BTC</b> までの数量は <u>即時に</u>送金可能です!</i>
@ -63,25 +62,25 @@
<string name="info_paymentid_integrated">&#x2714; ペイメントID組み込み済み</string>
<string name="info_prepare_tx">取引を準備しています</string>
<string name="label_send_progress_xmrto_create">XMR.TO の注文を作成しています</string>
<string name="label_send_progress_xmrto_query">XMR.TO の注文を問い合わせています</string>
<string name="label_send_progress_xmrto_create">SideShift.ai の注文を作成しています</string>
<string name="label_send_progress_xmrto_query">SideShift.ai の注文を問い合わせています</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_retry">タッチして再試行</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_rate">(レート: %1$s BTC/XMR)</string>
<string name="label_send_btc_xmrto_info">サポートと追跡については xmr.to をご覧ください</string>
<string name="label_send_btc_xmrto_key_lb">シークレットキー\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO のシークレットキー</string>
<string name="label_send_btc_xmrto_info">サポートと追跡については SideShift.ai をご覧ください</string>
<string name="label_send_btc_xmrto_key_lb">シークレットキー\nSideShift.ai</string>
<string name="label_send_btc_xmrto_key">SideShift.ai のシークレットキー</string>
<string name="label_send_btc_address">支払先の BTC アドレス</string>
<string name="label_send_btc_amount">数量</string>
@ -155,9 +154,9 @@
<string name="label_copy_viewkey">表示用キー</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_xmrtokey">XMR.TO キーがクリップボードにコピーされました!</string>
<string name="message_copy_xmrtokey">キーがクリップボードにコピーされました!</string>
<string name="message_copy_address">ウォレットアドレスがクリップボードにコピーされました!</string>
<string name="message_copy_txid">取引IDがクリップボードにコピーされました!</string>
<string name="message_nocopy">セキュリティ上の理由でコピーは無効化されています!</string>
@ -288,9 +287,6 @@
<string name="fab_restore_key">秘密鍵からウォレットを復元</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_new">新しいアカウントを追加 #%1$d</string>
<string name="tx_account">アカウント #</string>
@ -326,8 +322,6 @@
<string name="nfc_tag_read_what">あなたが何をしたいのかわかりません!</string>
<string name="nfc_tag_tap">NFCが利用可能です!</string>
<string name="unknown_amount" translatable="false">\?\?\?</string>
<string name="menu_info">シークレットを見せてください!</string>
<string name="menu_streetmode">ストリートモード</string>
@ -362,13 +356,10 @@
<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" -->
<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_010">ペイメントURLは不正古いです</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_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_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_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>
@ -417,4 +408,7 @@
<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_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>

View File

@ -34,8 +34,8 @@
rate through the public API of coinmarketcap.com.
See their privacy policy at https://coinmarketcap.com/privacy for
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.
See their privacy policy at https://xmr.to/ for details. Monerujo send them the BTC
<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://sideshift.ai/ for details. Monerujo send them the BTC
destination address and amount. Your IP will also be collectable.</p>
<h2>App Permissions</h2>
<ul>

View File

@ -147,66 +147,51 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker XMR.TO-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
er ikke assosierte med XMR.TO og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>XMR.TO vekslingskurs<h2>
<p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til XMR.TO-tjenesten. Disse
<h2>SideShift.ai</h2>
<p>SideShift.ai er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker SideShift.ai-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut
https://sideshift.ai og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne
er ikke assosierte med SideShift.ai og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>SideShift.ai vekslingskurs<h2>
<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
kursen ikke er garantert på dette punktet. Du vil også se
den øvre grensa for at BTC-transaksjonen skal gå igjennom uten å vente på
XMR-bekreftelser (se XMR.TO-FAQen for fler detaljer). Legg merke til at XMR.TO
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
kursen ikke er garantert på dette punktet.</p>
<h2>SideShift.ai ordre<h2>
<p>På \"Bekreft\" skjermen, vil du se den faktiske SideShift.ai ordren. Denne ordren er gyldig for
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>
<h2>XMR.TO hemmelig nøkkel<h2>
<p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din XMR.TO hemmelige nøkkel
bli brukt til å spore BTC-transaksjonen på XMR.TO sine hjemmesider.</p>
<p>Vær oppmerksom på at denne nøkkelen kun er tilgjengelig for 24-timer etter transaksjonen
har blitt utført!</p>
<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
<h2>SideShift.ai hemmelig nøkkel<h2>
<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å SideShift.ai sine hjemmesider.</p>
<h2>SideShift.ai nedtelling!</h2>
<p>Når nedtellinga når null, må du få en ny kvote fra SideShift.ai ved å gå tilbake til
det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Å sende BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker XMR.TO-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
er ikke assosierte med XMR.TO og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>XMR.TO vekslingskurs<h2>
<p>På \"Mengde\" skjermen vil du bli vist de nåværende parametrene til XMR.TO-tjenesten. Disse
<h2>SideShift.ai</h2>
<p>SideShift.ai er en tredjepartstjeneste som lar deg veksle Monero til Bitcoin.
Vi bruker SideShift.ai-APIen til å integrere BTC-betalinger i Monerujo. Sjekk ut
https://sideshift.ai og bestem for deg selv om dette er noe du vil bruke. Monerujo-utviklerne
er ikke assosierte med SideShift.ai og kan ikke hjelpe deg med deres tjeneste.</p>
<h2>SideShift.ai vekslingskurs<h2>
<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
kursen ikke er garantert på dette punktet. Du vil også se
den øvre grensa for at BTC-transaksjonen skal gå igjennom uten å vente på
XMR-bekreftelser (se XMR.TO-FAQen for fler detaljer). Legg merke til at XMR.TO
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
kursen ikke er garantert på dette punktet.</p>
<h2>SideShift.ai ordre<h2>
<p>På \"Bekreft\" skjermen, vil du se den faktiske SideShift.ai ordren. Denne ordren er gyldig for
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>
<h2>XMR.TO hemmelig nøkkel<h2>
<p>Fordi Monerujo bare håndterer XMR delen av transaksjonen din, kan din XMR.TO hemmelige nøkkel
bli brukt til å spore BTC-transaksjonen på XMR.TO sine hjemmesider.</p>
<p>Vær oppmerksom på at denne nøkkelen kun er tilgjengelig for 24-timer etter transaksjonen
har blitt utført!</p>
<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
<h2>SideShift.ai hemmelig nøkkel<h2>
<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å SideShift.ai sine hjemmesider.</p>
<h2>SideShift.ai nedtelling!</h2>
<p>Når nedtellinga når null, må du få en ny kvote fra SideShift.ai ved å gå tilbake til
det tidligere steget og komme tilbake til \"Bekreft\" skjermen.</p>
]]></string>

View File

@ -36,21 +36,21 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Bekreftelse 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_query">Spør &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_prepare_tx">Forbereder din transaksjon</string>
<string name="label_send_progress_xmrto_create">Lager XMR.TO ordre</string>
<string name="label_send_progress_xmrto_query">Spør etter 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 SideShift.ai ordre</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_retry">Trykk for å prøve igjen</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_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_key_lb">Hemmelig nøkkel\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO Hemmelig nøkkel</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\nSideShift.ai</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_amount">Mengde</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">View-nøkkel</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_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_txid">Transaksjons-ID kopiert til utklippstavle!</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="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="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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -408,4 +405,7 @@
<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_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>

View File

@ -27,8 +27,8 @@
<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.
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.
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>
<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://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>
<ul>
<li>INTERNET: Verbinding maken met het Monero-netwerk via een Monero-node</li>

View File

@ -116,41 +116,36 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO 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>
<h2>Wisselkoers XMR.TO<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>
<h2>XMR.TO-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>
<h2>Geheime sleutel XMR.TO<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>Houd er rekening mee dat deze geheime sleutel maar 24 uur geldig is nadat de transactie is gestart!</p>
<h2>XMR.TO telt af!</h2>
<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>
<h2>SideShift.ai</h2>
<p>SideShift.ai is een externe service waarmee je Monero kunt inwisselen voor Bitcoin.
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 SideShift.ai<h2>
<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>SideShift.ai-opdracht<h2>
<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 SideShift.ai<h2>
<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>
<h2>SideShift.ai 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>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>BTC verzenden</h1>
<h2>XMR.TO</h2>
<p>XMR.TO 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>
<h2>Wisselkoers XMR.TO<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>
<h2>XMR.TO-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>
<h2>Geheime sleutel XMR.TO<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>Houd er rekening mee dat deze geheime sleutel maar 24 uur geldig is nadat de transactie is gestart!</p>
<h2>XMR.TO telt af!</h2>
<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>
<h2>SideShift.ai</h2>
<p>SideShift.ai is een externe service waarmee je Monero kunt inwisselen voor Bitcoin.
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 SideShift.ai<h2>
<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>SideShift.ai-opdracht<h2>
<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 SideShift.ai<h2>
<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>
<h2>SideShift.ai 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>
]]></string>
<string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Wacht op bevestiging</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_query">Aanvragen…</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_prepare_tx">Transactie wordt voorbereid</string>
<string name="label_send_progress_xmrto_create">XMR.TO-opdracht maken</string>
<string name="label_send_progress_xmrto_query">XMR.TO-opdracht aanvragen</string>
<string name="label_send_progress_xmrto_create">SideShift.ai-opdracht maken</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_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_retry">Opnieuw proberen</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_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_key_lb">Geheime sleutel\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Geheime sleutel XMR.TO</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\nSideShift.ai</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_amount">Bedrag</string>
@ -151,9 +151,9 @@
<string name="label_copy_viewkey">Alleen-lezen sleutel</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_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_txid">Transactie-ID gekopieerd naar klembord!</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="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" -->
<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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -408,4 +405,7 @@
<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_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>

View File

@ -35,7 +35,7 @@
detalhes de como as requisições são coletadas.
</p>
<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
IP também pode ser coletado.
<h2>Permissões do aplicativo</h2>

View File

@ -158,63 +158,52 @@
<ul>
<li>um OpenAlias para XMR ou BTC</li>
<li>um endereço BTC</li>
<li>um URI bitcoin: (incluindo o BIP70 usado em serviços como o bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO é 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
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
<h2>SideShift.ai</h2>
<p>SideShift.ai é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin.
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 SideShift.ai
e não podemos ajudá-lo caso algo não funcione no serviço.</p>
<h2>Cotação XMR.TO<h2>
<p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do XMR.TO.
<h2>Cotação SideShift.ai<h2>
<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.
Note que nesse momento a cotação ainda não é garantida. Você também verá o valor máximo no qual
a transação será executada de forma instantânea, sem esperar alguma confirmação da transação em XMR.
(consulte o FAQ do XMR.TO para mais detalhes). O XMR.TO não cobra taxas extras, legal né?</p>
<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
Note que nesse momento a cotação ainda não é garantida.</p>
<h2>Ordem SideShift.ai<h2>
<p>Na tela de confirmação você verá a ordem criada no SideShift.ai. 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
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
XMR.TO para rastrear a parte da transação que é em Bitcoin no website do XMR.TO.</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 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
SideShift.ai para rastrear a parte da transação que é em Bitcoin no website do SideShift.ai.</p>
<h2>Contagem regressiva do SideShift.ai</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
anterior e faça o processo novamente.</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Enviando BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO é 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
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 não podemos ajudá-lo caso algo não funcione no serviço.</p>
<h2>Cotação XMR.TO<h2>
<p>Na tela que exibe o valor da transação você poderá consultar os parâmetros do XMR.TO.
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
a transação será executada de forma instantânea, sem esperar alguma confirmação da transação em XMR.
(consulte o FAQ do XMR.TO para mais detalhes). O XMR.TO não cobra taxas extras, legal né?</p>
<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
ser diferente do que estava indicado na tela anterior.</p>
<h2>Chave secreta do XMR.TO<h2>
<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>
<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 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>
<h1>Enviando BTC</h1>
<h2>SideShift.ai</h2>
<p>SideShift.ai é um serviço terceiro que age como casa de câmbio de Monero para Bitcoin.
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 SideShift.ai
e não podemos ajudá-lo caso algo não funcione no serviço.</p>
<h2>Cotação SideShift.ai<h2>
<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.
Note que nesse momento a cotação ainda não é garantida.</p>
<h2>Ordem SideShift.ai<h2>
<p>Na tela de confirmação você verá a ordem criada no SideShift.ai. 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
ser diferente do que estava indicado na tela anterior.</p>
<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
SideShift.ai para rastrear a parte da transação que é em Bitcoin no website do SideShift.ai.</p>
<h2>Contagem regressiva do SideShift.ai</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
anterior e faça o processo novamente.</p>
]]></string>
<string name="help_wallet"><![CDATA[

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Confirmação 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_query">Consultando &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Atualizando 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 SideShift.ai</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_retry">Toque aqui para tentar novamente</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_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_key_lb">Chave secreta\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Chave secreta XMR.TO</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\nSideShift.ai</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_amount">Valor</string>
@ -152,9 +152,9 @@
<string name="label_copy_viewkey">Chave de visualização</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_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_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>
@ -346,12 +346,9 @@
<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="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_010">URL de pagamento inválido</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_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_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_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>
@ -400,4 +397,7 @@
<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_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>

View File

@ -35,8 +35,8 @@
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
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.
Veja a sua política de privacidade em https://xmr.to/ para mais detalhes. O monerujo envia
<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://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>
<h2>Permissões da app</h2>
<ul>

View File

@ -145,70 +145,55 @@
<ul>
<li>Um OpenAlias para XMR ou BTC</li>
<li>um endereço de BTC</li>
<li>um enderço bitcoin: URI (incluindo BIP70 tipo bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO é 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
vai a https://xmr.to 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>
<h2>Taxa de câmbio XMR.TO<h2>
<p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço XMR.TO. Estes
<h2>SideShift.ai</h2>
<p>SideShift.ai é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin.
Nós utilizamos a API do SideShift.ai para integrar pagamentos de Bitcoin no Monerujo. Por favor
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 SideShift.ai e não te pode ajudar com este serviço.</p>
<h2>Taxa de câmbio SideShift.ai<h2>
<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
esta taxa ainda não é garantido. Também vais ver a quantidade máxima de BTC para que
a transação seja executada instantaneamente sem ter que esperar pelas confirmações XMR
(ver o FAQ do XMR.TO para mais detalhes). Nota que o XMR.TO não cobra nenhumas taxas
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
esta taxa ainda não é garantido.</p>
<h2>Pedido SideShift.ai<h2>
<p>No ecrão de \"Confirmação\", vais ver o pedido actual SideShift.ai. Este pedido é válido
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
nos ecrãs anteriores.</p>
<h2>Chave Secreta XMR.TO<h2>
<p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta XMR.TO
<h2>Chave Secreta SideShift.ai<h2>
<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
XMR.TO.</p>
<p>Nota que esta chave secreta só é válida por 24 horas depois de a transacção ter
iniciado!</p>
<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
SideShift.ai.</p>
<h2>Contagem decrescente SideShift.ai!</h2>
<p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do SideShift.ai
indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Enviar BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO é 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
vai a https://xmr.to 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>
<h2>Taxa de câmbio XMR.TO<h2>
<p>No ecrã de \"Quantidade\" vais ver os parâmetros actuais do serviço XMR.TO. Estes
<h2>SideShift.ai</h2>
<p>SideShift.ai é um serviço de terceiros que funciona como intercâmbio de Monero para Bitcoin.
Nós utilizamos a API do SideShift.ai para integrar pagamentos de Bitcoin no Monerujo. Por favor
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 SideShift.ai e não te pode ajudar com este serviço.</p>
<h2>Taxa de câmbio SideShift.ai<h2>
<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
este taxa ainda não é garantido. Também vais ver a quantidade máxima de BTC para que
a transação seja executada instantaneamente sem ter que esperar pelas confirmações XMR
(ver o FAQ do XMR.TO para mais detalhes). Nota que o XMR.TO não cobra nenhumas taxas
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
esta taxa ainda não é garantido.</p>
<h2>Pedido SideShift.ai<h2>
<p>No ecrão de \"Confirmação\", vais ver o pedido actual SideShift.ai. Este pedido é válido
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
nos ecrãs anteriores.</p>
<h2>Chave Secreta XMR.TO<h2>
<p>Como o Monerujo só controla a parte Monero da transacção, a chave secreta XMR.TO
<h2>Chave Secreta SideShift.ai<h2>
<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
XMR.TO.</p>
<p>Nota que esta chave secreta só é válida por 24 horas depois de a transacção ter
iniciado!</p>
<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
SideShift.ai.</p>
<h2>Contagem decrescente SideShift.ai!</h2>
<p>Quando a contagem chega a zero, precisas de obter uma nova taxa de câmbio do SideShift.ai
indo ao passo anterior e depois voltando ao ecrã de \"Confirmar\".</p>
]]></string>

View File

@ -36,22 +36,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Confirmação 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_query">A comunicar &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">A actualizar o 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 SideShift.ai</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_retry">Toca para voltar a tentar</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_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_key_lb">Chave secreta\nXMR.TO</string>
<string name="label_send_btc_xmrto_key">XMR.TO Chave secreta</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\nSideShift.ai</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_amount">Quantidade</string>
@ -149,9 +149,9 @@
<string name="label_copy_viewkey">Ver chave</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_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_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>
@ -358,12 +358,9 @@
<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="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_010">URL de pagamento invalido ou fora de prazo</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_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_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_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>
@ -412,4 +409,7 @@
<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_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>

View File

@ -35,8 +35,8 @@
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>
<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.
Vizualizează politica lor de confidențialitate la adresa https://xmr.to/ pentru detalii. Monerujo le va trimite lor
vei folosi serviciul oferit de SideShift.ai.
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>
<h2>Permisiunile aplicației</h2>
<ul>

View File

@ -137,62 +137,51 @@
<ul>
<li>an OpenAlias for XMR or BTC</li>
<li>a BTC address</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li>
</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>
<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>
<h2>XMR.TO</h2>
<p>XMR.TO 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ă
https://xmr.to 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>
<h2>Rata de schimb al XMR.TO<h2>
<p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului XMR.TO. Aceștia includ cursul de
<h2>SideShift.ai</h2>
<p>SideShift.ai este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin.
Noi folosim API-ul SideShift.ai pentru a integra plățile Bitcoin în Monerujo. Verifică
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 SideShift.ai și nu te poate ajuta cu serviciile oferite de ei.</p>
<h2>Rata de schimb al SideShift.ai<h2>
<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
nu sunt garantate în acest moment. Vei vedea, de asemenea, suma până la care tranzacția BTC va fi
executată instantaneu fără a aștepta confirmarea XMR (verifică FAQ-ul XMR.TO pentru detalii). Notează că, XMR.TO
nu percepe comisioane extra - nu e așa că este cool?</p>
<h2>Dispoziție XMR.TO<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a XMR.TO. Această comandă este valabilă pentru
nu sunt garantate în acest moment.</p>
<h2>Dispoziție SideShift.ai<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a SideShift.ai. Această comandă este valabilă pentru
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>
<h2>Cheia secretă XMR.TO<h2>
<p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a XMR.TO
poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul XMR.TO.</p>
<p>Te rog notează, că această cheie secretă este validă doar pentru 24 ore din momentul începerii tranzacției!</p>
<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 XMR.TO mergând
<h2>Cheia secretă SideShift.ai<h2>
<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 SideShift.ai.</p>
<h2>Numerotarea inversă SideShift.ai</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
înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p>
]]></string>
<string name="help_xmrto"><![CDATA[
<h1>Transferul de BTC</h1>
<h2>XMR.TO</h2>
<p>XMR.TO 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ă
https://xmr.to 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>
<h2>Rata de schimb al XMR.TO<h2>
<p>Pe ecranul cu \"Suma\" vor fi afișați parametrii ai serviciului XMR.TO. Aceștia includ cursul de
<h2>SideShift.ai</h2>
<p>SideShift.ai este un serviciu terță parte care care acționeaza ca un schimb valutar între Monero și Bitcoin.
Noi folosim API-ul SideShift.ai pentru a integra plățile Bitcoin în Monerujo. Verifică
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 SideShift.ai și nu te poate ajuta cu serviciile oferite de ei.</p>
<h2>Rata de schimb al SideShift.ai<h2>
<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
nu sunt garantate în acest moment. Vei vedea, de asemenea, suma până la care tranzacția BTC va fi
executată instantaneu fără a aștepta confirmarea XMR (verifică FAQ-ul XMR.TO pentru detalii). Notează că, XMR.TO
nu percepe comisioane extra - nu e așa că este cool?</p>
<h2>Dispoziție XMR.TO<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a XMR.TO. Această comandă este valabilă pentru
nu sunt garantate în acest moment.</p>
<h2>Dispoziție SideShift.ai<h2>
<p>Pe ecranul cu \"Confirm\", vei vedea comanda actuală a SideShift.ai. Această comandă este valabilă pentru
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>
<h2>Cheia secretă XMR.TO<h2>
<p>Din moment ce Monerujo gestionează numai partea Monero din tranzacția ta, cheia secretă a XMR.TO
poate fi folosită pentru a urmari partea Bitcoin a comenzii tale de pe site-ul XMR.TO.</p>
<p>Te rog notează, că această cheie secretă este validă doar pentru 24 ore din momentul începerii tranzacției!</p>
<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 XMR.TO mergând
<h2>Cheia secretă SideShift.ai<h2>
<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 SideShift.ai.</p>
<h2>Numerotarea inversă SideShift.ai</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
înapoi la pasul anterior apoi revenind la ecranul \"Confirm\".</p>
]]></string>

View File

@ -35,22 +35,22 @@
<string name="info_xmrto"><![CDATA[
<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 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_paid">Confirmare î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_query">Interogare &#8230;</string>
<string name="info_send_xmrto_parms"><![CDATA[
<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 name="info_send_xmrto_zeroconf"><![CDATA[
<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_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_query">Interogare ordin XMR.TO</string>
<string name="label_send_progress_xmrto_create">Creearea ordinului SideShift.ai</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_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_retry">Atinge pentru reîncercare</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_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_key_lb">Cheia secretă \nXMR.TO</string>
<string name="label_send_btc_xmrto_key">Cheia secretă XMR.TO </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ă \nSideShift.ai</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_amount">Sumă</string>
@ -142,9 +142,9 @@
<string name="label_copy_viewkey">Cheie Vizualizare</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_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_txid">ID tranzacție copiată la clipboard!</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="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="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_010">Invalid or outdated Payment URL</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_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_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_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>
@ -408,4 +405,7 @@
<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_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>

View File

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

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