1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-13 16:10:51 +02:00

Compare commits

...

23 Commits

Author SHA1 Message Date
m2049r
7cc2f6fafb bump version v1.11.6 2019-05-19 21:34:26 +02:00
m2049r
9a3ee0eda8 fix update of account balances (#590) 2019-05-19 20:27:35 +02:00
m2049r
6e898939a3 show account balances (#589)
and refactor displayAmount
2019-05-19 17:33:19 +02:00
m2049r
40ae39d647 update studio 2019-05-19 10:28:18 +02:00
jindouyunz
ca81e652e5 Update strings.xml_Chinese (#575)
* Update strings.xml

updated on 4/22/2019 version 2, Jindouyunz.

* Update string.xml_Chinese 2019-5-12

Hi, I made several pieces of modification based on lafudoci's review, thanks.

* Update string.xml-zh-rCN 2019-5-13

removed all lines with "translatable=false", and currency array
2019-05-18 08:40:31 +02:00
jindouyunz
796048be4e Update about.xml (#574)
updated on 4/21/2019, Jindouyunz.
2019-05-18 08:39:49 +02:00
jindouyunz
441bf995c8 Update help.xml_Chinese (#573)
* Update help.xml

updated on 4/21/2019, version 2, Jindouyunz

* Update help.xml 2019-5-11

Hi, I add changes on line 200, based on lafudoci's review, thanks.
2019-05-18 08:39:28 +02:00
m2049r
e8860ab8eb focus on password if no fingerprint (#587) 2019-05-12 00:17:21 +02:00
m2049r
525b38ff53 remove save button for notes (#586) 2019-05-12 00:17:07 +02:00
m2049r
ba79bf87aa Update rpc checks (#585)
* check rpc version

* update protocol version check
2019-05-11 21:15:35 +02:00
m2049r
3fe6571e7d update restore heights for 4 & 5.2019 (#583) 2019-05-11 11:41:16 +02:00
erciccione
364e6a8137 update values-it/strings.xml (Italian translation) (#580) 2019-05-11 11:40:20 +02:00
vp11
cb69ce99d6 update pt-BR translation (#581)
* update pt-BR translation

* missing block
2019-05-11 11:40:01 +02:00
m2049r
1f976872fc increase sanity check size limit (#576) 2019-04-23 20:52:43 +02:00
kic0
27f266b6f7 PT-PT translations updated (#569) 2019-04-20 11:03:57 +02:00
m2049r
168928d54a Update studio (#572)
* gradle 5.1

* remove ref to @id/ibBookmark
2019-04-19 15:51:25 +02:00
Leza89
b3f61072aa V1.11.4 - german translations (#556)
* Corrections on the translation without translating

* Added missing commas, hyphens
* replaced diverging terminology with Monero GUI (i.e. Remote Node → Drittanbieter-Node, Saldo → Guthaben, Daemon/Dienst → Hintergrunddienst)
* grammatical adjustments
* unifying the gender of certain words (i.e. "die" Wallet)

* Translations - Draft for peer review

* Corrections according to rodolfo912's review

en-dash as a symbol vs. unicode ;#8211; is yet to be resolved

* Reverting case of "Wallet" from "die" to "das"

As requested by m2049r the article of "Wallet" was reverted back from "die Wallet" to "das Wallet" and corrected in places where it was inconsistent before.
2019-04-19 14:57:49 +02:00
Jack Rogers Lewis
ccb64aded0 SK update help.xml (#568) 2019-04-19 14:49:25 +02:00
Jack Rogers Lewis
e98fa089f2 update new strings (#567)
podadresa = subadresa
2019-04-19 14:48:47 +02:00
Scott Anecito
884878b7a7 Update Japanese localization, fix English typo (#564) 2019-04-19 14:43:56 +02:00
v1docq47
4e23f0ef3a Update for Russian translation #444 (#558)
* Update for Russian translation #444

* fix

added translation of missing lines (help.xml / strings.xml)
2019-03-19 20:12:37 +01:00
0140454
6ea4e3d998 Update zh-rTW translation (#557)
* Update zh-rTW translation

* Update translation for "Using a payment link"
2019-03-19 20:12:16 +01:00
m2049r
971c90f35b Merge pull request #559 from m2049r/feature_enable_ledger
Feature enable ledger
2019-03-19 20:06:17 +01:00
47 changed files with 1234 additions and 1342 deletions

View File

@@ -7,8 +7,8 @@ android {
applicationId "com.m2049r.xmrwallet" applicationId "com.m2049r.xmrwallet"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 175 versionCode 176
versionName "1.11.5 'Chernushka'" versionName "1.11.6 'Chernushka'"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild { externalNativeBuild {

View File

@@ -302,7 +302,7 @@ public class ReceiveFragment extends Fragment {
File imagePath = new File(getActivity().getCacheDir(), "images"); File imagePath = new File(getActivity().getCacheDir(), "images");
File png = new File(imagePath, "QR.png"); File png = new File(imagePath, "QR.png");
Uri contentUri = FileProvider.getUriForFile(getActivity(), Uri contentUri = FileProvider.getUriForFile(getActivity(),
"com.m2049r.xmrwallet.fileprovider", png); BuildConfig.APPLICATION_ID + ".fileprovider", png);
if (contentUri != null) { if (contentUri != null) {
Intent shareIntent = new Intent(); Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setAction(Intent.ACTION_SEND);
@@ -574,6 +574,7 @@ public class ReceiveFragment extends Fragment {
@Override @Override
public void onPause() { public void onPause() {
Timber.d("onPause()"); Timber.d("onPause()");
Helper.hideKeyboard(getActivity());
super.onPause(); super.onPause();
} }

View File

@@ -71,7 +71,6 @@ public class TxFragment extends Fragment {
private TextView tvTxFee; private TextView tvTxFee;
private TextView tvTxTransfers; private TextView tvTxTransfers;
private TextView etTxNotes; private TextView etTxNotes;
private Button bTxNotes;
// XMRTO stuff // XMRTO stuff
private View cvXmrTo; private View cvXmrTo;
@@ -102,21 +101,9 @@ public class TxFragment extends Fragment {
tvTxFee = view.findViewById(R.id.tvTxFee); tvTxFee = view.findViewById(R.id.tvTxFee);
tvTxTransfers = view.findViewById(R.id.tvTxTransfers); tvTxTransfers = view.findViewById(R.id.tvTxTransfers);
etTxNotes = view.findViewById(R.id.etTxNotes); etTxNotes = view.findViewById(R.id.etTxNotes);
bTxNotes = view.findViewById(R.id.bTxNotes);
etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT); etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT);
bTxNotes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
info.notes = null; // force reload on next view
bTxNotes.setEnabled(false);
etTxNotes.setEnabled(false);
userNotes.setNote(etTxNotes.getText().toString());
activityCallback.onSetNote(info.hash, userNotes.txNotes);
}
});
tvTxXmrToKey.setOnClickListener(new View.OnClickListener() { tvTxXmrToKey.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@@ -131,14 +118,6 @@ public class TxFragment extends Fragment {
return view; return view;
} }
public void onNotesSet(boolean reload) {
bTxNotes.setEnabled(true);
etTxNotes.setEnabled(true);
if (reload) {
loadNotes(this.info);
}
}
void shareTxInfo() { void shareTxInfo() {
if (this.info == null) return; if (this.info == null) return;
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
@@ -315,7 +294,6 @@ public class TxFragment extends Fragment {
} }
} }
@Override @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -337,9 +315,9 @@ public class TxFragment extends Fragment {
String getTxNotes(String hash); String getTxNotes(String hash);
String getTxAddress(int major, int minor); boolean setTxNotes(String txId, String txNotes);
void onSetNote(String txId, String notes); String getTxAddress(int major, int minor);
void setToolbarButton(int type); void setToolbarButton(int type);
@@ -357,4 +335,16 @@ public class TxFragment extends Fragment {
+ " must implement Listener"); + " must implement Listener");
} }
} }
@Override
public void onPause() {
if (!etTxNotes.getText().toString().equals(userNotes.note)) { // notes have changed
// save them
userNotes.setNote(etTxNotes.getText().toString());
info.notes = userNotes.txNotes;
activityCallback.setTxNotes(info.hash, info.notes);
}
Helper.hideKeyboard(getActivity());
super.onPause();
}
} }

View File

@@ -150,8 +150,13 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
final WalletFragment walletFragment = (WalletFragment) final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentByTag(WalletFragment.class.getName()); getSupportFragmentManager().findFragmentByTag(WalletFragment.class.getName());
if (walletFragment != null) walletFragment.resetDismissedTransactions(); if (walletFragment != null) walletFragment.resetDismissedTransactions();
updateAccountsBalance();
forceUpdate(); forceUpdate();
runOnUiThread(new Runnable() {
@Override
public void run() {
updateAccountsBalance();
}
});
} }
@Override @Override
@@ -174,6 +179,11 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
return getWallet().getUserNote(txId); return getWallet().getUserNote(txId);
} }
@Override
public boolean setTxNotes(String txId, String txNotes) {
return getWallet().setUserNote(txId, txNotes);
}
@Override @Override
public String getTxAddress(int major, int minor) { public String getTxAddress(int major, int minor) {
return getWallet().getSubaddress(major, minor); return getWallet().getSubaddress(major, minor);
@@ -713,26 +723,6 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
} }
} }
@Override
public void onSetNotes(final boolean success) {
try {
final TxFragment txFragment = (TxFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
runOnUiThread(new Runnable() {
public void run() {
if (!success) {
Toast.makeText(WalletActivity.this, getString(R.string.tx_notes_set_failed), Toast.LENGTH_LONG).show();
}
txFragment.onNotesSet(success);
}
});
} catch (ClassCastException ex) {
// not in tx fragment
Timber.d(ex.getLocalizedMessage());
// never mind
}
}
@Override @Override
public void onProgress(final String text) { public void onProgress(final String text) {
try { try {
@@ -794,21 +784,6 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
} }
@Override
public void onSetNote(String txId, String notes) {
if (mIsBound) { // no point in talking to unbound service
Intent intent = new Intent(getApplicationContext(), WalletService.class);
intent.putExtra(WalletService.REQUEST, WalletService.REQUEST_CMD_SETNOTE);
intent.putExtra(WalletService.REQUEST_CMD_SETNOTE_TX, txId);
intent.putExtra(WalletService.REQUEST_CMD_SETNOTE_NOTES, notes);
startService(intent);
Timber.d("SET NOTE request sent");
} else {
Timber.e("Service not bound");
}
}
@Override @Override
public void onPrepareSend(final String tag, final TxData txData) { public void onPrepareSend(final String tag, final TxData txData) {
if (mIsBound) { // no point in talking to unbound service if (mIsBound) { // no point in talking to unbound service
@@ -1062,6 +1037,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
} else { } else {
tvBalance.setText(null); tvBalance.setText(null);
} }
updateAccountsList();
} }
void updateAccountsHeader() { void updateAccountsHeader() {
@@ -1075,8 +1051,11 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
Menu menu = accountsView.getMenu(); Menu menu = accountsView.getMenu();
menu.removeGroup(R.id.accounts_list); menu.removeGroup(R.id.accounts_list);
final int n = wallet.getNumAccounts(); final int n = wallet.getNumAccounts();
final boolean showBalances = (n > 1) && !isStreetMode();
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
final String label = wallet.getAccountLabel(i); final String label = (showBalances ?
getString(R.string.label_account, wallet.getAccountLabel(i), Helper.getDisplayAmount(wallet.getBalance(i), 2))
: wallet.getAccountLabel(i));
final MenuItem item = menu.add(R.id.accounts_list, getAccountId(i), 2 * i, label); final MenuItem item = menu.add(R.id.accounts_list, getAccountId(i), 2 * i, label);
item.setIcon(R.drawable.ic_account_balance_wallet_black_24dp); item.setIcon(R.drawable.ic_account_balance_wallet_black_24dp);
if (i == wallet.getAccountIndex()) if (i == wallet.getAccountIndex())

View File

@@ -219,7 +219,7 @@ public class WalletFragment extends Fragment
if (isExchanging) return; // wait for exchange to finish - it will fire this itself then. if (isExchanging) return; // wait for exchange to finish - it will fire this itself then.
// at this point selection is XMR in case of error // at this point selection is XMR in case of error
String displayB; String displayB;
double amountA = Double.parseDouble(Wallet.getDisplayAmount(unlockedBalance)); // crash if this fails! double amountA = Helper.getDecimalAmount(unlockedBalance).doubleValue();
if (!Helper.CRYPTO.equals(balanceCurrency)) { // not XMR if (!Helper.CRYPTO.equals(balanceCurrency)) { // not XMR
double amountB = amountA * balanceRate; double amountB = amountA * balanceRate;
displayB = Helper.getFormattedAmount(amountB, false); displayB = Helper.getFormattedAmount(amountB, false);
@@ -235,10 +235,10 @@ public class WalletFragment extends Fragment
private final ExchangeApi exchangeApi = Helper.getExchangeApi(); private final ExchangeApi exchangeApi = Helper.getExchangeApi();
void refreshBalance() { void refreshBalance() {
double unconfirmedXmr = Double.parseDouble(Helper.getDisplayAmount(balance - unlockedBalance)); double unconfirmedXmr = Helper.getDecimalAmount(balance - unlockedBalance).doubleValue();
showUnconfirmed(unconfirmedXmr); showUnconfirmed(unconfirmedXmr);
if (sCurrency.getSelectedItemPosition() == 0) { // XMR if (sCurrency.getSelectedItemPosition() == 0) { // XMR
double amountXmr = Double.parseDouble(Wallet.getDisplayAmount(unlockedBalance)); // assume this cannot fail! double amountXmr = Helper.getDecimalAmount(unlockedBalance).doubleValue();
showBalance(Helper.getFormattedAmount(amountXmr, true)); showBalance(Helper.getFormattedAmount(amountXmr, true));
} else { // not XMR } else { // not XMR
String currency = (String) sCurrency.getSelectedItem(); String currency = (String) sCurrency.getSelectedItem();
@@ -294,7 +294,7 @@ public class WalletFragment extends Fragment
public void exchangeFailed() { public void exchangeFailed() {
sCurrency.setSelection(0, true); // default to XMR sCurrency.setSelection(0, true); // default to XMR
double amountXmr = Double.parseDouble(Wallet.getDisplayAmount(unlockedBalance)); // assume this cannot fail! double amountXmr = Helper.getDecimalAmount(unlockedBalance).doubleValue();
showBalance(Helper.getFormattedAmount(amountXmr, true)); showBalance(Helper.getFormattedAmount(amountXmr, true));
hideExchanging(); hideExchanging();
} }

View File

@@ -46,7 +46,8 @@ import okhttp3.ResponseBody;
import timber.log.Timber; import timber.log.Timber;
public class NodeInfo extends Node { public class NodeInfo extends Node {
final static public int MIN_MAJOR_VERSION = 9; final static public int MIN_MAJOR_VERSION = 11;
final static public String RPC_VERSION = "2.0";
private long height = 0; private long height = 0;
private long timestamp = 0; private long timestamp = 0;
@@ -228,9 +229,12 @@ public class NodeInfo extends Node {
responseCode = response.code(); responseCode = response.code();
if (response.isSuccessful()) { if (response.isSuccessful()) {
ResponseBody respBody = response.body(); // closed through Response object ResponseBody respBody = response.body(); // closed through Response object
if ((respBody != null) && (respBody.contentLength() < 1000)) { // sanity check if ((respBody != null) && (respBody.contentLength() < 2000)) { // sanity check
final JSONObject json = new JSONObject( final JSONObject json = new JSONObject(
respBody.string()); respBody.string());
String rpcVersion = json.getString("jsonrpc");
if (!RPC_VERSION.equals(rpcVersion))
return false;
final JSONObject header = json.getJSONObject( final JSONObject header = json.getJSONObject(
"result").getJSONObject("block_header"); "result").getJSONObject("block_header");
height = header.getLong("height"); height = header.getLong("height");

View File

@@ -30,6 +30,7 @@ import com.m2049r.xmrwallet.model.TransactionInfo;
import com.m2049r.xmrwallet.util.Helper; import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.data.UserNotes; import com.m2049r.xmrwallet.data.UserNotes;
import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
@@ -154,7 +155,7 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
} }
if ((infoItem.fee > 0)) { if ((infoItem.fee > 0)) {
String fee = Helper.getDisplayAmount(infoItem.fee, 5); String fee = Helper.getDisplayAmount(infoItem.fee, Helper.DISPLAY_DIGITS_INFO);
tvFee.setText(context.getString(R.string.tx_list_fee, fee)); tvFee.setText(context.getString(R.string.tx_list_fee, fee));
tvFee.setVisibility(View.VISIBLE); tvFee.setVisibility(View.VISIBLE);
} else { } else {

View File

@@ -173,5 +173,4 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
return this.hash.compareTo(another.hash); return this.hash.compareTo(another.hash);
} }
} }
} }

View File

@@ -353,9 +353,10 @@ public class Wallet {
if (label.equals(NEW_ACCOUNT_NAME)) { if (label.equals(NEW_ACCOUNT_NAME)) {
String address = getAddress(accountIndex); String address = getAddress(accountIndex);
int len = address.length(); int len = address.length();
return address.substring(0, 6) + label = address.substring(0, 6) +
"\u2026" + address.substring(len - 6, len); "\u2026" + address.substring(len - 6, len);
} else return label; }
return label;
} }
public String getSubaddressLabel(int addressIndex) { public String getSubaddressLabel(int addressIndex) {

View File

@@ -69,10 +69,6 @@ public class WalletService extends Service {
public static final String REQUEST_CMD_SEND = "send"; public static final String REQUEST_CMD_SEND = "send";
public static final String REQUEST_CMD_SEND_NOTES = "notes"; public static final String REQUEST_CMD_SEND_NOTES = "notes";
public static final String REQUEST_CMD_SETNOTE = "setnote";
public static final String REQUEST_CMD_SETNOTE_TX = "tx";
public static final String REQUEST_CMD_SETNOTE_NOTES = "notes";
public static final int START_SERVICE = 1; public static final int START_SERVICE = 1;
public static final int STOP_SERVICE = 2; public static final int STOP_SERVICE = 2;
@@ -224,8 +220,6 @@ public class WalletService extends Service {
void onSendTransactionFailed(String error); void onSendTransactionFailed(String error);
void onSetNotes(boolean success);
void onWalletStarted(Wallet.ConnectionStatus walletStatus); void onWalletStarted(Wallet.ConnectionStatus walletStatus);
void onWalletOpen(Wallet.Device device); void onWalletOpen(Wallet.Device device);
@@ -378,26 +372,6 @@ public class WalletService extends Service {
if (observer != null) observer.onSendTransactionFailed(error); if (observer != null) observer.onSendTransactionFailed(error);
return; return;
} }
} else if (cmd.equals(REQUEST_CMD_SETNOTE)) {
Wallet myWallet = getWallet();
Timber.d("SET NOTE for wallet: %s", myWallet.getName());
String txId = extras.getString(REQUEST_CMD_SETNOTE_TX);
String notes = extras.getString(REQUEST_CMD_SETNOTE_NOTES);
if ((txId != null) && (notes != null)) {
boolean success = myWallet.setUserNote(txId, notes);
if (!success) {
Timber.e(myWallet.getErrorString());
}
if (observer != null) observer.onSetNotes(success);
if (success) {
boolean rc = myWallet.store();
Timber.d("wallet stored: %s with rc=%b", myWallet.getName(), rc);
if (!rc) {
Timber.w("Wallet store failed: %s", myWallet.getErrorString());
}
if (observer != null) observer.onWalletStored(rc);
}
}
} }
} }
break; break;

View File

@@ -64,6 +64,7 @@ import com.m2049r.xmrwallet.service.exchange.api.ExchangeApi;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
@@ -186,28 +187,23 @@ public class Helper {
act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
} }
static public BigDecimal getDecimalAmount(long amount) {
return new BigDecimal(amount).scaleByPowerOfTen(-12);
}
static public String getDisplayAmount(long amount) { static public String getDisplayAmount(long amount) {
return getDisplayAmount(amount, 12); return getDisplayAmount(amount, 12);
} }
static public String getDisplayAmount(long amount, int maxDecimals) { static public String getDisplayAmount(long amount, int maxDecimals) {
return getDisplayAmount(Wallet.getDisplayAmount(amount), maxDecimals); // a Java bug does not strip zeros properly if the value is 0
} if (amount == 0) return "0.00";
BigDecimal d = getDecimalAmount(amount)
// amountString must have '.' as decimal point .setScale(maxDecimals, BigDecimal.ROUND_HALF_UP)
private static String getDisplayAmount(String amountString, int maxDecimals) { .stripTrailingZeros();
int lastZero = 0; if (d.scale() < 2)
int decimal = 0; d = d.setScale(2, BigDecimal.ROUND_UNNECESSARY);
for (int i = amountString.length() - 1; i >= 0; i--) { return d.toPlainString();
if ((lastZero == 0) && (amountString.charAt(i) != '0')) lastZero = i + 1;
// TODO i18n
if (amountString.charAt(i) == '.') {
decimal = i + 1;
break;
}
}
int cutoff = Math.min(Math.max(lastZero, decimal + 2), decimal + maxDecimals);
return amountString.substring(0, cutoff);
} }
static public String getFormattedAmount(double amount, boolean isXmr) { static public String getFormattedAmount(double amount, boolean isXmr) {
@@ -556,6 +552,8 @@ public class Helper {
tvOpenPrompt.setText(context.getText(R.string.prompt_fingerprint_auth)); tvOpenPrompt.setText(context.getText(R.string.prompt_fingerprint_auth));
tvOpenPrompt.setVisibility(View.VISIBLE); tvOpenPrompt.setVisibility(View.VISIBLE);
FingerprintHelper.authenticate(context, cancelSignal, fingerprintAuthCallback); FingerprintHelper.authenticate(context, cancelSignal, fingerprintAuthCallback);
} else {
etPassword.requestFocus();
} }
Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE); Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
button.setOnClickListener(new View.OnClickListener() { button.setOnClickListener(new View.OnClickListener() {

View File

@@ -101,6 +101,8 @@ public class RestoreHeight {
blockheight.put("2019-01-01", 1738923L); blockheight.put("2019-01-01", 1738923L);
blockheight.put("2019-02-01", 1761435L); blockheight.put("2019-02-01", 1761435L);
blockheight.put("2019-03-01", 1781681L); blockheight.put("2019-03-01", 1781681L);
blockheight.put("2019-04-01", 1803081L);
blockheight.put("2019-05-01", 1824671L);
} }
public long getHeight(String date) { public long getHeight(String date) {

View File

@@ -37,8 +37,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_toStartOf="@+id/ibOption" android:layout_toStartOf="@+id/ibOption">
android:layout_toEndOf="@id/ibBookmark">
<ProgressBar <ProgressBar
android:id="@+id/pbNode" android:id="@+id/pbNode"

View File

@@ -225,34 +225,14 @@
android:padding="8sp" android:padding="8sp"
android:text="@string/tx_notes" /> android:text="@string/tx_notes" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText <EditText
android:id="@+id/etTxNotes" android:id="@+id/etTxNotes"
style="@style/MoneroEdit" style="@style/MoneroEdit"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/bTxNotes"
android:backgroundTint="@color/moneroGray" android:backgroundTint="@color/moneroGray"
android:hint="@string/tx_notes_hint" android:hint="@string/tx_notes_hint"
android:inputType="textMultiLine" /> android:inputType="textMultiLine" />
<Button
android:id="@+id/bTxNotes"
style="@style/MoneroButton.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerInParent="true"
android:enabled="true"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:text="@string/tx_button_notes" />
</RelativeLayout>
</TableRow> </TableRow>
<TableRow> <TableRow>

View File

@@ -17,7 +17,7 @@
<h1>Datenschutzerklärung</h1> <h1>Datenschutzerklärung</h1>
<p>Diese Seite informiert dich über unsere Richtlinien bezüglich der Sammlung, <p>Diese Seite informiert dich über unsere Richtlinien bezüglich der Sammlung,
Nutzung und Weitergabe persönlicher Informationen, die wir von Nutzern unserer Nutzung und Weitergabe persönlicher Informationen, die wir von Nutzern unserer
App erhalten (monerujo: Monero Wallet). App erhalten (monerujo: Monero-Wallet).
</p> </p>
<p>Mit der Nutzung der App stimmst du der Erfassung und Nutzung von Informationen in <p>Mit der Nutzung der App stimmst du der Erfassung und Nutzung von Informationen in
Übereinstimmung mit dieser Erklärung zu. Übereinstimmung mit dieser Erklärung zu.
@@ -29,21 +29,21 @@
von Transaktionen lokal gesammelt und verarbeitet und verschlüsselt in das Monero-Netzwerk übertragen. von Transaktionen lokal gesammelt und verarbeitet und verschlüsselt in das Monero-Netzwerk übertragen.
</p> </p>
<p>Andere persönliche Daten werden von der App nicht gesammelt.</p> <p>Andere persönliche Daten werden von der App nicht gesammelt.</p>
<p>Wenn du den Umrechner (optional) nutzt fragt Monerujo <p>Wenn du den Umrechner (optional) nutzt, fragt Monerujo
den aktuellen Kurs über die öffentliche Schnittstelle von coinmarketcap.com ab. den aktuellen Kurs über die öffentliche Schnittstelle von coinmarketcap.com ab.
Siehe dir ihre Datenschutzerklärung unter https://coinmarketcap.com/privacy für Siehe dir ihre Datenschutzerklärung unter https://coinmarketcap.com/privacy für
Details darüber an, wie Daten in deinen Anfragen gesammelt werden.</p> Details darüber an, wie Daten in deinen Anfragen gesammelt werden.</p>
<p>Wenn du die App zum Bezahlen an BTC-Adressen verwendest, verwendest du den Dienst XMR.TO. <p>Wenn du die App zum Bezahlen an BTC-Adressen verwendest, verwendest du den Dienst XMR.TO.
Weitere Informationen findest du in den Datenschutzerklärung unter https://xmr.to/. Weitere Informationen findest du in der Datenschutzerklärung unter https://xmr.to/.
Monerujo schickt dem Anbieter die BTC Zieladresse und den Betrag. Monerujo schickt dem Anbieter die BTC-Zieladresse und den Betrag.
Deine IP-Adresse kann dabei aufgezeichnet werden.</p> Deine IP-Adresse kann dabei aufgezeichnet werden.</p>
<h2>App-Berechtigungen</h2> <h2>App-Berechtigungen</h2>
<ul> <ul>
<li>INTERNET : Verbinde zum Monero Netzwerk über eine Monero Daemon Node</li> <li>INTERNET : Verbinde zum Monero-Netzwerk über einen Monero-Hintergrunddienst-Node</li>
<li>READ_EXTERNAL_STORAGE : Liest die auf dem Gerät gespeicherten Wallet Dateien aus</li> <li>READ_EXTERNAL_STORAGE : Lese die auf dem Gerät gespeicherten Wallet-Dateien aus</li>
<li>WRITE_EXTERNAL_STORAGE : Schreibt Wallet Dateien auf dem Gerät</li> <li>WRITE_EXTERNAL_STORAGE : Schreibe Wallet-Dateien auf das Gerät</li>
<li>WAKE_LOCK : Halte das Gerät während der Synchronisation wach</li> <li>WAKE_LOCK : Halte das Gerät während der Synchronisation wach</li>
<li>CAMERA : Scanne QR-Codes um Monero zu erhalten</li> <li>CAMERA : Scanne QR-Codes, um Monero zu erhalten</li>
</ul> </ul>
<h2>Änderungen an dieser Datenschutzerklärung</h2> <h2>Änderungen an dieser Datenschutzerklärung</h2>
<p>Wir können diese Datenschutzerklärung von Zeit zu Zeit aktualisieren. <p>Wir können diese Datenschutzerklärung von Zeit zu Zeit aktualisieren.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -380,5 +380,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -380,5 +380,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -370,5 +370,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -378,5 +378,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -382,5 +382,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -366,22 +366,22 @@
<string name="node_nobookmark">Aggiunti automaticamente ai segnalibri i %1$d nodi migliori</string> <string name="node_nobookmark">Aggiunti automaticamente ai segnalibri i %1$d nodi migliori</string>
<string name="label_test">Effettua Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Effettua Test</string><!--note: as in "Test a network connection"-->
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string> <string name="send_address_resolve_bip70">Risolvendo URI pagamento&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string> <string name="send_address_not_bip70">Impossibile risolvere pagamento URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string> <string name="send_address_bip70">Risolto URI pagamento&#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Ricevitore</string> <string name="send_address_hint">Ricevente</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">XMR.TO è offline - prova più tardi</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">Ammontare in BTC fuori dai limiti</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">URL di pagamento obsoleto o invalido</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Troppe richieste</string>
<string name="street_sweep_amount">EVERYTHING!</string> <!-- as in: "everything in the account" = "all the money" --> <string name="street_sweep_amount">TUTTO!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="menu_ledger_seed">Convert Ledger Seed</string> <string name="menu_ledger_seed">Converti seed Ledger</string>
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Parole del seed Ledger</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Frase d\'accesso Ledger (opzionale)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Seed di Ledger invalido!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Inserire il tuo seed di Ledger qui è un grosso rischio!</string>
</resources> </resources>

View File

@@ -239,14 +239,14 @@
コピーするか、QRコードから読み取るか、直接入力することができます。 コピーするか、QRコードから読み取るか、直接入力することができます。
間違ったアドレスにコインが送金されないように、 間違ったアドレスにコインが送金されないように、
このアドレスは確実に間違いがないことを確認してください。</p> このアドレスは確実に間違いがないことを確認してください。</p>
<p>In addition to using an XMR address, you can also use <p>XMRアドレスを使用することに加えて、あなたはまた使用することがあります
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>XMRやBTCのOpenAlias</li>
<li>a BTC address</li> <li>BTCアドレス</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li> <li>bitcoin: URI (bitpayのようなBIP70もいい)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to BTCの送信はXMR.TOサービスhttps://xmr.toを介して処理されることに注意してください。
for details). See the section on sending BTC below.</p> 下記のBTCの送信に関するセクションを参照してください。</p>
<h2>ペイメントID(Payment ID)</h2> <h2>ペイメントID(Payment ID)</h2>
<p>あなたは2者間でモネロを送金した理由を特定するために <p>あなたは2者間でモネロを送金した理由を特定するために
ペイメントIDを使うことができます。 ペイメントIDを使うことができます。
@@ -431,15 +431,15 @@
<!-- Note for translators: new/changed text also in help_send --> <!-- Note for translators: new/changed text also in help_send -->
<string name="help_uri"><![CDATA[ <string name="help_uri"><![CDATA[
<h1>Using a payment link</h1> <h1>ペイメントリンクを使用すること</h1>
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p> <p>ペイメントリンクでmonerujoを始めました。 送金するには、次の手順に従ってください。</p>
<p> <p>
1. Open the wallet you want to spend from<br> 1. 使いたいウォレットを開け<br>
2. Wait until the wallet is synced &amp; the "Give" button appears<br> 2. 同期されて「送金」ボタンを見える時に待て<br>
3. Touch the "Give" button 3. 「送金」ボタンをタップし て
</p> </p>
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p> <p>支払詳細を記入します。それからチェックして、他の取引と同じように進めてください。</p>
]]></string> ]]></string>
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" --> <string name="help_ok">分かりました!</string> <!-- Note: "Got it" as in "I understand this" -->
</resources> </resources>

View File

@@ -409,22 +409,22 @@
<string name="backup_success">バックアップ成功</string> <string name="backup_success">バックアップ成功</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string> <string name="send_address_resolve_bip70">ペイメントIDの名前解決中&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string> <string name="send_address_not_bip70">ペイメントIDの名前解決できませんでした</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string> <string name="send_address_bip70">ペイメントIDの名前解決しました &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" --> <!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">受け取り手</string> <string name="send_address_hint">受け取り手</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">XMR.TOはオフラインです。もう一度お試しください</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">BTCの金額は範囲外</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">ペイメントURLは不正古いです</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">リクエストは多すぎます</string>
<string name="street_sweep_amount">EVERYTHING!</string> <!-- as in: "everything in the account" = "all the money" --> <string name="street_sweep_amount">残高合計!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="menu_ledger_seed">Convert Ledger Seed</string> <string name="menu_ledger_seed">Ledgerシードを転換</string>
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledgerのニーモニックシード</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledgerパスフレーズ (オプショナル)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Ledgerのニーモニックシードは不正!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">ここにLedgerシードを入力するのは、大きなセキュリティリスクですよ</string>
</resources> </resources>

View File

@@ -380,5 +380,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -380,5 +380,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

View File

@@ -154,14 +154,14 @@
<p>Este é o endereço público da carteira na qual você está enviando Monero. Você pode colar da sua área de transferência, <p>Este é o endereço público da carteira na qual você está enviando Monero. Você pode colar da sua área de transferência,
escanear um código QR ou escrevê-lo manualmente. Verifique-o múltiplas vezes para garantir que você não está enviando escanear um código QR ou escrevê-lo manualmente. Verifique-o múltiplas vezes para garantir que você não está enviando
Monero para o endereço errado.</p> Monero para o endereço errado.</p>
<p>In addition to using an XMR address, you can also use <p>Além de enviar para um endereço XMR, você também pode enviar para
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>um OpenAlias para XMR ou BTC</li>
<li>a BTC address</li> <li>um endereço BTC</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li> <li>um URI bitcoin: (incluindo o BIP70 usado em serviços como o bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Observe que o envio de BTC é processado pelo serviço XMR.TO (veja https://xmr.to para detalhes).
for details). See the section on sending BTC below.</p> Consulte a seção sobre envio de BTC abaixo.</p>
<h2>ID do Pagamento</h2> <h2>ID do Pagamento</h2>
<p>Você pode usar o ID do Pagamento para identificar a razão pela qual você transacionou com a contraparte. <p>Você pode usar o ID do Pagamento para identificar a razão pela qual você transacionou com a contraparte.
Essa opção é opcional e privada. Por exemplo, lojistas podem reconciliar o seu pagamento com Essa opção é opcional e privada. Por exemplo, lojistas podem reconciliar o seu pagamento com
@@ -291,15 +291,15 @@
<!-- Note for translators: new/changed text also in help_send --> <!-- Note for translators: new/changed text also in help_send -->
<string name="help_uri"><![CDATA[ <string name="help_uri"><![CDATA[
<h1>Using a payment link</h1> <h1>Usando um link de pagamento</h1>
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p> <p>Você abriu o monerujo a partir de um link de pagamento. Para enviar os fundos, siga estes passos:</p>
<p> <p>
1. Open the wallet you want to spend from<br> 1. Abra a carteira da qual você quer gastar<br>
2. Wait until the wallet is synced &amp; the "Give" button appears<br> 2. Espere que a carteira esteja sincronizada &amp; o botão "Enviar" vai aparecer<br>
3. Touch the "Give" button 3. Toque no botão "Enviar"
</p> </p>
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p> <p>Os detalhes do pagamento serão preenchidos. Confirme-os e siga adiante como qualquer outra transação normal.</p>
]]></string> ]]></string>
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" --> <string name="help_ok">Entendi!</string> <!-- Note: "Got it" as in "I understand this" -->
</resources> </resources>

View File

@@ -356,21 +356,21 @@
<string name="backup_success">Backup feito com successo</string> <string name="backup_success">Backup feito com successo</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string> <string name="send_address_resolve_bip70">Resolvendo URI do Pagamento&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string> <string name="send_address_not_bip70">Não foi possível resolver o URI do pagamento</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string> <string name="send_address_bip70">URI do Pagamento resolvido &#x2714;</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Destinatário</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">XMR.TO offline - tente novamente mais tarde</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">Valor BTC fora dos limites</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">URL de pagamento inválido</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Demasiadas solicitações</string>
<string name="street_sweep_amount">EVERYTHING!</string> <!-- as in: "everything in the account" = "all the money" --> <string name="street_sweep_amount">TUDO!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="menu_ledger_seed">Convert Ledger Seed</string> <string name="menu_ledger_seed">Converter semente da Ledger</string>
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Palavras da semente da Ledger</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Senha da Ledger (opcional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Semente da Ledger inválida!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Escrever a semente da sua Ledger aqui é um grande risco de segurança!</string>
</resources> </resources>

View File

@@ -141,14 +141,14 @@
<p> Este é o endereço público da carteira para a qual vais enviar Moneroj, podes copiar esta <p> Este é o endereço público da carteira para a qual vais enviar Moneroj, podes copiar esta
informação da área de transferência, capturara um código QR, ou introduzir manualmente. Confirma informação da área de transferência, capturara um código QR, ou introduzir manualmente. Confirma
atentamente que não estás a enviar para o endereço errado.</p> atentamente que não estás a enviar para o endereço errado.</p>
<p>In addition to using an XMR address, you can also use <p>Para alem de usar um endereço de XMR também podes usar
<ul> <ul>
<li>an OpenAlias for XMR or BTC</li> <li>Um OpenAlias para XMR ou BTC</li>
<li>a BTC address</li> <li>um endereço de BTC</li>
<li>a bitcoin: URI (including BIP70 like bitpay)</li> <li>um enderço bitcoin: URI (incluindo BIP70 tipo bitpay)</li>
</u> </u>
Please note, that sending BTC is processed through the XMR.TO service (see https://xmr.to Não deixar de notar que, enviar BTC é processado através do serviço XMR.TO (ver https://xmr.to
for details). See the section on sending BTC below.</p> para detalhes). Ver a secção enviar BTC.</p>
<h2>ID do Pagamento</h2> <h2>ID do Pagamento</h2>
<p>Utiliza-se o ID do Pagamento para identificar a razão porque foram transaccionados Moneroj. <p>Utiliza-se o ID do Pagamento para identificar a razão porque foram transaccionados Moneroj.
Isto é opcional e privado. Por exemplo, isto permite que um negócio identifique que item Isto é opcional e privado. Por exemplo, isto permite que um negócio identifique que item
@@ -213,24 +213,25 @@
]]></string> ]]></string>
<string name="help_create_ledger"><![CDATA[ <string name="help_create_ledger"><![CDATA[
<h1>Create Wallet - Ledger</h1> <h1>Criar carteira - Ledger</h1>
<p>You want to recover your wallet from your Ledger Nano S device.</p> <p>Se quiseres recuperar a tua carteira apartir do teu dispositivo Ledger Nano S.</p>
<p>Your secret keys never leave the Ledger device, so you need it plugged in every <p>As tuas chaves secretas nunca saem do teu dispositivo Ledger, consequentemente
time you want to access your wallet.</p> tens de conetar o mesmo sempre que quiseres aceder à tua carteira.</p>
<p>Enter a unique wallet name and password. The password is used for securing your wallet data on the Android <p>Introduz um nome e palavra passe unicos. A palavra passe é usada para garantir a segurança
device. Use a strong password - even better use a passphrase.</p> da tua informação no dispositivo Android. Usa uma palavra passe forte!</p>
<p>Enter the block number of the first transaction used for this address in the <p>Introduz o numero do bloco da primeira transação correspondente a este endereço no campo
field \"Restore Height\". You can also use a date in the format YYYY-MM-DD. If you are not sure, \"Restore Height\". Podes tambem usar o formato ano mês dia ANO-MES-DIA. Se não tiveres
enter an approximate date/blockheight <em>before</em> you first used this wallet address.</p> certeza, introduz uma data/numero do bloco aproximada <em>antes</em> da primeira utilização
da carteira.</p>
]]></string> ]]></string>
<string name="help_wallet"><![CDATA[ <string name="help_wallet"><![CDATA[
<h1>A Carteira</h1> <h1>A Carteira</h1>
<h2>Street Mode</h2> <h2>Street Mode</h2>
<p>Street mode can be enabled/disabled in the menu or Gunther\'s head icon. In this mode, your <p>O Street mode pode ser ligado/desligado no menu ou na cabeça do icon Gunther. Neste modo
balance is not shown on any screen so you can safely use your wallet on the street, a pub or o teu saldo não é mostrado no teu ecrã para que possas usar a tua carteira de forma segura
other public place. Previous transactions are also hidden. New transactions will be shown, so na rua, num bar ou outro local publico. As transações anteriores são também escondidas. As novas
you can see that you have sent/received sweet Moneroj!</p> transações serão mostradas, para que cossas ver se enviaste/recebeste os teus preciosos Moneroj!</p>
<h2>A Examinar</h2> <h2>A Examinar</h2>
Como o Monero gosta de manter as coisas privadas, cada vez que abres uma carteira Monerujo temos Como o Monero gosta de manter as coisas privadas, cada vez que abres uma carteira Monerujo temos
que examinar a blockchain para ver se novos Moneroj foram enviados para a tua carteira. Apenas que examinar a blockchain para ver se novos Moneroj foram enviados para a tua carteira. Apenas
@@ -248,66 +249,61 @@
]]></string> ]]></string>
<string name="help_node"><![CDATA[ <string name="help_node"><![CDATA[
<h1>Nodes</h1> <h1>Nós</h1>
<h2>TL;DR</h2> <h2>TL;DR</h2>
<p>Refresh the nodes list by pulling down &amp; bookmark 3&#8211;5 nodes to allow Monerujo <p>Refresca a lista de Nós puxando para baixo &amp; favorito 3&#8211;5 nós para permitir que
to choose the best one for you!</p> o Monerujo escolha o melhor para ti!</p>
<h2>What&apos;s a Node?</h2> <h2>O que é&apos;s um Nó?</h2>
<p>Monerujo uses a Remote Node (sometimes also called Daemon) to communicate with <p>O Monerujo usa um Nó remoto (por vezes chamado Daemon) para comunicar com a Rede do Monero
the Monero Network without having to download and store a copy of the sem ter de descarregar e gravar uma copia inteira da blockchain.</p>
whole blockchain itself.<p> <h2>Lista de Nós</h2>
<h2>Node List</h2> <p>Se a lista estiver vazia, podes adicionar um Nó manualmente ou deixar o Monerujo fazer um
<p>If the list is empty, you can either add new nodes manually or let Monerujo scan à Rede por ti. Ou ambos. Continuar a ler em&#8230;</p>
scan the network for you. Or both. Read on&#8230;</p> <p>A lista de nós mostra todos os nós actualmente conhecidos. Adicionalmente, o timestamp do
<p>The node list shows all currently known nodes. Additionally, the timestamp ultimo bloco conhecido é listado em cada nome do nó. Um icon a representar o tempo de resposta
of the latest block known to each node is shown under the node name. An icon do nó&apos; (que indica o nivel de conetividade esperado) é mostrado junto de cada nó.</p>
representing the node&apos;s response behaviour <p>Qualquer nó na lista pode ser adicionado aos favoritos por forma a usar mais tarde.
(which indicates the level of connectivity to be expected) Nós que não forem adicionados como favoritos serão esquecidos.<p>
is shown next to each node.</p> <p>O Monerujo irá escolher o melhor nó favorito cada vez que o usas.
<p>Any node in the list can be bookmarked for later use. Faz isto verificando a Altura (quanto mais actualizado esta cada nó) assim como a velocidade de
Nodes which are not bookmarked will be forgotten.<p> resposta (quão rapido responde este nó?).</p>
<p>Monerujo will choose the optimal bookmarked node each time you use it. <p>A lista é disposta consoante estas caracteristicas, assim sendo no topo estará o nó que o
It does this by checking the blockheight (how up-to-date Monerujo escolheria a cada momento. No fundo da lista ficam os nós mais lentos ou indisponiveis.</p>
is the node?) as well as the response behaviour (how fast does the node respond to requests?).</p> <h2>Adicionar um Nó</h2>
<p>The list is sorted by these characteristics, so the top node would be the one Monerujo <p>Tocando no botão &quot;Adicionar Nó&quot; no fundo, poderás adicionar os detalhes
would choose right now. The bottom of the list would show very slow or unavailable nodes.</p> na janela de dialogo.
<h2>Add a Node</h2> Em &quot;Endereço&quot; está o hostname ou endereço IP do nó - este é o unico campo necessário.
<p>By touching the &quot;Add Node&quot; button at the bottom, you will be asked to Introduz a &quot;Porta&quot; se o nó corre com uma porta nao standard (ex 18089).
enter the node details in the following dialog. Podes opcionalmente introduzir também um nome para mais facilmente o identificares mais tarde.
The &quot;Address&quot; is the hostname or IP-address of the node - this is the only Alguns nós requerem credenciais para os usar, introduz o nome de usuario &amp;
mandatory entry. e palavra passe nos campos disponibilizados. Agora podes &quot;Testar&quot; estas configurações.
Enter the &quot;Port&quot; if the node runs on a non-default port (e.g. 18089). Os &quot;Resultados do Teste&quot; mostrarão a altura do bloco, tempo de resposta e IP usados.
You can also optionally name the node, so you can identify it easier later on. O resultado pode também ser um erro - geralmente porque o Endereço introduzido está indisponivel
Some nodes require credentials to use them. Enter the provided username &amp; dentro de tempo util ou as credenciais estão incorretas.
password in the appropriate fields. Now you can &quot;Test&quot; these setting. Ou a combinação endereço/porta não aponta para um Nó de Monero!
The &quot;Test Results&quot; will display the blockheight, response time and actual IP used. Assim que o teste passar (sem erros) - podes&apos;pressionar &quot;OK&quot; para gravar &amp;
The result may also be an error - usually because the hostname provided is favorito este nó.</p>
not reachable in a sensible amount of time or the credentials are incorrect. <h2>Procurar Nós</h2>
Or the hostname/port combination does not point to an actual Monero Node! <p>Adicionalmente, podes procurar nós na Rede de Monero. O Monerujo vai realizar
Once the test passes (no error) - you&apos;re set to press &quot;OK&quot; to save &amp; uma busca na rede por nós remotos na porta 18089. Vai começar por procurar nos teus
bookmark this node.</p> nós favoritos por outros pares na rede P2P do Monero e depois continua perguntando
<h2>Scan for Nodes</h2> a esses pares, e por ai fora. Se não tiveres nenhum nó favorito na tua lista o
<p>Additionally, you can scan the network for nodes. Monerujo will start Monerujo irá usar directamente os nós base que estão inscritos no codigo do Monero.
scanning the network for Remote Nodes on port 18089. It begins by asking your A procura irá parar assim que encontrar 10 nós remotos no total.</p>
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>
]]></string> ]]></string>
<!-- Note for translators: new/changed text also in help_send --> <!-- Note for translators: new/changed text also in help_send -->
<string name="help_uri"><![CDATA[ <string name="help_uri"><![CDATA[
<h1>Using a payment link</h1> <h1>Usando Endereço de Pagamento</h1>
<p>You have started monerujo with a payment link. In order to send funds, please do the following:</p> <p>Iniciaste o Monerujo com um endereço de pagamento. Para enviar fundos, por favor faz o seguinte:</p>
<p> <p>
1. Open the wallet you want to spend from<br> 1. Abre a carteira de onde pretendes gastar<br>
2. Wait until the wallet is synced &amp; the "Give" button appears<br> 2. Espera até a carteira sincronizar &amp; e o botão "Enviar" aparecer<br>
3. Touch the "Give" button 3. Carrega no butão "Enviar"
</p> </p>
<p>The payment details will be filled in. Check them and proceed like for any other transaction.</p> <p>Os detalhes do pagamento serão automaticamente preenchidos. Verifica e continua como em outra qualquer transação</p>
]]></string> ]]></string>
<string name="help_ok">Got it!</string> <!-- Note: "Got it" as in "I understand this" --> <string name="help_ok">Entendido!</string> <!-- Note: "Got it" as in "I understand this" -->
</resources> </resources>

View File

@@ -288,101 +288,101 @@
<string name="fab_restore_key">Restaurar carteira a partir de chaves privadas</string> <string name="fab_restore_key">Restaurar carteira a partir de chaves privadas</string>
<string name="fab_restore_seed">Restaurar carteira a partir da semente de 25 palavras</string> <string name="fab_restore_seed">Restaurar carteira a partir da semente de 25 palavras</string>
<string name="bad_saved_password">Saved password is incorrect.\nPlease enter password manually.</string> <string name="bad_saved_password">Palavra passe gravada incorrecta.\nInsere a palavra passe manualmente.</string>
<string name="prompt_open_wallet">Opening the wallet&#8230;</string> <string name="prompt_open_wallet">A abrir a carteira&#8230;</string>
<string name="accounts_drawer_new">Create Account</string> <string name="accounts_drawer_new">Criar Conta</string>
<string name="accounts_new">Added new account #%1$d</string> <string name="accounts_new">Conta nova adicionada #%1$d</string>
<string name="tx_account">Account #</string> <string name="tx_account">Conta #</string>
<string name="send_sweepall">Send all confirmed funds in this account!</string> <string name="send_sweepall">Enviar todos os fundos confirmados para esta conta!</string>
<string name="tx_subaddress">Subaddress #%1$d</string> <string name="tx_subaddress">Subaddress #%1$d</string>
<string name="generate_address_label_sub">Public Subaddress #%1$d</string> <string name="generate_address_label_sub">Subaddress Publico #%1$d</string>
<string name="menu_language">Language</string> <string name="menu_language">Linguagem</string>
<string name="language_system_default">Use System Language</string> <string name="language_system_default">Usar linguagem de sistema</string>
<string name="fab_restore_ledger">Restore from Ledger Nano S</string> <string name="fab_restore_ledger">Restaurar de Ledger Nano S</string>
<string name="progress_ledger_progress">Communicating with Ledger</string> <string name="progress_ledger_progress">A comunicar com o Ledger</string>
<string name="progress_ledger_confirm">Confirmation on Ledger required!</string> <string name="progress_ledger_confirm">Confirmação com Ledger necessária!</string>
<string name="progress_ledger_lookahead">Retrieving subaddresses</string> <string name="progress_ledger_lookahead">Recuperando subaddresses</string>
<string name="progress_ledger_verify">Verifying keys</string> <string name="progress_ledger_verify">Verificando chaves</string>
<string name="progress_ledger_opentx">Doing crazy maths</string> <string name="progress_ledger_opentx">A cozinhar os numeros</string>
<string name="progress_ledger_mlsag">Hashing stuff</string> <string name="progress_ledger_mlsag">Produzindo hashes</string>
<string name="open_wallet_ledger_missing">Please (re)connect Ledger device</string> <string name="open_wallet_ledger_missing">Reconeta o teu Ledger</string>
<string name="accounts_progress_new">Creating account</string> <string name="accounts_progress_new">A criar conta</string>
<string name="toast_ledger_attached">%1$s attached</string> <string name="toast_ledger_attached">%1$s Ligado</string>
<string name="toast_ledger_detached">%1$s detached</string> <string name="toast_ledger_detached">%1$s Desligado</string>
<string name="progress_nfc_write">Writing Tag</string> <string name="progress_nfc_write">Escrevendo Tag</string>
<string name="nfc_write_failed">Writing Tag failed!</string> <string name="nfc_write_failed">A escrita do Tag falhou!</string>
<string name="nfc_write_successful">Writing Tag successful</string> <string name="nfc_write_successful">Escrita do Tag bem sucedida</string>
<string name="nfc_tag_unsupported">Tag does not support NDEF!</string> <string name="nfc_tag_unsupported">A Tag não suporta NDEF!</string>
<string name="nfc_tag_size">Tag provides %1$d bytes, but we need %2$d!</string> <string name="nfc_tag_size">A Tag tem %1$d bytes, mas nós precisamos de %2$d!</string>
<string name="nfc_tag_read_undef">I don\'t understand the Tag!</string> <string name="nfc_tag_read_undef">Eu não percebo a Tag!</string>
<string name="nfc_tag_read_what">I don\'t know what you want!</string> <string name="nfc_tag_read_what">Eu não percebo o que queres fazer!</string>
<string name="nfc_tag_read_success">Reading Tag successful</string> <string name="nfc_tag_read_success">Leitura do Tag bem sucedida</string>
<string name="nfc_tag_tap">NFC Available!</string> <string name="nfc_tag_tap">NFC Disponivel!</string>
<string name="receive_desc_hint">Description (optional)</string> <string name="receive_desc_hint">Descrição (opcional)</string>
<string name="send_address_not_openalias">OpenAlias address not available</string> <string name="send_address_not_openalias">Endereço OpenAlias não disponivel.</string>
<string name="send_address_openalias">OpenAlias secure &#x2714;</string> <string name="send_address_openalias">OpenAlias seguro &#x2714;</string>
<string name="send_address_resolve_openalias">Resolving OpenAlias&#8230;</string> <string name="send_address_resolve_openalias">Resolvendo OpenAlias&#8230;</string>
<string name="send_address_no_dnssec">OpenAlias without DNSSEC - address may be spoofed</string> <string name="send_address_no_dnssec">OpenAlias sem DNSSEC - endereço pode estar spoofed </string>
<string name="status_wallet_connect_wrongversion">Node version incompatible - please upgrade!</string> <string name="status_wallet_connect_wrongversion">Versão do Nó incompativel - atualizar por favor!</string>
<string name="menu_info">Detalhes</string><!--Changed to: Show Secrets!--> <string name="menu_info">Mostrar Segredos</string><!--Changed to: Show Secrets!-->
<string name="menu_streetmode">Street Mode</string> <string name="menu_streetmode">Street Mode</string>
<string name="info_nodes_enabled">Node-o-matiC enabled, tap for more info.</string> <string name="info_nodes_enabled">Node-o-matiC ativado, tocar para mais info.</string>
<string name="node_height">Last block updated: %1$s</string> <string name="node_height">Ultimo bloco actualizado: %1$s</string>
<string name="label_nodes">Nodes</string> <string name="label_nodes">Nós</string>
<string name="node_name_hint">Node Name (Optional)</string> <string name="node_name_hint">Nome do Nó (Opcional)</string>
<string name="node_address_hint">Hostname</string> <string name="node_address_hint">Hostname</string>
<string name="node_port_hint">Port</string> <string name="node_port_hint">Port</string>
<string name="node_user_hint">Username (Optional)</string> <string name="node_user_hint">Nome de usuario (Optional)</string>
<string name="node_pass_hint">Password (Optional)</string> <string name="node_pass_hint">Palavra passe (Optional)</string>
<string name="node_host_unresolved">Cannot resolve host</string> <string name="node_host_unresolved">Não foi possivel resolver host</string>
<string name="node_host_empty">We need this!</string> <string name="node_host_empty">Precisamos disto!</string>
<string name="node_port_numeric">Must be numeric</string> <string name="node_port_numeric">Tem de ser numérico</string>
<string name="node_port_range">Must be 1&#8211;65535</string> <string name="node_port_range">Tem de ser 1&#8211;65535</string>
<string name="node_fab_add">Add Node</string> <string name="node_fab_add">Adicionar Nó</string>
<string name="node_refresh_hint">Touch to refresh!</string> <string name="node_refresh_hint">Tocar para refrescar!</string>
<string name="node_test_error">CONNECTION ERROR %1$d</string> <string name="node_test_error">ERRO LIGAÇÃO %1$d</string>
<string name="node_general_error">CONNECTION ERROR</string> <string name="node_general_error">ERRO LIGAÇÂO</string>
<string name="node_auth_error">AUTHENTICATION FAILED</string> <string name="node_auth_error">AUTENTIFICAÇÃO FALHOU</string>
<string name="node_result_label">Test Result:</string> <string name="node_result_label">Resultado do teste:</string>
<string name="node_result">Height: %1$s (v%2$d), Ping: %3$.0fms, IP: %4$s</string> <string name="node_result">Altura: %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_testing">A testar IP: %1$s &#8230;</string>
<string name="node_refresh_wait">Please wait for scan to finish</string> <string name="node_refresh_wait">Por favor espera que o scan acabe</string>
<string name="node_create_hint">Touch to select or add nodes</string> <string name="node_create_hint">Tocar para selecionar Nós.</string>
<string name="node_pull_hint">Add nodes manually or pull down to scan</string> <string name="node_pull_hint">Adicionar Nós manualmente ou puxa para fazer scan</string>
<string name="node_scanning">Scanning network&#8230;</string> <string name="node_scanning">A fazer scan á rede &#8230;</string>
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string> <string name="node_nobookmark">Adicionar aos bookmarks os melhores %1$d nós automaticamente</string>
<string name="label_test">Test</string><!--note: as in "Test a network connection"--> <string name="label_test">Testar ligação</string><!--note: as in "Test a network connection"-->
<string name="backup_success">Backup successful</string> <string name="backup_success">Backup bem sucedido</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string> <string name="send_address_resolve_bip70">A resolver URI&#8230; de pagamento</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string> <string name="send_address_not_bip70">Não foi possivel resolver URI de pagamento</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string> <string name="send_address_bip70">Pagemento URI &#x2714; resolvido</string>
<string name="send_address_hint">Receiver</string> <string name="send_address_hint">Receptor</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string> <string name="xmrto_error_001">XMR.TO offline - tenta mais tarde</string>
<string name="xmrto_error_004">BTC amount out of bounds</string> <string name="xmrto_error_004">Montante de BTC fora dos limites</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string> <string name="xmrto_error_010">URL de pagamento invalido ou fora de prazo</string>
<string name="xmrto_error_012">Too many requests</string> <string name="xmrto_error_012">Demasiadas solicitações</string>
<string name="street_sweep_amount">EVERYTHING!</string> <!-- as in: "everything in the account" = "all the money" --> <string name="street_sweep_amount">A TOTALIDADE!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="menu_ledger_seed">Convert Ledger Seed</string> <string name="menu_ledger_seed">Converter semente do Ledger</string>
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Palavras da semente do Ledger</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Palavra passe do Ledger (opcional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Semente do Ledger invalida!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Introduzir a semente do Ledger aqui comporta um elevado risco de segurança!</string>
</resources> </resources>

View File

@@ -380,5 +380,5 @@
<string name="prompt_ledger_seed">Ledger Seed Words</string> <string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string> <string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string> <string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering you Ledger Seed here is a major security risk!</string> <string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
</resources> </resources>

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