mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-07 11:35:59 +02:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4ca9328949 | ||
![]() |
08b5a87f19 | ||
![]() |
445d8acc38 | ||
![]() |
9385ac8c31 | ||
![]() |
4c7ebd8402 |
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 165
|
||||
versionName "1.10.15 'Node-O-matiC'"
|
||||
versionCode 166
|
||||
versionName "1.10.16 'Node-O-matiC'"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
|
@@ -42,6 +42,22 @@
|
||||
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:scheme="monero" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:scheme="bitcoin" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
|
||||
android:resource="@xml/usb_device_filter" />
|
||||
|
@@ -269,7 +269,11 @@ public class LoginActivity extends BaseActivity
|
||||
} else {
|
||||
Timber.i("Waiting for permissions");
|
||||
}
|
||||
processUsbIntent(getIntent());
|
||||
|
||||
// try intents
|
||||
Intent intent = getIntent();
|
||||
if (!processUsbIntent(intent))
|
||||
processUriIntent(intent);
|
||||
}
|
||||
|
||||
boolean checkServiceRunning() {
|
||||
@@ -716,6 +720,10 @@ public class LoginActivity extends BaseActivity
|
||||
intent.putExtra(WalletActivity.REQUEST_PW, walletPassword);
|
||||
intent.putExtra(WalletActivity.REQUEST_FINGERPRINT_USED, fingerprintUsed);
|
||||
intent.putExtra(WalletActivity.REQUEST_STREETMODE, streetmode);
|
||||
if (uri != null) {
|
||||
intent.putExtra(WalletActivity.REQUEST_URI, uri);
|
||||
uri = null; // use only once
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@@ -1385,7 +1393,7 @@ public class LoginActivity extends BaseActivity
|
||||
processUsbIntent(intent);
|
||||
}
|
||||
|
||||
private void processUsbIntent(Intent intent) {
|
||||
private boolean processUsbIntent(Intent intent) {
|
||||
String action = intent.getAction();
|
||||
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
|
||||
synchronized (this) {
|
||||
@@ -1398,6 +1406,21 @@ public class LoginActivity extends BaseActivity
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String uri = null;
|
||||
|
||||
private void processUriIntent(Intent intent) {
|
||||
String action = intent.getAction();
|
||||
if (Intent.ACTION_VIEW.equals(action)) {
|
||||
synchronized (this) {
|
||||
uri = intent.getDataString();
|
||||
Timber.d("URI Intent %s", uri);
|
||||
HelpFragment.display(getSupportFragmentManager(), R.string.help_uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -47,6 +47,7 @@ import android.widget.Toast;
|
||||
|
||||
import com.m2049r.xmrwallet.data.BarcodeData;
|
||||
import com.m2049r.xmrwallet.data.TxData;
|
||||
import com.m2049r.xmrwallet.data.UserNotes;
|
||||
import com.m2049r.xmrwallet.dialog.CreditsFragment;
|
||||
import com.m2049r.xmrwallet.dialog.HelpFragment;
|
||||
import com.m2049r.xmrwallet.fragment.send.SendAddressWizardFragment;
|
||||
@@ -59,7 +60,6 @@ import com.m2049r.xmrwallet.model.WalletManager;
|
||||
import com.m2049r.xmrwallet.service.WalletService;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor;
|
||||
import com.m2049r.xmrwallet.data.UserNotes;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -81,6 +81,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
public static final String REQUEST_PW = "pw";
|
||||
public static final String REQUEST_FINGERPRINT_USED = "fingerprint";
|
||||
public static final String REQUEST_STREETMODE = "streetmode";
|
||||
public static final String REQUEST_URI = "uri";
|
||||
|
||||
private NavigationView accountsView;
|
||||
private DrawerLayout drawer;
|
||||
@@ -92,6 +93,8 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
|
||||
private String password;
|
||||
|
||||
private String uri = null;
|
||||
|
||||
private long streetMode = 0;
|
||||
|
||||
@Override
|
||||
@@ -191,6 +194,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
// we can set the streetmode height AFTER opening the wallet
|
||||
requestStreetMode = extras.getBoolean(REQUEST_STREETMODE);
|
||||
password = extras.getString(REQUEST_PW);
|
||||
uri = extras.getString(REQUEST_URI);
|
||||
connectWalletService(walletId, password);
|
||||
} else {
|
||||
finish();
|
||||
@@ -512,7 +516,8 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
|
||||
@Override
|
||||
public void onSendRequest() {
|
||||
replaceFragment(new SendFragment(), null, null);
|
||||
replaceFragment(SendFragment.newInstance(uri), null, null);
|
||||
uri = null; // only use uri once
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -67,7 +67,7 @@ public class HelpFragment extends DialogFragment {
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setView(view);
|
||||
builder.setNegativeButton(R.string.about_close,
|
||||
builder.setNegativeButton(R.string.help_ok,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
|
@@ -38,15 +38,16 @@ import android.widget.EditText;
|
||||
import com.m2049r.xmrwallet.OnBackPressedListener;
|
||||
import com.m2049r.xmrwallet.OnUriScannedListener;
|
||||
import com.m2049r.xmrwallet.R;
|
||||
import com.m2049r.xmrwallet.WalletActivity;
|
||||
import com.m2049r.xmrwallet.data.BarcodeData;
|
||||
import com.m2049r.xmrwallet.data.PendingTx;
|
||||
import com.m2049r.xmrwallet.data.TxData;
|
||||
import com.m2049r.xmrwallet.data.TxDataBtc;
|
||||
import com.m2049r.xmrwallet.data.UserNotes;
|
||||
import com.m2049r.xmrwallet.layout.SpendViewPager;
|
||||
import com.m2049r.xmrwallet.model.PendingTransaction;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.Notice;
|
||||
import com.m2049r.xmrwallet.data.UserNotes;
|
||||
import com.m2049r.xmrwallet.widget.DotBar;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
|
||||
@@ -104,6 +105,14 @@ public class SendFragment extends Fragment
|
||||
|
||||
static private int MAX_FALLBACK = Integer.MAX_VALUE;
|
||||
|
||||
public static SendFragment newInstance(String uri) {
|
||||
SendFragment f = new SendFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(WalletActivity.REQUEST_URI, uri);
|
||||
f.setArguments(args);
|
||||
return f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
@@ -187,6 +196,16 @@ public class SendFragment extends Fragment
|
||||
etDummy.requestFocus();
|
||||
Helper.hideKeyboard(getActivity());
|
||||
|
||||
Bundle args = getArguments();
|
||||
if (args != null) {
|
||||
String uri = args.getString(WalletActivity.REQUEST_URI);
|
||||
Timber.d("URI: %s", uri);
|
||||
if (uri != null) {
|
||||
barcodeData = BarcodeData.fromQrCode(uri);
|
||||
Timber.d("barcodeData: %s", barcodeData != null ? barcodeData.toString() : "null");
|
||||
}
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
|
@@ -244,32 +244,48 @@ public class KeyStoreHelper {
|
||||
Timber.d("M Keys created");
|
||||
}
|
||||
|
||||
private static KeyStore.PrivateKeyEntry getPrivateKeyEntry(String alias) {
|
||||
private static PrivateKey getPrivateKey(String alias) {
|
||||
try {
|
||||
KeyStore ks = KeyStore
|
||||
.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
ks.load(null);
|
||||
KeyStore.Entry entry = ks.getEntry(alias, null);
|
||||
//KeyStore.Entry entry = ks.getEntry(alias, null);
|
||||
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, null);
|
||||
|
||||
if (entry == null) {
|
||||
if (privateKey == null) {
|
||||
Timber.w("No key found under alias: %s", alias);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!(entry instanceof KeyStore.PrivateKeyEntry)) {
|
||||
Timber.w("Not an instance of a PrivateKeyEntry");
|
||||
return null;
|
||||
}
|
||||
return (KeyStore.PrivateKeyEntry) entry;
|
||||
return privateKey;
|
||||
} catch (IOException | NoSuchAlgorithmException | CertificateException
|
||||
| UnrecoverableEntryException | KeyStoreException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static PublicKey getPublicKey(String alias) {
|
||||
try {
|
||||
KeyStore ks = KeyStore
|
||||
.getInstance(SecurityConstants.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);
|
||||
ks.load(null);
|
||||
|
||||
PublicKey publicKey = ks.getCertificate(alias).getPublicKey();
|
||||
|
||||
if (publicKey == null) {
|
||||
Timber.w("No public key");
|
||||
return null;
|
||||
}
|
||||
return publicKey;
|
||||
} catch (IOException | NoSuchAlgorithmException | CertificateException
|
||||
| KeyStoreException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] encrypt(String alias, byte[] data) {
|
||||
try {
|
||||
PublicKey publicKey = getPrivateKeyEntry(alias).getCertificate().getPublicKey();
|
||||
PublicKey publicKey = getPublicKey(alias);
|
||||
Cipher cipher = Cipher.getInstance(SecurityConstants.CIPHER_RSA_ECB_PKCS1);
|
||||
|
||||
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||
@@ -283,9 +299,8 @@ public class KeyStoreHelper {
|
||||
|
||||
private static byte[] decrypt(String alias, byte[] data) {
|
||||
try {
|
||||
KeyStore.PrivateKeyEntry pke = getPrivateKeyEntry(alias);
|
||||
if (pke == null) return null;
|
||||
PrivateKey privateKey = pke.getPrivateKey();
|
||||
PrivateKey privateKey = getPrivateKey(alias);
|
||||
if (privateKey == null) return null;
|
||||
Cipher cipher = Cipher.getInstance(SecurityConstants.CIPHER_RSA_ECB_PKCS1);
|
||||
|
||||
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||
@@ -306,41 +321,14 @@ public class KeyStoreHelper {
|
||||
*/
|
||||
private static byte[] signData(String alias, byte[] data) throws NoSuchAlgorithmException,
|
||||
InvalidKeyException, SignatureException {
|
||||
KeyStore.PrivateKeyEntry pke = getPrivateKeyEntry(alias);
|
||||
if (pke == null) return null;
|
||||
PrivateKey privateKey = getPrivateKeyEntry(alias).getPrivateKey();
|
||||
PrivateKey privateKey = getPrivateKey(alias);
|
||||
if (privateKey == null) return null;
|
||||
Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
|
||||
s.initSign(privateKey);
|
||||
s.update(data);
|
||||
return s.sign();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given some data and a signature, uses the key pair stored in the Android
|
||||
* Key Store to verify that the data was signed by this application, using
|
||||
* that key pair.
|
||||
*
|
||||
* @param data The data to be verified.
|
||||
* @param signature The signature provided for the data.
|
||||
* @return A boolean value telling you whether the signature is valid or
|
||||
* not.
|
||||
*/
|
||||
private static boolean verifyData(String alias, byte[] data, byte[] signature)
|
||||
throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
|
||||
|
||||
// Make sure the signature string exists
|
||||
if (signature == null) {
|
||||
Timber.w("Invalid signature.");
|
||||
return false;
|
||||
}
|
||||
|
||||
KeyStore.PrivateKeyEntry keyEntry = getPrivateKeyEntry(alias);
|
||||
Signature s = Signature.getInstance(SecurityConstants.SIGNATURE_SHA256withRSA);
|
||||
s.initVerify(keyEntry.getCertificate());
|
||||
s.update(data);
|
||||
return s.verify(signature);
|
||||
}
|
||||
|
||||
public interface SecurityConstants {
|
||||
String KEYSTORE_PROVIDER_ANDROID_KEYSTORE = "AndroidKeyStore";
|
||||
String TYPE_RSA = "RSA";
|
||||
|
@@ -289,4 +289,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -274,4 +274,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
57
app/src/main/res/values-eo/about.xml
Normal file
57
app/src/main/res/values-eo/about.xml
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="about_close">Fermi</string>
|
||||
<string name="about_whoami">Mi estas monerujo</string>
|
||||
<string name="about_version">Versio %1$s (%2$d)</string>
|
||||
|
||||
<string name="credits_text"><![CDATA[
|
||||
<b>Agnoskoj</b>
|
||||
<br/>
|
||||
m2049r, baltsar777, anhdres, keejef,
|
||||
rehrar, EarlOfEgo, ErCiccione kaj aliaj.
|
||||
<br/><br/>
|
||||
<a href="https://monerujo.io/">monerujo.io</a>
|
||||
]]></string>
|
||||
|
||||
<string name="privacy_policy"><![CDATA[
|
||||
<h1>Privateca politiko</h1>
|
||||
<p>Tiu paĝo informas vin pri nia politiko rilate al la kolektado, uzado
|
||||
kaj rivelado de personaj informoj kiujn ni ricevas de uzantoj de la
|
||||
aplikaĵo. (monerujo: Monero Wallet).</p>
|
||||
<p>Uzante la aplikaĵon, vi akceptas la kolektadon kaj uzon de informoj
|
||||
kongrue al tiu politiko.</p>
|
||||
<h2>Kolektitaj datumoj</h2>
|
||||
<p>Persona datumo estas ĉiu ajn datumo kiu povas identigi personon.<p>
|
||||
<p>Monero-ŝlosiloj kaj publikaj adresoj kolektiĝas kaj traktiĝas de la aplikaĵo
|
||||
lokale, por la celo trakti transakciojn, kaj sendiĝas sur la Monero-reto je ĉifrita
|
||||
formo.</p>
|
||||
<p>Aliaj personaj datumoj ne kolektiĝas de la aplikaĵo.</p>
|
||||
<p>Se vi uzas la opcian funkcionon, kiu permesas nombrumi vian pagon je alia valuto (ekz. dolaroj),
|
||||
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
|
||||
BTC-ricevontadreson kaj kvanton. Via IP-adreso ankaŭ kolekteblos.</p>
|
||||
<h2>Permesoj de la aplikaĵo</h2>
|
||||
<ul>
|
||||
<li>INTERRETO : Konekti kun la Monero-reto per noda demono</li>
|
||||
<li>LEGI_EKSTERAJN_MEMORILOJN : Legi la monujdosierojn kiuj konserviĝas en la aparato</li>
|
||||
<li>SKRIBI_EKSTERAJN_MEMORILOJN : Skribi la monujdosierojn kiuj konserviĝas en la aparato</li>
|
||||
<li>LASI_VEKA : Lasi la aparaton veka dum la sinkronizado</li>
|
||||
<li>FILMILO : Skani QR-kodojn por ricevi Monerojn</li>
|
||||
</ul>
|
||||
<h2>Ŝanĝoj de la privateca politiko</h2>
|
||||
<p>Ni eble ĝisdatigos tiun privatecan politikon de temp\' al tempo. Ni
|
||||
sciigos vin pri ĉiu ŝanĝo tiel : ni sendos la novan privatecan politikon en la
|
||||
aplikaĵon kaj sur la retejo (www.monerujo.io)
|
||||
Ni konsilas al vi, ke vi regule gvatu tiun dokumenton kaze de ŝanĝoj.
|
||||
<p>Tiu privateca politiko ĝisdatiĝis lastfoje la 10an de novembro 2017.
|
||||
</p>
|
||||
<h2>Kontaktu nin</h2>
|
||||
<p>Se vi havas ian demandon pri nia privateca politiko,
|
||||
aŭ pri kiel viaj datumoj kolektiĝas kaj traktiĝas,
|
||||
kontaktu retpoŝte privacy@monerujo.io.
|
||||
</p>
|
||||
]]></string>
|
||||
</resources>
|
327
app/src/main/res/values-eo/help.xml
Normal file
327
app/src/main/res/values-eo/help.xml
Normal file
File diff suppressed because it is too large
Load Diff
378
app/src/main/res/values-eo/strings.xml
Normal file
378
app/src/main/res/values-eo/strings.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -314,4 +314,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -306,4 +306,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -311,4 +311,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -296,4 +296,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -293,4 +293,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -429,4 +429,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -294,4 +294,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -222,4 +222,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -289,4 +289,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -297,4 +297,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -282,4 +282,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -300,4 +300,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -259,4 +259,16 @@
|
||||
V prípade, že nemáte žiadne uzly vo svojich záložkách, Monerujo bude skúšať uzly (seed nodes) natvrdo zapísané v kóde Monero. Vyhľadávanie končí ak Monerujo nájde aspoň 10 vzdialených uzlov.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -277,4 +277,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
\"<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="help_create_new"><![CDATA[
|
||||
<h1>Створити гаманець - Новий</h1>
|
||||
@@ -291,4 +291,17 @@ https://getmonero.org/resources/moneropedia/change.html
|
||||
Monerujo will go straight to the Monero seed nodes hardcoded into Monero. The
|
||||
scan stops when it finds 10 remote nodes in total.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -255,4 +255,17 @@
|
||||
]]></string>
|
||||
|
||||
<!-- Note for translators: new/changed text also in help_send -->
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -224,4 +224,17 @@
|
||||
如果你沒有任何書籤節點 (或是書籤節點無法提供它們的連接清單),Monerujo 將會直接從 Monero 內建的種子節點取得清單。
|
||||
這個掃描功能將會在總共可用節點的數量達到十個後停止。</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -292,4 +292,17 @@
|
||||
Monerujo will go straight to the Monero seed nodes hardcoded into Monero. The
|
||||
scan stops when it finds 10 remote nodes in total.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_uri"><![CDATA[
|
||||
<h1>Using a payment link</h1>
|
||||
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p>
|
||||
<p>
|
||||
1. Open the wallet you want to spend from<br>
|
||||
2. Wait until the wallet is synced & the "Give" button appears<br>
|
||||
3. Touch the "Give" button
|
||||
</p>
|
||||
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" -->
|
||||
</resources>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">Stagenet</string>
|
||||
<string name="app_name" translatable="false">monerujo Stagenet</string>
|
||||
</resources>
|
@@ -6,7 +6,7 @@ buildscript {
|
||||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.3.0'
|
||||
classpath 'com.android.tools.build:gradle:3.3.1'
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user