1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-04 00:53:36 +02:00

Compare commits

...

11 Commits

Author SHA1 Message Date
m2049r
94f87a5193 bump version 2018-11-28 22:03:24 +01:00
Lafudoci
8a8fc5ec9e Node-o-matiC translation in zh-tw (#488) 2018-11-28 19:47:29 +01:00
joshuamarques
036d4ebf6c Japanese translation added (#481) 2018-11-28 07:52:16 +01:00
m2049r
c6d4de8599 bump version 2018-11-26 23:39:01 +01:00
m2049r
2ef7f8571c adjust & tweak tx details layout (#489) 2018-11-26 23:08:32 +01:00
m2049r
d2612a26e5 show my tx (sub)address (#487) 2018-11-26 12:05:40 +01:00
m2049r
7e14572756 (optional) disable crazypass generation (#486)
* (optional) disable crazypass generation

* update FAQ about disabling crazypass
2018-11-26 12:05:25 +01:00
hrumag
6f840dcacf [IT-Translation] help.xml / strings.xml - First Issue (#480)
* [IT-Translation] help.xml / strings.xml

* [IT-Translation] Fixes from @erciccione and @serhack
2018-11-26 12:05:03 +01:00
m2049r
36b389cd0f USE_FINGERPRINT & bump version 2018-11-24 23:39:35 +01:00
m2049r
ed2b95ea37 Fix android9 permissions (#484)
* FOREGROUND_SERVICE for Android 9

* USE_BIOMETRIC for Android 9
2018-11-24 23:03:20 +01:00
m2049r
8d41d1d03e Stagenet build config (#483)
* combine gitignores

* stagenet build config
2018-11-24 22:28:33 +01:00
21 changed files with 1127 additions and 186 deletions

3
.gitignore vendored
View File

@@ -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
View File

@@ -1,5 +0,0 @@
.externalNativeBuild
build
app.iml
prod
alpha

View File

@@ -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'

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">monerujo - Debug</string>
</resources>

View File

@@ -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"

View File

@@ -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,

View File

@@ -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);

View File

@@ -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();

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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" />

View File

@@ -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 &amp; bookmark 3&#8211;5 nodes to allow Monerujo
to choose the best one for you!</p>
<h2>What&apos;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&#8230;</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&apos;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 &quot;Add Node&quot; button at the bottom, you will be asked to
enter the node details in the following dialog.
The &quot;Address&quot; is the hostname or IP-address of the node - this is the only
mandatory entry.
Enter the &quot;Port&quot; 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 &amp;
password in the appropriate fields. Now you can &quot;Test&quot; these setting.
The &quot;Test Results&quot; 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&apos;re set to press &quot;OK&quot; to save &amp;
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&apos;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ù &amp; contrassegna 3&#8211;5 i nodi per consentire a Monerujo
di scegliere il migliore per te!</p>
<h2>Cos&apos;è 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&apos;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&#8230;</p>
<p>La lista dei nodi mostra tutti i nodi conosciuti. Inoltre, sotto il nome del nodo viene visualizzato il timestamp
dell&apos;ultimo blocco conosciuto ad ogni nodo. Accanto ad ogni nodo viene visualizzata un&apos;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&apos;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 &quot;Aggiungi nodo&quot; in fondo, ti verrà chiesto di
inserire i dettagli del nodo nella schermata successiva.
L&apos;&quot;Indirizzo&quot; è il nome host o l&apos;indirizzo IP del nodo - questa è l&apos;unica informazione necessaria.
Inserisci la &quot;Porta&quot; 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 &amp;
password forniti. Ora puoi &quot;Effettuare un Test&quot; con queste impostazioni.
I &quot;Risultati del Test&quot; visualizzeranno l&apos;altezza di blocco, il tempo di risposta e l&apos;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 &quot;OK&quot; per salvare&amp;
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&apos;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>

View File

@@ -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&#8211;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 &#8230;</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&#8230;</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&#8211;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 &#8230;</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&#8230;</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>

View 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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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 &amp; bookmark 3&#8211;5 nodes to allow Monerujo
to choose the best one for you!</p>
<h2>What&apos;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&#8230;</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&apos;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 &quot;Add Node&quot; button at the bottom, you will be asked to
enter the node details in the following dialog.
The &quot;Address&quot; is the hostname or IP-address of the node - this is the only
mandatory entry.
Enter the &quot;Port&quot; 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 &amp;
password in the appropriate fields. Now you can &quot;Test&quot; these setting.
The &quot;Test Results&quot; 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&apos;re set to press &quot;OK&quot; to save &amp;
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&apos;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>

View File

@@ -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&#8211;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 &#8230;</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&#8230;</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&#8211;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 &#8230;</string>
<string name="node_refresh_wait">請等待掃描完成</string>
<string name="node_create_hint">點選以選擇或新增節點</string>
<string name="node_pull_hint">手動新增節點或下拉畫面以開始掃描</string>
<string name="node_scanning">掃描節點中 &#8230;</string>
<string name="node_nobookmark">已自動加入 %1$d 個節點至書籤</string>
<string name="label_test">測試節點</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Stagenet</string>
</resources>

View File

@@ -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!**