mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-04 00:53:36 +02:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a4b9a7c6fb | ||
![]() |
9f01155cb7 | ||
![]() |
08e8a48138 | ||
![]() |
551c3b9fb6 | ||
![]() |
2258cb7096 | ||
![]() |
6d61841cf3 | ||
![]() |
c65508d288 | ||
![]() |
2c3f582672 | ||
![]() |
f46ba75771 | ||
![]() |
0ce5f2b6ca |
@@ -155,6 +155,18 @@ add_library(net STATIC IMPORTED)
|
||||
set_target_properties(net PROPERTIES IMPORTED_LOCATION
|
||||
${EXTERNAL_LIBS_DIR}/monero/lib/${ANDROID_ABI}/libnet.a)
|
||||
|
||||
add_library(hardforks STATIC IMPORTED)
|
||||
set_target_properties(hardforks PROPERTIES IMPORTED_LOCATION
|
||||
${EXTERNAL_LIBS_DIR}/monero/lib/${ANDROID_ABI}/libhardforks.a)
|
||||
|
||||
add_library(randomx STATIC IMPORTED)
|
||||
set_target_properties(randomx PROPERTIES IMPORTED_LOCATION
|
||||
${EXTERNAL_LIBS_DIR}/monero/lib/${ANDROID_ABI}/librandomx.a)
|
||||
|
||||
add_library(rpc_base STATIC IMPORTED)
|
||||
set_target_properties(rpc_base PROPERTIES IMPORTED_LOCATION
|
||||
${EXTERNAL_LIBS_DIR}/monero/lib/${ANDROID_ABI}/librpc_base.a)
|
||||
|
||||
#############
|
||||
# System
|
||||
#############
|
||||
@@ -188,6 +200,9 @@ target_link_libraries( monerujo
|
||||
device_trezor
|
||||
multisig
|
||||
version
|
||||
randomx
|
||||
hardforks
|
||||
rpc_base
|
||||
|
||||
boost_chrono
|
||||
boost_date_time
|
||||
|
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 183
|
||||
versionName "1.11.13 'Chernushka'"
|
||||
versionCode 193
|
||||
versionName "1.12.3 'Caerbannog'"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
|
@@ -266,6 +266,7 @@ public class NodeFragment extends Fragment
|
||||
seedList.add(new NodeInfo(new InetSocketAddress("198.74.231.92", 18080)));
|
||||
seedList.add(new NodeInfo(new InetSocketAddress("195.154.123.123", 18080)));
|
||||
seedList.add(new NodeInfo(new InetSocketAddress("212.83.172.165", 18080)));
|
||||
seedList.add(new NodeInfo(new InetSocketAddress("192.110.160.146", 18080)));
|
||||
d.seedPeers(seedList);
|
||||
d.awaitTermination(NODES_TO_FIND);
|
||||
}
|
||||
|
@@ -235,8 +235,10 @@ public class NodeInfo extends Node {
|
||||
String rpcVersion = json.getString("jsonrpc");
|
||||
if (!RPC_VERSION.equals(rpcVersion))
|
||||
return false;
|
||||
final JSONObject header = json.getJSONObject(
|
||||
"result").getJSONObject("block_header");
|
||||
final JSONObject result = json.getJSONObject("result");
|
||||
if (!result.has("credits")) // introduced in monero v0.15.0
|
||||
return false;
|
||||
final JSONObject header = result.getJSONObject("block_header");
|
||||
height = header.getLong("height");
|
||||
timestamp = header.getLong("timestamp");
|
||||
majorVersion = header.getInt("major_version");
|
||||
|
@@ -140,28 +140,12 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
next = null;
|
||||
} else {
|
||||
// maybe a bip72 or 70 URI
|
||||
String bip70 = PaymentProtocolHelper.getBip70(enteredAddress);
|
||||
final String bip70 = PaymentProtocolHelper.getBip70(enteredAddress);
|
||||
if (bip70 != null) {
|
||||
// looks good - resolve through xmr.to
|
||||
processBip70(bip70);
|
||||
next = null;
|
||||
} else if (checkAddress()) {
|
||||
if (llPaymentId.getVisibility() == View.VISIBLE) {
|
||||
next = etPaymentId;
|
||||
} else {
|
||||
next = etNotes;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (next != null) {
|
||||
final View focus = next;
|
||||
etAddress.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
focus.requestFocus();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -176,6 +160,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
Timber.d("isIntegratedAddress");
|
||||
etPaymentId.getEditText().getText().clear();
|
||||
llPaymentId.setVisibility(View.INVISIBLE);
|
||||
etAddress.setError(getString(R.string.info_paymentid_integrated));
|
||||
tvPaymentIdIntegrated.setVisibility(View.VISIBLE);
|
||||
llXmrTo.setVisibility(View.INVISIBLE);
|
||||
sendListener.setMode(SendFragment.Mode.XMR);
|
||||
@@ -208,10 +193,21 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
if (clip == null) return;
|
||||
// clean it up
|
||||
final String address = clip.replaceAll("[^0-9A-Z-a-z]", "");
|
||||
if (Wallet.isAddressValid(address) || BitcoinAddressValidator.validate(address))
|
||||
etAddress.getEditText().setText(address);
|
||||
else
|
||||
Toast.makeText(getActivity(), getString(R.string.send_address_invalid), Toast.LENGTH_SHORT).show();
|
||||
if (Wallet.isAddressValid(address) || BitcoinAddressValidator.validate(address)) {
|
||||
final EditText et = etAddress.getEditText();
|
||||
et.setText(address);
|
||||
et.setSelection(et.getText().length());
|
||||
etAddress.requestFocus();
|
||||
} else {
|
||||
final String bip70 = PaymentProtocolHelper.getBip70(clip);
|
||||
if (bip70 != null) {
|
||||
final EditText et = etAddress.getEditText();
|
||||
et.setText(clip);
|
||||
et.setSelection(et.getText().length());
|
||||
processBip70(bip70);
|
||||
} else
|
||||
Toast.makeText(getActivity(), getString(R.string.send_address_invalid), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -248,7 +244,10 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
bPaymentId.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
etPaymentId.getEditText().setText((Wallet.generatePaymentId()));
|
||||
final EditText et = etPaymentId.getEditText();
|
||||
et.setText((Wallet.generatePaymentId()));
|
||||
et.setSelection(et.getText().length());
|
||||
etPaymentId.requestFocus();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -259,7 +258,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN))
|
||||
|| (actionId == EditorInfo.IME_ACTION_DONE)) {
|
||||
etDummy.requestFocus();
|
||||
Helper.hideKeyboard(getActivity());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -277,7 +275,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
etDummy = view.findViewById(R.id.etDummy);
|
||||
etDummy.setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||
etDummy.requestFocus();
|
||||
Helper.hideKeyboard(getActivity());
|
||||
|
||||
View tvNfc = view.findViewById(R.id.tvNfc);
|
||||
NfcManager manager = (NfcManager) getContext().getSystemService(Context.NFC_SERVICE);
|
||||
@@ -551,7 +548,6 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||
public void onResumeFragment() {
|
||||
super.onResumeFragment();
|
||||
Timber.d("onResumeFragment()");
|
||||
Helper.hideKeyboard(getActivity());
|
||||
etDummy.requestFocus();
|
||||
}
|
||||
|
||||
|
@@ -21,8 +21,6 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.m2049r.xmrwallet.R;
|
||||
@@ -30,8 +28,7 @@ import com.m2049r.xmrwallet.data.BarcodeData;
|
||||
import com.m2049r.xmrwallet.data.TxData;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.widget.ExchangeTextView;
|
||||
import com.m2049r.xmrwallet.widget.NumberPadView;
|
||||
import com.m2049r.xmrwallet.widget.ExchangeEditText;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
@@ -59,8 +56,7 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
}
|
||||
|
||||
private TextView tvFunds;
|
||||
private ExchangeTextView evAmount;
|
||||
private View llAmount;
|
||||
private ExchangeEditText etAmount;
|
||||
private View rlSweep;
|
||||
private ImageButton ibSweep;
|
||||
|
||||
@@ -75,12 +71,9 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
View view = inflater.inflate(R.layout.fragment_send_amount, container, false);
|
||||
|
||||
tvFunds = view.findViewById(R.id.tvFunds);
|
||||
|
||||
evAmount = view.findViewById(R.id.evAmount);
|
||||
((NumberPadView) view.findViewById(R.id.numberPad)).setListener(evAmount);
|
||||
|
||||
etAmount = view.findViewById(R.id.etAmount);
|
||||
rlSweep = view.findViewById(R.id.rlSweep);
|
||||
llAmount = view.findViewById(R.id.llAmount);
|
||||
|
||||
view.findViewById(R.id.ivSweep).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -97,8 +90,7 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
}
|
||||
});
|
||||
|
||||
Helper.hideKeyboard(getActivity());
|
||||
|
||||
etAmount.requestFocus();
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -107,11 +99,11 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
private void sweepAll(boolean spendAllMode) {
|
||||
if (spendAllMode) {
|
||||
ibSweep.setVisibility(View.INVISIBLE);
|
||||
llAmount.setVisibility(View.GONE);
|
||||
etAmount.setVisibility(View.GONE);
|
||||
rlSweep.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
ibSweep.setVisibility(View.VISIBLE);
|
||||
llAmount.setVisibility(View.VISIBLE);
|
||||
etAmount.setVisibility(View.VISIBLE);
|
||||
rlSweep.setVisibility(View.GONE);
|
||||
}
|
||||
this.spendAllMode = spendAllMode;
|
||||
@@ -124,12 +116,12 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
sendListener.getTxData().setAmount(Wallet.SWEEP_ALL);
|
||||
}
|
||||
} else {
|
||||
if (!evAmount.validate(maxFunds)) {
|
||||
if (!etAmount.validate(maxFunds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sendListener != null) {
|
||||
String xmr = evAmount.getAmount();
|
||||
String xmr = etAmount.getAmount();
|
||||
if (xmr != null) {
|
||||
sendListener.getTxData().setAmount(Wallet.getAmountFromString(xmr));
|
||||
} else {
|
||||
@@ -146,7 +138,7 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
public void onResumeFragment() {
|
||||
super.onResumeFragment();
|
||||
Timber.d("onResumeFragment()");
|
||||
Helper.hideKeyboard(getActivity());
|
||||
Helper.showKeyboard(getActivity());
|
||||
final long funds = getTotalFunds();
|
||||
maxFunds = 1.0 * funds / 1000000000000L;
|
||||
if (!sendListener.getActivityCallback().isStreetMode()) {
|
||||
@@ -157,10 +149,10 @@ public class SendAmountWizardFragment extends SendWizardFragment {
|
||||
getString(R.string.unknown_amount)));
|
||||
}
|
||||
// getAmount is null if exchange is in progress
|
||||
if ((evAmount.getAmount() != null) && evAmount.getAmount().isEmpty()) {
|
||||
if ((etAmount.getAmount() != null) && etAmount.getAmount().isEmpty()) {
|
||||
final BarcodeData data = sendListener.popBarcodeData();
|
||||
if ((data != null) && (data.amount != null)) {
|
||||
evAmount.setAmount(data.amount);
|
||||
etAmount.setAmount(data.amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -31,8 +31,7 @@ import com.m2049r.xmrwallet.data.TxDataBtc;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.OkHttpHelper;
|
||||
import com.m2049r.xmrwallet.widget.ExchangeBtcTextView;
|
||||
import com.m2049r.xmrwallet.widget.NumberPadView;
|
||||
import com.m2049r.xmrwallet.widget.ExchangeBtcEditText;
|
||||
import com.m2049r.xmrwallet.widget.SendProgressView;
|
||||
import com.m2049r.xmrwallet.xmrto.XmrToError;
|
||||
import com.m2049r.xmrwallet.xmrto.XmrToException;
|
||||
@@ -62,8 +61,7 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
}
|
||||
|
||||
private TextView tvFunds;
|
||||
private ExchangeBtcTextView evAmount;
|
||||
private NumberPadView numberPad;
|
||||
private ExchangeBtcEditText etAmount;
|
||||
|
||||
private TextView tvXmrToParms;
|
||||
private SendProgressView evParams;
|
||||
@@ -86,24 +84,20 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
|
||||
tvXmrToParms = view.findViewById(R.id.tvXmrToParms);
|
||||
|
||||
evAmount = view.findViewById(R.id.evAmount);
|
||||
numberPad = view.findViewById(R.id.numberPad);
|
||||
numberPad.setListener(evAmount);
|
||||
|
||||
Helper.hideKeyboard(getActivity());
|
||||
|
||||
etAmount = view.findViewById(R.id.etAmount);
|
||||
etAmount.requestFocus();
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onValidateFields() {
|
||||
if (!evAmount.validate(maxBtc, minBtc)) {
|
||||
if (!etAmount.validate(maxBtc, minBtc)) {
|
||||
return false;
|
||||
}
|
||||
if (sendListener != null) {
|
||||
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
|
||||
String btcString = evAmount.getAmount();
|
||||
String btcString = etAmount.getAmount();
|
||||
if (btcString != null) {
|
||||
try {
|
||||
double btc = Double.parseDouble(btcString);
|
||||
@@ -122,10 +116,12 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
|
||||
private void setBip70Mode() {
|
||||
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
|
||||
if (txDataBtc.getBip70() != null) {
|
||||
numberPad.setVisibility(View.INVISIBLE);
|
||||
if (txDataBtc.getBip70() == null) {
|
||||
etAmount.setEditable(true);
|
||||
Helper.showKeyboard(getActivity());
|
||||
} else {
|
||||
numberPad.setVisibility(View.VISIBLE);
|
||||
etAmount.setEditable(false);
|
||||
Helper.hideKeyboard(getActivity());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +137,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
public void onResumeFragment() {
|
||||
super.onResumeFragment();
|
||||
Timber.d("onResumeFragment()");
|
||||
Helper.hideKeyboard(getActivity());
|
||||
final long funds = getTotalFunds();
|
||||
if (!sendListener.getActivityCallback().isStreetMode()) {
|
||||
tvFunds.setText(getString(R.string.send_available,
|
||||
@@ -153,7 +148,7 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
final BarcodeData data = sendListener.popBarcodeData();
|
||||
if (data != null) {
|
||||
if (data.amount != null) {
|
||||
evAmount.setAmount(data.amount);
|
||||
etAmount.setAmount(data.amount);
|
||||
}
|
||||
}
|
||||
setBip70Mode();
|
||||
@@ -171,7 +166,7 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
getView().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
evAmount.setRate(1.0d / orderParameters.getPrice());
|
||||
etAmount.setRate(1.0d / orderParameters.getPrice());
|
||||
NumberFormat df = NumberFormat.getInstance(Locale.US);
|
||||
df.setMaximumFractionDigits(6);
|
||||
String min = df.format(orderParameters.getLowerLimit());
|
||||
@@ -211,7 +206,7 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
||||
}
|
||||
|
||||
private void processOrderParmsError(final Exception ex) {
|
||||
evAmount.setRate(0);
|
||||
etAmount.setRate(0);
|
||||
orderParameters = null;
|
||||
maxBtc = 0;
|
||||
minBtc = 0;
|
||||
|
@@ -19,9 +19,12 @@
|
||||
package com.m2049r.xmrwallet.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
@@ -31,8 +34,7 @@ import com.m2049r.xmrwallet.util.Helper;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class ExchangeBtcTextView extends LinearLayout
|
||||
implements NumberPadView.NumberPadListener {
|
||||
public class ExchangeBtcEditText extends LinearLayout {
|
||||
|
||||
String btcAmount = null;
|
||||
String xmrAmount = null;
|
||||
@@ -67,7 +69,7 @@ public class ExchangeBtcTextView extends LinearLayout
|
||||
}
|
||||
|
||||
void shakeAmountField() {
|
||||
tvAmountA.startAnimation(Helper.getShakeAnimation(getContext()));
|
||||
etAmountA.startAnimation(Helper.getShakeAnimation(getContext()));
|
||||
}
|
||||
|
||||
void shakeExchangeField() {
|
||||
@@ -86,31 +88,35 @@ public class ExchangeBtcTextView extends LinearLayout
|
||||
|
||||
public void setAmount(String btcAmount) {
|
||||
this.btcAmount = btcAmount;
|
||||
tvAmountA.setText(btcAmount);
|
||||
etAmountA.setText(btcAmount);
|
||||
xmrAmount = null;
|
||||
exchange();
|
||||
}
|
||||
|
||||
public void setEditable(boolean editable) {
|
||||
etAmountA.setEnabled(editable);
|
||||
}
|
||||
|
||||
public String getAmount() {
|
||||
return btcAmount;
|
||||
}
|
||||
|
||||
TextView tvAmountA;
|
||||
EditText etAmountA;
|
||||
TextView tvAmountB;
|
||||
Spinner sCurrencyA;
|
||||
Spinner sCurrencyB;
|
||||
|
||||
public ExchangeBtcTextView(Context context) {
|
||||
public ExchangeBtcEditText(Context context) {
|
||||
super(context);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeBtcTextView(Context context, AttributeSet attrs) {
|
||||
public ExchangeBtcEditText(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeBtcTextView(Context context,
|
||||
public ExchangeBtcEditText(Context context,
|
||||
AttributeSet attrs,
|
||||
int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
@@ -125,13 +131,28 @@ public class ExchangeBtcTextView extends LinearLayout
|
||||
private void initializeViews(Context context) {
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
inflater.inflate(R.layout.view_exchange_btc_text, this);
|
||||
inflater.inflate(R.layout.view_exchange_btc_edit, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
tvAmountA = findViewById(R.id.tvAmountA);
|
||||
etAmountA = findViewById(R.id.etAmountA);
|
||||
etAmountA.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
exchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
}
|
||||
|
||||
});
|
||||
tvAmountB = findViewById(R.id.tvAmountB);
|
||||
sCurrencyA = findViewById(R.id.sCurrencyA);
|
||||
sCurrencyB = findViewById(R.id.sCurrencyB);
|
||||
@@ -146,12 +167,14 @@ public class ExchangeBtcTextView extends LinearLayout
|
||||
new String[]{"XMR"});
|
||||
sCurrencyB.setAdapter(xmrAdapter);
|
||||
sCurrencyB.setEnabled(false);
|
||||
etAmountA.setFocusable(true);
|
||||
etAmountA.setFocusableInTouchMode(true);
|
||||
}
|
||||
|
||||
double xmrBtcRate = 0;
|
||||
|
||||
public void exchange() {
|
||||
btcAmount = tvAmountA.getText().toString();
|
||||
btcAmount = etAmountA.getText().toString();
|
||||
if (!btcAmount.isEmpty() && (xmrBtcRate > 0)) {
|
||||
double xmr = xmrBtcRate * Double.parseDouble(btcAmount);
|
||||
xmrAmount = Helper.getFormattedAmount(xmr, true);
|
||||
@@ -161,38 +184,4 @@ public class ExchangeBtcTextView extends LinearLayout
|
||||
tvAmountB.setText(getResources().getString(R.string.send_amount_btc_xmr, xmrAmount));
|
||||
Timber.d("%s BTC =%f> %s XMR", btcAmount, xmrBtcRate, xmrAmount);
|
||||
}
|
||||
|
||||
// deal with attached numpad
|
||||
@Override
|
||||
public void onDigitPressed(final int digit) {
|
||||
tvAmountA.append(String.valueOf(digit));
|
||||
exchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointPressed() {
|
||||
//TODO locale?
|
||||
if (tvAmountA.getText().toString().indexOf('.') == -1) {
|
||||
if (tvAmountA.getText().toString().isEmpty()) {
|
||||
tvAmountA.append("0");
|
||||
}
|
||||
tvAmountA.append(".");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackSpacePressed() {
|
||||
String entry = tvAmountA.getText().toString();
|
||||
int length = entry.length();
|
||||
if (length > 0) {
|
||||
tvAmountA.setText(entry.substring(0, entry.length() - 1));
|
||||
exchange();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClearAll() {
|
||||
tvAmountA.setText(null);
|
||||
exchange();
|
||||
}
|
||||
}
|
@@ -21,11 +21,13 @@ package com.m2049r.xmrwallet.widget;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
@@ -43,10 +45,7 @@ import java.util.Locale;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class ExchangeTextView extends LinearLayout
|
||||
implements NumberPadView.NumberPadListener {
|
||||
|
||||
private static String MAX = "\u221E";
|
||||
public class ExchangeEditText extends LinearLayout {
|
||||
|
||||
String xmrAmount = null;
|
||||
String notXmrAmount = null;
|
||||
@@ -89,7 +88,7 @@ public class ExchangeTextView extends LinearLayout
|
||||
}
|
||||
|
||||
void shakeAmountField() {
|
||||
tvAmountA.startAnimation(Helper.getShakeAnimation(getContext()));
|
||||
etAmountA.startAnimation(Helper.getShakeAnimation(getContext()));
|
||||
}
|
||||
|
||||
void shakeExchangeField() {
|
||||
@@ -99,7 +98,7 @@ public class ExchangeTextView extends LinearLayout
|
||||
public void setAmount(String xmrAmount) {
|
||||
if (xmrAmount != null) {
|
||||
setCurrencyA(0);
|
||||
tvAmountA.setText(xmrAmount);
|
||||
etAmountA.setText(xmrAmount);
|
||||
setXmr(xmrAmount);
|
||||
this.notXmrAmount = null;
|
||||
doExchange();
|
||||
@@ -114,7 +113,7 @@ public class ExchangeTextView extends LinearLayout
|
||||
return xmrAmount;
|
||||
}
|
||||
|
||||
TextView tvAmountA;
|
||||
EditText etAmountA;
|
||||
TextView tvAmountB;
|
||||
Spinner sCurrencyA;
|
||||
Spinner sCurrencyB;
|
||||
@@ -146,17 +145,17 @@ public class ExchangeTextView extends LinearLayout
|
||||
return sCurrencyB.getSelectedItemPosition();
|
||||
}
|
||||
|
||||
public ExchangeTextView(Context context) {
|
||||
public ExchangeEditText(Context context) {
|
||||
super(context);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeTextView(Context context, AttributeSet attrs) {
|
||||
public ExchangeEditText(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initializeViews(context);
|
||||
}
|
||||
|
||||
public ExchangeTextView(Context context,
|
||||
public ExchangeEditText(Context context,
|
||||
AttributeSet attrs,
|
||||
int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
@@ -171,13 +170,28 @@ public class ExchangeTextView extends LinearLayout
|
||||
private void initializeViews(Context context) {
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
inflater.inflate(R.layout.view_exchange_text, this);
|
||||
inflater.inflate(R.layout.view_exchange_edit, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
tvAmountA = findViewById(R.id.tvAmountA);
|
||||
etAmountA = findViewById(R.id.etAmountA);
|
||||
etAmountA.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
doExchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
}
|
||||
|
||||
});
|
||||
tvAmountB = findViewById(R.id.tvAmountB);
|
||||
sCurrencyA = findViewById(R.id.sCurrencyA);
|
||||
sCurrencyB = findViewById(R.id.sCurrencyB);
|
||||
@@ -317,7 +331,7 @@ public class ExchangeTextView extends LinearLayout
|
||||
|
||||
boolean prepareExchange() {
|
||||
Timber.d("prepareExchange()");
|
||||
String enteredAmount = tvAmountA.getText().toString();
|
||||
String enteredAmount = etAmountA.getText().toString();
|
||||
if (!enteredAmount.isEmpty()) {
|
||||
String cleanAmount = "";
|
||||
if (getCurrencyA() == 0) {
|
||||
@@ -426,37 +440,4 @@ public class ExchangeTextView extends LinearLayout
|
||||
public void setOnFailedExchangeListener(OnFailedExchangeListener listener) {
|
||||
onFailedExchangeListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDigitPressed(final int digit) {
|
||||
tvAmountA.append(String.valueOf(digit));
|
||||
doExchange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointPressed() {
|
||||
//TODO locale?
|
||||
if (tvAmountA.getText().toString().indexOf('.') == -1) {
|
||||
if (tvAmountA.getText().toString().isEmpty()) {
|
||||
tvAmountA.append("0");
|
||||
}
|
||||
tvAmountA.append(".");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackSpacePressed() {
|
||||
String entry = tvAmountA.getText().toString();
|
||||
int length = entry.length();
|
||||
if (length > 0) {
|
||||
tvAmountA.setText(entry.substring(0, entry.length() - 1));
|
||||
doExchange();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClearAll() {
|
||||
tvAmountA.setText(null);
|
||||
doExchange();
|
||||
}
|
||||
}
|
@@ -48,18 +48,9 @@ import java.util.Locale;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
// TODO combine this with ExchangeTextView
|
||||
|
||||
public class ExchangeView extends LinearLayout
|
||||
implements NumberPadView.NumberPadListener {
|
||||
|
||||
public void enableSoftKeyboard(final boolean isEnabled) {
|
||||
etAmount.getEditText().setShowSoftInputOnFocus(isEnabled);
|
||||
}
|
||||
|
||||
public boolean focus() {
|
||||
return etAmount.requestFocus();
|
||||
}
|
||||
public class ExchangeView extends LinearLayout {
|
||||
String xmrAmount = null;
|
||||
String notXmrAmount = null;
|
||||
|
||||
public void enable(boolean enable) {
|
||||
etAmount.setEnabled(enable);
|
||||
@@ -67,9 +58,6 @@ public class ExchangeView extends LinearLayout
|
||||
sCurrencyB.setEnabled(enable);
|
||||
}
|
||||
|
||||
String xmrAmount = null;
|
||||
String notXmrAmount = null;
|
||||
|
||||
void setXmr(String xmr) {
|
||||
xmrAmount = xmr;
|
||||
if (onNewAmountListener != null) {
|
||||
@@ -482,31 +470,4 @@ public class ExchangeView extends LinearLayout
|
||||
public void setOnFailedExchangeListener(OnFailedExchangeListener listener) {
|
||||
onFailedExchangeListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDigitPressed(final int digit) {
|
||||
etAmount.getEditText().append(String.valueOf(digit));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointPressed() {
|
||||
//TODO locale?
|
||||
if (etAmount.getEditText().getText().toString().indexOf('.') == -1) {
|
||||
etAmount.getEditText().append(".");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackSpacePressed() {
|
||||
Editable editable = etAmount.getEditText().getText();
|
||||
int length = editable.length();
|
||||
if (length > 0) {
|
||||
editable.delete(length - 1, length);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClearAll() {
|
||||
etAmount.getEditText().getText().clear();
|
||||
}
|
||||
}
|
||||
|
@@ -1,87 +0,0 @@
|
||||
package com.m2049r.xmrwallet.widget;
|
||||
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.m2049r.xmrwallet.R;
|
||||
|
||||
public class NumberPadView extends LinearLayout
|
||||
implements View.OnClickListener, View.OnLongClickListener {
|
||||
|
||||
@Override
|
||||
public void onClick(final View view) {
|
||||
if (listener == null) {
|
||||
throw new IllegalArgumentException("NumberPadListener has to be set, use setListener() to set it.");
|
||||
}
|
||||
switch (view.getId()) {
|
||||
case R.id.numberPadPoint:
|
||||
listener.onPointPressed();
|
||||
break;
|
||||
case R.id.numberPadBackSpace:
|
||||
listener.onBackSpacePressed();
|
||||
break;
|
||||
default:
|
||||
if (view.getTag() != null) {
|
||||
listener.onDigitPressed(Integer.parseInt(view.getTag().toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(final View view) {
|
||||
if (view.getId() == R.id.numberPadBackSpace) {
|
||||
listener.onClearAll();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setListener(final NumberPadListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public interface NumberPadListener {
|
||||
void onDigitPressed(final int digit);
|
||||
|
||||
void onBackSpacePressed();
|
||||
|
||||
void onPointPressed();
|
||||
|
||||
void onClearAll();
|
||||
}
|
||||
|
||||
private NumberPadListener listener;
|
||||
|
||||
public NumberPadView(final Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public NumberPadView(final Context context,
|
||||
@Nullable final AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public NumberPadView(final Context context, @Nullable final AttributeSet attrs,
|
||||
final int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
final View view = View.inflate(context, R.layout.view_number_pad, this);
|
||||
setOrientation(VERTICAL);
|
||||
view.findViewById(R.id.numberPad0).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad1).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad2).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad3).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad4).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad5).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad6).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad7).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad8).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPad9).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPadPoint).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPadBackSpace).setOnClickListener(this);
|
||||
view.findViewById(R.id.numberPadBackSpace).setOnLongClickListener(this);
|
||||
}
|
||||
}
|
@@ -18,11 +18,13 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletName"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
app:counterEnabled="true"
|
||||
app:counterMaxLength="20"
|
||||
android:layout_marginEnd="4dp"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
@@ -39,7 +41,9 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPassword"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1">
|
||||
|
||||
@@ -78,6 +82,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletMnemonic"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
@@ -95,6 +100,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletAddress"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
@@ -115,6 +121,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletViewKey"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
@@ -134,6 +141,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletSpendKey"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
@@ -153,6 +161,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletRestoreHeight"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
|
@@ -84,16 +84,17 @@
|
||||
android:id="@+id/evAmount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNotes"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -101,7 +102,6 @@
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="textStart" />
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<RelativeLayout
|
||||
@@ -128,8 +128,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:drawablePadding="4dp"
|
||||
android:drawableStart="@drawable/ic_info_outline_gray_24dp"
|
||||
android:drawablePadding="4dp"
|
||||
android:text="@string/label_receive_info_gen_qr_code"
|
||||
android:textAlignment="center"
|
||||
android:textSize="16sp"
|
||||
@@ -149,8 +149,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableStart="@drawable/ic_nfc_black_24dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/nfc_tag_tap"
|
||||
android:visibility="visible" />
|
||||
|
@@ -29,6 +29,7 @@
|
||||
android:orientation="horizontal">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:id="@+id/etAddress"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -75,7 +76,7 @@
|
||||
android:drawableStart="@drawable/ic_check_gray_24dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/info_paymentid_intergrated"
|
||||
android:text="@string/info_paymentid_integrated"
|
||||
android:textSize="18sp"
|
||||
android:visibility="invisible" />
|
||||
|
||||
@@ -118,6 +119,7 @@
|
||||
android:visibility="visible">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:id="@+id/etPaymentId"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -153,11 +155,12 @@
|
||||
</FrameLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:id="@+id/etNotes"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@@ -27,35 +27,19 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:paddingEnd="12dp"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:src="@drawable/ic_all_inclusive_24dp"
|
||||
android:visibility="visible" />
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llAmount"
|
||||
<com.m2049r.xmrwallet.widget.ExchangeEditText
|
||||
android:id="@+id/etAmount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<com.m2049r.xmrwallet.widget.ExchangeTextView
|
||||
android:id="@+id/evAmount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<com.m2049r.xmrwallet.widget.NumberPadView
|
||||
android:id="@+id/numberPad"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/white"
|
||||
android:gravity="center" />
|
||||
|
||||
</LinearLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/rlSweep"
|
||||
|
@@ -53,19 +53,11 @@
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<com.m2049r.xmrwallet.widget.ExchangeBtcTextView
|
||||
android:id="@+id/evAmount"
|
||||
<com.m2049r.xmrwallet.widget.ExchangeBtcEditText
|
||||
android:id="@+id/etAmount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<com.m2049r.xmrwallet.widget.NumberPadView
|
||||
android:id="@+id/numberPad"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/white"
|
||||
android:gravity="center" />
|
||||
|
||||
</LinearLayout>
|
||||
|
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -225,14 +226,20 @@
|
||||
android:padding="8sp"
|
||||
android:text="@string/tx_notes" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etTxNotes"
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:backgroundTint="@color/moneroGray"
|
||||
android:hint="@string/tx_notes_hint"
|
||||
android:inputType="textMultiLine" />
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/etTxNotes"
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:backgroundTint="@color/moneroGray"
|
||||
android:hint="@string/tx_notes_hint"
|
||||
android:inputType="textMultiLine" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow>
|
||||
|
@@ -12,6 +12,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPasswordA"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:errorEnabled="true">
|
||||
@@ -28,6 +29,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etWalletPasswordB"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/section_top"
|
||||
|
@@ -8,8 +8,8 @@
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNodeHost"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="8"
|
||||
@@ -41,6 +42,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNodePort"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
@@ -61,6 +63,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNodeName"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/data_top">
|
||||
@@ -85,6 +88,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNodeUser"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1">
|
||||
@@ -103,6 +107,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etNodePass"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1">
|
||||
@@ -142,8 +147,8 @@
|
||||
style="@style/MoneroText.Medium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_alignBaseline="@+id/tvResultLabel"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_toEndOf="@+id/tvResultLabel"
|
||||
android:textAlignment="textStart"
|
||||
tools:text="Blockheight: 1710998 (v9), Ping: 187ms" />
|
||||
|
@@ -20,12 +20,13 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:textColor="@color/colorAccent"
|
||||
android:labelFor="@+id/etSeed"
|
||||
android:text="@string/prompt_ledger_seed_warn" />
|
||||
android:text="@string/prompt_ledger_seed_warn"
|
||||
android:textColor="@color/colorAccent" />
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etSeed"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:errorEnabled="true">
|
||||
@@ -42,6 +43,7 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etPassphrase"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:errorEnabled="true">
|
||||
|
@@ -8,10 +8,11 @@
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etPassword"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:passwordToggleEnabled="true"
|
||||
app:errorEnabled="true">
|
||||
app:errorEnabled="true"
|
||||
app:passwordToggleEnabled="true">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
style="@style/MoneroEdit"
|
||||
|
@@ -1,25 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="8dp" >
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRenameLabel"
|
||||
style="@style/MoneroLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/prompt_rename"
|
||||
android:labelFor="@+id/etRename"
|
||||
android:text="@string/prompt_rename"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etRename"
|
||||
style="@style/MoneroEdit"
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/etPassword"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeOptions="normal"
|
||||
android:inputType="text" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/etRename"
|
||||
style="@style/MoneroEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeOptions="normal"
|
||||
android:inputType="text" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
@@ -21,6 +21,7 @@
|
||||
|
||||
<com.m2049r.xmrwallet.widget.CTextInputLayout
|
||||
android:id="@+id/etAmount"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
|
@@ -17,19 +17,27 @@
|
||||
android:gravity="center"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAmountA"
|
||||
style="@style/MoneroText.Balance.Orange"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center|start"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="3"
|
||||
android:hint="@string/send_amount_hint"
|
||||
android:padding="4dp"
|
||||
android:singleLine="true"
|
||||
tools:text="87.00000" />
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/etAmountA"
|
||||
style="@style/MoneroText.Balance.Orange"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center|start"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="3"
|
||||
android:hint="@string/send_amount_hint"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="numberDecimal"
|
||||
android:padding="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAlignment="textStart"
|
||||
tools:text="87.00000" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
@@ -18,19 +18,26 @@
|
||||
android:gravity="center"
|
||||
android:textAlignment="center" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAmountA"
|
||||
style="@style/MoneroText.Balance.Orange"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center|start"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="3"
|
||||
android:hint="@string/send_amount_hint"
|
||||
android:padding="4dp"
|
||||
android:singleLine="true"
|
||||
tools:text="87.00000" />
|
||||
<android.support.design.widget.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:id="@+id/etAmountA"
|
||||
style="@style/MoneroText.Balance.Orange"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center|start"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="3"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="numberDecimal"
|
||||
android:padding="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAlignment="textStart"
|
||||
tools:text="87.00000" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -57,7 +64,6 @@
|
||||
android:layout_gravity="center|start"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_weight="3"
|
||||
android:hint="@string/send_amount_hint"
|
||||
android:padding="4dp"
|
||||
android:singleLine="true"
|
||||
tools:text="87.00000" />
|
||||
@@ -66,8 +72,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="0sp"
|
||||
android:layout_marginStart="8sp">
|
||||
android:layout_marginStart="8sp"
|
||||
android:layout_marginEnd="0sp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/evExchange"
|
@@ -1,144 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:showIn="LinearLayout">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad1"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="1"
|
||||
android:text="1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad2"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="2"
|
||||
android:text="2" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad3"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="3"
|
||||
android:text="3" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad4"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="4"
|
||||
android:text="4" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad5"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="5"
|
||||
android:text="5" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad6"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="6"
|
||||
android:text="6" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad7"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="7"
|
||||
android:text="7" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad8"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="8"
|
||||
android:text="8" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad9"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:tag="9"
|
||||
android:text="9" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPadPoint"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="." />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/numberPad0"
|
||||
style="@style/MoneroLabel.NumPad"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:tag="0"
|
||||
android:text="0" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/numberPadBackSpace"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="36sp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||
android:src="@drawable/ic_backspace_black_36dp" />
|
||||
</LinearLayout>
|
||||
|
||||
</merge>
|
@@ -19,19 +19,19 @@
|
||||
ús i divulgació de la informació personal que rebem dels usuaris de la nostra
|
||||
aplicació (monerujo: Monero Wallet).
|
||||
</p>
|
||||
<p>Mitjançant l'ús d'aquesta aplicació vostè accepta la recopilació i l’ús de la informació d’acord amb aquesta política.
|
||||
<p>Mitjançant l’ús d’aquesta aplicació vostè accepta la recopilació i l’ús de la informació d’acord amb aquesta política.
|
||||
</p>
|
||||
<h2>Dades Recopilades</h2>
|
||||
<p>Les dades personals són qualsevol tipus de dades que puguin identificar un individu.
|
||||
</p>
|
||||
<p>Les claus i les adreces públiques de Monero són recollides i processades per l’aplicació de forma local per tal de processar les transaccions i transmetre-les a la xarxa Monero de forma encriptada.
|
||||
</p>
|
||||
<p>L'aplicació no recopila altres dades personals.</p>
|
||||
<p>Si utilitzeu la funcionalitat d'intercanvi (opcional), monerujo obté el canvi
|
||||
<p>L’aplicació no recopila altres dades personals.</p>
|
||||
<p>Si utilitzeu la funcionalitat d’intercanvi (opcional), monerujo obté el canvi
|
||||
a través de l’API pública de coinmarketcap.com.
|
||||
Consulteu la seva política de privacitat a https://coinmarketcap.com/privacy per a més detalls sobre com es recullen les dades de les vostres peticions</p>
|
||||
<p>Si utilitzeu l’aplicació per pagar a adreces BTC, utilitzareu el servei XMR.TO.
|
||||
Consulteu la seva política de privacitat a https://xmr.to/ per obtenir més informació. Monerujo els envia l'adreça de destinació de BTC i la quantitat. La vostra IP també podrà ser recollida.</p>
|
||||
Consulteu la seva política de privacitat a https://xmr.to/ per obtenir més informació. Monerujo els envia l’adreça de destinació de BTC i la quantitat. La vostra IP també podrà ser recollida.</p>
|
||||
<h2>Permisos de la App</h2>
|
||||
<ul>
|
||||
<li>INTERNET : Connectar a la xarxa Monero mitjançant un Node Daemon de Monero</li>
|
||||
|
@@ -10,7 +10,7 @@
|
||||
Aquestes són les úniques dades necessàries per a recuperar el vostre portamonedes i obtenir accés total als vostres fons.
|
||||
Mantenir-la segura i privada és molt important ja que permet que <em> qualsevol persona</em> tingui accés total als vostres fons!.</p>
|
||||
<p>Si perdeu la contrasenya del portamonedes encara podrieu recuperar-lo amb la llavor Mnemotècnica.</p>
|
||||
<p>La llavor Mnemotècnica tampoc no es pot canviar mai, i si és robada o compromesa d'alguna manera haureu de traslladar els vostres fons a un nou portamonedes (amb una nova llavor mnemotècnica). Per tant, es recomana que feu còpies de seguretat de la vostra llavor mnemotècnica escrivint-la i emmagatzemant-la a <em> múltiple </em> llocs de forma segura.</p>
|
||||
<p>La llavor Mnemotècnica tampoc no es pot canviar mai, i si és robada o compromesa d’alguna manera haureu de traslladar els vostres fons a un nou portamonedes (amb una nova llavor mnemotècnica). Per tant, es recomana que feu còpies de seguretat de la vostra llavor mnemotècnica escrivint-la i emmagatzemant-la a <em> múltiple </em> llocs de forma segura.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_seed"><![CDATA[
|
||||
@@ -19,7 +19,7 @@
|
||||
<p>Introduïu un nom i contrasenya únics del portamonedes.
|
||||
La contrasenya s’utilitza per protegir les dades del seu portamonedes en el dispositiu. Utilitzeu una contrasenya sòlida - encara millor si utiliza una frase.</p>
|
||||
<p>Introduïu la Llavor en el camp \"Llavor Mnemotècnica\".<p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d'haver fer servir aquesta adreça del portamonedes.</p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d’haver fer servir aquesta adreça del portamonedes.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_ledger"><![CDATA[
|
||||
@@ -27,7 +27,7 @@
|
||||
<p>Si voleu recuperar el vostre portamonedes desde un dispositiu Ledger Nano S!</p>
|
||||
<p>Les vostres claus secretes no surten mai del dispositiu Ledger, de manera que necessiteu que estigui connectat sempre que vulgueu accedir aal vostre portamonedes.</p>
|
||||
<p>Introduïu un nom i contrasenya únics del portamonedes. La contrasenya s’utilitza per protegir les dades de la seva cartera al dispositiu Android. Utilitzeu una contrasenya sòlida - encara millor si utiliza una frase.</p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d'haver fer servir aquesta adreça del portamonedes.</p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d’haver fer servir aquesta adreça del portamonedes.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_keys"><![CDATA[
|
||||
@@ -36,7 +36,7 @@
|
||||
<p>Introduïu un nom i contrasenya únics del portamonedes. La contrasenya s’utilitza per protegir les dades de la seva cartera al dispositiu. Utilitzeu una contrasenya sòlida - encara millor si utiliza una frase.<p>
|
||||
<p>Introduïu la vostra Adreça Monero en el camp \"Adreça Pública\" i ompliu \"Clau de Visualització\" i \"Clau de Despesa\" </p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el
|
||||
camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d'haver fer servir aquesta adreça del portamonedes.</p>
|
||||
camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d’haver fer servir aquesta adreça del portamonedes.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_create_view"><![CDATA[
|
||||
@@ -44,7 +44,7 @@
|
||||
<p>Si només voleu monitoritzar les transaccions entrants del portamonedes!</p>
|
||||
<p>Introduïu un nom i contrasenya únics del portamonedes. La contrasenya s’utilitza per protegir les dades de la seva cartera al dispositiu. Utilitzeu una contrasenya sòlida - encara millor si utiliza una frase.<p>
|
||||
<p>Introduïu la vostra Adreça Monero en el camp \"Adreça Pública\" i ompliu \"Clau de Visualització\".</p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d'haver fer servir aquesta adreça del portamonedes.</p>
|
||||
<p>Introduïu el número de bloc de la primera transacció realitzada en aquesta adreça en el camp "Restaurar Alçada". També podeu utilitzar una data en el format AAAA-MM-DD. Si no esteu segurs, introduïu una data / alçada de bloc aproximada <em> abans </em> d’haver fer servir aquesta adreça del portamonedes.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_details"><![CDATA[
|
||||
@@ -54,14 +54,14 @@
|
||||
<h2>Clau Mnemotècnica</h2>
|
||||
Aquestes són les úniques dades necessàries per a recuperar el vostre portamonedes i obtenir accés total als vostres fons.
|
||||
Mantenir-la segura i privada és molt important ja que permet que <em> qualsevol persona</em> tingui accés total als vostres fons! Si no us heu escrit en cap lloc segur, feu-ho!
|
||||
<h2>Contrasenya de Recuperació d'Arxius del Portamonedes</h2>
|
||||
<h2>Contrasenya de Recuperació d’Arxius del Portamonedes</h2>
|
||||
Assegureu-vos que heu escrit aquesta contrasenya. Si restabliu el dispositiu o desinstal·leu l’aplicació, la necessitarà per tornar a accedir al seu portamonedes.<br/>
|
||||
<h3>CrAzYsenya</h3>
|
||||
Si la contrasenya que es mostra aquí és de 52 caràcters alfanumèrics en grups de 4 - felicitats!
|
||||
Els fitxers del portamonedes estan protegits amb una clau de 256 bits generada per la funció de seguretat del vostre dispositiu basades en la contrasenya que heu triat (durant la creació o al canviar-la). Això ho fa extremadament difícil de piratejar!<br/>
|
||||
Aquesta opció és obligatoria per a tots els nous portamonedes.
|
||||
<h3>Contrasenya de Llegat</h3>
|
||||
Si veieu la vostra contrasenya aquí, els fitxers del portamonedes no estan tan segurs com quan s'utilitza la CrAzYsenya. Per solucionar-ho, seleccioneu \"Canviar Contrasenya\" des del menú. Després d'entrar una nova contrasenya (potser fins i tot la mateixa que abans) l’aplicació generarà una CrAzYsenya per a protegir els vostres arxius del portamonedes. Anoteu-la!
|
||||
Si veieu la vostra contrasenya aquí, els fitxers del portamonedes no estan tan segurs com quan s’utilitza la CrAzYsenya. Per solucionar-ho, seleccioneu \"Canviar Contrasenya\" des del menú. Després d’entrar una nova contrasenya (potser fins i tot la mateixa que abans) l’aplicació generarà una CrAzYsenya per a protegir els vostres arxius del portamonedes. Anoteu-la!
|
||||
<h3>CrAzYsenya del Portamonedes</h3>
|
||||
Si mai necessiteu tornar a instal·lar Monerujo (per exemple, després de restablir el telèfon o canviar-lo per un de nou) o voleu utilitzar els arxius del portamonedes en un altre dispositiu o PC, cal que ho feu utilitzant aquesta Contrasenya de Recuperació (CrAzYsenya) per tornar a accedir al vostre portamonedes. <br/>
|
||||
En seleccionar \"Canviar Contrasenya\" des del menú, podeu triar una nova contrasenya. Aneu amb compte que això generarà una nova Contrasenya de Recuperació (CrAzYsenya). Anoteu-la!
|
||||
@@ -76,10 +76,10 @@
|
||||
<h2>Node</h2>
|
||||
<p>Monerujo utilitza un node remot per comunicar-se amb la xarxa Monero sense necessitat
|
||||
de descarregar i emmagatzemar una còpia de tota la blockchain sencera. Podeu trobar una llista dels nodes remots més populars o aprendre a configurar el vostre propi node remot aquí https://moneroworld.com/<p>
|
||||
<p>Monerujo té alguns Nodes remots incorporats. Se'n recorda dels últims cinc nodes empleats.</p>
|
||||
<p>Monerujo té alguns Nodes remots incorporats. Se’n recorda dels últims cinc nodes empleats.</p>
|
||||
<h2>Portamonedes</h2>
|
||||
<p>Aquí podeu veure els portamonedes. Es troben a la carpeta <tt> monerujo </tt>
|
||||
dins l’emmagatzematge intern del dispositiu. Podeu utilitzar una aplicació d’exploració d'arxius per veure'ls. Haurieu de fer còpies de seguretat d’aquesta carpeta de manera regular en un emmagatzematge extern al dispositiu en cas que el vostre dispositiu exploti o el robin.</p>
|
||||
dins l’emmagatzematge intern del dispositiu. Podeu utilitzar una aplicació d’exploració d’arxius per veure’ls. Haurieu de fer còpies de seguretat d’aquesta carpeta de manera regular en un emmagatzematge extern al dispositiu en cas que el vostre dispositiu exploti o el robin.</p>
|
||||
<p>Seleccioneu una portamonedes per obrir-lo o premeu el botó "+" per crear-ne un de nou.
|
||||
O seleccioneu una de les operacions del portamonedes:</p>
|
||||
<h3>Detalls</h3>
|
||||
@@ -92,13 +92,13 @@
|
||||
<p>Feu una còpia del portamonedes en la carpeta <tt> backups </tt> dins del <tt> monerujo </tt>
|
||||
per a sobreescriure còpies anteriors.</p>
|
||||
<h3>Arxiu</h3>
|
||||
<p>Feu una còpia de seguretat i a continuació elimineu el portamonedes. La còpia es mantindrà a la carpeta <tt> backups </tt>. Si ja no necessiteu les vostres còpies de seguretat les haureu d’eliminar amb un explorador d'arxius o una aplicació segura.</p>
|
||||
<p>Feu una còpia de seguretat i a continuació elimineu el portamonedes. La còpia es mantindrà a la carpeta <tt> backups </tt>. Si ja no necessiteu les vostres còpies de seguretat les haureu d’eliminar amb un explorador d’arxius o una aplicació segura.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_tx_details"><![CDATA[
|
||||
<h1>Detalls de Transacció</h1>
|
||||
<h2>Destí</h2>
|
||||
Aquesta és l'adreça pública del portamonedes on esteu enviant els Monero.
|
||||
Aquesta és l’adreça pública del portamonedes on esteu enviant els Monero.
|
||||
<h2>ID de Pagament</h2>
|
||||
Podeu utilitzar un ID de pagament per identificar el motiu pel qual heu enviat a Monero entre dues parts. Això és totalment opcional i privat. Per exemple, això pot permetre a una empresa associar la transacció amb un article que heu comprat.
|
||||
<h2>ID de Transacció</h2>
|
||||
@@ -112,7 +112,7 @@
|
||||
<string name="help_send"><![CDATA[
|
||||
<h1>Enviar</h1>
|
||||
<h2>Adreça del Receptor</h2>
|
||||
<p>Aquesta és l'adreça pública del portamonedes a la qual esteu enviant Moneroj. Podeu copiar-la al porta-retalls, escanejar un codi QR o introduir-la manualment. Assegureu- vos de confirmar-ho a consciencia i que no estigueu enviant monedes a la direcció incorrecta.</p>
|
||||
<p>Aquesta és l’adreça pública del portamonedes a la qual esteu enviant Moneroj. Podeu copiar-la al porta-retalls, escanejar un codi QR o introduir-la manualment. Assegureu- vos de confirmar-ho a consciencia i que no estigueu enviant monedes a la direcció incorrecta.</p>
|
||||
<p>A més d’utilitzar una adreça XMR, també podeu utilitzar
|
||||
<ul>
|
||||
<li>un OpenAlias per XMR o BTC</li>
|
||||
@@ -125,7 +125,7 @@
|
||||
<h1>Enviant BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
|
||||
Nosaltres fem servir l'API XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop d'ull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. L'equip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>
|
||||
Nosaltres fem servir l’API XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop d’ull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. L’equip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>
|
||||
<h2>Tipus de Canvi XMR.TO<h2>
|
||||
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. Aquests
|
||||
inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment. També veureu
|
||||
@@ -147,7 +147,7 @@
|
||||
<h1>Enviant BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO és un servei de tercers que fa proporciona el canvi de Monero a Bitcoin.
|
||||
Nosaltres fem servir l'API XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop d'ull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. L'equip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>
|
||||
Nosaltres fem servir l’API XMR.TO per integrar els pagaments de Bitcoin a Monerujo. Si us plau, doneu un cop d’ull a https://xmr.to i decidiu vosaltres mateixos si és una cosa que volgueu utilitzar. L’equip de Monerujo no està associat amb XMR.TO i no pot oferir assistència amb el seu servei.</p>
|
||||
<h2>Tipus de Canvi XMR.TO<h2>
|
||||
<p>A la pantalla \"Quantitat\" es mostraran els paràmetres actuals del servei XMR.TO. Aquests
|
||||
inclouen el tipus de canvi actual, així com els límits de BTC superiors i inferiors. Tingueu en compte que la tarifa no està garantida en aquell mateix moment. També veureu
|
||||
@@ -170,7 +170,7 @@
|
||||
<h2>Mode de carrer</h2>
|
||||
<p>El mode de carrer es pot habilitar / desactivar des del menú o a la icona principal de Gunther. En aquest mode, el vostre balanç no es mostra a cap pantalla perquè pugueu utilitzar la vostra cartera amb seguretat al carrer, al pub o qualsevol lloc públic. Les transaccions anteriors també estan ocultes. Es mostraran les noves transaccions perquè pogueu veure que heu enviat / rebut els vostres estimats Moneroj!</p>
|
||||
<h2>Escanejant</h2>
|
||||
Perquè a Monero li agrada mantenir les coses privades, cada cop que obri un portamonedes Monerujo hem d'escanejar la blockchain per veure si s'han enviat nous moneroj al seu portamonedes. Això només emmagatzema l'informació al telèfon que pertany al seu portamonedes. De vegades pot trigar una estona perquè no s’ha sincronitzat en molt de temps.
|
||||
Perquè a Monero li agrada mantenir les coses privades, cada cop que obri un portamonedes Monerujo hem d’escanejar la blockchain per veure si s’han enviat nous moneroj al seu portamonedes. Això només emmagatzema l’informació al telèfon que pertany al seu portamonedes. De vegades pot trigar una estona perquè no s’ha sincronitzat en molt de temps.
|
||||
<h2>El Balanç</h2>
|
||||
<p><b>Ajuda! El balanç del meu portamonedes ha desaparegut o consta com a no confirmat!</b><br/>
|
||||
No patiu! Quan envieu fons desde el vostre portamonedes part del balanç apareixerà com a no confirmat de forma temporal.
|
||||
@@ -199,8 +199,8 @@
|
||||
es mostra al costat de cada node.</p>
|
||||
<p>Es pot marcar qualsevol node de la llista per utilitzar-lo més endevant.
|
||||
Es descartaràn els nodes que no hagin estat seleccionats.<p>
|
||||
<p>Monerujo escollirà el node òptim (marcat) cada vegada que l'utilitzeu.
|
||||
Això ho fa mitjançant la comprovació de l'alçada de bloc (com d'actualitzat
|
||||
<p>Monerujo escollirà el node òptim (marcat) cada vegada que l’utilitzeu.
|
||||
Això ho fa mitjançant la comprovació de l’alçada de bloc (com d’actualitzat
|
||||
està el node?), així com el temps de resposta (què tan ràpidament respon el node a les peticions?).</p>
|
||||
<p>La llista s’ordena per aquestes característiques, de manera que el node superior seria el que Monerujo
|
||||
triaria ara mateix. La part inferior de la llista mostraria els nodes més lents o no disponibles.</p>
|
||||
@@ -209,15 +209,15 @@
|
||||
que introduïu els detalls del node al següent diàleg.
|
||||
El "Adreça" és el nom del servidor o adreça IP del node - aquesta és la única
|
||||
entrada obligatòria.
|
||||
Introduïu el "Port" si el node s'executa en un port no predeterminat (per exemple, 18089).
|
||||
Introduïu el "Port" si el node s’executa en un port no predeterminat (per exemple, 18089).
|
||||
També podeu anomenar opcionalment el node, de manera que el pugueu identificar més fàcilment més endavant.
|
||||
Alguns nodes necessiten credencials per utilitzar-los. Introduïu el nom d’usuari i
|
||||
contrasenya proporcionats als camps corresponents. Ara podeu "Test" aquesta configuració.
|
||||
Els "Resultats de les Proves" mostraran l'alçada de bloc, el temps de resposta i l'IP real.
|
||||
Els "Resultats de les Proves" mostraran l’alçada de bloc, el temps de resposta i l’IP real.
|
||||
El resultat també pot ser un error - generalment perquè el nom del servidor proporcionat no és
|
||||
accessible dins d'un temps raonable o les credencials són incorrectes.
|
||||
accessible dins d’un temps raonable o les credencials són incorrectes.
|
||||
O la combinació de nom del servidor/port no apunta cap a un node real de Monero!
|
||||
Un cop aprovada la prova (sense error), ja estás llest per prémer "D'acord" per desar iamp;
|
||||
Un cop aprovada la prova (sense error), ja estás llest per prémer "D’acord" per desar iamp;
|
||||
marcar aquest node.</p>
|
||||
<h2>Escanejar Nodes</h2>
|
||||
<p>A més, podeu escanejar la xarxa per buscar nodes. Monerujo començarà
|
||||
|
@@ -58,7 +58,7 @@
|
||||
|
||||
<string name="send_available_btc">Balanç: %2$s BTC (%1$s XMR)</string>
|
||||
|
||||
<string name="info_paymentid_intergrated">ID de pagment integrat</string>
|
||||
<string name="info_paymentid_integrated">✔ ID de pagment integrat</string>
|
||||
<string name="info_prepare_tx">Preparant la seva transacció</string>
|
||||
|
||||
<string name="label_send_progress_xmrto_create">Creant ordre XMR.TO</string>
|
||||
@@ -170,14 +170,14 @@
|
||||
<string name="generate_fingerprint_warn"><![CDATA[
|
||||
<strong>Autenticació d’empremta digitals</strong>
|
||||
<p>Amb l’autenticació d’empremta digital habilitada podeu veure el balanç del portamonedes i rebre fons
|
||||
sense la necessitat d'introduir la contrasenya.</p>
|
||||
sense la necessitat d’introduir la contrasenya.</p>
|
||||
<p>Per a més seguretat, monerujo encara us demanarà que introduïu la contrasenya per
|
||||
veure els detalls del portamonedes o enviar fons.</p>
|
||||
<strong>Advertència de seguretat</strong>
|
||||
<p>Finalment, monerujo vol recordar-li que qualsevol que pugui obtenir la seva empremta digital serà
|
||||
capaç d’observar el balanç del seu portamonedes.</p>
|
||||
<p>Per exemple, un usuari maliciós del vostre voltant pot obrir la vostra cartera quan esteu dormint.</p>
|
||||
<strong>Esteu segurs d'habilitar aquesta funcionalitat?</strong>
|
||||
<strong>Esteu segurs d’habilitar aquesta funcionalitat?</strong>
|
||||
]]></string>
|
||||
<string name="generate_bad_passwordB">La contrasenya no coincideix</string>
|
||||
<string name="generate_empty_passwordB">La contrasenya no pot estar buida</string>
|
||||
|
@@ -59,7 +59,7 @@
|
||||
|
||||
<string name="send_available_btc">Guthaben: %2$s BTC (%1$s XMR)</string>
|
||||
|
||||
<string name="info_paymentid_intergrated">Zahlungs-ID integriert</string>
|
||||
<string name="info_paymentid_integrated">✔ Zahlungs-ID integriert</string>
|
||||
<string name="info_prepare_tx">Bereite deine Transaktion vor</string>
|
||||
|
||||
<string name="label_send_progress_xmrto_create">Erstelle XMR.TO-Auftrag</string>
|
||||
|
@@ -57,7 +57,7 @@
|
||||
|
||||
<string name="send_available_btc">Σύνολο: %2$s BTC (%1$s XMR)</string>
|
||||
|
||||
<string name="info_paymentid_intergrated">ID πληρωμής ενσωματωμένο</string>
|
||||
<string name="info_paymentid_integrated">✔ ID πληρωμής ενσωματωμένο</string>
|
||||
<string name="info_prepare_tx">Προετοιμασία της συναλλαγής σου</string>
|
||||
|
||||
<string name="label_send_progress_xmrto_create">Δημιουργία εντολής με XMR.TO</string>
|
||||
|
@@ -58,7 +58,7 @@
|
||||
|
||||
<string name="send_available_btc">Saldo: %2$s BTC (%1$s XMR)</string>
|
||||
|
||||
<string name="info_paymentid_intergrated">Paga-ID integriĝis</string>
|
||||
<string name="info_paymentid_integrated">✔ Paga-ID integriĝis</string>
|
||||
<string name="info_prepare_tx">Preparante vian transakcion</string>
|
||||
|
||||
<string name="label_send_progress_xmrto_create">Kreante mendon al XMR.TO</string>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user