1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-03 08:23:04 +02:00

Compare commits

...

12 Commits

Author SHA1 Message Date
TheFuzzStone
f00da6ecda Renamed folder to '*-uk' and files to *-uk. (#666)
* Renamed folder to '*-uk' and files to `*-uk`. 
Changed ''' to '\''

* Renamed file names
2020-06-20 18:07:43 +02:00
m2049r
1cecd0b718 xmr.to v3 API (#667) 2020-06-19 19:17:38 +02:00
m2049r
a0d6117bbb don't keepTimestampsInApk 2020-06-06 09:46:28 +02:00
m2049r
0b0648a172 upgrade dev env 2020-06-05 08:56:02 +02:00
m2049r
775dcf01ae bump version 2020-06-01 20:14:03 +02:00
m2049r
aed4051d44 Merge branch 'TheFuzzStone-master' 2020-06-01 20:09:51 +02:00
m2049r
a586c0781a renamed directory to match locale 2020-06-01 20:08:22 +02:00
m2049r
616d93cb18 replace ' 2020-06-01 20:04:55 +02:00
v1docq47
73d9cb6d58 Update for Russian translation (#649)
Update:
 - strings.xml

Co-authored-by: m2049r <m2049r@monerujo.io>
2020-06-01 19:57:33 +02:00
m2049r
9846e8b5cf fix progress bar (#665) 2020-06-01 19:56:24 +02:00
m2049r
aa66a12dac Merge branch 'master' into master 2020-06-01 13:43:16 +02:00
TheFuzzStone
835a35c6a8 Updating Ukranian language 2020-02-13 13:49:52 +02:00
20 changed files with 453 additions and 554 deletions

1
.gitignore vendored
View File

@@ -14,3 +14,4 @@
/app/prodMainnet
/app/alphaStagenet
/app/prodStagenet
/app/.cxx

View File

@@ -2,13 +2,13 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
buildToolsVersion '29.0.2'
defaultConfig {
applicationId "com.m2049r.xmrwallet"
minSdkVersion 21
targetSdkVersion 28
versionCode 300
versionName "1.13.0 'ReStart'"
versionCode 302
versionName "1.13.2 'ReStart'"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {

View File

@@ -362,6 +362,7 @@ public class WalletFragment extends Fragment
bSend.setEnabled(false);
}
if (isVisible()) enableAccountsList(false); //otherwise it is enabled in onResume()
firstBlock = 0;
}
boolean walletLoaded = false;

View File

@@ -457,8 +457,8 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
}
showProgress(3, getString(R.string.label_send_progress_create_tx));
TxData txData = sendListener.getTxData();
txData.setDestinationAddress(xmrtoStatus.getXmrReceivingSubaddress());
txData.setAmount(Wallet.getAmountFromDouble(xmrtoStatus.getXmrAmountTotal()));
txData.setDestinationAddress(xmrtoStatus.getReceivingSubaddress());
txData.setAmount(Wallet.getAmountFromDouble(xmrtoStatus.getIncomingAmountTotal()));
getActivityCallback().onPrepareSend(xmrtoStatus.getUuid(), txData);
}
@@ -572,22 +572,22 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
NumberFormat df = NumberFormat.getInstance(Locale.US);
df.setMaximumFractionDigits(12);
String btcAmount = df.format(status.getBtcAmount());
String xmrAmountTotal = df.format(status.getXmrAmountTotal());
String xmrAmountTotal = df.format(status.getIncomingAmountTotal());
tvTxBtcAmount.setText(getString(R.string.text_send_btc_amount, btcAmount, xmrAmountTotal));
String xmrPriceBtc = df.format(status.getXmrPriceBtc());
String xmrPriceBtc = df.format(status.getIncomingPriceBtc());
tvTxBtcRate.setText(getString(R.string.text_send_btc_rate, xmrPriceBtc));
double calcRate = status.getBtcAmount() / status.getXmrPriceBtc();
Timber.i("Rates: %f / %f", calcRate, status.getXmrPriceBtc());
double calcRate = status.getBtcAmount() / status.getIncomingPriceBtc();
Timber.d("Rates: %f / %f", calcRate, status.getIncomingPriceBtc());
tvTxBtcAddress.setText(status.getBtcDestAddress()); // TODO test if this is different?
Timber.i("Expires @ %s, in %s seconds", status.getExpiresAt().toString(), status.getSecondsTillTimeout());
Timber.d("Expires @ %s, in %s seconds", status.getExpiresAt().toString(), status.getSecondsTillTimeout());
Timber.i("Status = %s", status.getState().toString());
Timber.d("Status = %s", status.getState().toString());
tvTxXmrToKey.setText(status.getUuid());
Timber.d("AmountRemaining=%f, XmrAmountTotal=%f", status.getXmrAmountRemaining(), status.getXmrAmountTotal());
Timber.d("AmountRemaining=%f, XmrAmountTotal=%f", status.getRemainingAmountIncoming(), status.getIncomingAmountTotal());
hideProgress();
startSendTimer();
prepareSend();

View File

@@ -323,9 +323,9 @@ public class Helper {
static public HttpUrl getXmrToBaseUrl() {
if ((WalletManager.getInstance() == null)
|| (WalletManager.getInstance().getNetworkType() != NetworkType.NetworkType_Mainnet)) {
return HttpUrl.parse("https://test.xmr.to/api/v2/xmr2btc/");
return HttpUrl.parse("https://test.xmr.to/api/v3/xmr2btc/");
} else {
return HttpUrl.parse("https://xmr.to/api/v2/xmr2btc/");
return HttpUrl.parse("https://xmr.to/api/v3/xmr2btc/");
}
}

View File

@@ -43,47 +43,31 @@ public interface QueryOrderStatus {
boolean isError();
State getState(); // "state": "<order_state_as_string>",
QueryOrderStatus.State getState();
double getBtcAmount(); // "btc_amount": <requested_amount_in_btc_as_float>,
double getBtcAmount();
String getBtcDestAddress(); // "btc_dest_address": "<requested_destination_address_as_string>",
String getBtcDestAddress();
String getUuid(); // "uuid": "<unique_order_identifier_as_12_character_string>"
String getUuid();
int getBtcNumConfirmations(); // "btc_num_confirmations": <btc_num_confirmations_as_integer>,
int getBtcNumConfirmationsThreshold();
int getBtcNumConfirmationsBeforePurge(); // "btc_num_confirmations_before_purge": <btc_num_confirmations_before_purge_as_integer>,
Date getCreatedAt();
String getBtcTransactionId(); // "btc_transaction_id": "<btc_transaction_id_as_string>",
Date getExpiresAt();
Date getCreatedAt(); // "created_at": "<timestamp_as_string>",
int getSecondsTillTimeout();
Date getExpiresAt(); // "expires_at": "<timestamp_as_string>",
double getIncomingAmountTotal();
int getSecondsTillTimeout(); // "seconds_till_timeout": <seconds_till_timeout_as_integer>,
double getRemainingAmountIncoming();
double getXmrAmountTotal(); // "xmr_amount_total": <amount_in_xmr_for_this_order_as_float>,
int getIncomingNumConfirmationsRemaining();
double getXmrAmountRemaining(); // "xmr_amount_remaining": <amount_in_xmr_that_the_user_must_still_send_as_float>,
double getIncomingPriceBtc();
int getXmrNumConfirmationsRemaining(); // "xmr_num_confirmations_remaining": <num_xmr_confirmations_remaining_before_bitcoins_will_be_sent_as_integer>,
double getXmrPriceBtc(); // "xmr_price_btc": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>,
String getXmrReceivingAddress(); // "xmr_receiving_address": "xmr_old_style_address_user_can_send_funds_to_as_string",
String getXmrReceivingSubaddress(); // <xmr_subaddress_user_needs_to_send_funds_to_as_string>,
String getXmrReceivingIntegratedAddress(); // "xmr_receiving_integrated_address": "xmr_integrated_address_user_needs_to_send_funds_to_as_string",
int getXmrRecommendedMixin(); // "xmr_recommended_mixin": <xmr_recommended_mixin_as_integer>,
@Deprecated
double getXmrRequiredAmount(); // "xmr_required_amount": <xmr_amount_user_needs_to_send_as_float>,
String getXmrRequiredPaymentIdLong(); // "xmr_required_payment_id_long": "xmr_payment_id_user_needs_to_include_when_using_old_stlye_address_as_string"
String getXmrRequiredPaymentIdShort(); // "xmr_required_payment_id_short": "xmr_payment_id_included_in_integrated_address_as_string"
String getReceivingSubaddress();
int getRecommendedMixin();
}

View File

@@ -113,7 +113,8 @@ class CreateOrderImpl implements CreateOrder {
static JSONObject createRequest(final double amount, final String address) throws JSONException {
final JSONObject jsonObject = new JSONObject();
jsonObject.put("btc_amount", amount);
jsonObject.put("amount", amount);
jsonObject.put("amount_currency", "BTC");
jsonObject.put("btc_dest_address", address);
return jsonObject;
}

View File

@@ -42,23 +42,17 @@ class QueryOrderStatusImpl implements QueryOrderStatus {
private String btcDestAddress; // "btc_dest_address": "<requested_destination_address_as_string>",
private String uuid; // "uuid": "<unique_order_identifier_as_12_character_string>"
// the following are only returned if the state is "after" TO_BE_CREATED
private int btcNumConfirmations; // "btc_num_confirmations": <btc_num_confirmations_as_integer>,
private int btcNumConfirmationsBeforePurge; // "btc_num_confirmations_before_purge": <btc_num_confirmations_before_purge_as_integer>,
private String btcTransactionId; // "btc_transaction_id": "<btc_transaction_id_as_string>",
//private int btcNumConfirmations; // "btc_num_confirmations": <btc_num_confirmations_as_integer>,
private int btcNumConfirmationsThreshold; // "btc_num_confirmations_threshold": <btc_num_confirmations_threshold_as_integer>,
private Date createdAt; // "created_at": "<timestamp_as_string>",
private Date expiresAt; // "expires_at": "<timestamp_as_string>",
private int secondsTillTimeout; // "seconds_till_timeout": <seconds_till_timeout_as_integer>,
private double xmrAmountTotal; // "xmr_amount_total": <amount_in_xmr_for_this_order_as_float>,
private double xmrAmountRemaining; // "xmr_amount_remaining": <amount_in_xmr_that_the_user_must_still_send_as_float>,
private int xmrNumConfirmationsRemaining; // "xmr_num_confirmations_remaining": <num_xmr_confirmations_remaining_before_bitcoins_will_be_sent_as_integer>,
private double xmrPriceBtc; // "xmr_price_btc": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>,
private String xmrReceivingSubaddress; // <xmr_subaddress_user_needs_to_send_funds_to_as_string>,
private String xmrReceivingAddress; // "xmr_receiving_address": "xmr_old_style_address_user_can_send_funds_to_as_string",
private String xmrReceivingIntegratedAddress; // "xmr_receiving_integrated_address": "xmr_integrated_address_user_needs_to_send_funds_to_as_string",
private int xmrRecommendedMixin; // "xmr_recommended_mixin": <xmr_recommended_mixin_as_integer>,
private double xmrRequiredAmount; // "xmr_required_amount": <xmr_amount_user_needs_to_send_as_float>,
private String xmrRequiredPaymentIdLong; // "xmr_required_payment_id_long": "xmr_payment_id_user_needs_to_include_when_using_old_stlye_address_as_string"
private String xmrRequiredPaymentIdShort; // "xmr_required_payment_id_short": "xmr_payment_id_included_in_integrated_address_as_string"
private double incomingAmountTotal; // "incoming_amount_total": <amount_in_incoming_currency_for_this_order_as_float>,
private double remainingAmountIncoming; // "remaining_amount_incoming": <amount_in_incoming_currency_that_the_user_must_still_send_as_float>,
private int incomingNumConfirmationsRemaining; // "incoming_num_confirmations_remaining": <num_incoming_currency_confirmations_remaining_before_bitcoins_will_be_sent_as_integer>,
private double incomingPriceBtc; // "incoming_price_btc": <price_of_1_incoming_in_btc_currency_as_offered_by_service_as_float>,
private String receivingSubaddress; // "receiving_subaddress": <xmr_subaddress_user_needs_to_send_funds_to_as_string>,
private int recommendedMixin; // "recommended_mixin": <recommended_mixin_as_integer>,
public QueryOrderStatus.State getState() {
return state;
@@ -76,16 +70,8 @@ class QueryOrderStatusImpl implements QueryOrderStatus {
return uuid;
}
public int getBtcNumConfirmations() {
return btcNumConfirmations;
}
public int getBtcNumConfirmationsBeforePurge() {
return btcNumConfirmationsBeforePurge;
}
public String getBtcTransactionId() {
return btcTransactionId;
public int getBtcNumConfirmationsThreshold() {
return btcNumConfirmationsThreshold;
}
public Date getCreatedAt() {
@@ -100,48 +86,28 @@ class QueryOrderStatusImpl implements QueryOrderStatus {
return secondsTillTimeout;
}
public double getXmrAmountTotal() {
return xmrAmountTotal;
public double getIncomingAmountTotal() {
return incomingAmountTotal;
}
public double getXmrAmountRemaining() {
return xmrAmountRemaining;
public double getRemainingAmountIncoming() {
return remainingAmountIncoming;
}
public int getXmrNumConfirmationsRemaining() {
return xmrNumConfirmationsRemaining;
public int getIncomingNumConfirmationsRemaining() {
return incomingNumConfirmationsRemaining;
}
public double getXmrPriceBtc() {
return xmrPriceBtc;
public double getIncomingPriceBtc() {
return incomingPriceBtc;
}
public String getXmrReceivingSubaddress() {
return xmrReceivingSubaddress;
public String getReceivingSubaddress() {
return receivingSubaddress;
}
public String getXmrReceivingAddress() {
return xmrReceivingAddress;
}
public String getXmrReceivingIntegratedAddress() {
return xmrReceivingIntegratedAddress;
}
public int getXmrRecommendedMixin() {
return xmrRecommendedMixin;
}
public double getXmrRequiredAmount() {
return xmrRequiredAmount;
}
public String getXmrRequiredPaymentIdLong() {
return xmrRequiredPaymentIdLong;
}
public String getXmrRequiredPaymentIdShort() {
return xmrRequiredPaymentIdShort;
public int getRecommendedMixin() {
return recommendedMixin;
}
public boolean isCreated() {
@@ -197,29 +163,22 @@ class QueryOrderStatusImpl implements QueryOrderStatus {
uuid = jsonObject.getString("uuid"); // "uuid": "<unique_order_identifier_as_12_character_string>"
if (isCreated()) {
btcNumConfirmations = jsonObject.getInt("btc_num_confirmations"); // "btc_num_confirmations": <btc_num_confirmations_as_integer>,
btcNumConfirmationsBeforePurge = jsonObject.getInt("btc_num_confirmations_before_purge"); // "btc_num_confirmations_before_purge": <btc_num_confirmations_before_purge_as_integer>,
btcTransactionId = jsonObject.getString("btc_transaction_id"); // "btc_transaction_id": "<btc_transaction_id_as_string>",
btcNumConfirmationsThreshold = jsonObject.getInt("btc_num_confirmations_threshold");
try {
String created = jsonObject.getString("created_at"); // "created_at": "<timestamp_as_string>",
String created = jsonObject.getString("created_at");
createdAt = parseDate(created);
String expires = jsonObject.getString("expires_at"); // "expires_at": "<timestamp_as_string>",
String expires = jsonObject.getString("expires_at");
expiresAt = parseDate(expires);
} catch (ParseException ex) {
throw new JSONException(ex.getLocalizedMessage());
}
secondsTillTimeout = jsonObject.getInt("seconds_till_timeout"); // "seconds_till_timeout": <seconds_till_timeout_as_integer>,
xmrAmountTotal = jsonObject.getDouble("xmr_amount_total"); // "xmr_amount_total": <amount_in_xmr_for_this_order_as_float>,
xmrAmountRemaining = jsonObject.getDouble("xmr_amount_remaining"); // "xmr_amount_remaining": <amount_in_xmr_that_the_user_must_still_send_as_float>,
xmrNumConfirmationsRemaining = jsonObject.getInt("xmr_num_confirmations_remaining"); // "xmr_num_confirmations_remaining": <num_xmr_confirmations_remaining_before_bitcoins_will_be_sent_as_integer>,
xmrPriceBtc = jsonObject.getDouble("xmr_price_btc"); // "xmr_price_btc": <price_of_1_btc_in_xmr_as_offered_by_service_as_float>,
xmrReceivingSubaddress = jsonObject.getString("xmr_receiving_subaddress"); // <xmr_subaddress_user_needs_to_send_funds_to_as_string>,
xmrReceivingAddress = jsonObject.getString("xmr_receiving_address"); // "xmr_receiving_address": "xmr_old_style_address_user_can_send_funds_to_as_string",
xmrReceivingIntegratedAddress = jsonObject.getString("xmr_receiving_integrated_address"); // "xmr_receiving_integrated_address": "xmr_integrated_address_user_needs_to_send_funds_to_as_string",
xmrRecommendedMixin = jsonObject.getInt("xmr_recommended_mixin"); // "xmr_recommended_mixin": <xmr_recommended_mixin_as_integer>,
xmrRequiredAmount = jsonObject.getDouble("xmr_required_amount"); // "xmr_required_amount": <xmr_amount_user_needs_to_send_as_float>,
xmrRequiredPaymentIdLong = jsonObject.getString("xmr_required_payment_id_long"); // "xmr_required_payment_id_long": "xmr_payment_id_user_needs_to_include_when_using_old_stlye_address_as_string"
xmrRequiredPaymentIdShort = jsonObject.getString("xmr_required_payment_id_short"); // "xmr_required_payment_id_short": "xmr_payment_id_included_in_integrated_address_as_string"
secondsTillTimeout = jsonObject.getInt("seconds_till_timeout");
incomingAmountTotal = jsonObject.getDouble("incoming_amount_total");
remainingAmountIncoming = jsonObject.getDouble("remaining_amount_incoming");
incomingNumConfirmationsRemaining = jsonObject.getInt("incoming_num_confirmations_remaining");
incomingPriceBtc = jsonObject.getDouble("incoming_price_btc");
receivingSubaddress = jsonObject.getString("receiving_subaddress");
recommendedMixin = jsonObject.getInt("recommended_mixin");
}
}

View File

@@ -53,11 +53,6 @@ public class XmrToApiImpl implements XmrToApi, XmrToApiCall {
this.baseUrl = baseUrl;
}
public XmrToApiImpl(@NonNull final OkHttpClient okHttpClient) {
this(okHttpClient, HttpUrl.parse("https://xmr.to/api/v2/xmr2btc/"));
}
@Override
public void createOrder(final double amount, @NonNull final String address,
@NonNull final XmrToCallback<CreateOrder> callback) {

View File

@@ -103,7 +103,7 @@
<string name="changepw_success">Изменение пароля выполено успешно</string>
<string name="label_daemon">Удаленный узел</string>
<string name="status_wallet_loading">Загрузка кошелека &#8230;</string>
<string name="status_wallet_loading">Загрузка кошелька &#8230;</string>
<string name="status_wallet_unloaded">Кошелек записан</string>
<string name="status_wallet_unload_failed">Ошибка записи кошелека!</string>
<string name="status_wallet_connecting">Подключение &#8230;</string>
@@ -388,7 +388,7 @@
<string name="label_restoreheight">Восстановить высоту</string> <!-- Restore Height -->
<string name="toast_ledger_start_app">Start Monero App on %1$s</string>
<string name="toast_ledger_start_app">Запуск приложения Monero на %1$s</string>
<string name="menu_rescan">Rescan!</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
<string name="about_version">Версія %1$s (%2$d)</string>
<string name="credits_text"><![CDATA[
<b>Інформація</b>
<b>Подяка</b>
<br/>
m2049r, baltsar777, anhdres, keejef,
rehrar, EarlOfEgo et al.
@@ -19,17 +19,17 @@
використання і розкриття ваших особистих даних, які ми отримуємо
від користувачів додатку (monerujo: Monero Wallet).
</p>
<p>Використовуючи додаток, ви погоджуєтеся на збір і використання
<p>Використовуючи додаток, ви погоджуєтесь на збір і використання
інформації відповідно до даної політики.
</p>
<h2>Зібрані дані</h2>
<p>Особистими даними є будь-які дані, які дозволяють
ідентифікувати вас як особистість.</p>
<p>Додаток локально збирає і обробляє ключі і публічні адреси Monero
з метою обробки транзакцій і їх передачі в мережу Monero в зашифрованій формі.
<p>Додаток локально збирає і обробляє ключі, і публічні адреси Monero
з метою обробки транзакцій та їх передачі в мережу Monero в зашифрованій формі.
</p>
<p>Додаток не збирає будь-яких інших особистих даних.</p>
<p>Якщо ви використовуєте функцію обміну (необовязково), monerujo отримує обмінний
<p>Якщо ви використовуєте функцію обміну (необов\'язково), monerujo отримує обмінний
курс через публічний API coinmarketcap.com.
Перейдіть за адресою https://coinmarketcap.com/privacy для отримання детальної
інформації про те, як збираються ваші персональні дані в запитах.</p>
@@ -48,7 +48,7 @@
<h2>Зміни в політиці конфіденційності</h2>
<p>У дані положення політики конфіденційності періодично можуть
вноситися зміни. У разі внесення таких змін, нові положення
будуть опубліковані в додатку і на вебсайті (www.monerujo.io).
будуть опубліковані в додатку, і на вебсайті (www.monerujo.io).
Рекомендується періодично перевіряти положення політики
конфіденційності на предмет внесення змін.
<p>Дата останнього оновлення положень політики конфіденційності: 10.11.2017

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,7 @@
<string name="password_very_strong">Відмінно! У кращих традиціях h4x0r!</string>
<string name="label_login_wallets">Гаманець</string>
<string name="label_credits">Інформація</string>
<string name="label_credits">Подяка</string>
<string name="label_ok">Ok</string>
<string name="label_cancel">Відміна</string>
<string name="label_close">Закрити</string>
@@ -104,14 +104,14 @@
<string name="label_daemon">Віддалений вузол</string>
<string name="status_wallet_loading">Завантаження гаманця &#8230;</string>
<string name="status_wallet_unloaded">Гаманець записаний</string>
<string name="status_wallet_unload_failed">Помилка запису гаманця!</string>
<string name="status_wallet_unloaded">Гаманець збережено</string>
<string name="status_wallet_unload_failed">Помилка збереження гаманця!</string>
<string name="status_wallet_connecting">Підключення &#8230;</string>
<string name="status_wallet_connect_failed">Помилка підключення до віддаленого вузла!\nПеревірте username/password</string>
<string name="status_wallet_node_invalid">Помилка віддаленого вузла!\nПопробуйте ще раз.</string>
<string name="status_wallet_node_invalid">Помилка віддаленого вузла!\nСпробуйте ще раз.</string>
<string name="status_wallet_connect_ioex">Неможливо підключиться до віддаленого вузла!\nПопробуйте пізніше.</string>
<string name="status_wallet_disconnected">Розєднано</string>
<string name="status_wallet_disconnected">Роз\'єднано</string>
<string name="status_transaction_failed">Помилка транзакції: %1$s</string>
@@ -163,12 +163,12 @@
<string name="message_exchange_failed">Неможливо отримати курс обміну!\nВикористовуйте XMR/XMR або спробуйте ще раз</string>
<string name="generate_title">Створити гаманець</string>
<string name="generate_name_hint">імя гаманця</string>
<string name="generate_name_hint">Ім\'я гаманця</string>
<string name="generate_password_hint">Пароль гаманця</string>
<string name="generate_fingerprint_hint">Дозволити відкрити гаманець за допомогою відбитка пальця</string>
<string name="generate_fingerprint_warn"><![CDATA[
<strong>Використання аутентифікації по відбиткам пальців</strong>
<p>З підтримкою аутентифікації по відбиткам пальців, ви можете переглядати баланс і отримувати кошти
<strong>Використання аутентифікації по відбитку пальця</strong>
<p>З підтримкою аутентифікації по відбитку пальця, ви можете переглядати баланс і отримувати кошти
         без введення пароля.</p>
<p>Але для додаткової безпеки, monerujo попросить вас ввести пароль при
         перегляді деталей гаманця, або відправці коштів.</p>
@@ -183,7 +183,7 @@
<string name="generate_buttonGenerate">Зробіть мені вже гаманець!</string>
<string name="generate_button_accept">Я ввів мнемонічну фразу</string>
<string name="generate_wallet_name">Придумай мені імя!</string>
<string name="generate_wallet_name">Придумай мені ім\'я!</string>
<string name="generate_wallet_exists">Такий гаманець існує!</string>
<string name="generate_wallet_dot">Не може починатися з .</string>
<string name="generate_wallet_creating">Створення гаманця</string>
@@ -214,9 +214,9 @@
<string name="send_amount_btc_xmr">%1$s (приблизно)</string>
<string name="send_paymentid_hint">ID платежу (необязательно)</string>
<string name="send_paymentid_hint">ID платежу (необов\'язково)</string>
<string name="send_amount_hint">0.00</string>
<string name="send_notes_hint">Персональна замітка (необовязково)</string>
<string name="send_notes_hint">Персональна замітка (необов\'язково)</string>
<string name="send_generate_paymentid_hint">Генерація</string>
<string name="send_send_label">Витратити мої солодкі Moneroj</string>
<string name="send_send_timed_label">Витратити мої солодкі Moneroj (%1$s)</string>
@@ -259,7 +259,7 @@
<string name="tx_fee">Комісія</string>
<string name="tx_transfers">Перекази</string>
<string name="tx_notes">Замітки</string>
<string name="tx_notes_hint">(необовязково)</string>
<string name="tx_notes_hint">(необов\'язково)</string>
<string name="tx_button_notes">Збережено</string>
<string name="tx_notes_set_failed">Помилка збереження замітки</string>
<string name="tx_title">Детально</string>
@@ -326,69 +326,69 @@
<string name="nfc_tag_read_success">Читання мітки завершено успішно</string>
<string name="nfc_tag_tap">NFC доступний!</string>
<string name="receive_desc_hint">Опис (необовязково)</string>
<string name="receive_desc_hint">Опис (необов\'язково)</string>
<string name="send_address_not_openalias">Адреса OpenAlias недоступна</string>
<string name="send_address_openalias">OpenAlias безпечний &#x2714;</string>
<string name="send_address_resolve_openalias">Дозволи OpenAlias&#8230;</string>
<string name="send_address_no_dnssec">OpenAlias без DNSSEC - адреса може бути підмінена</string>
<string name="status_wallet_connect_wrongversion">Node version incompatible - please upgrade!</string>
<string name="status_wallet_connect_wrongversion">Версія вузла несумісна - будь ласка обновіть!</string>
<string name="menu_info">Інформация</string><!--Changed to: Show Secrets!-->
<string name="menu_streetmode">Street Mode</string>
<string name="menu_streetmode">Вуличний Режим</string>
<string name="info_nodes_enabled">Node-o-matiC enabled, tap for more info.</string>
<string name="node_height">Last block updated: %1$s</string>
<string name="label_nodes">Nodes</string>
<string name="node_name_hint">Node Name (Optional)</string>
<string name="node_address_hint">Hostname</string>
<string name="node_port_hint">Port</string>
<string name="node_user_hint">Username (Optional)</string>
<string name="node_pass_hint">Password (Optional)</string>
<string name="node_host_unresolved">Cannot resolve host</string>
<string name="node_host_empty">We need this!</string>
<string name="node_port_numeric">Must be numeric</string>
<string name="node_port_range">Must be 1&#8211;65535</string>
<string name="node_fab_add">Add Node</string>
<string name="node_refresh_hint">Touch to refresh!</string>
<string name="node_test_error">CONNECTION ERROR %1$d</string>
<string name="node_general_error">CONNECTION ERROR</string>
<string name="node_auth_error">AUTHENTICATION FAILED</string>
<string name="node_result_label">Test Result:</string>
<string name="node_result">Height: %1$s (v%2$d), Ping: %3$.0fms, IP: %4$s</string>
<string name="node_testing">Testing IP: %1$s &#8230;</string>
<string name="node_refresh_wait">Please wait for scan to finish</string>
<string name="node_create_hint">Touch to select or add nodes</string>
<string name="node_pull_hint">Add nodes manually or pull down to scan</string>
<string name="node_scanning">Scanning network&#8230;</string>
<string name="node_nobookmark">Automatically bookmarked best %1$d nodes</string>
<string name="label_test">Test</string><!--note: as in "Test a network connection"-->
<string name="info_nodes_enabled">Node-o-matiC включений, натисніть щоб отримати більше інформації.</string>
<string name="node_height">Останній блок: %1$s</string>
<string name="label_nodes">Вузли</string>
<string name="node_name_hint">Ім\'я вузла (опційно)</string>
<string name="node_address_hint">Ім\'я хоста</string>
<string name="node_port_hint">Порт</string>
<string name="node_user_hint">Ім\'я користувача (опційно)</string>
<string name="node_pass_hint">Пароль (опційно)</string>
<string name="node_host_unresolved">Не вдається підключитися до вузлу</string>
<string name="node_host_empty">Нам це потрібно!</string>
<string name="node_port_numeric">Повинно бути число</string>
<string name="node_port_range">Повинно бути 1&#8211;65535</string>
<string name="node_fab_add">Добавити вузол</string>
<string name="node_refresh_hint">Натисніть, щоб обновити!</string>
<string name="node_test_error">ПОМИЛКА З\'ЄДНАННЯ %1$d</string>
<string name="node_general_error">ПОМИЛКА З\'ЄДНАННЯ</string>
<string name="node_auth_error">ПОМИЛКА АУТЕНТИФІКАЦІЇ</string>
<string name="node_result_label">Результат Тестування:</string>
<string name="node_result">Висота: %1$s (v%2$d), Пінг: %3$.0fms, IP: %4$s</string>
<string name="node_testing">Тестування IP: %1$s &#8230;</string>
<string name="node_refresh_wait">Будь ласка, дочекайтеся закінчення сканування</string>
<string name="node_create_hint">Натисніть, щоб вибрати або додати вузли</string>
<string name="node_pull_hint">Добавте вузли вручну або потягніть вниз для сканування</string>
<string name="node_scanning">Сканування мережі&#8230;</string>
<string name="node_nobookmark">Автоматично відмічені кращі %1$d вузли</string>
<string name="label_test">Провірка</string><!--note: as in "Test a network connection"-->
<string name="backup_success">Backup successful</string>
<string name="backup_success">Резервне копіювання успішне</string>
<string name="send_address_resolve_bip70">Resolving Payment URI&#8230;</string>
<string name="send_address_not_bip70">Could not resolve Payment URI</string>
<string name="send_address_bip70">Resolved Payment URI &#x2714;</string>
<string name="send_address_resolve_bip70">Розміщення URI платежу&#8230;</string>
<string name="send_address_not_bip70">Не вдалося вирішити URI платіж</string>
<string name="send_address_bip70">URI вирішеного платежу &#x2714;</string>
<!-- please verify this means "Receiver" or "Recipient" as in "Receiver in the transaction" -->
<string name="send_address_hint">Receiver</string>
<string name="send_address_hint">Отримувач</string>
<string name="xmrto_error_001">XMR.TO offline - try again later</string>
<string name="xmrto_error_004">BTC amount out of bounds</string>
<string name="xmrto_error_010">Invalid or outdated Payment URL</string>
<string name="xmrto_error_012">Too many requests</string>
<string name="xmrto_error_001">XMR.TO недоступний - спробуйте пізніше</string>
<string name="xmrto_error_004">Сума BTC виходить за допустимі ліміти</string>
<string name="xmrto_error_010">Невірний або застарілий платіжний URL</string>
<string name="xmrto_error_012">Перевищено кількість запитів</string>
<string name="street_sweep_amount">EVERYTHING!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="street_sweep_amount">ВСЕ!</string> <!-- as in: "everything in the account" = "all the money" -->
<string name="menu_ledger_seed">Convert Ledger Seed</string>
<string name="prompt_ledger_seed">Ledger Seed Words</string>
<string name="prompt_ledger_phrase">Ledger Passphrase (optional)</string>
<string name="bad_ledger_seed">Invalid Ledger Seed!</string>
<string name="prompt_ledger_seed_warn">Entering your Ledger Seed here is a major security risk!</string>
<string name="menu_ledger_seed">Конвертувати фразу Ledger</string>
<string name="prompt_ledger_seed">Словесна фраза Ledger</string>
<string name="prompt_ledger_phrase">Пароль Ledger (необов\'язково)</string>
<string name="bad_ledger_seed">Помилка Ledger фрази!</string>
<string name="prompt_ledger_seed_warn">Вводячи сюди Ledger фразу являється серйозною загрозою для вашої безпеки!</string>
<string name="label_restoreheight">Відновити висоту</string> <!-- Restore Height -->
<string name="toast_ledger_start_app">Start Monero App on %1$s</string>
<string name="toast_ledger_start_app">Запуск Monero додатку через %1$s</string>
<string name="menu_rescan">Rescan!</string>
</resources>

View File

@@ -93,7 +93,7 @@ public class XmrToApiCreateOrderTest {
public void createOrder_shouldContainValidBody()
throws InterruptedException {
final String validBody = "{\"btc_amount\":0.1,\"btc_dest_address\":\"19y91nJyzXsLEuR7Nj9pc3o5SeHNc8A9RW\"}";
final String validBody = "{\"amount\":0.1,\"amount_currency\":\"BTC\",\"btc_dest_address\":\"19y91nJyzXsLEuR7Nj9pc3o5SeHNc8A9RW\"}";
xmrToApi.createOrder(0.1, "19y91nJyzXsLEuR7Nj9pc3o5SeHNc8A9RW", mockOrderXmrToCallback);

View File

@@ -122,9 +122,7 @@ public class XmrToApiQueryOrderTest {
final double btcAmount = 0.1;
final String btcDestAddress = "1FhnVJi2V1k4MqXm2nHoEbY5LV7FPai7bb";
final String uuid = "xmrto - efMsiU";
final int btcNumConfirmations = 0;
final int btcNumConfirmationsBeforePurge = 144;
final String btcTransactionId = "";
final String createdAt = "2017-11-17T12:20:02Z";
final String expiresAt = "2017-11-17T12:35:02Z";
final int secondsTillTimeout = 882;
@@ -133,12 +131,7 @@ public class XmrToApiQueryOrderTest {
final int xmrNumConfirmationsRemaining = -1;
final double xmrPriceBtc = 0.0154703;
final String xmrReceivingSubaddress = "83BGzCTthheE2KxNTBPnPJjJUthYPfDfCf3ENSVQcpga8RYSxNz9qCz1qp9MLye9euMjckGi11cRdeVGqsVqTLgH8w5fJ1D";
final String xmrReceivingAddress = "44TVPcCSHebEQp4LnapPkhb2pondb2Ed7GJJLc6TkKwtSyumUnQ6QzkCCkojZycH2MRfLcujCM7QR1gdnRULRraV4UpB5n4";
final String xmrReceivingIntegratedAddress = "4EAAQR1vtv7EQp4LnapPkhb2pondb2Ed7GJJLc6TkKwtSyumUnQ6QzkCCkojZycH2MRfLcujCM7QR1gdnRULRraV6B5rRtHLeXGQSECXy9";
final int xmrRecommendedMixin = 5;
final double xmrRequiredAmount = 6.464;
final String xmrRequiredPaymentIdLong = "56beabc3ca6d52a78c9a44cefebeb870054d8b367cc7065bff1bdb553caca85c";
final String xmrRequiredPaymentIdShort = "eeb6086436b267cf";
MockResponse jsonMockResponse = new MockResponse().setBody(
createMockQueryOrderResponse(
@@ -146,9 +139,7 @@ public class XmrToApiQueryOrderTest {
btcAmount,
btcDestAddress,
uuid,
btcNumConfirmations,
btcNumConfirmationsBeforePurge,
btcTransactionId,
createdAt,
expiresAt,
secondsTillTimeout,
@@ -157,12 +148,7 @@ public class XmrToApiQueryOrderTest {
xmrNumConfirmationsRemaining,
xmrPriceBtc,
xmrReceivingSubaddress,
xmrReceivingAddress,
xmrReceivingIntegratedAddress,
xmrRecommendedMixin,
xmrRequiredAmount,
xmrRequiredPaymentIdLong,
xmrRequiredPaymentIdShort));
xmrRecommendedMixin));
mockWebServer.enqueue(jsonMockResponse);
xmrToApi.queryOrderStatus(uuid, new XmrToCallback<QueryOrderStatus>() {
@@ -172,9 +158,7 @@ public class XmrToApiQueryOrderTest {
waiter.assertEquals(orderStatus.getBtcAmount(), btcAmount);
waiter.assertEquals(orderStatus.getBtcDestAddress(), btcDestAddress);
waiter.assertEquals(orderStatus.getUuid(), uuid);
waiter.assertEquals(orderStatus.getBtcNumConfirmations(), btcNumConfirmations);
waiter.assertEquals(orderStatus.getBtcNumConfirmationsBeforePurge(), btcNumConfirmationsBeforePurge);
waiter.assertEquals(orderStatus.getBtcTransactionId(), btcTransactionId);
waiter.assertEquals(orderStatus.getBtcNumConfirmationsThreshold(), btcNumConfirmationsBeforePurge);
try {
waiter.assertEquals(orderStatus.getCreatedAt(), ParseDate(createdAt));
waiter.assertEquals(orderStatus.getExpiresAt(), ParseDate(expiresAt));
@@ -182,17 +166,12 @@ public class XmrToApiQueryOrderTest {
waiter.fail(ex);
}
waiter.assertEquals(orderStatus.getSecondsTillTimeout(), secondsTillTimeout);
waiter.assertEquals(orderStatus.getXmrAmountTotal(), xmrAmountTotal);
waiter.assertEquals(orderStatus.getXmrAmountRemaining(), xmrAmountRemaining);
waiter.assertEquals(orderStatus.getXmrNumConfirmationsRemaining(), xmrNumConfirmationsRemaining);
waiter.assertEquals(orderStatus.getXmrPriceBtc(), xmrPriceBtc);
waiter.assertEquals(orderStatus.getXmrReceivingSubaddress(), xmrReceivingSubaddress);
waiter.assertEquals(orderStatus.getXmrReceivingAddress(), xmrReceivingAddress);
waiter.assertEquals(orderStatus.getXmrReceivingIntegratedAddress(), xmrReceivingIntegratedAddress);
waiter.assertEquals(orderStatus.getXmrRecommendedMixin(), xmrRecommendedMixin);
waiter.assertEquals(orderStatus.getXmrRequiredAmount(), xmrRequiredAmount);
waiter.assertEquals(orderStatus.getXmrRequiredPaymentIdLong(), xmrRequiredPaymentIdLong);
waiter.assertEquals(orderStatus.getXmrRequiredPaymentIdShort(), xmrRequiredPaymentIdShort);
waiter.assertEquals(orderStatus.getIncomingAmountTotal(), xmrAmountTotal);
waiter.assertEquals(orderStatus.getRemainingAmountIncoming(), xmrAmountRemaining);
waiter.assertEquals(orderStatus.getIncomingNumConfirmationsRemaining(), xmrNumConfirmationsRemaining);
waiter.assertEquals(orderStatus.getIncomingPriceBtc(), xmrPriceBtc);
waiter.assertEquals(orderStatus.getReceivingSubaddress(), xmrReceivingSubaddress);
waiter.assertEquals(orderStatus.getRecommendedMixin(), xmrRecommendedMixin);
waiter.resume();
}
@@ -260,9 +239,7 @@ public class XmrToApiQueryOrderTest {
final double btcAmount,
final String btcDestAddress,
final String uuid,
final int btcNumConfirmations,
final int btcNumConfirmationsBeforePurge,
final String btcTransactionId,
final String createdAt,
final String expiresAt,
final int secondsTillTimeout,
@@ -271,35 +248,23 @@ public class XmrToApiQueryOrderTest {
final int xmrNumConfirmationsRemaining,
final double xmrPriceBtc,
final String xmrReceivingSubaddress,
final String xmrReceivingAddress,
final String xmrReceivingIntegratedAddress,
final int xmrRecommendedMixin,
final double xmrRequiredAmount,
final String xmrRequiredPaymentIdLong,
final String xmrRequiredPaymentIdShort
final int xmrRecommendedMixin
) {
return "{\n" +
" \"xmr_price_btc\": \"" + xmrPriceBtc + "\",\n" +
" \"incoming_price_btc\": \"" + xmrPriceBtc + "\",\n" +
" \"uuid\":\"" + uuid + "\",\n" +
" \"state\":\"" + state + "\",\n" +
" \"btc_amount\":\"" + btcAmount + "\",\n" +
" \"btc_dest_address\":\"" + btcDestAddress + "\",\n" +
" \"xmr_required_amount\":\"" + xmrRequiredAmount + "\",\n" +
" \"xmr_receiving_subaddress\":\"" + xmrReceivingSubaddress + "\",\n" +
" \"xmr_receiving_address\":\"" + xmrReceivingAddress + "\",\n" +
" \"xmr_receiving_integrated_address\":\"" + xmrReceivingIntegratedAddress + "\",\n" +
" \"xmr_required_payment_id_long\":\"" + xmrRequiredPaymentIdLong + "\",\n" +
" \"xmr_required_payment_id_short\":\"" + xmrRequiredPaymentIdShort + "\",\n" +
" \"receiving_subaddress\":\"" + xmrReceivingSubaddress + "\",\n" +
" \"created_at\":\"" + createdAt + "\",\n" +
" \"expires_at\":\"" + expiresAt + "\",\n" +
" \"seconds_till_timeout\":\"" + secondsTillTimeout + "\",\n" +
" \"xmr_amount_total\":\"" + xmrAmountTotal + "\",\n" +
" \"xmr_amount_remaining\":\"" + xmrAmountRemaining + "\",\n" +
" \"xmr_num_confirmations_remaining\":\"" + xmrNumConfirmationsRemaining + "\",\n" +
" \"xmr_recommended_mixin\":\"" + xmrRecommendedMixin + "\",\n" +
" \"btc_num_confirmations_before_purge\":\"" + btcNumConfirmationsBeforePurge + "\",\n" +
" \"btc_num_confirmations\":\"" + btcNumConfirmations + "\",\n" +
" \"btc_transaction_id\":\"" + btcTransactionId + "\""
" \"incoming_amount_total\":\"" + xmrAmountTotal + "\",\n" +
" \"remaining_amount_incoming\":\"" + xmrAmountRemaining + "\",\n" +
" \"incoming_num_confirmations_remaining\":\"" + xmrNumConfirmationsRemaining + "\",\n" +
" \"recommended_mixin\":\"" + xmrRecommendedMixin + "\",\n" +
" \"btc_num_confirmations_threshold\":\"" + btcNumConfirmationsBeforePurge + "\",\n"
+ "}";
}
}

View File

@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.android.tools.build:gradle:4.0.0'
}
}

View File

@@ -15,6 +15,3 @@ org.gradle.jvmargs=-Xmx2048m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# keep build timestamps in APK
android.keepTimestampsInApk = true

View File

@@ -1,6 +1,6 @@
#Sat Feb 29 10:39:20 CET 2020
#Fri Jun 05 08:28:04 CEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="xmrwallet" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<module external.linked.project.id="xmrwallet" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>