mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-04 00:53:36 +02:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
94f87a5193 | ||
![]() |
8a8fc5ec9e | ||
![]() |
036d4ebf6c | ||
![]() |
c6d4de8599 | ||
![]() |
2ef7f8571c | ||
![]() |
d2612a26e5 | ||
![]() |
7e14572756 | ||
![]() |
6f840dcacf | ||
![]() |
36b389cd0f | ||
![]() |
ed2b95ea37 | ||
![]() |
8d41d1d03e |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -6,7 +6,10 @@
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.DS_Store
|
||||
/app/build
|
||||
/app/release
|
||||
/app/alpha
|
||||
/app/prod
|
||||
/app/alphaMainnet
|
||||
/app/prodMainnet
|
||||
/app/alphaStagenet
|
||||
|
5
app/.gitignore
vendored
5
app/.gitignore
vendored
@@ -1,5 +0,0 @@
|
||||
.externalNativeBuild
|
||||
build
|
||||
app.iml
|
||||
prod
|
||||
alpha
|
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 155
|
||||
versionName "1.10.5 'Node-O-matiC'"
|
||||
versionCode 160
|
||||
versionName "1.10.10 'Node-O-matiC'"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
@@ -27,6 +27,7 @@ android {
|
||||
stagenet {
|
||||
dimension 'net'
|
||||
applicationIdSuffix '.stage'
|
||||
versionNameSuffix ' (stage)'
|
||||
}
|
||||
alpha {
|
||||
dimension 'type'
|
||||
|
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">monerujo - Debug</string>
|
||||
</resources>
|
@@ -7,8 +7,10 @@
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<application
|
||||
android:name=".XmrWalletApplication"
|
||||
|
@@ -417,8 +417,8 @@ Java_com_m2049r_xmrwallet_model_WalletManager_verifyWalletPassword(JNIEnv *env,
|
||||
//virtual int queryWalletHardware(const std::string &keys_file_name, const std::string &password) const = 0;
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_com_m2049r_xmrwallet_model_WalletManager_queryWalletDeviceJ(JNIEnv *env, jobject instance,
|
||||
jstring keys_file_name,
|
||||
jstring password) {
|
||||
jstring keys_file_name,
|
||||
jstring password) {
|
||||
const char *_keys_file_name = env->GetStringUTFChars(keys_file_name, NULL);
|
||||
const char *_password = env->GetStringUTFChars(password, NULL);
|
||||
Bitmonero::Wallet::Device device_type;
|
||||
@@ -1185,10 +1185,11 @@ jobject newTransferList(JNIEnv *env, Bitmonero::TransactionInfo *info) {
|
||||
|
||||
jobject newTransactionInfo(JNIEnv *env, Bitmonero::TransactionInfo *info) {
|
||||
jmethodID c = env->GetMethodID(class_TransactionInfo, "<init>",
|
||||
"(IZZJJJLjava/lang/String;JLjava/lang/String;IIJLjava/util/List;)V");
|
||||
"(IZZJJJLjava/lang/String;JLjava/lang/String;IIJLjava/lang/String;Ljava/util/List;)V");
|
||||
jobject transfers = newTransferList(env, info);
|
||||
jstring _hash = env->NewStringUTF(info->hash().c_str());
|
||||
jstring _paymentId = env->NewStringUTF(info->paymentId().c_str());
|
||||
jstring _label = env->NewStringUTF(info->label().c_str());
|
||||
uint32_t subaddrIndex = 0;
|
||||
if (info->direction() == Bitmonero::TransactionInfo::Direction_In)
|
||||
subaddrIndex = *(info->subaddrIndex().begin());
|
||||
@@ -1205,6 +1206,7 @@ jobject newTransactionInfo(JNIEnv *env, Bitmonero::TransactionInfo *info) {
|
||||
info->subaddrAccount(),
|
||||
subaddrIndex,
|
||||
info->confirmations(),
|
||||
_label,
|
||||
transfers);
|
||||
env->DeleteLocalRef(transfers);
|
||||
env->DeleteLocalRef(_hash);
|
||||
@@ -1397,7 +1399,7 @@ Java_com_m2049r_xmrwallet_model_WalletManager_setLogLevel(JNIEnv *env, jclass cl
|
||||
*
|
||||
* @return length of received data in response or -1 if error
|
||||
*/
|
||||
int LedgerExchange(
|
||||
int LedgerExchange(
|
||||
unsigned char *command,
|
||||
unsigned int cmd_len,
|
||||
unsigned char *response,
|
||||
|
@@ -60,6 +60,7 @@ public class TxFragment extends Fragment {
|
||||
}
|
||||
|
||||
private TextView tvAccount;
|
||||
private TextView tvAddress;
|
||||
private TextView tvTxTimestamp;
|
||||
private TextView tvTxId;
|
||||
private TextView tvTxKey;
|
||||
@@ -90,6 +91,7 @@ public class TxFragment extends Fragment {
|
||||
tvTxAmountBtc = view.findViewById(R.id.tvTxAmountBtc);
|
||||
|
||||
tvAccount = view.findViewById(R.id.tvAccount);
|
||||
tvAddress = view.findViewById(R.id.tvAddress);
|
||||
tvTxTimestamp = view.findViewById(R.id.tvTxTimestamp);
|
||||
tvTxId = view.findViewById(R.id.tvTxId);
|
||||
tvTxKey = view.findViewById(R.id.tvTxKey);
|
||||
@@ -219,12 +221,16 @@ public class TxFragment extends Fragment {
|
||||
if (info.txKey == null) {
|
||||
info.txKey = activityCallback.getTxKey(info.hash);
|
||||
}
|
||||
if (info.address == null) {
|
||||
info.address = activityCallback.getTxAddress(info.account, info.subaddress);
|
||||
}
|
||||
loadNotes(info);
|
||||
|
||||
activityCallback.setSubtitle(getString(R.string.tx_title));
|
||||
activityCallback.setToolbarButton(Toolbar.BUTTON_BACK);
|
||||
|
||||
tvAccount.setText(getString(R.string.tx_account_formatted, info.account, info.subaddress));
|
||||
tvAddress.setText(info.address);
|
||||
|
||||
tvTxTimestamp.setText(TS_FORMATTER.format(new Date(info.timestamp * 1000)));
|
||||
tvTxId.setText(info.hash);
|
||||
@@ -331,6 +337,8 @@ public class TxFragment extends Fragment {
|
||||
|
||||
String getTxNotes(String hash);
|
||||
|
||||
String getTxAddress(int major, int minor);
|
||||
|
||||
void onSetNote(String txId, String notes);
|
||||
|
||||
void setToolbarButton(int type);
|
||||
|
@@ -168,6 +168,11 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
return getWallet().getUserNote(txId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTxAddress(int major, int minor) {
|
||||
return getWallet().getSubaddress(major, minor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
@@ -18,10 +18,8 @@ package com.m2049r.xmrwallet.model;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
// this is not the TransactionInfo from the API as that is owned by the TransactionHistory
|
||||
// this is a POJO for the TransactionInfoAdapter
|
||||
@@ -53,11 +51,6 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
}
|
||||
}
|
||||
|
||||
// virtual std::set<uint32_t> subaddrIndex() const = 0;
|
||||
// virtual uint32_t subaddrAccount() const = 0;
|
||||
// virtual std::string label() const = 0;
|
||||
// virtual uint64_t confirmations() const = 0;
|
||||
|
||||
public Direction direction;
|
||||
public boolean isPending;
|
||||
public boolean isFailed;
|
||||
@@ -70,10 +63,12 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
public int account;
|
||||
public int subaddress;
|
||||
public long confirmations;
|
||||
public String subaddressLabel;
|
||||
public List<Transfer> transfers;
|
||||
|
||||
public String txKey = null;
|
||||
public String notes = null;
|
||||
public String address = null;
|
||||
|
||||
public TransactionInfo(
|
||||
int direction,
|
||||
@@ -88,6 +83,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
int account,
|
||||
int subaddress,
|
||||
long confirmations,
|
||||
String subaddressLabel,
|
||||
List<Transfer> transfers) {
|
||||
this.direction = Direction.values()[direction];
|
||||
this.isPending = isPending;
|
||||
@@ -101,6 +97,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
this.account = account;
|
||||
this.subaddress = subaddress;
|
||||
this.confirmations = confirmations;
|
||||
this.subaddressLabel = subaddressLabel;
|
||||
this.transfers = transfers;
|
||||
}
|
||||
|
||||
@@ -122,9 +119,11 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
out.writeInt(account);
|
||||
out.writeInt(subaddress);
|
||||
out.writeLong(confirmations);
|
||||
out.writeString(subaddressLabel);
|
||||
out.writeList(transfers);
|
||||
out.writeString(txKey);
|
||||
out.writeString(notes);
|
||||
out.writeString(address);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<TransactionInfo> CREATOR = new Parcelable.Creator<TransactionInfo>() {
|
||||
@@ -150,9 +149,11 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
|
||||
account = in.readInt();
|
||||
subaddress = in.readInt();
|
||||
confirmations = in.readLong();
|
||||
subaddressLabel = in.readString();
|
||||
transfers = in.readArrayList(Transfer.class.getClassLoader());
|
||||
txKey = in.readString();
|
||||
notes = in.readString();
|
||||
address = in.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -81,6 +81,8 @@ public class Helper {
|
||||
(BuildConfig.FLAVOR.startsWith("prod") ? "" : "." + BuildConfig.FLAVOR)
|
||||
+ (BuildConfig.DEBUG ? "-debug" : "");
|
||||
|
||||
static public final String NOCRAZYPASS_FLAGFILE = ".nocrazypass";
|
||||
|
||||
static public final String CRYPTO = "XMR";
|
||||
|
||||
static private final String WALLET_DIR = "monerujo" + FLAVOR_SUFFIX;
|
||||
@@ -347,6 +349,11 @@ public class Helper {
|
||||
WalletManager.setLogLevel(level);
|
||||
}
|
||||
|
||||
static public boolean useCrazyPass(Context context) {
|
||||
File flagFile = new File(getWalletRoot(context), NOCRAZYPASS_FLAGFILE);
|
||||
return !flagFile.exists();
|
||||
}
|
||||
|
||||
// try to figure out what the real wallet password is given the user password
|
||||
// which could be the actual wallet password or a (maybe malformed) CrAzYpass
|
||||
// or the password used to derive the CrAzYpass for the wallet
|
||||
|
@@ -84,7 +84,10 @@ public class KeyStoreHelper {
|
||||
}
|
||||
|
||||
public static String getCrazyPass(Context context, String password) {
|
||||
return getCrazyPass(context, password, 0);
|
||||
if (Helper.useCrazyPass(context))
|
||||
return getCrazyPass(context, password, 0);
|
||||
else
|
||||
return password;
|
||||
}
|
||||
|
||||
public static String getBrokenCrazyPass(Context context, String password, int brokenVariant) {
|
||||
|
@@ -79,8 +79,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableStart="@drawable/ic_xmrto_32dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/label_send_btc_xmrto_info" />
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_destination_btc" />
|
||||
@@ -152,10 +153,10 @@
|
||||
android:background="@color/dotGray"
|
||||
android:drawableEnd="@drawable/ic_content_copy_white_24dp"
|
||||
android:drawablePadding="16dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingStart="24dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:textColor="@color/white"
|
||||
tools:text="XMR.TO-d2KQ" />
|
||||
</LinearLayout>
|
||||
@@ -175,25 +176,51 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_account" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAccount"
|
||||
style="@style/MoneroText"
|
||||
android:gravity="start"
|
||||
android:padding="8dp"
|
||||
android:selectAllOnFocus="true"
|
||||
android:textIsSelectable="true" />
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAccount"
|
||||
style="@style/MoneroText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:gravity="start"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:selectAllOnFocus="true"
|
||||
android:textIsSelectable="true"
|
||||
tools:text="(0,1)" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAddress"
|
||||
style="@style/MoneroText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/tvAccount"
|
||||
android:gravity="start"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:selectAllOnFocus="true"
|
||||
android:textIsSelectable="true"
|
||||
tools:text="4BKjy1uVRTPiz4pHyaXXawb82XpzLiowSDd8rEQJGqvN6AD6kWosLQ6VJXW9sghopxXgQSh1RTd54JdvvCRsXiF41xvfeW5" />
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow>
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8sp"
|
||||
android:text="@string/tx_notes" />
|
||||
@@ -221,8 +248,8 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:enabled="true"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:text="@string/tx_button_notes" />
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -232,7 +259,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_destination" />
|
||||
@@ -250,7 +277,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_paymentId" />
|
||||
@@ -268,7 +295,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_id" />
|
||||
@@ -286,7 +313,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_key" />
|
||||
@@ -304,7 +331,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_blockheight" />
|
||||
@@ -322,7 +349,7 @@
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Small"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="top"
|
||||
android:gravity="end"
|
||||
android:padding="8dp"
|
||||
android:text="@string/tx_transfers" />
|
||||
|
@@ -240,51 +240,49 @@
|
||||
]]></string>
|
||||
|
||||
<string name="help_node"><![CDATA[
|
||||
<h1>Nodes</h1>
|
||||
<h2>TL;DR</h2>
|
||||
<p>Refresh the nodes list by pulling down & bookmark 3–5 nodes to allow Monerujo
|
||||
to choose the best one for you!</p>
|
||||
<h2>What's a Node?</h2>
|
||||
<p>Monerujo uses a Remote Node (sometimes also called Daemon) to communicate with
|
||||
the Monero Network without having to download and store a copy of the
|
||||
whole blockchain itself.<p>
|
||||
<h2>Node List</h2>
|
||||
<p>If the list is empty, you can either add new nodes manually or let Monerujo
|
||||
scan the network for you. Or both. Read on…</p>
|
||||
<p>The node list shows all currently known nodes. Additionally, the timestamp
|
||||
of the latest block known to each node is shown under the node name. An icon
|
||||
representing the node's response behaviour
|
||||
(which indicates the level of connectivity to be expected)
|
||||
is shown next to each node.</p>
|
||||
<p>Any node in the list can be bookmarked for later use.
|
||||
Nodes which are not bookmarked will be forgotten.<p>
|
||||
<p>Monerujo will choose the optimal bookmarked node each time you use it.
|
||||
It does this by checking the blockheight (how up-to-date
|
||||
is the node?) as well as the response behaviour (how fast does the node respond to requests?).</p>
|
||||
<p>The list is sorted by these characteristics, so the top node would be the one Monerujo
|
||||
would choose right now. The bottom of the list would show very slow or unavailable nodes.</p>
|
||||
<h2>Add a Node</h2>
|
||||
<p>By touching the "Add Node" button at the bottom, you will be asked to
|
||||
enter the node details in the following dialog.
|
||||
The "Address" is the hostname or IP-address of the node - this is the only
|
||||
mandatory entry.
|
||||
Enter the "Port" if the node runs on a non-default port (e.g. 18089).
|
||||
You can also optionally name the node, so you can identify it easier later on.
|
||||
Some nodes require credentials to use them. Enter the provided username &
|
||||
password in the appropriate fields. Now you can "Test" these setting.
|
||||
The "Test Results" will display the blockheight, response time and actual IP used.
|
||||
The result may also be an error - usually because the hostname provided is
|
||||
not reachable in a sensible amount of time or the credentials are incorrect.
|
||||
Or the hostname/port combination does not point to an actual Monero Node!
|
||||
Once the test passes (no error) - you're set to press "OK" to save &
|
||||
bookmark this node.</p>
|
||||
<h2>Scan for Nodes</h2>
|
||||
<p>Additionally, you can scan the network for nodes. Monerujo will start
|
||||
scanning the network for Remote Nodes on port 18089. It begins by asking your
|
||||
bookmarked nodes for other peers in the Monero P2P network and then continues
|
||||
by asking those for their peers, and so on. If you have no bookmarked nodes
|
||||
(or they don't tell us about their peers),
|
||||
Monerujo will go straight to the Monero seed nodes hardcoded into Monero. The
|
||||
scan stops when it finds 10 remote nodes in total.</p>
|
||||
<h1>Nodi</h1>
|
||||
<h2>In breve</h2>
|
||||
<p>Aggiorna la lista dei nodi tirando giù & contrassegna 3–5 i nodi per consentire a Monerujo
|
||||
di scegliere il migliore per te!</p>
|
||||
<h2>Cos'è un nodo?</h2>
|
||||
<p>Monerujo usa un nodo remoto (talvolta chiamato Daemon) per comunicare con la
|
||||
rete Monero senza dover scaricare e tenere in memoria una copia
|
||||
dell'intera blockchain</p>
|
||||
<h2>Lista dei nodi</h2>
|
||||
<p>Se la lista è vuota, puoi aggiungere nuovi nodi manualmente o lasciare che Monerujo
|
||||
effettui la scansione della rete per te. O entrambe le cose. Leggi su…</p>
|
||||
<p>La lista dei nodi mostra tutti i nodi conosciuti. Inoltre, sotto il nome del nodo viene visualizzato il timestamp
|
||||
dell'ultimo blocco conosciuto ad ogni nodo. Accanto ad ogni nodo viene visualizzata un'icona che
|
||||
rappresenta il comportamento in risposta di quel nodo
|
||||
(che in sostanza indica il livello di connettività atteso).</p>
|
||||
<p>Ogni nodo della lista può essere aggiunto come segnalibro per un utilizzo successivo.
|
||||
Nodi che non vengono aggiunti come segnalibro saranno dimenticati successivamente.<p>
|
||||
<p>Monerujo sceglie il miglior nodo registrato ogni volta che lo usi.
|
||||
Il nodo migliore viene selezionato controllando l'altezza di blocco (quanto è aggiornato
|
||||
il nodo?) nonché il suo comportamento in risposta (quanto velocemente il nodo risponde alle richieste?).</p>
|
||||
<p>La lista è ordinata per queste caratteristiche, in modo tale che il nodo in cima alla lista è quello che Monerujo
|
||||
selezionerebbe adesso. In fondo alla lista compaiono i nodi ritenuti molto lenti o non disponibili.</p>
|
||||
<h2>Aggiungere un nodo</h2>
|
||||
<p>Toccando il pulsante "Aggiungi nodo" in fondo, ti verrà chiesto di
|
||||
inserire i dettagli del nodo nella schermata successiva.
|
||||
L'"Indirizzo" è il nome host o l'indirizzo IP del nodo - questa è l'unica informazione necessaria.
|
||||
Inserisci la "Porta" se il nodo utilizza una porta diversa da quella di default (es. 18089).
|
||||
Puoi inoltre assegnare un nome al nodo, in modo tale da poterlo facilmente identificare in futuro.
|
||||
Alcuni nodi richiedono delle credenziali per poter essere usati. Inserisci negli appositi campi il nome utente &
|
||||
password forniti. Ora puoi "Effettuare un Test" con queste impostazioni.
|
||||
I "Risultati del Test" visualizzeranno l'altezza di blocco, il tempo di risposta e l'IP correntemente utilizzato.
|
||||
Il risultato potrebbe essere anche un errore - molte volte perché il nome host fornito non è
|
||||
raggiungibile per un ragionevole lasso di tempo o le credenziali non sono corrette.
|
||||
O se la combinazione nome host/porta non punta a un vero nodo Monero!
|
||||
Una volta che il test ha dato esito positivo (nessun errore) - hai la possibilità di premere "OK" per salvare&
|
||||
aggiungere questo nodo ai segnalibri.</p>
|
||||
<h2>Esegui scansione alla ricerca di nodi</h2>
|
||||
<p>Puoi anche eseguire una scansione su rete alla ricerca di nodi. Monerujo inizierà
|
||||
la scansione della rete alla ricerca di nodi sulla porta 18089, chiedendo dapprima ai tuoi
|
||||
nodi salvati i loro peer all'interno della rete P2P di Monero per poi proseguire
|
||||
chiedendo peer a questi ultimi e così via. Se non hai nodi salvati
|
||||
(o se essi non ci comunicano i loro peer),
|
||||
Monerujo proseguirà con i nodi seed codificati in Monero. La scansione
|
||||
termina quando vengono trovati 10 nodi in totale.</p>
|
||||
]]></string>
|
||||
</resources>
|
||||
|
@@ -340,30 +340,30 @@
|
||||
<string name="menu_info">Mostra i segreti!</string>
|
||||
<string name="menu_streetmode">Modalità strada</string>
|
||||
|
||||
<string name="info_nodes_enabled">Node-o-matiC enabled, tap for more info.</string>
|
||||
<string name="node_height">Last block updated: %1$s</string>
|
||||
<string name="label_nodes">Nodes</string>
|
||||
<string name="node_name_hint">Node Name (Optional)</string>
|
||||
<string name="node_address_hint">Hostname</string>
|
||||
<string name="node_port_hint">Port</string>
|
||||
<string name="node_user_hint">Username (Optional)</string>
|
||||
<string name="node_pass_hint">Password (Optional)</string>
|
||||
<string name="node_host_unresolved">Cannot resolve host</string>
|
||||
<string name="node_host_empty">We need this!</string>
|
||||
<string name="node_port_numeric">Must be numeric</string>
|
||||
<string name="node_port_range">Must be 1–65535</string>
|
||||
<string name="node_fab_add">Add Node</string>
|
||||
<string name="node_refresh_hint">Touch to refresh!</string>
|
||||
<string name="node_test_error">CONNECTION ERROR %1$d</string>
|
||||
<string name="node_general_error">CONNECTION ERROR</string>
|
||||
<string name="node_auth_error">AUTHENTICATION FAILED</string>
|
||||
<string name="node_result_label">Test Result:</string>
|
||||
<string name="node_result">Height: %1$s (v%2$d), Ping: %3$.0fms, IP: %4$s</string>
|
||||
<string name="node_testing">Testing IP: %1$s …</string>
|
||||
<string name="node_refresh_wait">Please wait for scan to finish</string>
|
||||
<string name="node_create_hint">Touch to select or add nodes</string>
|
||||
<string name="node_pull_hint">Add nodes manually or pull down to scan</string>
|
||||
<string name="node_scanning">Scanning network…</string>
|
||||
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
|
||||
<string name="label_test">Test</string><!--note: as in "Test a network connection"-->
|
||||
<string name="info_nodes_enabled">Node-o-matiC abilitato, tocca per maggiori informazioni.</string>
|
||||
<string name="node_height">Ultimo blocco aggiornato: %1$s</string>
|
||||
<string name="label_nodes">Nodi</string>
|
||||
<string name="node_name_hint">Nome nodo (opzionale)</string>
|
||||
<string name="node_address_hint">Nome host</string>
|
||||
<string name="node_port_hint">Porta</string>
|
||||
<string name="node_user_hint">Nome utente (opzionale)</string>
|
||||
<string name="node_pass_hint">Password (opzionale)</string>
|
||||
<string name="node_host_unresolved">Host non risolvibile</string>
|
||||
<string name="node_host_empty">Abbiamo bisogno di questo!</string>
|
||||
<string name="node_port_numeric">Deve essere numerico</string>
|
||||
<string name="node_port_range">Deve essere 1–65535</string>
|
||||
<string name="node_fab_add">Aggiungi nodo</string>
|
||||
<string name="node_refresh_hint">Tocca per aggiornare!</string>
|
||||
<string name="node_test_error">ERRORE CONNESSIONE %1$d</string>
|
||||
<string name="node_general_error">ERRORE CONNESSIONE</string>
|
||||
<string name="node_auth_error">AUTENTICAZIONE FALLITA</string>
|
||||
<string name="node_result_label">Risultato del test:</string>
|
||||
<string name="node_result">Altezza: %1$s (v%2$d), Ping: %3$.0fms, IP: %4$s</string>
|
||||
<string name="node_testing">Controllo IP: %1$s …</string>
|
||||
<string name="node_refresh_wait">Attendi il termine della scansione</string>
|
||||
<string name="node_create_hint">Tocca per selezionare o aggiungere nodi</string>
|
||||
<string name="node_pull_hint">Aggiungi nodi manualmente o tira giù per effettuare scansione</string>
|
||||
<string name="node_scanning">Scansione rete…</string>
|
||||
<string name="node_nobookmark">Aggiunti automaticamente ai segnalibri i %1$d nodi migliori</string>
|
||||
<string name="label_test">Effettua Test</string><!--note: as in "Test a network connection"-->
|
||||
</resources>
|
||||
|
63
app/src/main/res/values-ja/about.xml
Normal file
63
app/src/main/res/values-ja/about.xml
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="about_close">閉じる</string>
|
||||
<string name="about_whoami">私はmonerujoです</string>
|
||||
<string name="about_version">バージョン %1$s (%2$d)</string>
|
||||
|
||||
<string name="credits_text"><![CDATA[
|
||||
<b>クレジット</b>
|
||||
<br/>
|
||||
m2049r, baltsar777, anhdres, keejef,
|
||||
rehrar, EarlOfEgo, ErCiccione et al.
|
||||
<br/><br/>
|
||||
<a href="https://monerujo.io/">monerujo.io</a>
|
||||
]]></string>
|
||||
|
||||
<string name="privacy_policy"><![CDATA[
|
||||
<h1>プライバシーポリシー</h1>
|
||||
<p>このページでは私達のアプリ(monerujo: Monero Wallet)
|
||||
のユーザーから収集される個人情報の収集、利用、
|
||||
開示に関する私達のポリシーを説明します。
|
||||
</p>
|
||||
<p>アプリを利用することによって、あなたはこのポリシーに従って
|
||||
個人情報が収集・利用されることに同意したとみなされます。
|
||||
</p>
|
||||
<h2>収集されるデータ</h2>
|
||||
<p>個人情報は、個人を識別できるあらゆる種類のデータのことをいいます。
|
||||
</p>
|
||||
<p>モネロの鍵と公開アドレスは、トランザクション処理のために
|
||||
アプリによってローカル領域で収集・処理され、
|
||||
モネロネットワークには暗号化された形で送信されます。
|
||||
</p>
|
||||
<p>その他の個人情報はアプリによって収集されません。</p>
|
||||
<p>もしあなたが(オプションで)交換機能を利用する場合は、
|
||||
monerujoは交換レートを coinmarketcap.com の公開APIを通じて取得します。
|
||||
あなたのリクエストのデータがどのように収集されているのかの
|
||||
詳細については、coinmarketcap.com のプライバシーポリシーを
|
||||
https://coinmarketcap.com/privacy にて参照してください。</p>
|
||||
<p>もしあなたがこのアプリをビットコインアドレス宛に支払う場合、
|
||||
あなたは XMR.TO のサービスを使うことになります。
|
||||
https://xmr.to/ を参照して XMR.TO のプライバシーポリシーを
|
||||
ご覧ください。Monerujoは XMR.TO にビットコインの支払先アドレスと
|
||||
数量を送信します。あなたのIPアドレスもまた収集されます。</p>
|
||||
<h2>アプリの権限</h2>
|
||||
<ul>
|
||||
<li>インターネット接続 : モネロネットワークに、モネロデーモンノードを通じて接続します</li>
|
||||
<li>外部ストレージからの読み込み : デバイスに保存されたウォレットファイルを読み込みます</li>
|
||||
<li>外部ストレージへの書き込み : デバイスに保存されたウォレットファイルに書き込みます</li>
|
||||
<li>ウェイク・ロック : 同期中にデバイスを起動した状態に保ちます</li>
|
||||
<li>カメラ : モネロ受取用のQRコードを読み取ります</li>
|
||||
</ul>
|
||||
<h2>このプライバシーポリシーに対する変更</h2>
|
||||
<p>私達はこのプライバシーポリシーを時々更新することがあります。
|
||||
その際はアプリとウェブサイト(www.monerujo.io)にて新しい
|
||||
プライバシーポリシーを表示し、通知します。
|
||||
あなたはこのプライバシーポリシーに変更がないか定期的に目を通すことが推奨されます。
|
||||
<p>このプライバシーポリシーの最後の変更日時: 10th November, 2017.
|
||||
</p>
|
||||
<h2>コンタクト</h2>
|
||||
<p>もし私達のプライバシーポリシーやデータの収集・利用に関して何か質問があれば
|
||||
privacy@monerujo.io までメールをお願いします。
|
||||
</p>
|
||||
]]></string>
|
||||
</resources>
|
425
app/src/main/res/values-ja/help.xml
Normal file
425
app/src/main/res/values-ja/help.xml
Normal file
File diff suppressed because it is too large
Load Diff
412
app/src/main/res/values-ja/strings.xml
Normal file
412
app/src/main/res/values-ja/strings.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -189,51 +189,33 @@
|
||||
]]></string>
|
||||
|
||||
<string name="help_node"><![CDATA[
|
||||
<h1>Nodes</h1>
|
||||
<h2>TL;DR</h2>
|
||||
<p>Refresh the nodes list by pulling down & bookmark 3–5 nodes to allow Monerujo
|
||||
to choose the best one for you!</p>
|
||||
<h2>What's a Node?</h2>
|
||||
<p>Monerujo uses a Remote Node (sometimes also called Daemon) to communicate with
|
||||
the Monero Network without having to download and store a copy of the
|
||||
whole blockchain itself.<p>
|
||||
<h2>Node List</h2>
|
||||
<p>If the list is empty, you can either add new nodes manually or let Monerujo
|
||||
scan the network for you. Or both. Read on…</p>
|
||||
<p>The node list shows all currently known nodes. Additionally, the timestamp
|
||||
of the latest block known to each node is shown under the node name. An icon
|
||||
representing the node's response behaviour
|
||||
(which indicates the level of connectivity to be expected)
|
||||
is shown next to each node.</p>
|
||||
<p>Any node in the list can be bookmarked for later use.
|
||||
Nodes which are not bookmarked will be forgotten.<p>
|
||||
<p>Monerujo will choose the optimal bookmarked node each time you use it.
|
||||
It does this by checking the blockheight (how up-to-date
|
||||
is the node?) as well as the response behaviour (how fast does the node respond to requests?).</p>
|
||||
<p>The list is sorted by these characteristics, so the top node would be the one Monerujo
|
||||
would choose right now. The bottom of the list would show very slow or unavailable nodes.</p>
|
||||
<h2>Add a Node</h2>
|
||||
<p>By touching the "Add Node" button at the bottom, you will be asked to
|
||||
enter the node details in the following dialog.
|
||||
The "Address" is the hostname or IP-address of the node - this is the only
|
||||
mandatory entry.
|
||||
Enter the "Port" if the node runs on a non-default port (e.g. 18089).
|
||||
You can also optionally name the node, so you can identify it easier later on.
|
||||
Some nodes require credentials to use them. Enter the provided username &
|
||||
password in the appropriate fields. Now you can "Test" these setting.
|
||||
The "Test Results" will display the blockheight, response time and actual IP used.
|
||||
The result may also be an error - usually because the hostname provided is
|
||||
not reachable in a sensible amount of time or the credentials are incorrect.
|
||||
Or the hostname/port combination does not point to an actual Monero Node!
|
||||
Once the test passes (no error) - you're set to press "OK" to save &
|
||||
bookmark this node.</p>
|
||||
<h2>Scan for Nodes</h2>
|
||||
<p>Additionally, you can scan the network for nodes. Monerujo will start
|
||||
scanning the network for Remote Nodes on port 18089. It begins by asking your
|
||||
bookmarked nodes for other peers in the Monero P2P network and then continues
|
||||
by asking those for their peers, and so on. If you have no bookmarked nodes
|
||||
(or they don't tell us about their peers),
|
||||
Monerujo will go straight to the Monero seed nodes hardcoded into Monero. The
|
||||
scan stops when it finds 10 remote nodes in total.</p>
|
||||
<h1>節點</h1>
|
||||
<h2>懶人版教學</h2>
|
||||
<p>下拉節點列表即可重新整理節點狀態,你可以手動新增三至五個節點,Monerujo 將會自動為你挑選最佳的節點!</p>
|
||||
<h2>什麼是節點?</h2>
|
||||
<p>Monerujo 必須透過遠端節點 (有時則稱為 Daemon ) 連接至 Monero 交易網路,透過這種方式就不需要下載和儲存整個區塊鏈的副本。<p>
|
||||
<h2>節點列表</h2>
|
||||
<p>如果列表是空白的,你可以自行手動新增節點或是讓 Monerujo 為你掃描網路上的可用節點,以下是詳細教學。</p>
|
||||
<p>節點列表中顯示了目前已知的節點,另外,在名稱下方的的時間戳記表示為其最後更新區塊的時間。
|
||||
每個節點旁邊會有一個圖示來呈現他的狀態 (通常代表著其連接的品質)。</p>
|
||||
<p>每個在列表中的節點都可以加上書籤標記以保留到後續使用,沒有加上書籤的節點則會被捨棄。<p>
|
||||
<p>Monerujo 會在你每次使用錢包時,在書籤內選擇最好的節點。這是透過檢查該節點的區塊高度 (節點資料有多即時?) 與回應狀態 (節點的反應有多迅速?) 來達成。</p>
|
||||
<p>列表會依這些資訊做排序,因此排在最上面的節點就是 Monerujo 目前會使用的節點,列表底部則是反應非常遲鈍或是無法使用的節點。</p>
|
||||
<h2>增加新的節點</h2>
|
||||
<p>點選下方的「新增節點」,你將會被要求輸入節點的資訊。
|
||||
在「位置」這欄請輸入節點的網址或是 IP 位址,這是唯一的必填資訊。
|
||||
如果該節點是運作在非預設的通訊埠 (譬如是 18089),請輸入於「通訊埠」的欄位中。
|
||||
你也可以命名該節點以方便在後續使用時更容易辨識。
|
||||
若有些節點要求登入資訊,請輸入於「登入名稱」與「密碼」的欄位中。
|
||||
現在你可以按下「測試節點」以檢查節點設定。
|
||||
測試結果將會顯示區塊高度、回應速度與實際的 IP 位址。
|
||||
而測試結果也有可能顯示錯誤,這通常代表著無法在可接受的時間內連接到該節點網址,或是登入資訊設定有誤。
|
||||
也有可能是節點網址與通訊埠的組合有誤而導致無法連接到該 Monero 節點!
|
||||
只要測試結果通過 (沒有錯誤) - 你就可以按下「好的」以儲存該節點並將之加入書籤。</p>
|
||||
<h2>掃描可用的節點</h2>
|
||||
<p>此外,你可以掃描可用的遠端節點,Monerujo 將會掃描網路上開放通訊埠 18089 的遠端節點。
|
||||
首先它會從你的書籤節點先取得 P2P 連接清單,接著再從這些清單內檢查可用的節點。
|
||||
如果你沒有任何書籤節點 (或是書籤節點無法提供它們的連接清單),Monerujo 將會直接從 Monero 內建的種子節點取得清單。
|
||||
這個掃描功能將會在總共可用節點的數量達到十個後停止。</p>
|
||||
]]></string>
|
||||
</resources>
|
||||
|
@@ -337,30 +337,30 @@
|
||||
<string name="menu_info">顯示私鑰資訊</string>
|
||||
<string name="menu_streetmode">低調模式</string>
|
||||
|
||||
<string name="info_nodes_enabled">Node-o-matiC enabled, tap for more info.</string>
|
||||
<string name="node_height">Last block updated: %1$s</string>
|
||||
<string name="label_nodes">Nodes</string>
|
||||
<string name="node_name_hint">Node Name (Optional)</string>
|
||||
<string name="node_address_hint">Hostname</string>
|
||||
<string name="node_port_hint">Port</string>
|
||||
<string name="node_user_hint">Username (Optional)</string>
|
||||
<string name="node_pass_hint">Password (Optional)</string>
|
||||
<string name="node_host_unresolved">Cannot resolve host</string>
|
||||
<string name="node_host_empty">We need this!</string>
|
||||
<string name="node_port_numeric">Must be numeric</string>
|
||||
<string name="node_port_range">Must be 1–65535</string>
|
||||
<string name="node_fab_add">Add Node</string>
|
||||
<string name="node_refresh_hint">Touch to refresh!</string>
|
||||
<string name="node_test_error">CONNECTION ERROR %1$d</string>
|
||||
<string name="node_general_error">CONNECTION ERROR</string>
|
||||
<string name="node_auth_error">AUTHENTICATION FAILED</string>
|
||||
<string name="node_result_label">Test Result:</string>
|
||||
<string name="node_result">Height: %1$s (v%2$d), Ping: %3$.0fms, IP: %4$s</string>
|
||||
<string name="node_testing">Testing IP: %1$s …</string>
|
||||
<string name="node_refresh_wait">Please wait for scan to finish</string>
|
||||
<string name="node_create_hint">Touch to select or add nodes</string>
|
||||
<string name="node_pull_hint">Add nodes manually or pull down to scan</string>
|
||||
<string name="node_scanning">Scanning network…</string>
|
||||
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
|
||||
<string name="label_test">Test</string><!--note: as in "Test a network connection"-->
|
||||
<string name="info_nodes_enabled">節點管理工具已啟用,點選了解更多。</string>
|
||||
<string name="node_height">最後區塊更新時間:%1$s</string>
|
||||
<string name="label_nodes">節點</string>
|
||||
<string name="node_name_hint">節點名稱 (選填)</string>
|
||||
<string name="node_address_hint">網址</string>
|
||||
<string name="node_port_hint">通訊埠</string>
|
||||
<string name="node_user_hint">登入名稱 (選填)</string>
|
||||
<string name="node_pass_hint">密碼 (選填)</string>
|
||||
<string name="node_host_unresolved">無法解析主機</string>
|
||||
<string name="node_host_empty">我們需要這個資訊!</string>
|
||||
<string name="node_port_numeric">必須是數字</string>
|
||||
<string name="node_port_range">必須介於 1–65535</string>
|
||||
<string name="node_fab_add">新增節點</string>
|
||||
<string name="node_refresh_hint">點選以重新整理!</string>
|
||||
<string name="node_test_error">連接錯誤 %1$d</string>
|
||||
<string name="node_general_error">連接錯誤</string>
|
||||
<string name="node_auth_error">認證失敗</string>
|
||||
<string name="node_result_label">測試結果:</string>
|
||||
<string name="node_result">高度: %1$s (v%2$d), 延遲: %3$.0fms, IP: %4$s</string>
|
||||
<string name="node_testing">測試 IP: %1$s …</string>
|
||||
<string name="node_refresh_wait">請等待掃描完成</string>
|
||||
<string name="node_create_hint">點選以選擇或新增節點</string>
|
||||
<string name="node_pull_hint">手動新增節點或下拉畫面以開始掃描</string>
|
||||
<string name="node_scanning">掃描節點中 …</string>
|
||||
<string name="node_nobookmark">已自動加入 %1$d 個節點至書籤</string>
|
||||
<string name="label_test">測試節點</string>
|
||||
</resources>
|
||||
|
4
app/src/stagenet/res/values/strings.xml
Normal file
4
app/src/stagenet/res/values/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">Stagenet</string>
|
||||
</resources>
|
@@ -91,3 +91,10 @@ Keep calm and make a new wallet.
|
||||
|
||||
## Why does it make a 'monero' folder?
|
||||
This is a new feature of monero core to share certain key images with other monero forks.
|
||||
|
||||
## CrAzYpass is awesome - but I don't want it!
|
||||
Creating a file named `.nocrazypass` in the wallets folder will disable generation of crazypass for NEW passwords (new wallet or change password).
|
||||
The content of the file is not read and is irrelevant.
|
||||
Wallets with CrAzYpass will continue working normally. The currently set real wallet password can be checked in the "Show Secrets".
|
||||
|
||||
**NB: This feature is for test purposed only - all your XMR will be stolen if you use it!**
|
||||
|
Reference in New Issue
Block a user