1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-05 09:58:42 +02:00

Compare commits

...

32 Commits

Author SHA1 Message Date
m2049r
ffda0e965b bump version 2023-01-07 11:07:19 +01:00
m2049r
cc7cdb383c tweak http timeouts so sideshift does not timeout (#881) 2023-01-07 10:22:21 +01:00
m2049r
ac1ea05ef6 add unlockTime (#880)
show lock icon for currently locked txs
2023-01-07 10:19:22 +01:00
m2049r
1ddd4f30b9 use monero v0.18.1.2 (#878) 2022-12-04 21:04:15 +01:00
m2049r
1dc081834f bump version 2022-10-22 11:33:11 +02:00
m2049r
ce084927e1 fix langauge list 2022-10-22 11:32:44 +02:00
Kartal Kaan Bozdoğan
3610781f43 Display the unconfirmed amount in the chosen currency (#844)
Changed the translations accordingly
2022-10-22 10:59:25 +02:00
m2049r
ef3ddbac71 fix versions 2022-08-13 23:24:57 +02:00
m2049r
0512af1496 Monero v0.18.1.0 2022-08-13 10:20:21 +02:00
m2049r
bd2c49669a Feature v18 (#860)
* versions

* remove x86 builds
2022-08-10 16:50:18 +02:00
Kartal Kaan Bozdoğan
ac7831d0f9 Upgrade to 0.18.0.0 Fluorine Fermi (#856)
* Upgrade to Monero wallet 0.18.0.0 Fluorine Fermi
2022-08-05 01:09:56 +02:00
Kartal Kaan Bozdoğan
0f0b9a38c7 Fix new wallet restore height (#858)
* New wallets: set current block height as the restore height.
  Go back 4 days for estimated heights
2022-08-05 01:09:10 +02:00
Kartal Kaan Bozdoğan
807db19603 Fixed zlib hashes (#845) 2022-08-05 01:02:34 +02:00
m2049r
c956f38899 remove S for Nano 2022-05-23 19:47:53 +02:00
m2049r
db68f517d3 bump version 2022-05-23 19:31:22 +02:00
m2049r
d4b293af80 new strings (#839) 2022-05-23 19:20:28 +02:00
m2049r
f7bbfc2fac remove untranslatables (#838) 2022-05-23 19:16:49 +02:00
m2049r
e08964749e Fix entities (#837)
* remove ✓

* resolve nbsp
2022-05-23 19:03:45 +02:00
Dave Scotese
a05fa9d177 Exchange rate was hard to find. (#763)
The FAQ I added uses both "exchange" and "rate," neither of which appeared in the FAQ otherwise.
2022-05-23 18:42:30 +02:00
kivojo
7fe2fbe37d Translation to Farsi/Persian (#815)
* about.xml translated to Farsi

* minor improvements in translation

* one small typo

* help.xml translated to Farsi

* <br/> tags fixed

* better translation of word Mnemonic to Farsi

* strings.xml translated to Farsi
READY for PR!

* oops, my bad! deleted the untranslatable strings.

Co-authored-by: kivojo <user@example.com>
2022-05-23 18:41:06 +02:00
kingoflove819
40e30fed08 Create about.xml (#809)
* Create about.xml

* Update about.xml

* Completed translating about.xml for tamil
2022-05-23 18:39:38 +02:00
kingoflove819
320c7865ff Create help.xml (#810)
* Create help.xml

* Update help.xml

* Update help.xml

* Update help.xml

* Update help.xml
2022-05-23 18:39:23 +02:00
kingoflove819
5e8cf8010e Create strings.xml (#811)
* Create strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Completed strings.xml
2022-05-23 18:39:07 +02:00
Age Bosma
e671fa19e0 Specify wallet folder (#835)
* Specify wallet folder

* Update FAQ.md
2022-05-23 18:36:22 +02:00
m2049r
20d5b9a100 fix sweep to be invisible by default 2022-05-15 21:56:38 +02:00
m2049r
5d489a634b bump version 2022-05-15 17:25:28 +02:00
m2049r
59b6f484fd update to monero v0.17.3.2 2022-05-15 17:24:54 +02:00
m2049r
ecaa49d67d upgrade build files 2022-05-15 15:57:11 +02:00
jont4
d2dc53599e Update PT-rBR strings (#813)
* Update pt-rBR

* Update app/src/main/res/values-pt-rBR/strings.xml

Co-authored-by: netrik182 <30935310+netrik182@users.noreply.github.com>

* Update app/src/main/res/values-pt-rBR/strings.xml

Co-authored-by: netrik182 <30935310+netrik182@users.noreply.github.com>

* Update strings.xml

fix as suggested

Co-authored-by: jontaix <31804298+jontaix@users.noreply.github.com>
Co-authored-by: netrik182 <30935310+netrik182@users.noreply.github.com>
Co-authored-by: m2049r <m2049r@monerujo.io>
2022-05-01 11:51:49 +02:00
Лапки
4d8b26f97f Update strings.xml (#826) 2022-05-01 11:44:52 +02:00
Justin Berman
581c76e7be setName uses async network helper in case of reverse DNS lookup (#818, #827) (#828) 2022-05-01 11:44:27 +02:00
AnonimaUzanto
6f66862870 Adding support for Ledger Nano S Plus (#832) 2022-05-01 11:35:01 +02:00
61 changed files with 2650 additions and 343 deletions

View File

@@ -121,7 +121,7 @@ set_target_properties(easylogging PROPERTIES IMPORTED_LOCATION
add_library(unbound STATIC IMPORTED)
set_target_properties(unbound PROPERTIES IMPORTED_LOCATION
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/monero/libunbound.a)
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/libunbound.a)
add_library(epee STATIC IMPORTED)
set_target_properties(epee PROPERTIES IMPORTED_LOCATION

View File

@@ -8,8 +8,8 @@ android {
applicationId "com.m2049r.xmrwallet"
minSdkVersion 21
targetSdkVersion 31
versionCode 1401
versionName "2.4.1 'Baldaŭ'"
versionCode 3100
versionName "3.1.0 'Fluorine Fermi'"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
@@ -72,7 +72,7 @@ android {
abi {
enable true
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
include 'armeabi-v7a', 'arm64-v8a', 'x86_64'
universalApk true
}
}
@@ -111,6 +111,7 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
namespace 'com.m2049r.xmrwallet'
}
static def getId(name) {
@@ -129,7 +130,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.preference:preference:1.2.0'
implementation 'com.google.android.material:material:1.5.0'
implementation 'com.google.android.material:material:1.6.0'
implementation 'me.dm7.barcodescanner:zxing:1.9.8'
implementation "com.squareup.okhttp3:okhttp:4.9.3"

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.m2049r.xmrwallet">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

File diff suppressed because it is too large Load Diff

View File

@@ -78,7 +78,7 @@ public class BTChipTransportAndroidHID implements BTChipTransport {
}
private static final int VID = 0x2C97;
private static final int[] PID_HIDS = {0x0001, 0x0004};
private static final int[] PID_HIDS = {0x0001, 0x0004, 0x0005};
private UsbDeviceConnection connection;
private UsbInterface dongleInterface;

View File

@@ -916,9 +916,9 @@ public class LoginActivity extends BaseActivity
@Override
public boolean createWallet(File aFile, String password) {
NodeInfo currentNode = getNode();
// get it from the connected node if we have one, and go back ca. 4 days
// get it from the connected node if we have one
final long restoreHeight =
(currentNode != null) ? currentNode.getHeight() - 2000 : -1;
(currentNode != null) ? currentNode.getHeight() : -1;
Wallet newWallet = WalletManager.getInstance()
.createWallet(aFile, password, MNEMONIC_LANGUAGE, restoreHeight);
return checkAndCloseWallet(newWallet);

View File

@@ -415,7 +415,14 @@ public class NodeFragment extends Fragment
}
etNodeHost.setError(null);
nodeInfo.setRpcPort(port);
nodeInfo.setName(etNodeName.getEditText().getText().toString().trim());
// setName() may trigger reverse DNS
Helper.runWithNetwork(new Helper.Action() {
@Override
public boolean run() {
nodeInfo.setName(etNodeName.getEditText().getText().toString().trim());
return true;
}
});
nodeInfo.setUsername(etNodeUser.getEditText().getText().toString().trim());
nodeInfo.setPassword(etNodePass.getEditText().getText().toString()); // no trim for pw
return true;

View File

@@ -238,4 +238,5 @@ public class SubaddressFragment extends Fragment implements SubaddressInfoAdapte
activityCallback.showSubaddress(view, subaddress.getAddressIndex());
return false;
}
}

View File

@@ -46,7 +46,7 @@ import java.util.List;
import timber.log.Timber;
public class SubaddressInfoFragment extends Fragment
implements TransactionInfoAdapter.OnInteractionListener, OnBlockUpdateListener {
implements TransactionInfoAdapter.Listener, OnBlockUpdateListener {
private TransactionInfoAdapter adapter;
private Subaddress subaddress;
@@ -145,6 +145,8 @@ public class SubaddressInfoFragment extends Fragment
void setTitle(String title, String subtitle);
void setSubtitle(String subtitle);
long getDaemonHeight();
}
@Override
@@ -170,4 +172,9 @@ public class SubaddressInfoFragment extends Fragment
public void onPause() {
super.onPause();
}
@Override
public long getDaemonHeight() {
return activityCallback.getDaemonHeight();
}
}

View File

@@ -44,6 +44,8 @@ import com.m2049r.xmrwallet.data.UserNotes;
import com.m2049r.xmrwallet.model.TransactionInfo;
import com.m2049r.xmrwallet.model.Transfer;
import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.model.WalletManager;
import com.m2049r.xmrwallet.service.WalletService;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.ThemeHelper;
import com.m2049r.xmrwallet.widget.Toolbar;
@@ -83,6 +85,9 @@ public class TxFragment extends Fragment {
private TextView tvTxTransfers;
private TextView etTxNotes;
private View llWarning;
private TextView tvWarning;
// XMRTO stuff
private View cvXmrTo;
private TextView tvTxXmrToKey;
@@ -116,9 +121,11 @@ public class TxFragment extends Fragment {
tvTxFee = view.findViewById(R.id.tvTxFee);
tvTxTransfers = view.findViewById(R.id.tvTxTransfers);
etTxNotes = view.findViewById(R.id.etTxNotes);
etTxNotes.setRawInputType(InputType.TYPE_CLASS_TEXT);
llWarning = view.findViewById(R.id.llWarning);
tvWarning = view.findViewById(R.id.tvWarning);
tvTxXmrToKey.setOnClickListener(v -> {
Helper.clipBoardCopy(getActivity(), getString(R.string.label_copy_xmrtokey), tvTxXmrToKey.getText().toString());
Toast.makeText(getActivity(), getString(R.string.message_copy_xmrtokey), Toast.LENGTH_SHORT).show();
@@ -299,6 +306,20 @@ public class TxFragment extends Fragment {
tvTxTransfers.setText(sb.toString());
tvDestination.setText(dstSb.toString());
showBtcInfo();
showLock();
}
private void showLock() {
llWarning.setVisibility(View.GONE);
if (info.unlockTime == 0) return;
final long blockheight = activityCallback.getDaemonHeight();
final long blocks = info.unlockTime - blockheight;
final double unlockDays = blocks / (30. * 24);
if (unlockDays > 0) {
llWarning.setVisibility(View.VISIBLE);
tvWarning.setText(getString(R.string.tx_locked, info.unlockTime, blocks, unlockDays));
}
}
@SuppressLint("SetTextI18n")
@@ -370,6 +391,7 @@ public class TxFragment extends Fragment {
void showSubaddress(View view, final int subaddressIndex);
long getDaemonHeight();
}
@Override

View File

@@ -62,7 +62,7 @@ import java.util.List;
import timber.log.Timber;
public class WalletFragment extends Fragment
implements TransactionInfoAdapter.OnInteractionListener {
implements TransactionInfoAdapter.Listener {
private TransactionInfoAdapter adapter;
private final NumberFormat formatter = NumberFormat.getInstance();
@@ -118,9 +118,9 @@ public class WalletFragment extends Fragment
tvProgress = view.findViewById(R.id.tvProgress);
pbProgress = view.findViewById(R.id.pbProgress);
tvBalance = view.findViewById(R.id.tvBalance);
showBalance(Helper.getDisplayAmount(0));
showBalance();
tvUnconfirmedAmount = view.findViewById(R.id.tvUnconfirmedAmount);
showUnconfirmed(0);
showUnconfirmed();
ivSynced = view.findViewById(R.id.ivSynced);
sCurrency = view.findViewById(R.id.sCurrency);
@@ -205,7 +205,18 @@ public class WalletFragment extends Fragment
super.onViewCreated(view, savedInstanceState);
}
void showBalance(String balance) {
String amountToString(double amount) {
if (!Helper.BASE_CRYPTO.equals(balanceCurrency)) { // not XMR
double amountB = amount * balanceRate;
return Helper.getFormattedAmount(amountB, false);
} else { // XMR
return Helper.getFormattedAmount(amount, true);
}
}
void showBalance() {
double amountA = Helper.getDecimalAmount(unlockedBalance).doubleValue();
String balance = amountToString(amountA);
tvBalance.setText(balance);
final boolean streetMode = activityCallback.isStreetMode();
if (!streetMode) {
@@ -218,13 +229,14 @@ public class WalletFragment extends Fragment
setStreetModeBackground(streetMode);
}
void showUnconfirmed(double unconfirmedAmount) {
void showUnconfirmed() {
double unconfirmedAmount = Helper.getDecimalAmount(balance - unlockedBalance).doubleValue();
if (activityCallback.isStreetMode() || unconfirmedAmount == 0) {
tvUnconfirmedAmount.setText(null);
tvUnconfirmedAmount.setVisibility(View.GONE);
} else {
String unconfirmed = Helper.getFormattedAmount(unconfirmedAmount, true);
tvUnconfirmedAmount.setText(getResources().getString(R.string.xmr_unconfirmed_amount, unconfirmed));
String unconfirmed = amountToString(unconfirmedAmount);
tvUnconfirmedAmount.setText(getResources().getString(R.string.xmr_unconfirmed_amount, unconfirmed, balanceCurrency));
tvUnconfirmedAmount.setVisibility(View.VISIBLE);
}
}
@@ -232,15 +244,8 @@ public class WalletFragment extends Fragment
void updateBalance() {
if (isExchanging) return; // wait for exchange to finish - it will fire this itself then.
// at this point selection is XMR in case of error
String displayB;
double amountA = Helper.getDecimalAmount(unlockedBalance).doubleValue();
if (!Helper.BASE_CRYPTO.equals(balanceCurrency)) { // not XMR
double amountB = amountA * balanceRate;
displayB = Helper.getFormattedAmount(amountB, false);
} else { // XMR
displayB = Helper.getFormattedAmount(amountA, true);
}
showBalance(displayB);
showBalance();
showUnconfirmed();
}
String balanceCurrency = Helper.BASE_CRYPTO;
@@ -249,11 +254,11 @@ public class WalletFragment extends Fragment
private final ExchangeApi exchangeApi = ServiceHelper.getExchangeApi();
void refreshBalance() {
double unconfirmedXmr = Helper.getDecimalAmount(balance - unlockedBalance).doubleValue();
showUnconfirmed(unconfirmedXmr);
if (sCurrency.getSelectedItemPosition() == 0) { // XMR
double amountXmr = Helper.getDecimalAmount(unlockedBalance).doubleValue();
showBalance(Helper.getFormattedAmount(amountXmr, true));
balanceCurrency = Helper.BASE_CRYPTO;
balanceRate = 1.0;
showBalance();
showUnconfirmed();
} else { // not XMR
String currency = (String) sCurrency.getSelectedItem();
Timber.d(currency);
@@ -298,8 +303,7 @@ public class WalletFragment extends Fragment
public void exchangeFailed() {
sCurrency.setSelection(0, true); // default to XMR
double amountXmr = Helper.getDecimalAmount(unlockedBalance).doubleValue();
showBalance(Helper.getFormattedAmount(amountXmr, true));
showBalance();
hideExchanging();
}
@@ -446,9 +450,9 @@ public class WalletFragment extends Fragment
Wallet.ConnectionStatus daemonConnected = activityCallback.getConnectionStatus();
if (daemonConnected == Wallet.ConnectionStatus.ConnectionStatus_Connected) {
if (!wallet.isSynchronized()) {
long daemonHeight = activityCallback.getDaemonHeight();
long walletHeight = wallet.getBlockChainHeight();
long n = daemonHeight - walletHeight;
final long daemonHeight = getDaemonHeight();
final long walletHeight = wallet.getBlockChainHeight();
final long n = daemonHeight - walletHeight;
sync = getString(R.string.status_syncing) + " " + formatter.format(n) + " " + getString(R.string.status_remaining);
if (firstBlock == 0) {
firstBlock = walletHeight;
@@ -556,4 +560,9 @@ public class WalletFragment extends Fragment
} else
ivStreetGunther.setImageDrawable(null);
}
@Override
public long getDaemonHeight() {
return activityCallback.getDaemonHeight();
}
}

View File

@@ -35,6 +35,8 @@ import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.data.Crypto;
import com.m2049r.xmrwallet.data.UserNotes;
import com.m2049r.xmrwallet.model.TransactionInfo;
import com.m2049r.xmrwallet.model.WalletManager;
import com.m2049r.xmrwallet.service.WalletService;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.ThemeHelper;
@@ -61,12 +63,19 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
void onInteraction(View view, TransactionInfo item);
}
public interface DaemonHeightProvider {
long getDaemonHeight();
}
public interface Listener extends OnInteractionListener, DaemonHeightProvider {
}
private final List<TransactionInfo> infoItems;
private final OnInteractionListener listener;
private final Listener listener;
private final Context context;
public TransactionInfoAdapter(Context context, OnInteractionListener listener) {
public TransactionInfoAdapter(Context context, Listener listener) {
this.context = context;
inboundColour = ThemeHelper.getThemedColor(context, R.attr.positiveColor);
outboundColour = ThemeHelper.getThemedColor(context, R.attr.negativeColor);
@@ -158,6 +167,7 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
final TextView tvDateTime;
final CircularProgressIndicator pbConfirmations;
final TextView tvConfirmations;
final ImageView ivLock;
TransactionInfo infoItem;
ViewHolder(View itemView) {
@@ -170,6 +180,7 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
pbConfirmations = itemView.findViewById(R.id.pbConfirmations);
pbConfirmations.setMax(TransactionInfo.CONFIRMATION);
tvConfirmations = itemView.findViewById(R.id.tvConfirmations);
ivLock = itemView.findViewById(R.id.ivLock);
}
private String getDateTime(long time) {
@@ -180,6 +191,21 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
tvAmount.setTextColor(clr);
}
private void showLock() {
Timber.d("UNLOCK %d:%d", infoItem.unlockTime, infoItem.blockheight);
if (infoItem.unlockTime == 0) {
ivLock.setVisibility(View.GONE);
return;
}
if (getDaemonHeight() < infoItem.unlockTime) {
tvConfirmations.setVisibility(View.GONE);
ivLock.setVisibility(View.VISIBLE);
} else {
ivLock.setVisibility(View.GONE);
}
}
void bind(int position) {
infoItem = infoItems.get(position);
itemView.setTransitionName(context.getString(R.string.tx_item_transition_name, infoItem.hash));
@@ -238,6 +264,7 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
pbConfirmations.setVisibility(View.GONE);
tvConfirmations.setVisibility(View.GONE);
}
showLock();
String tag = null;
String info = "";
@@ -275,4 +302,8 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
}
}
}
private long getDaemonHeight() {
return listener.getDaemonHeight();
}
}

View File

@@ -46,7 +46,7 @@ public class Ledger {
public static final int SW_OK = 0x9000;
public static final int SW_INS_NOT_SUPPORTED = 0x6D00;
public static final int OK[] = {SW_OK};
public static final int MINIMUM_LEDGER_VERSION = (1 << 16) + (6 << 8) + (0); // 1.6.0
public static final int MINIMUM_LEDGER_VERSION = (1 << 16) + (8 << 8) + (0); // 1.6.0
public static UsbDevice findDevice(UsbManager usbManager) {
if (!ENABLED) return null;

View File

@@ -62,6 +62,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
public int accountIndex;
public int addressIndex;
public long confirmations;
public long unlockTime;
public String subaddressLabel;
public List<Transfer> transfers;
@@ -82,6 +83,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
int accountIndex,
int addressIndex,
long confirmations,
long unlockTime,
String subaddressLabel,
List<Transfer> transfers) {
this.direction = Direction.values()[direction];
@@ -96,6 +98,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
this.accountIndex = accountIndex;
this.addressIndex = addressIndex;
this.confirmations = confirmations;
this.unlockTime = unlockTime;
this.subaddressLabel = subaddressLabel;
this.transfers = transfers;
}
@@ -129,6 +132,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
out.writeInt(accountIndex);
out.writeInt(addressIndex);
out.writeLong(confirmations);
out.writeLong(unlockTime);
out.writeString(subaddressLabel);
out.writeList(transfers);
out.writeString(txKey);
@@ -159,6 +163,7 @@ public class TransactionInfo implements Parcelable, Comparable<TransactionInfo>
accountIndex = in.readInt();
addressIndex = in.readInt();
confirmations = in.readLong();
unlockTime = in.readLong();
subaddressLabel = in.readString();
transfers = in.readArrayList(Transfer.class.getClassLoader());
txKey = in.readString();

View File

@@ -24,6 +24,7 @@ import com.m2049r.xmrwallet.util.RestoreHeight;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -96,8 +97,11 @@ public class WalletManager {
if (wallet.getStatus().isOk()) {
// (Re-)Estimate restore height based on what we know
final long oldHeight = wallet.getRestoreHeight();
// Go back 4 days if we don't have a precise restore height
Calendar restoreDate = Calendar.getInstance();
restoreDate.add(Calendar.DAY_OF_MONTH, -4);
final long restoreHeight =
(height > -1) ? height : RestoreHeight.getInstance().getHeight(new Date());
(height > -1) ? height : RestoreHeight.getInstance().getHeight(restoreDate.getTime());
wallet.setRestoreHeight(restoreHeight);
Timber.d("Changed Restore Height from %d to %d", oldHeight, wallet.getRestoreHeight());
wallet.setPassword(password); // this rewrites the keys file (which contains the restore height)

View File

@@ -35,7 +35,8 @@ public class LocaleHelper {
String[] availableLocales = context.getString(R.string.available_locales).split(",");
for (String localeName : availableLocales) {
locales.add(Locale.forLanguageTag(localeName));
if (!localeName.startsWith("night") && !localeName.matches("v[0-9]+"))
locales.add(Locale.forLanguageTag(localeName));
}
return locales;

View File

@@ -56,7 +56,9 @@ import timber.log.Timber;
@RequiredArgsConstructor
public class NetCipherHelper implements StatusCallback {
public static final String USER_AGENT = "Monerujo/1.0";
public static final int HTTP_TIMEOUT = 1000; //ms
public static final int HTTP_TIMEOUT_CONNECT = 1000; //ms
public static final int HTTP_TIMEOUT_READ = 2000; //ms
public static final int HTTP_TIMEOUT_WRITE = 1000; //ms
public static final int TOR_TIMEOUT_CONNECT = 5000; //ms
public static final int TOR_TIMEOUT = 2000; //ms
@@ -117,9 +119,9 @@ public class NetCipherHelper implements StatusCallback {
private void createClearnetClient() {
try {
client = new OkHttpClient.Builder()
.connectTimeout(HTTP_TIMEOUT, TimeUnit.MILLISECONDS)
.writeTimeout(HTTP_TIMEOUT, TimeUnit.MILLISECONDS)
.readTimeout(HTTP_TIMEOUT, TimeUnit.MILLISECONDS)
.connectTimeout(HTTP_TIMEOUT_CONNECT, TimeUnit.MILLISECONDS)
.writeTimeout(HTTP_TIMEOUT_WRITE, TimeUnit.MILLISECONDS)
.readTimeout(HTTP_TIMEOUT_READ, TimeUnit.MILLISECONDS)
.build();
Helper.ALLOW_SHIFT = true;
} catch (Exception ex) {

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:textColorSecondary"
android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z" />
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?attr/colorPrimaryVariant"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z" />
</vector>

View File

@@ -45,7 +45,7 @@
android:id="@+id/rlSweep"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
android:visibility="gone">
<ImageView
android:id="@+id/ivSweep"

View File

@@ -11,6 +11,30 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/llWarning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="?attr/colorError"
android:orientation="horizontal">
<TextView
android:id="@+id/tvWarning"
style="@style/MoneroLabel.Heading"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawablePadding="8dp"
android:gravity="start|center_vertical"
android:padding="8dp"
android:textColor="?colorOnError"
app:drawableStartCompat="@drawable/ic_warning_24dp"
app:drawableTint="?colorOnError"
tools:text="Transaction amount locked until block 322229877 (approx. 2.4 months)" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -11,10 +11,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp">
android:paddingTop="12dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<LinearLayout
android:layout_width="0dp"
@@ -58,6 +58,14 @@
android:gravity="center"
android:paddingBottom="1dp"
android:text="8"
android:visibility="gone" />
<ImageView
android:id="@+id/ivLock"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:src="@drawable/ic_lock_24dp"
android:visibility="visible" />
</FrameLayout>

View File

@@ -134,7 +134,7 @@
<string name="label_wallet_receive">Rebre</string>
<string name="label_wallet_send">Enviar</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR sense confirmar</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s sense confirmar</string>
<string name="service_description">Servei de monerujo</string>
@@ -290,7 +290,7 @@
<string name="menu_language">Idioma</string>
<string name="language_system_default">Utilitzar Idioma del Sistema</string>
<string name="fab_restore_ledger">Restablir desde Ledger Nano S</string>
<string name="fab_restore_ledger">Restablir desde Ledger Nano</string>
<string name="progress_ledger_progress">Comunicant amb Ledger</string>
<string name="progress_ledger_confirm">Es requereix confirmació en Ledger!</string>
@@ -447,4 +447,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -135,7 +135,7 @@
<string name="label_wallet_receive">Empfange</string>
<string name="label_wallet_send">Sende</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR unbestätigt</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s unbestätigt</string>
<string name="service_description">monerujo Service</string>
@@ -286,7 +286,7 @@
<string name="menu_language">Sprache</string>
<string name="language_system_default">Benutze Systemsprache</string>
<string name="fab_restore_ledger">Wallet mit Ledger Nano S wiederherstellen</string>
<string name="fab_restore_ledger">Wallet mit Ledger Nano wiederherstellen</string>
<string name="progress_ledger_progress">Kommunikation mit Ledger</string>
<string name="progress_ledger_confirm">Bestätigung auf Ledger benötigt!</string>
@@ -448,4 +448,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -123,7 +123,7 @@
<string name="label_wallet_receive">Λήψη</string>
<string name="label_wallet_send">Αποστολή</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR μη επιβεβαιωμένα</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s μη επιβεβαιωμένα</string>
<string name="service_description">Υπηρεσία monerujo</string>
@@ -283,7 +283,7 @@
<string name="menu_language">Language</string>
<string name="language_system_default">Use System Language</string>
<string name="fab_restore_ledger">Restore from Ledger Nano S</string>
<string name="fab_restore_ledger">Restore from Ledger Nano</string>
<string name="progress_ledger_progress">Communicating with Ledger</string>
<string name="progress_ledger_confirm">Confirmation on Ledger required!</string>
@@ -449,4 +449,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -134,7 +134,7 @@
<string name="label_wallet_receive">Ricevi</string>
<string name="label_wallet_send">Doni</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR nekonfirmite</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s nekonfirmite</string>
<string name="service_description">monerujo Servo</string>
@@ -290,7 +290,7 @@
<string name="menu_language">Lingvo</string>
<string name="language_system_default">Uzi la sistemlingvon</string>
<string name="fab_restore_ledger">Restaŭri de Ledger Nano S</string>
<string name="fab_restore_ledger">Restaŭri de Ledger Nano</string>
<string name="progress_ledger_progress">Komunikante kun Ledger</string>
<string name="progress_ledger_confirm">Konfirmo je la Ledger estas postulita!</string>
@@ -449,4 +449,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -86,7 +86,7 @@
<string name="label_wallet_receive">Recibir</string>
<string name="label_wallet_send">Enviar</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR sin confirmar</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s sin confirmar</string>
<string name="service_description">Servicio de Monerujo</string>
@@ -273,7 +273,7 @@
<string name="menu_language">Lenguaje</string>
<string name="language_system_default">Usar Idioma del Sistema</string>
<string name="fab_restore_ledger">Restaurar desde Ledger Nano S</string>
<string name="fab_restore_ledger">Restaurar desde Ledger Nano</string>
<string name="progress_ledger_progress">Comunicándose con Ledger</string>
<string name="progress_ledger_confirm">¡Confirmación en Ledger requerida!</string>
@@ -440,4 +440,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -132,7 +132,7 @@
<string name="label_wallet_receive">Küsi raha</string>
<string name="label_wallet_send">Saada</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR kinnitamata</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s kinnitamata</string>
<string name="service_description">monerujo teenus</string>
@@ -285,7 +285,7 @@
<string name="menu_language">Keel</string>
<string name="language_system_default">Kasuta süsteemi keelt</string>
<string name="fab_restore_ledger">Taasta seadmelt Ledger Nano S</string>
<string name="fab_restore_ledger">Taasta seadmelt Ledger Nano</string>
<string name="progress_ledger_progress">Suhtlen seadmega Ledger</string>
<string name="progress_ledger_confirm">Seadmelt Ledger on vajalik kinnitus!</string>
@@ -447,4 +447,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">
<string name="about_close">بستن</string>
<string name="about_whoami">من مونروجو هستم</string>
<string name="about_version">
نسخهٔ
%1$s (%2$d)
</string>
<string name="credits_text"><![CDATA[
<b>دست اندرکاران</b>
<br/>
m2049r, baltsar777, anhdres, keejef,
rehrar, EarlOfEgo, ErCiccione et al.
<br/><br/>
<a href="https://monerujo.app">monerujo.app</a>
]]></string>
<string name="privacy_policy"><![CDATA[
<h1>خط‌مشی رازداری</h1>
<p>این صفحه شما را از سیاست‌های ما در مورد جمع‌آوری، استفاده و افشای اطلاعات شخصی که از کاربران برنامهٔ خود (مونروجو به معنای «کیف‌پول مونرو») دریافت می‌کنیم مطلع می‌کند.</p>
<p>با استفاده از برنامه، با جمع‌آوری و استفاده از اطلاعات، مطابق با این سیاست، موافقت می‌کنید.</p>
<h2>داده‌های جمع‌آوری شده</h2>
<p>داده‌های شخصی هر نوع داده‌ای است که بتواند یک فرد را شناسایی کند.</p>
<p>کلیدها و آدرس‌های عمومی مونرو توسط برنامه به صورت داخلی برای پردازش تراکنش‌ها جمع‌آوری و پردازش می‌شوند و به شکل رمزگذاری شده به شبکه مونرو منتقل می شوند.</p>
<p>سایر اطلاعات شخصی توسط برنامه جمع‌آوری نمی‌شوند.</p>
<p>
اگر از قابلیت اختیاری تبدیل رمزارز استفاده کنید، این برنامه نرخ ارز را از طریق API عمومی coinmarketcap.com دریافت می‌کند. برای اطلاع از جزئیات نحوهٔ جمع‌آوری داده‌های درخواست‌هایتان، خط‌مشی رازداری آنها را در
<a href="https://coinmarketcap.com/privacy">coinmarketcap.com/privacy</a>
ببینید.
</p>
<p>
اگر از برنامه برای پرداخت به آدرس‌های بیت‌کوین استفاده می‌کنید، از سرویس SideShift.ai استفاده خواهید کرد. برای جزئیات بیشتر به خط‌مشی رازداری آنها در
<a href="https://sideshift.ai">sideshift.ai</a>
مراجعه کنید. مونروجو مقدار و آدرس مقصد بیت‌کوین را برای آنها ارسال می‌کند. آدرس IP شما نیز قابل جمع‌آوری خواهد بود.
</p>
<h2>دسترسی‌های نرم‌افزار</h2>
<ul>
<li>اینترنت: اتصال به شبکهٔ مونرو</li>
<li>خوانش حافظهٔ خارجی: خواندن فایل‌های کیف‌پول ذخیره شده برروی دستگاه</li>
<li>نوشتار حافظهٔ خارجی: نوشتن فایل‌های کیف‌پول ذخیره شده برروی دستگاه</li>
<li>قفل بیداری: بیدار نگه داشتن دستگاه در هنگام همگام‌سازی</li>
<li>دوربین: اسکن کدهای کیوآر برای ارسال مونرو</li>
</ul>
<h2>تغییرات در این خط‌مشی رازداری</h2>
<p>
ممکن است هرازچندگاهی این خط‌مشی رازداری را به‌روز کنیم. ما با ارسال خط‌مشی رازداری جدید در برنامه و وب‌سایت
<a href="https://monerujo.app">(www.monerujo.app)</a>
شما را از هرگونه تغییر مطلع خواهیم کرد. به شما توصیه می‌شود برای هرگونه تغییر، این خط‌مشی رازداری را به صورت دوره‌ای مرور کنید.
</p>
<p>آخرین به‌روزرسانی این خط‌مشی رازداری: 10 نوامبر 2017</p>
<h2>تماس با ما</h2>
<p>
اگر در مورد خط‌مشی رازداری ما یا نحوهٔ جمع‌آوری و پردازش داده‌های خود سؤالی دارید، لطفا به
<a href="mailto:privacy@monerujo.io">privacy@monerujo.io</a>
ایمیل بزنید.
</p>
]]></string>
</resources>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -134,7 +134,7 @@
<string name="label_wallet_receive">Recevoir</string>
<string name="label_wallet_send">Envoyer</string>
<string name="xmr_unconfirmed_amount">+ %1$s XMR non confirmés</string>
<string name="xmr_unconfirmed_amount">+ %1$s %2$s non confirmés</string>
<string name="service_description">Service monerujo</string>
@@ -284,7 +284,7 @@
<string name="tx_subaddress">Sous-adresse</string>
<string name="generate_address_label_sub">Sous-adresse publique #%1$d: %2$s</string>
<string name="fab_restore_ledger">Restaurer depuis Ledger Nano S</string>
<string name="fab_restore_ledger">Restaurer depuis Ledger Nano</string>
<string name="progress_ledger_progress">Communication avec Ledger</string>
<string name="progress_ledger_confirm">Confirmation requise sur Ledger !</string>
@@ -453,4 +453,6 @@
</string-array>
<string name="message_qr_failed">Failed to create QR for sharing!</string>
<string name="tx_locked">Transaction amount locked until block %1$d (in %2$d blocks ≈ %3$,.2f days)</string>
</resources>

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