0.5.6.1: Remove retry system in connection handling, reword "View outputs" to "View coins", reformat code

This commit is contained in:
pokkst 2023-12-09 21:12:06 -06:00
parent ae4e7cb65c
commit 5733197cb0
No known key found for this signature in database
GPG key ID: EC4FAAA66859FAA4
49 changed files with 1136 additions and 994 deletions

View file

@ -10,8 +10,8 @@ android {
applicationId "net.mynero.wallet" applicationId "net.mynero.wallet"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 34 targetSdkVersion 34
versionCode 50600 versionCode 50601
versionName "0.5.6 'Fluorine Fermi'" versionName "0.5.6.1 'Fluorine Fermi'"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild { externalNativeBuild {
cmake { cmake {

View file

@ -235,7 +235,7 @@ std::vector<std::string> java2cpp(JNIEnv *env, jobject arrayList) {
jlong getElement(JNIEnv *env, jlongArray arr_j, int element) { jlong getElement(JNIEnv *env, jlongArray arr_j, int element) {
jlong result; jlong result;
env->GetLongArrayRegion(arr_j, element,1, &result); env->GetLongArrayRegion(arr_j, element, 1, &result);
return result; return result;
} }
@ -326,9 +326,9 @@ extern "C"
/**********************************/ /**********************************/
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_createWalletJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_createWalletJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring path, jstring password,
jstring language, jstring language,
jint networkType) { jint networkType) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
const char *_language = env->GetStringUTFChars(language, nullptr); const char *_language = env->GetStringUTFChars(language, nullptr);
@ -349,9 +349,10 @@ Java_net_mynero_wallet_model_WalletManager_createWalletJ(JNIEnv *env, jobject in
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_createWalletPolyseedJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_createWalletPolyseedJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring passpharse, jstring path, jstring password,
jstring language, jstring passpharse,
jint networkType) { jstring language,
jint networkType) {
std::string seed_words; std::string seed_words;
std::string err; std::string err;
bool _polyseedCreate = Monero::Wallet::createPolyseed(seed_words, err); bool _polyseedCreate = Monero::Wallet::createPolyseed(seed_words, err);
@ -384,8 +385,8 @@ Java_net_mynero_wallet_model_WalletManager_createWalletPolyseedJ(JNIEnv *env, jo
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_openWalletJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_openWalletJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring path, jstring password,
jint networkType) { jint networkType) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType); Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
@ -403,10 +404,10 @@ Java_net_mynero_wallet_model_WalletManager_openWalletJ(JNIEnv *env, jobject inst
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring path, jstring password,
jstring mnemonic, jstring offset, jstring mnemonic, jstring offset,
jint networkType, jint networkType,
jlong restoreHeight) { jlong restoreHeight) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
const char *_mnemonic = env->GetStringUTFChars(mnemonic, nullptr); const char *_mnemonic = env->GetStringUTFChars(mnemonic, nullptr);
@ -432,9 +433,9 @@ Java_net_mynero_wallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobject
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_recoveryWalletPolyseedJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_recoveryWalletPolyseedJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring path, jstring password,
jstring mnemonic, jstring offset, jstring mnemonic, jstring offset,
jint networkType) { jint networkType) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
const char *_mnemonic = env->GetStringUTFChars(mnemonic, nullptr); const char *_mnemonic = env->GetStringUTFChars(mnemonic, nullptr);
@ -459,13 +460,13 @@ Java_net_mynero_wallet_model_WalletManager_recoveryWalletPolyseedJ(JNIEnv *env,
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_createWalletFromKeysJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_createWalletFromKeysJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring path, jstring password,
jstring language, jstring language,
jint networkType, jint networkType,
jlong restoreHeight, jlong restoreHeight,
jstring addressString, jstring addressString,
jstring viewKeyString, jstring viewKeyString,
jstring spendKeyString) { jstring spendKeyString) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
const char *_language = env->GetStringUTFChars(language, nullptr); const char *_language = env->GetStringUTFChars(language, nullptr);
@ -499,12 +500,12 @@ Java_net_mynero_wallet_model_WalletManager_createWalletFromKeysJ(JNIEnv *env, jo
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_createWalletFromDeviceJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_createWalletFromDeviceJ(JNIEnv *env, jobject instance,
jstring path, jstring path,
jstring password, jstring password,
jint networkType, jint networkType,
jstring deviceName, jstring deviceName,
jlong restoreHeight, jlong restoreHeight,
jstring subaddressLookahead) { jstring subaddressLookahead) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType); Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
@ -529,7 +530,7 @@ Java_net_mynero_wallet_model_WalletManager_createWalletFromDeviceJ(JNIEnv *env,
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_WalletManager_walletExists(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_walletExists(JNIEnv *env, jobject instance,
jstring path) { jstring path) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
bool exists = bool exists =
Monero::WalletManagerFactory::getWalletManager()->walletExists(std::string(_path)); Monero::WalletManagerFactory::getWalletManager()->walletExists(std::string(_path));
@ -539,9 +540,9 @@ Java_net_mynero_wallet_model_WalletManager_walletExists(JNIEnv *env, jobject ins
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_WalletManager_verifyWalletPassword(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_verifyWalletPassword(JNIEnv *env, jobject instance,
jstring keys_file_name, jstring keys_file_name,
jstring password, jstring password,
jboolean watch_only) { jboolean watch_only) {
const char *_keys_file_name = env->GetStringUTFChars(keys_file_name, nullptr); const char *_keys_file_name = env->GetStringUTFChars(keys_file_name, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
bool passwordOk = bool passwordOk =
@ -555,8 +556,8 @@ Java_net_mynero_wallet_model_WalletManager_verifyWalletPassword(JNIEnv *env, job
//virtual int queryWalletHardware(const std::string &keys_file_name, const std::string &password) const = 0; //virtual int queryWalletHardware(const std::string &keys_file_name, const std::string &password) const = 0;
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_net_mynero_wallet_model_WalletManager_queryWalletDeviceJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_queryWalletDeviceJ(JNIEnv *env, jobject instance,
jstring keys_file_name, jstring keys_file_name,
jstring password) { jstring password) {
const char *_keys_file_name = env->GetStringUTFChars(keys_file_name, nullptr); const char *_keys_file_name = env->GetStringUTFChars(keys_file_name, nullptr);
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
Monero::Wallet::Device device_type; Monero::Wallet::Device device_type;
@ -572,7 +573,7 @@ Java_net_mynero_wallet_model_WalletManager_queryWalletDeviceJ(JNIEnv *env, jobje
JNIEXPORT jobject JNICALL JNIEXPORT jobject JNICALL
Java_net_mynero_wallet_model_WalletManager_findWallets(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_findWallets(JNIEnv *env, jobject instance,
jstring path) { jstring path) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
std::vector<std::string> walletPaths = std::vector<std::string> walletPaths =
Monero::WalletManagerFactory::getWalletManager()->findWallets(std::string(_path)); Monero::WalletManagerFactory::getWalletManager()->findWallets(std::string(_path));
@ -584,7 +585,7 @@ Java_net_mynero_wallet_model_WalletManager_findWallets(JNIEnv *env, jobject inst
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_setDaemonAddressJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_setDaemonAddressJ(JNIEnv *env, jobject instance,
jstring address) { jstring address) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
Monero::WalletManagerFactory::getWalletManager()->setDaemonAddress(std::string(_address)); Monero::WalletManagerFactory::getWalletManager()->setDaemonAddress(std::string(_address));
env->ReleaseStringUTFChars(address, _address); env->ReleaseStringUTFChars(address, _address);
@ -593,7 +594,7 @@ Java_net_mynero_wallet_model_WalletManager_setDaemonAddressJ(JNIEnv *env, jobjec
// returns whether the daemon can be reached, and its version number // returns whether the daemon can be reached, and its version number
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_net_mynero_wallet_model_WalletManager_getDaemonVersion(JNIEnv *env, Java_net_mynero_wallet_model_WalletManager_getDaemonVersion(JNIEnv *env,
jobject instance) { jobject instance) {
uint32_t version; uint32_t version;
bool isConnected = bool isConnected =
Monero::WalletManagerFactory::getWalletManager()->connected(&version); Monero::WalletManagerFactory::getWalletManager()->connected(&version);
@ -608,7 +609,7 @@ Java_net_mynero_wallet_model_WalletManager_getBlockchainHeight(JNIEnv *env, jobj
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_getBlockchainTargetHeight(JNIEnv *env, Java_net_mynero_wallet_model_WalletManager_getBlockchainTargetHeight(JNIEnv *env,
jobject instance) { jobject instance) {
return Monero::WalletManagerFactory::getWalletManager()->blockchainTargetHeight(); return Monero::WalletManagerFactory::getWalletManager()->blockchainTargetHeight();
} }
@ -634,9 +635,9 @@ Java_net_mynero_wallet_model_WalletManager_isMining(JNIEnv *env, jobject instanc
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_WalletManager_startMining(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_startMining(JNIEnv *env, jobject instance,
jstring address, jstring address,
jboolean background_mining, jboolean background_mining,
jboolean ignore_battery) { jboolean ignore_battery) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
bool success = bool success =
Monero::WalletManagerFactory::getWalletManager()->startMining(std::string(_address), Monero::WalletManagerFactory::getWalletManager()->startMining(std::string(_address),
@ -653,8 +654,8 @@ Java_net_mynero_wallet_model_WalletManager_stopMining(JNIEnv *env, jobject insta
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_WalletManager_resolveOpenAlias(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_resolveOpenAlias(JNIEnv *env, jobject instance,
jstring address, jstring address,
jboolean dnssec_valid) { jboolean dnssec_valid) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
bool _dnssec_valid = (bool) dnssec_valid; bool _dnssec_valid = (bool) dnssec_valid;
std::string resolvedAlias = std::string resolvedAlias =
@ -667,7 +668,7 @@ Java_net_mynero_wallet_model_WalletManager_resolveOpenAlias(JNIEnv *env, jobject
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_WalletManager_setProxyJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_setProxyJ(JNIEnv *env, jobject instance,
jstring address) { jstring address) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
bool rc = bool rc =
Monero::WalletManagerFactory::getWalletManager()->setProxy(std::string(_address)); Monero::WalletManagerFactory::getWalletManager()->setProxy(std::string(_address));
@ -680,7 +681,7 @@ Java_net_mynero_wallet_model_WalletManager_setProxyJ(JNIEnv *env, jobject instan
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_WalletManager_closeJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_WalletManager_closeJ(JNIEnv *env, jobject instance,
jobject walletInstance) { jobject walletInstance) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, walletInstance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, walletInstance);
bool closeSuccess = Monero::WalletManagerFactory::getWalletManager()->closeWallet(wallet, bool closeSuccess = Monero::WalletManagerFactory::getWalletManager()->closeWallet(wallet,
false); false);
@ -728,7 +729,8 @@ Java_net_mynero_wallet_model_Wallet_getSeed(JNIEnv *env, jobject instance, jstri
} }
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getLegacySeed(JNIEnv *env, jobject instance, jstring seedOffset) { Java_net_mynero_wallet_model_Wallet_getLegacySeed(JNIEnv *env, jobject instance,
jstring seedOffset) {
const char *_seedOffset = env->GetStringUTFChars(seedOffset, nullptr); const char *_seedOffset = env->GetStringUTFChars(seedOffset, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
@ -743,7 +745,8 @@ Java_net_mynero_wallet_model_Wallet_getLegacySeed(JNIEnv *env, jobject instance,
} }
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_isPolyseedSupported(JNIEnv *env, jobject instance, jstring seedOffset) { Java_net_mynero_wallet_model_Wallet_isPolyseedSupported(JNIEnv *env, jobject instance,
jstring seedOffset) {
const char *_seedOffset = env->GetStringUTFChars(seedOffset, nullptr); const char *_seedOffset = env->GetStringUTFChars(seedOffset, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
@ -764,7 +767,7 @@ Java_net_mynero_wallet_model_Wallet_getSeedLanguage(JNIEnv *env, jobject instanc
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_setSeedLanguage(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setSeedLanguage(JNIEnv *env, jobject instance,
jstring language) { jstring language) {
const char *_language = env->GetStringUTFChars(language, nullptr); const char *_language = env->GetStringUTFChars(language, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
wallet->setSeedLanguage(std::string(_language)); wallet->setSeedLanguage(std::string(_language));
@ -800,7 +803,7 @@ Java_net_mynero_wallet_model_Wallet_statusWithErrorString(JNIEnv *env, jobject i
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_setPassword(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setPassword(JNIEnv *env, jobject instance,
jstring password) { jstring password) {
const char *_password = env->GetStringUTFChars(password, nullptr); const char *_password = env->GetStringUTFChars(password, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
bool success = wallet->setPassword(std::string(_password)); bool success = wallet->setPassword(std::string(_password));
@ -810,8 +813,8 @@ Java_net_mynero_wallet_model_Wallet_setPassword(JNIEnv *env, jobject instance,
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getAddressJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getAddressJ(JNIEnv *env, jobject instance,
jint accountIndex, jint accountIndex,
jint addressIndex) { jint addressIndex) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return env->NewStringUTF( return env->NewStringUTF(
wallet->address((uint32_t) accountIndex, (uint32_t) addressIndex).c_str()); wallet->address((uint32_t) accountIndex, (uint32_t) addressIndex).c_str());
@ -834,7 +837,7 @@ Java_net_mynero_wallet_model_Wallet_nettype(JNIEnv *env, jobject instance) {
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getIntegratedAddress(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getIntegratedAddress(JNIEnv *env, jobject instance,
jstring payment_id) { jstring payment_id) {
const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr); const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
std::string address = wallet->integratedAddress(_payment_id); std::string address = wallet->integratedAddress(_payment_id);
@ -856,7 +859,7 @@ Java_net_mynero_wallet_model_Wallet_getSecretSpendKey(JNIEnv *env, jobject insta
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_store(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_store(JNIEnv *env, jobject instance,
jstring path) { jstring path) {
const char *_path = env->GetStringUTFChars(path, nullptr); const char *_path = env->GetStringUTFChars(path, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
bool success = wallet->store(std::string(_path)); bool success = wallet->store(std::string(_path));
@ -877,10 +880,10 @@ Java_net_mynero_wallet_model_Wallet_getFilename(JNIEnv *env, jobject instance) {
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_initJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_initJ(JNIEnv *env, jobject instance,
jstring daemon_address, jstring daemon_address,
jlong upper_transaction_size_limit, jlong upper_transaction_size_limit,
jstring daemon_username, jstring daemon_password, jstring daemon_username, jstring daemon_password,
jstring proxy) { jstring proxy) {
const char *_daemon_address = env->GetStringUTFChars(daemon_address, nullptr); const char *_daemon_address = env->GetStringUTFChars(daemon_address, nullptr);
const char *_daemon_username = env->GetStringUTFChars(daemon_username, nullptr); const char *_daemon_username = env->GetStringUTFChars(daemon_username, nullptr);
const char *_daemon_password = env->GetStringUTFChars(daemon_password, nullptr); const char *_daemon_password = env->GetStringUTFChars(daemon_password, nullptr);
@ -901,7 +904,7 @@ Java_net_mynero_wallet_model_Wallet_initJ(JNIEnv *env, jobject instance,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_setRestoreHeight(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setRestoreHeight(JNIEnv *env, jobject instance,
jlong height) { jlong height) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
wallet->setRefreshFromBlockHeight((uint64_t) height); wallet->setRefreshFromBlockHeight((uint64_t) height);
} }
@ -921,7 +924,8 @@ Java_net_mynero_wallet_model_Wallet_getConnectionStatusJ(JNIEnv *env, jobject in
return wallet->connected(); return wallet->connected();
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_setTrustedDaemonJ(JNIEnv *env, jobject instance, jboolean trusted) { Java_net_mynero_wallet_model_Wallet_setTrustedDaemonJ(JNIEnv *env, jobject instance,
jboolean trusted) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
if (trusted) { if (trusted) {
wallet->setTrustedDaemon(true); wallet->setTrustedDaemon(true);
@ -939,7 +943,7 @@ Java_net_mynero_wallet_model_Wallet_isTrustedDaemonJ(JNIEnv *env, jobject instan
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_setProxyJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setProxyJ(JNIEnv *env, jobject instance,
jstring address) { jstring address) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
bool rc = wallet->setProxy(std::string(_address)); bool rc = wallet->setProxy(std::string(_address));
@ -949,7 +953,7 @@ Java_net_mynero_wallet_model_Wallet_setProxyJ(JNIEnv *env, jobject instance,
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getBalance(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getBalance(JNIEnv *env, jobject instance,
jint accountIndex) { jint accountIndex) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return wallet->balance((uint32_t) accountIndex); return wallet->balance((uint32_t) accountIndex);
} }
@ -962,7 +966,7 @@ Java_net_mynero_wallet_model_Wallet_getBalanceAll(JNIEnv *env, jobject instance)
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getUnlockedBalance(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getUnlockedBalance(JNIEnv *env, jobject instance,
jint accountIndex) { jint accountIndex) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return wallet->unlockedBalance((uint32_t) accountIndex); return wallet->unlockedBalance((uint32_t) accountIndex);
} }
@ -987,7 +991,7 @@ Java_net_mynero_wallet_model_Wallet_getBlockChainHeightJ(JNIEnv *env, jobject in
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getApproximateBlockChainHeight(JNIEnv *env, Java_net_mynero_wallet_model_Wallet_getApproximateBlockChainHeight(JNIEnv *env,
jobject instance) { jobject instance) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return wallet->approximateBlockChainHeight(); return wallet->approximateBlockChainHeight();
} }
@ -1000,7 +1004,7 @@ Java_net_mynero_wallet_model_Wallet_getDaemonBlockChainHeightJ(JNIEnv *env, jobj
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getDaemonBlockChainTargetHeight(JNIEnv *env, Java_net_mynero_wallet_model_Wallet_getDaemonBlockChainTargetHeight(JNIEnv *env,
jobject instance) { jobject instance) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return wallet->daemonBlockChainTargetHeight(); return wallet->daemonBlockChainTargetHeight();
} }
@ -1020,13 +1024,13 @@ Java_net_mynero_wallet_model_Wallet_getDeviceTypeJ(JNIEnv *env, jobject instance
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getDisplayAmount(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_getDisplayAmount(JNIEnv *env, jclass clazz,
jlong amount) { jlong amount) {
return env->NewStringUTF(Monero::Wallet::displayAmount(amount).c_str()); return env->NewStringUTF(Monero::Wallet::displayAmount(amount).c_str());
} }
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getAmountFromString(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_getAmountFromString(JNIEnv *env, jclass clazz,
jstring amount) { jstring amount) {
const char *_amount = env->GetStringUTFChars(amount, nullptr); const char *_amount = env->GetStringUTFChars(amount, nullptr);
uint64_t x = Monero::Wallet::amountFromString(_amount); uint64_t x = Monero::Wallet::amountFromString(_amount);
env->ReleaseStringUTFChars(amount, _amount); env->ReleaseStringUTFChars(amount, _amount);
@ -1035,7 +1039,7 @@ Java_net_mynero_wallet_model_Wallet_getAmountFromString(JNIEnv *env, jclass claz
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_getAmountFromDouble(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_getAmountFromDouble(JNIEnv *env, jclass clazz,
jdouble amount) { jdouble amount) {
return Monero::Wallet::amountFromDouble(amount); return Monero::Wallet::amountFromDouble(amount);
} }
@ -1046,7 +1050,7 @@ Java_net_mynero_wallet_model_Wallet_generatePaymentId(JNIEnv *env, jclass clazz)
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_isPaymentIdValid(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_isPaymentIdValid(JNIEnv *env, jclass clazz,
jstring payment_id) { jstring payment_id) {
const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr); const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr);
bool isValid = Monero::Wallet::paymentIdValid(_payment_id); bool isValid = Monero::Wallet::paymentIdValid(_payment_id);
env->ReleaseStringUTFChars(payment_id, _payment_id); env->ReleaseStringUTFChars(payment_id, _payment_id);
@ -1055,7 +1059,7 @@ Java_net_mynero_wallet_model_Wallet_isPaymentIdValid(JNIEnv *env, jclass clazz,
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_isAddressValid(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_isAddressValid(JNIEnv *env, jclass clazz,
jstring address, jint networkType) { jstring address, jint networkType) {
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType); Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
bool isValid = Monero::Wallet::addressValid(_address, _networkType); bool isValid = Monero::Wallet::addressValid(_address, _networkType);
@ -1065,8 +1069,8 @@ Java_net_mynero_wallet_model_Wallet_isAddressValid(JNIEnv *env, jclass clazz,
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getPaymentIdFromAddress(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_Wallet_getPaymentIdFromAddress(JNIEnv *env, jclass clazz,
jstring address, jstring address,
jint networkType) { jint networkType) {
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType); Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
const char *_address = env->GetStringUTFChars(address, nullptr); const char *_address = env->GetStringUTFChars(address, nullptr);
std::string payment_id = Monero::Wallet::paymentIdFromAddress(_address, _networkType); std::string payment_id = Monero::Wallet::paymentIdFromAddress(_address, _networkType);
@ -1118,10 +1122,10 @@ Java_net_mynero_wallet_model_Wallet_rescanBlockchainAsyncJ(JNIEnv *env, jobject
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject instance,
jstring dst_addr, jstring payment_id, jstring dst_addr, jstring payment_id,
jlong amount, jint mixin_count, jlong amount, jint mixin_count,
jint priority, jint priority,
jint accountIndex, jobject key_images) { jint accountIndex, jobject key_images) {
const std::set<std::string> _key_images = java2cpp_set(env, key_images); const std::set<std::string> _key_images = java2cpp_set(env, key_images);
const char *_dst_addr = env->GetStringUTFChars(dst_addr, nullptr); const char *_dst_addr = env->GetStringUTFChars(dst_addr, nullptr);
const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr); const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr);
@ -1132,7 +1136,8 @@ Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject inst
Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id, Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id,
amount, (uint32_t) mixin_count, amount, (uint32_t) mixin_count,
_priority, _priority,
(uint32_t) accountIndex, {}, _key_images); (uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(dst_addr, _dst_addr); env->ReleaseStringUTFChars(dst_addr, _dst_addr);
env->ReleaseStringUTFChars(payment_id, _payment_id); env->ReleaseStringUTFChars(payment_id, _payment_id);
@ -1141,10 +1146,12 @@ Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject inst
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobject instance,
jobject dst_addrs, jstring payment_id, jobject dst_addrs,
jlongArray amounts, jint mixin_count, jstring payment_id,
jint priority, jlongArray amounts, jint mixin_count,
jint accountIndex, jobject key_images) { jint priority,
jint accountIndex,
jobject key_images) {
const std::set<std::string> _key_images = java2cpp_set(env, key_images); const std::set<std::string> _key_images = java2cpp_set(env, key_images);
const std::vector<std::string> _dst_addrs = java2cpp(env, dst_addrs); const std::vector<std::string> _dst_addrs = java2cpp(env, dst_addrs);
const std::vector<std::uint64_t> _dst_amounts = java2cpp_long(env, amounts); const std::vector<std::uint64_t> _dst_amounts = java2cpp_long(env, amounts);
@ -1154,9 +1161,11 @@ Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobj
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
Monero::PendingTransaction *tx = wallet->createTransactionMultDest(_dst_addrs, _payment_id, Monero::PendingTransaction *tx = wallet->createTransactionMultDest(_dst_addrs, _payment_id,
_dst_amounts, (uint32_t) mixin_count, _dst_amounts,
_priority, (uint32_t) mixin_count,
(uint32_t) accountIndex, {}, _key_images); _priority,
(uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(payment_id, _payment_id); env->ReleaseStringUTFChars(payment_id, _payment_id);
return reinterpret_cast<jlong>(tx); return reinterpret_cast<jlong>(tx);
@ -1165,7 +1174,8 @@ Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobj
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_estimateTransactionFee(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_estimateTransactionFee(JNIEnv *env, jobject instance,
jobject destinations, jint priority) { jobject destinations, jint priority) {
std::vector<std::pair<std::string, uint64_t>> dest_vector = java2cpp_pairvector(env, destinations); std::vector<std::pair<std::string, uint64_t>> dest_vector = java2cpp_pairvector(env,
destinations);
Monero::PendingTransaction::Priority _priority = static_cast<Monero::PendingTransaction::Priority>(priority); Monero::PendingTransaction::Priority _priority = static_cast<Monero::PendingTransaction::Priority>(priority);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
uint64_t fee = wallet->estimateTransactionFee(dest_vector, _priority); uint64_t fee = wallet->estimateTransactionFee(dest_vector, _priority);
@ -1174,10 +1184,10 @@ Java_net_mynero_wallet_model_Wallet_estimateTransactionFee(JNIEnv *env, jobject
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_createSweepTransaction(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_createSweepTransaction(JNIEnv *env, jobject instance,
jstring dst_addr, jstring payment_id, jstring dst_addr, jstring payment_id,
jint mixin_count, jint mixin_count,
jint priority, jint priority,
jint accountIndex, jobject key_images) { jint accountIndex, jobject key_images) {
const std::set<std::string> _key_images = java2cpp_set(env, key_images); const std::set<std::string> _key_images = java2cpp_set(env, key_images);
const char *_dst_addr = env->GetStringUTFChars(dst_addr, nullptr); const char *_dst_addr = env->GetStringUTFChars(dst_addr, nullptr);
const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr); const char *_payment_id = env->GetStringUTFChars(payment_id, nullptr);
@ -1190,7 +1200,8 @@ Java_net_mynero_wallet_model_Wallet_createSweepTransaction(JNIEnv *env, jobject
Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id, Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id,
empty, (uint32_t) mixin_count, empty, (uint32_t) mixin_count,
_priority, _priority,
(uint32_t) accountIndex, {}, _key_images); (uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(dst_addr, _dst_addr); env->ReleaseStringUTFChars(dst_addr, _dst_addr);
env->ReleaseStringUTFChars(payment_id, _payment_id); env->ReleaseStringUTFChars(payment_id, _payment_id);
@ -1199,7 +1210,7 @@ Java_net_mynero_wallet_model_Wallet_createSweepTransaction(JNIEnv *env, jobject
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_createSweepUnmixableTransactionJ(JNIEnv *env, Java_net_mynero_wallet_model_Wallet_createSweepUnmixableTransactionJ(JNIEnv *env,
jobject instance) { jobject instance) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
Monero::PendingTransaction *tx = wallet->createSweepUnmixableTransaction(); Monero::PendingTransaction *tx = wallet->createSweepUnmixableTransaction();
return reinterpret_cast<jlong>(tx); return reinterpret_cast<jlong>(tx);
@ -1210,7 +1221,7 @@ Java_net_mynero_wallet_model_Wallet_createSweepUnmixableTransactionJ(JNIEnv *env
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_disposeTransaction(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_disposeTransaction(JNIEnv *env, jobject instance,
jobject pendingTransaction) { jobject pendingTransaction) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
Monero::PendingTransaction *_pendingTransaction = Monero::PendingTransaction *_pendingTransaction =
getHandle<Monero::PendingTransaction>(env, pendingTransaction); getHandle<Monero::PendingTransaction>(env, pendingTransaction);
@ -1281,7 +1292,8 @@ Java_net_mynero_wallet_model_Coins_refreshJ(JNIEnv *env, jobject instance) {
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Coins_setFrozen(JNIEnv *env, jobject instance, jstring publicKey, jboolean frozen) { Java_net_mynero_wallet_model_Coins_setFrozen(JNIEnv *env, jobject instance, jstring publicKey,
jboolean frozen) {
Monero::Coins *coins = getHandle<Monero::Coins>(env, instance); Monero::Coins *coins = getHandle<Monero::Coins>(env, instance);
const char *_publicKey = env->GetStringUTFChars(publicKey, nullptr); const char *_publicKey = env->GetStringUTFChars(publicKey, nullptr);
if (frozen) { if (frozen) {
@ -1303,7 +1315,7 @@ Java_net_mynero_wallet_model_Wallet_getHistoryJ(JNIEnv *env, jobject instance) {
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_setListenerJ(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setListenerJ(JNIEnv *env, jobject instance,
jobject javaListener) { jobject javaListener) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
wallet->setListener(nullptr); // clear old listener wallet->setListener(nullptr); // clear old listener
// delete old listener // delete old listener
@ -1337,7 +1349,7 @@ Java_net_mynero_wallet_model_Wallet_setDefaultMixin(JNIEnv *env, jobject instanc
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_Wallet_setUserNote(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setUserNote(JNIEnv *env, jobject instance,
jstring txid, jstring note) { jstring txid, jstring note) {
const char *_txid = env->GetStringUTFChars(txid, nullptr); const char *_txid = env->GetStringUTFChars(txid, nullptr);
const char *_note = env->GetStringUTFChars(note, nullptr); const char *_note = env->GetStringUTFChars(note, nullptr);
@ -1354,7 +1366,7 @@ Java_net_mynero_wallet_model_Wallet_setUserNote(JNIEnv *env, jobject instance,
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getUserNote(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getUserNote(JNIEnv *env, jobject instance,
jstring txid) { jstring txid) {
const char *_txid = env->GetStringUTFChars(txid, nullptr); const char *_txid = env->GetStringUTFChars(txid, nullptr);
@ -1368,7 +1380,7 @@ Java_net_mynero_wallet_model_Wallet_getUserNote(JNIEnv *env, jobject instance,
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getTxKey(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getTxKey(JNIEnv *env, jobject instance,
jstring txid) { jstring txid) {
const char *_txid = env->GetStringUTFChars(txid, nullptr); const char *_txid = env->GetStringUTFChars(txid, nullptr);
@ -1383,7 +1395,7 @@ Java_net_mynero_wallet_model_Wallet_getTxKey(JNIEnv *env, jobject instance,
//virtual void addSubaddressAccount(const std::string& label) = 0; //virtual void addSubaddressAccount(const std::string& label) = 0;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_addAccount(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_addAccount(JNIEnv *env, jobject instance,
jstring label) { jstring label) {
const char *_label = env->GetStringUTFChars(label, nullptr); const char *_label = env->GetStringUTFChars(label, nullptr);
@ -1396,7 +1408,7 @@ Java_net_mynero_wallet_model_Wallet_addAccount(JNIEnv *env, jobject instance,
//virtual std::string getSubaddressLabel(uint32_t accountIndex, uint32_t addressIndex) const = 0; //virtual std::string getSubaddressLabel(uint32_t accountIndex, uint32_t addressIndex) const = 0;
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_net_mynero_wallet_model_Wallet_getSubaddressLabel(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getSubaddressLabel(JNIEnv *env, jobject instance,
jint accountIndex, jint addressIndex) { jint accountIndex, jint addressIndex) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
@ -1409,8 +1421,8 @@ Java_net_mynero_wallet_model_Wallet_getSubaddressLabel(JNIEnv *env, jobject inst
//virtual void setSubaddressLabel(uint32_t accountIndex, uint32_t addressIndex, const std::string &label) = 0; //virtual void setSubaddressLabel(uint32_t accountIndex, uint32_t addressIndex, const std::string &label) = 0;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_setSubaddressLabel(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_setSubaddressLabel(JNIEnv *env, jobject instance,
jint accountIndex, jint addressIndex, jint accountIndex, jint addressIndex,
jstring label) { jstring label) {
const char *_label = env->GetStringUTFChars(label, nullptr); const char *_label = env->GetStringUTFChars(label, nullptr);
@ -1430,7 +1442,7 @@ Java_net_mynero_wallet_model_Wallet_getNumAccounts(JNIEnv *env, jobject instance
//virtual size_t numSubaddresses(uint32_t accountIndex) const = 0; //virtual size_t numSubaddresses(uint32_t accountIndex) const = 0;
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_net_mynero_wallet_model_Wallet_getNumSubaddresses(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_getNumSubaddresses(JNIEnv *env, jobject instance,
jint accountIndex) { jint accountIndex) {
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
return static_cast<jint>(wallet->numSubaddresses(accountIndex)); return static_cast<jint>(wallet->numSubaddresses(accountIndex));
} }
@ -1438,8 +1450,8 @@ Java_net_mynero_wallet_model_Wallet_getNumSubaddresses(JNIEnv *env, jobject inst
//virtual void addSubaddress(uint32_t accountIndex, const std::string &label) = 0; //virtual void addSubaddress(uint32_t accountIndex, const std::string &label) = 0;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_Wallet_addSubaddress(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_Wallet_addSubaddress(JNIEnv *env, jobject instance,
jint accountIndex, jint accountIndex,
jstring label) { jstring label) {
const char *_label = env->GetStringUTFChars(label, nullptr); const char *_label = env->GetStringUTFChars(label, nullptr);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance); Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
@ -1579,7 +1591,7 @@ Java_net_mynero_wallet_model_PendingTransaction_getErrorString(JNIEnv *env, jobj
// commit transaction or save to file if filename is provided. // commit transaction or save to file if filename is provided.
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_net_mynero_wallet_model_PendingTransaction_commit(JNIEnv *env, jobject instance, Java_net_mynero_wallet_model_PendingTransaction_commit(JNIEnv *env, jobject instance,
jstring filename, jboolean overwrite) { jstring filename, jboolean overwrite) {
const char *_filename = env->GetStringUTFChars(filename, nullptr); const char *_filename = env->GetStringUTFChars(filename, nullptr);
@ -1635,8 +1647,8 @@ Java_net_mynero_wallet_model_PendingTransaction_getTxCount(JNIEnv *env, jobject
//static void error(const std::string &category, const std::string &str); //static void error(const std::string &category, const std::string &str);
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_initLogger(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_initLogger(JNIEnv *env, jclass clazz,
jstring argv0, jstring argv0,
jstring default_log_base_name) { jstring default_log_base_name) {
const char *_argv0 = env->GetStringUTFChars(argv0, nullptr); const char *_argv0 = env->GetStringUTFChars(argv0, nullptr);
const char *_default_log_base_name = env->GetStringUTFChars(default_log_base_name, nullptr); const char *_default_log_base_name = env->GetStringUTFChars(default_log_base_name, nullptr);
@ -1649,7 +1661,7 @@ Java_net_mynero_wallet_model_WalletManager_initLogger(JNIEnv *env, jclass clazz,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_logDebug(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_logDebug(JNIEnv *env, jclass clazz,
jstring category, jstring message) { jstring category, jstring message) {
const char *_category = env->GetStringUTFChars(category, nullptr); const char *_category = env->GetStringUTFChars(category, nullptr);
const char *_message = env->GetStringUTFChars(message, nullptr); const char *_message = env->GetStringUTFChars(message, nullptr);
@ -1662,7 +1674,7 @@ Java_net_mynero_wallet_model_WalletManager_logDebug(JNIEnv *env, jclass clazz,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_logInfo(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_logInfo(JNIEnv *env, jclass clazz,
jstring category, jstring message) { jstring category, jstring message) {
const char *_category = env->GetStringUTFChars(category, nullptr); const char *_category = env->GetStringUTFChars(category, nullptr);
const char *_message = env->GetStringUTFChars(message, nullptr); const char *_message = env->GetStringUTFChars(message, nullptr);
@ -1675,7 +1687,7 @@ Java_net_mynero_wallet_model_WalletManager_logInfo(JNIEnv *env, jclass clazz,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_logWarning(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_logWarning(JNIEnv *env, jclass clazz,
jstring category, jstring message) { jstring category, jstring message) {
const char *_category = env->GetStringUTFChars(category, nullptr); const char *_category = env->GetStringUTFChars(category, nullptr);
const char *_message = env->GetStringUTFChars(message, nullptr); const char *_message = env->GetStringUTFChars(message, nullptr);
@ -1688,7 +1700,7 @@ Java_net_mynero_wallet_model_WalletManager_logWarning(JNIEnv *env, jclass clazz,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_logError(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_logError(JNIEnv *env, jclass clazz,
jstring category, jstring message) { jstring category, jstring message) {
const char *_category = env->GetStringUTFChars(category, nullptr); const char *_category = env->GetStringUTFChars(category, nullptr);
const char *_message = env->GetStringUTFChars(message, nullptr); const char *_message = env->GetStringUTFChars(message, nullptr);
@ -1701,7 +1713,7 @@ Java_net_mynero_wallet_model_WalletManager_logError(JNIEnv *env, jclass clazz,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_net_mynero_wallet_model_WalletManager_setLogLevel(JNIEnv *env, jclass clazz, Java_net_mynero_wallet_model_WalletManager_setLogLevel(JNIEnv *env, jclass clazz,
jint level) { jint level) {
Monero::WalletManagerFactory::setLogLevel(level); Monero::WalletManagerFactory::setLogLevel(level);
} }

View file

@ -4,11 +4,7 @@ import android.os.Bundle
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.mynero.wallet.fragment.dialog.PasswordBottomSheetDialog import net.mynero.wallet.fragment.dialog.PasswordBottomSheetDialog
import net.mynero.wallet.fragment.dialog.PasswordBottomSheetDialog.PasswordListener import net.mynero.wallet.fragment.dialog.PasswordBottomSheetDialog.PasswordListener
import net.mynero.wallet.fragment.dialog.SendBottomSheetDialog import net.mynero.wallet.fragment.dialog.SendBottomSheetDialog
@ -26,7 +22,6 @@ import net.mynero.wallet.service.TxService
import net.mynero.wallet.service.UTXOService import net.mynero.wallet.service.UTXOService
import net.mynero.wallet.util.Constants import net.mynero.wallet.util.Constants
import net.mynero.wallet.util.UriData import net.mynero.wallet.util.UriData
import timber.log.Timber
import java.io.File import java.io.File
class MainActivity : AppCompatActivity(), MoneroHandlerThread.Listener, PasswordListener { class MainActivity : AppCompatActivity(), MoneroHandlerThread.Listener, PasswordListener {

View file

@ -107,7 +107,7 @@ class NodeSelectionAdapter(val listener: NodeSelectionAdapterListener?) :
if (node.password.isNotEmpty()) { if (node.password.isNotEmpty()) {
authTextView.visibility = View.VISIBLE authTextView.visibility = View.VISIBLE
} }
if(node.trusted) { if (node.trusted) {
trustedTextView.visibility = View.VISIBLE trustedTextView.visibility = View.VISIBLE
} }
val nodeAnonymityNetworkImageView = val nodeAnonymityNetworkImageView =

View file

@ -1,18 +1,13 @@
package net.mynero.wallet.fragment.dialog package net.mynero.wallet.fragment.dialog
import android.app.Activity
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.mynero.wallet.R import net.mynero.wallet.R
import net.mynero.wallet.adapter.NodeSelectionAdapter import net.mynero.wallet.adapter.NodeSelectionAdapter
import net.mynero.wallet.adapter.NodeSelectionAdapter.NodeSelectionAdapterListener import net.mynero.wallet.adapter.NodeSelectionAdapter.NodeSelectionAdapterListener
@ -20,7 +15,6 @@ import net.mynero.wallet.data.DefaultNodes
import net.mynero.wallet.data.Node import net.mynero.wallet.data.Node
import net.mynero.wallet.data.Node.Companion.fromJson import net.mynero.wallet.data.Node.Companion.fromJson
import net.mynero.wallet.data.Node.Companion.fromString import net.mynero.wallet.data.Node.Companion.fromString
import net.mynero.wallet.model.WalletManager
import net.mynero.wallet.service.DaemonService import net.mynero.wallet.service.DaemonService
import net.mynero.wallet.service.PrefService import net.mynero.wallet.service.PrefService
import net.mynero.wallet.util.Constants import net.mynero.wallet.util.Constants

View file

@ -9,9 +9,7 @@ import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
@ -24,9 +22,7 @@ import net.mynero.wallet.MainActivity
import net.mynero.wallet.R import net.mynero.wallet.R
import net.mynero.wallet.adapter.TransactionInfoAdapter import net.mynero.wallet.adapter.TransactionInfoAdapter
import net.mynero.wallet.adapter.TransactionInfoAdapter.TxInfoAdapterListener import net.mynero.wallet.adapter.TransactionInfoAdapter.TxInfoAdapterListener
import net.mynero.wallet.model.EnumTorState
import net.mynero.wallet.model.TransactionInfo import net.mynero.wallet.model.TransactionInfo
import net.mynero.wallet.model.Wallet
import net.mynero.wallet.model.WalletManager import net.mynero.wallet.model.WalletManager
import net.mynero.wallet.service.BalanceService import net.mynero.wallet.service.BalanceService
import net.mynero.wallet.service.BlockchainService import net.mynero.wallet.service.BlockchainService
@ -34,10 +30,7 @@ import net.mynero.wallet.service.DaemonService
import net.mynero.wallet.service.HistoryService import net.mynero.wallet.service.HistoryService
import net.mynero.wallet.service.PrefService import net.mynero.wallet.service.PrefService
import net.mynero.wallet.service.ProxyService import net.mynero.wallet.service.ProxyService
import net.mynero.wallet.service.SamouraiTorManager
import net.mynero.wallet.service.TorKmpManager
import net.mynero.wallet.util.Constants import net.mynero.wallet.util.Constants
import timber.log.Timber
class HomeFragment : Fragment(), TxInfoAdapterListener { class HomeFragment : Fragment(), TxInfoAdapterListener {
private var startHeight: Long = 0 private var startHeight: Long = 0
@ -82,7 +75,8 @@ class HomeFragment : Fragment(), TxInfoAdapterListener {
ProxyService.instance?.proxyChangeEvents?.observe(viewLifecycleOwner) { proxy -> ProxyService.instance?.proxyChangeEvents?.observe(viewLifecycleOwner) { proxy ->
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
Log.d("HomeFragment", "Updating proxy, restarting wallet. proxy=$proxy") Log.d("HomeFragment", "Updating proxy, restarting wallet. proxy=$proxy")
val finalProxy = if(proxy.isNotEmpty() && ProxyService.instance?.usingProxy == true) proxy else "" val finalProxy =
if (proxy.isNotEmpty() && ProxyService.instance?.usingProxy == true) proxy else ""
WalletManager.instance?.setProxy(finalProxy) WalletManager.instance?.setProxy(finalProxy)
WalletManager.instance?.wallet?.setProxy(finalProxy) WalletManager.instance?.wallet?.setProxy(finalProxy)
WalletManager.instance?.wallet?.init(0) WalletManager.instance?.wallet?.init(0)
@ -177,13 +171,13 @@ class HomeFragment : Fragment(), TxInfoAdapterListener {
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) {
samouraiTorManager.getProxy()?.address()?.let { socketAddress -> samouraiTorManager.getProxy()?.address()?.let { socketAddress ->
if(socketAddress.toString().isEmpty()) return@let if (socketAddress.toString().isEmpty()) return@let
if(ProxyService.instance?.usingProxy == true && ProxyService.instance?.useBundledTor == true) { if (ProxyService.instance?.usingProxy == true && ProxyService.instance?.useBundledTor == true) {
val proxyString = socketAddress.toString().substring(1) val proxyString = socketAddress.toString().substring(1)
val address = proxyString.split(":")[0] val address = proxyString.split(":")[0]
val port = proxyString.split(":")[1] val port = proxyString.split(":")[1]
if(WalletManager.instance?.proxy != proxyString) if (WalletManager.instance?.proxy != proxyString)
refreshProxy(address, port) refreshProxy(address, port)
} }
} }
@ -193,7 +187,7 @@ class HomeFragment : Fragment(), TxInfoAdapterListener {
private fun refreshProxy(proxyAddress: String, proxyPort: String) { private fun refreshProxy(proxyAddress: String, proxyPort: String) {
val cachedProxyAddress = ProxyService.instance?.proxyAddress val cachedProxyAddress = ProxyService.instance?.proxyAddress
val cachedProxyPort = ProxyService.instance?.proxyPort val cachedProxyPort = ProxyService.instance?.proxyPort
if((proxyAddress != cachedProxyAddress) || (proxyPort != cachedProxyPort)) { if ((proxyAddress != cachedProxyAddress) || (proxyPort != cachedProxyPort)) {
ProxyService.instance?.updateProxy(proxyAddress, proxyPort) ProxyService.instance?.updateProxy(proxyAddress, proxyPort)
} }
} }

View file

@ -163,13 +163,14 @@ class OnboardingFragment : Fragment(), NodeSelectionDialogListener, AddNodeListe
} }
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
val indicatorCircle = view?.findViewById<CircularProgressIndicator>(R.id.onboarding_tor_loading_progressindicator) val indicatorCircle =
view?.findViewById<CircularProgressIndicator>(R.id.onboarding_tor_loading_progressindicator)
val torIcon = view?.findViewById<ImageView>(R.id.onboarding_tor_icon) val torIcon = view?.findViewById<ImageView>(R.id.onboarding_tor_icon)
samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { state -> samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { state ->
samouraiTorManager.getProxy()?.address()?.let { socketAddress -> samouraiTorManager.getProxy()?.address()?.let { socketAddress ->
if(socketAddress.toString().isEmpty()) return@let if (socketAddress.toString().isEmpty()) return@let
if(mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) { if (mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) {
torIcon?.visibility = View.VISIBLE torIcon?.visibility = View.VISIBLE
indicatorCircle?.visibility = View.INVISIBLE indicatorCircle?.visibility = View.INVISIBLE
val proxyString = socketAddress.toString().substring(1) val proxyString = socketAddress.toString().substring(1)
@ -187,10 +188,12 @@ class OnboardingFragment : Fragment(), NodeSelectionDialogListener, AddNodeListe
torIcon?.visibility = View.INVISIBLE torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.INVISIBLE indicatorCircle?.visibility = View.INVISIBLE
} }
EnumTorState.STARTING, EnumTorState.STOPPING -> { EnumTorState.STARTING, EnumTorState.STOPPING -> {
torIcon?.visibility = View.INVISIBLE torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.VISIBLE indicatorCircle?.visibility = View.VISIBLE
} }
else -> {} else -> {}
} }
} }

View file

@ -52,13 +52,13 @@ class OnboardingViewModel : ViewModel() {
_creatingWallet, _creatingWallet,
ProxyService.instance?.samouraiTorManager?.getTorStateLiveData() ProxyService.instance?.samouraiTorManager?.getTorStateLiveData()
) { seedType, useProxy, proxyAddress, proxyPort, useBundledTor, passphrase, confirmedPassphrase, creatingWallet, torState -> ) { seedType, useProxy, proxyAddress, proxyPort, useBundledTor, passphrase, confirmedPassphrase, creatingWallet, torState ->
if(seedType == null || useProxy == null || proxyAddress == null || proxyPort == null || useBundledTor == null || passphrase == null || confirmedPassphrase == null || creatingWallet == null) return@combineLiveDatas false if (seedType == null || useProxy == null || proxyAddress == null || proxyPort == null || useBundledTor == null || passphrase == null || confirmedPassphrase == null || creatingWallet == null) return@combineLiveDatas false
if((passphrase.isNotEmpty() || confirmedPassphrase.isNotEmpty()) && passphrase != confirmedPassphrase) return@combineLiveDatas false if ((passphrase.isNotEmpty() || confirmedPassphrase.isNotEmpty()) && passphrase != confirmedPassphrase) return@combineLiveDatas false
if(creatingWallet) return@combineLiveDatas false if (creatingWallet) return@combineLiveDatas false
if(seedType == SeedType.POLYSEED && (passphrase.isEmpty() || confirmedPassphrase.isEmpty())) return@combineLiveDatas false if (seedType == SeedType.POLYSEED && (passphrase.isEmpty() || confirmedPassphrase.isEmpty())) return@combineLiveDatas false
if(useProxy && (proxyAddress.isEmpty() || proxyPort.isEmpty()) && !useBundledTor) return@combineLiveDatas false if (useProxy && (proxyAddress.isEmpty() || proxyPort.isEmpty()) && !useBundledTor) return@combineLiveDatas false
val progress = torState?.progressIndicator ?: 0 val progress = torState?.progressIndicator ?: 0
if(useBundledTor && progress < 100 && useProxy) return@combineLiveDatas false if (useBundledTor && progress < 100 && useProxy) return@combineLiveDatas false
return@combineLiveDatas true return@combineLiveDatas true
} }
@ -227,24 +227,25 @@ class OnboardingViewModel : ViewModel() {
fun setProxyAddress(address: String) { fun setProxyAddress(address: String) {
_proxyAddress.value = address _proxyAddress.value = address
if(address.isEmpty()) PrefService.instance?.deleteProxy() if (address.isEmpty()) PrefService.instance?.deleteProxy()
val port = _proxyPort.value ?: return val port = _proxyPort.value ?: return
ProxyService.instance?.updateProxy(address, port) ProxyService.instance?.updateProxy(address, port)
} }
fun setProxyPort(port: String) { fun setProxyPort(port: String) {
_proxyPort.value = port _proxyPort.value = port
if(port.isEmpty()) PrefService.instance?.deleteProxy() if (port.isEmpty()) PrefService.instance?.deleteProxy()
val address = _proxyAddress.value ?: return val address = _proxyAddress.value ?: return
ProxyService.instance?.updateProxy(address, port) ProxyService.instance?.updateProxy(address, port)
} }
fun setUseBundledTor(useBundled: Boolean) { fun setUseBundledTor(useBundled: Boolean) {
_useBundledTor.value = useBundled _useBundledTor.value = useBundled
PrefService.instance?.edit()?.putBoolean(Constants.PREF_USE_BUNDLED_TOR, useBundled)?.apply() PrefService.instance?.edit()?.putBoolean(Constants.PREF_USE_BUNDLED_TOR, useBundled)
?.apply()
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
if(useBundled && ProxyService.instance?.usingProxy == true) { if (useBundled && ProxyService.instance?.usingProxy == true) {
samouraiTorManager?.start() samouraiTorManager?.start()
} else { } else {
samouraiTorManager?.stop() samouraiTorManager?.stop()
@ -256,7 +257,7 @@ class OnboardingViewModel : ViewModel() {
PrefService.instance?.edit()?.putBoolean(Constants.PREF_USES_PROXY, useProxy)?.apply() PrefService.instance?.edit()?.putBoolean(Constants.PREF_USES_PROXY, useProxy)?.apply()
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
if(useProxy && ProxyService.instance?.useBundledTor == true) { if (useProxy && ProxyService.instance?.useBundledTor == true) {
samouraiTorManager?.start() samouraiTorManager?.start()
} else { } else {
samouraiTorManager?.stop() samouraiTorManager?.stop()

View file

@ -148,7 +148,10 @@ class SendFragment : Fragment() {
} }
sendTxSlider?.let { slideToActView -> sendTxSlider?.let { slideToActView ->
ViewCompat.addAccessibilityAction(slideToActView, getString(R.string.approve_the_transaction)) { _, _ -> ViewCompat.addAccessibilityAction(
slideToActView,
getString(R.string.approve_the_transaction)
) { _, _ ->
confirmSlider() confirmSlider()
return@addAccessibilityAction true return@addAccessibilityAction true
} }

View file

@ -1,7 +1,6 @@
package net.mynero.wallet.fragment.settings package net.mynero.wallet.fragment.settings
import android.os.Bundle import android.os.Bundle
import android.util.Patterns
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -10,12 +9,10 @@ import android.widget.CheckBox
import android.widget.CompoundButton import android.widget.CompoundButton
import android.widget.EditText import android.widget.EditText
import android.widget.ImageView import android.widget.ImageView
import android.widget.Switch
import android.widget.Toast import android.widget.Toast
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.SwitchCompat
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
@ -84,13 +81,18 @@ class SettingsFragment : Fragment(), PasswordListener, NodeSelectionDialogListen
val cachedUsingBundledTor = ProxyService.instance?.useBundledTor == true val cachedUsingBundledTor = ProxyService.instance?.useBundledTor == true
val useProxyVisibility = if (cachedUsingProxy) View.VISIBLE else View.GONE val useProxyVisibility = if (cachedUsingProxy) View.VISIBLE else View.GONE
walletProxyPortEditText?.visibility = if (cachedUsingBundledTor) View.GONE else useProxyVisibility walletProxyPortEditText?.visibility =
walletProxyAddressEditText?.visibility = if (cachedUsingBundledTor) View.GONE else useProxyVisibility if (cachedUsingBundledTor) View.GONE else useProxyVisibility
walletProxyAddressEditText?.visibility =
if (cachedUsingBundledTor) View.GONE else useProxyVisibility
proxySettingsLayout?.visibility = useProxyVisibility proxySettingsLayout?.visibility = useProxyVisibility
streetModeSwitch?.isChecked = PrefService.instance?.getBoolean(Constants.PREF_STREET_MODE, false) == true streetModeSwitch?.isChecked =
monerochanSwitch?.isChecked = PrefService.instance?.getBoolean(Constants.PREF_MONEROCHAN, true) == true PrefService.instance?.getBoolean(Constants.PREF_STREET_MODE, false) == true
donationSwitch?.isChecked = PrefService.instance?.getBoolean(Constants.PREF_DONATE_PER_TX, false) == true monerochanSwitch?.isChecked =
PrefService.instance?.getBoolean(Constants.PREF_MONEROCHAN, true) == true
donationSwitch?.isChecked =
PrefService.instance?.getBoolean(Constants.PREF_DONATE_PER_TX, false) == true
useBundledTor?.isChecked = cachedUsingBundledTor useBundledTor?.isChecked = cachedUsingBundledTor
torSwitch?.isChecked = cachedUsingProxy torSwitch?.isChecked = cachedUsingProxy
updateProxy(cachedProxyAddress, cachedProxyPort) updateProxy(cachedProxyAddress, cachedProxyPort)
@ -161,7 +163,7 @@ class SettingsFragment : Fragment(), PasswordListener, NodeSelectionDialogListen
private fun bindObservers() { private fun bindObservers() {
mViewModel?.useProxy?.observe(viewLifecycleOwner) { b -> mViewModel?.useProxy?.observe(viewLifecycleOwner) { b ->
val visibility = if(b) View.VISIBLE else View.GONE val visibility = if (b) View.VISIBLE else View.GONE
proxySettingsLayout?.visibility = visibility proxySettingsLayout?.visibility = visibility
val useBundledTor = mViewModel?.useBundledTor?.value == true val useBundledTor = mViewModel?.useBundledTor?.value == true
@ -173,19 +175,20 @@ class SettingsFragment : Fragment(), PasswordListener, NodeSelectionDialogListen
mViewModel?.useBundledTor?.observe(viewLifecycleOwner) { isChecked -> mViewModel?.useBundledTor?.observe(viewLifecycleOwner) { isChecked ->
val usingProxy = mViewModel?.useProxy?.value == true val usingProxy = mViewModel?.useProxy?.value == true
val visibility = if(usingProxy) View.VISIBLE else View.GONE val visibility = if (usingProxy) View.VISIBLE else View.GONE
walletProxyPortEditText?.visibility = if (isChecked) View.GONE else visibility walletProxyPortEditText?.visibility = if (isChecked) View.GONE else visibility
walletProxyAddressEditText?.visibility = if (isChecked) View.GONE else visibility walletProxyAddressEditText?.visibility = if (isChecked) View.GONE else visibility
} }
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
val indicatorCircle = view?.findViewById<CircularProgressIndicator>(R.id.settings_tor_loading_progressindicator) val indicatorCircle =
view?.findViewById<CircularProgressIndicator>(R.id.settings_tor_loading_progressindicator)
val torIcon = view?.findViewById<ImageView>(R.id.settings_tor_icon) val torIcon = view?.findViewById<ImageView>(R.id.settings_tor_icon)
samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { state -> samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { state ->
samouraiTorManager.getProxy()?.address()?.let { socketAddress -> samouraiTorManager.getProxy()?.address()?.let { socketAddress ->
if(socketAddress.toString().isEmpty()) return@let if (socketAddress.toString().isEmpty()) return@let
if(mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) { if (mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) {
torIcon?.visibility = View.VISIBLE torIcon?.visibility = View.VISIBLE
indicatorCircle?.visibility = View.INVISIBLE indicatorCircle?.visibility = View.INVISIBLE
val proxyString = socketAddress.toString().substring(1) val proxyString = socketAddress.toString().substring(1)
@ -203,10 +206,12 @@ class SettingsFragment : Fragment(), PasswordListener, NodeSelectionDialogListen
torIcon?.visibility = View.INVISIBLE torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.INVISIBLE indicatorCircle?.visibility = View.INVISIBLE
} }
EnumTorState.STARTING, EnumTorState.STOPPING -> { EnumTorState.STARTING, EnumTorState.STOPPING -> {
torIcon?.visibility = View.INVISIBLE torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.VISIBLE indicatorCircle?.visibility = View.VISIBLE
} }
else -> {} else -> {}
} }
} }
@ -224,7 +229,7 @@ class SettingsFragment : Fragment(), PasswordListener, NodeSelectionDialogListen
val savedProxyAddress = ProxyService.instance?.proxyAddress val savedProxyAddress = ProxyService.instance?.proxyAddress
val savedProxyPort = ProxyService.instance?.proxyPort val savedProxyPort = ProxyService.instance?.proxyPort
if(proxyAddress != savedProxyAddress || proxyPort != savedProxyPort) if (proxyAddress != savedProxyAddress || proxyPort != savedProxyPort)
ProxyService.instance?.updateProxy(proxyAddress, proxyPort) ProxyService.instance?.updateProxy(proxyAddress, proxyPort)
} }

View file

@ -1,11 +1,8 @@
package net.mynero.wallet.fragment.settings package net.mynero.wallet.fragment.settings
import android.util.Patterns
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import net.mynero.wallet.MoneroApplication
import net.mynero.wallet.model.WalletManager
import net.mynero.wallet.service.PrefService import net.mynero.wallet.service.PrefService
import net.mynero.wallet.service.ProxyService import net.mynero.wallet.service.ProxyService
import net.mynero.wallet.util.Constants import net.mynero.wallet.util.Constants
@ -26,7 +23,7 @@ class SettingsViewModel : ViewModel() {
PrefService.instance?.edit()?.putBoolean(Constants.PREF_USES_PROXY, use)?.apply() PrefService.instance?.edit()?.putBoolean(Constants.PREF_USES_PROXY, use)?.apply()
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
if(use && ProxyService.instance?.useBundledTor == true) { if (use && ProxyService.instance?.useBundledTor == true) {
samouraiTorManager?.start() samouraiTorManager?.start()
} else { } else {
samouraiTorManager?.stop() samouraiTorManager?.stop()
@ -38,7 +35,7 @@ class SettingsViewModel : ViewModel() {
PrefService.instance?.edit()?.putBoolean(Constants.PREF_USE_BUNDLED_TOR, use)?.apply() PrefService.instance?.edit()?.putBoolean(Constants.PREF_USE_BUNDLED_TOR, use)?.apply()
val samouraiTorManager = ProxyService.instance?.samouraiTorManager val samouraiTorManager = ProxyService.instance?.samouraiTorManager
if(use && ProxyService.instance?.usingProxy == true) { if (use && ProxyService.instance?.usingProxy == true) {
samouraiTorManager?.start() samouraiTorManager?.start()
} else { } else {
samouraiTorManager?.stop() samouraiTorManager?.stop()

View file

@ -1,14 +1,6 @@
package net.mynero.wallet.model package net.mynero.wallet.model
class TorState { class TorState {
var state : EnumTorState = EnumTorState.OFF var state: EnumTorState = EnumTorState.OFF
get() = field var progressIndicator: Int = 0
set(value) {
field = value
}
var progressIndicator : Int = 0
get() = field
set(value) {
field = value
}
} }

View file

@ -18,7 +18,6 @@ package net.mynero.wallet.model
import android.util.Log import android.util.Log
import android.util.Pair import android.util.Pair
import net.mynero.wallet.data.Subaddress import net.mynero.wallet.data.Subaddress
import timber.log.Timber
import java.io.File import java.io.File
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@ -212,16 +211,19 @@ class Wallet {
fun setTrustedDaemon(trusted: Boolean) { fun setTrustedDaemon(trusted: Boolean) {
setTrustedDaemonJ(trusted) setTrustedDaemonJ(trusted)
} }
private external fun setTrustedDaemonJ(trusted: Boolean) private external fun setTrustedDaemonJ(trusted: Boolean)
fun isTrustedDaemon(): Boolean { fun isTrustedDaemon(): Boolean {
return isTrustedDaemonJ(); return isTrustedDaemonJ()
} }
private external fun isTrustedDaemonJ(): Boolean private external fun isTrustedDaemonJ(): Boolean
fun setProxy(address: String?): Boolean { fun setProxy(address: String?): Boolean {
return setProxyJ(address) return setProxyJ(address)
} }
private external fun setProxyJ(address: String?): Boolean private external fun setProxyJ(address: String?): Boolean
val balance: Long val balance: Long
get() = getBalance(accountIndex) get() = getBalance(accountIndex)
@ -238,11 +240,13 @@ class Wallet {
fun getBlockChainHeight(): Long { fun getBlockChainHeight(): Long {
return getBlockChainHeightJ().minus(1) return getBlockChainHeightJ().minus(1)
} }
private external fun getBlockChainHeightJ(): Long private external fun getBlockChainHeightJ(): Long
external fun getApproximateBlockChainHeight(): Long external fun getApproximateBlockChainHeight(): Long
fun getDaemonBlockChainHeight(): Long { fun getDaemonBlockChainHeight(): Long {
return getDaemonBlockChainHeightJ().minus(1) return getDaemonBlockChainHeightJ().minus(1)
} }
private external fun getDaemonBlockChainHeightJ(): Long private external fun getDaemonBlockChainHeightJ(): Long
external fun getDaemonBlockChainTargetHeight(): Long external fun getDaemonBlockChainTargetHeight(): Long
@ -253,6 +257,7 @@ class Wallet {
fun startRefresh() { fun startRefresh() {
startRefreshJ() startRefreshJ()
} }
private external fun startRefreshJ() private external fun startRefreshJ()
external fun pauseRefresh() external fun pauseRefresh()
external fun refresh(): Boolean external fun refresh(): Boolean

View file

@ -1,12 +1,7 @@
package net.mynero.wallet.service package net.mynero.wallet.service
import android.util.Patterns
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import net.mynero.wallet.data.Node import net.mynero.wallet.data.Node
import net.mynero.wallet.livedata.SingleLiveEvent import net.mynero.wallet.livedata.SingleLiveEvent
import net.mynero.wallet.model.WalletManager
import net.mynero.wallet.util.Constants
class DaemonService(thread: MoneroHandlerThread) : ServiceBase(thread) { class DaemonService(thread: MoneroHandlerThread) : ServiceBase(thread) {
val daemonChangeEvents: SingleLiveEvent<Node> = SingleLiveEvent() val daemonChangeEvents: SingleLiveEvent<Node> = SingleLiveEvent()

View file

@ -16,7 +16,6 @@
*/ */
package net.mynero.wallet.service package net.mynero.wallet.service
import android.util.Log
import net.mynero.wallet.model.PendingTransaction import net.mynero.wallet.model.PendingTransaction
import net.mynero.wallet.model.TransactionOutput import net.mynero.wallet.model.TransactionOutput
import net.mynero.wallet.model.Wallet import net.mynero.wallet.model.Wallet
@ -37,7 +36,6 @@ import java.security.SecureRandom
class MoneroHandlerThread(name: String, val listener: Listener?, wallet: Wallet) : class MoneroHandlerThread(name: String, val listener: Listener?, wallet: Wallet) :
Thread(null, null, name, THREAD_STACK_SIZE), WalletListener { Thread(null, null, name, THREAD_STACK_SIZE), WalletListener {
private val wallet: Wallet private val wallet: Wallet
private var triesLeft = 5
init { init {
this.wallet = wallet this.wallet = wallet
@ -75,7 +73,8 @@ class MoneroHandlerThread(name: String, val listener: Listener?, wallet: Wallet)
override fun unconfirmedMoneyReceived(txId: String?, amount: Long) {} override fun unconfirmedMoneyReceived(txId: String?, amount: Long) {}
override fun newBlock(height: Long) { override fun newBlock(height: Long) {
refresh(false) refresh(false)
BlockchainService.instance?.daemonHeight = if (wallet.isSynchronized) height else 0 // when 0 it fetches from C++ BlockchainService.instance?.daemonHeight =
if (wallet.isSynchronized) height else 0 // when 0 it fetches from C++
} }
override fun updated() { override fun updated() {
@ -89,11 +88,11 @@ class MoneroHandlerThread(name: String, val listener: Listener?, wallet: Wallet)
BlockchainService.instance?.daemonHeight = daemonHeight BlockchainService.instance?.daemonHeight = daemonHeight
status?.let { BlockchainService.instance?.setConnectionStatus(it) } status?.let { BlockchainService.instance?.setConnectionStatus(it) }
if (status === ConnectionStatus.ConnectionStatus_Disconnected || status == null) { if (status === ConnectionStatus.ConnectionStatus_Disconnected || status == null) {
tryRestartOrFail() tryRestartConnection()
} else { } else {
val heightDiff = daemonHeight - chainHeight val heightDiff = daemonHeight - chainHeight
if(heightDiff >= 2) { if (heightDiff >= 2) {
tryRestartOrFail() tryRestartConnection()
} else { } else {
Timber.d("refreshed() Synchronized") Timber.d("refreshed() Synchronized")
wallet.setSynchronized() wallet.setSynchronized()
@ -104,16 +103,10 @@ class MoneroHandlerThread(name: String, val listener: Listener?, wallet: Wallet)
} }
} }
private fun tryRestartOrFail() { private fun tryRestartConnection() {
Timber.d("refreshed() Disconnected") Timber.d("refreshed() Starting connection retry")
if (triesLeft > 0) { wallet.init(0)
Timber.d("refreshed() Starting refresh") wallet.startRefresh()
wallet.startRefresh()
triesLeft--
} else {
Timber.d("refreshed() On connection fail")
listener?.onConnectionFail()
}
} }
private fun refresh(walletSynced: Boolean) { private fun refresh(walletSynced: Boolean) {

View file

@ -81,12 +81,12 @@ class PrefService(application: MoneroApplication) : ServiceBase(null) {
} }
fun saveProxy(address: String, port: String): String? { fun saveProxy(address: String, port: String): String? {
if(address.isEmpty() || port.isEmpty()) { if (address.isEmpty() || port.isEmpty()) {
deleteProxy() deleteProxy()
return null return null
} }
val proxyAddress = "$address:$port" val proxyAddress = "$address:$port"
if(proxyAddress == ":") return null if (proxyAddress == ":") return null
Log.d("PrefService", "Setting proxy. proxyAddress=$proxyAddress") Log.d("PrefService", "Setting proxy. proxyAddress=$proxyAddress")
edit()?.putString(Constants.PREF_PROXY, proxyAddress)?.apply() edit()?.putString(Constants.PREF_PROXY, proxyAddress)?.apply()
return proxyAddress return proxyAddress

View file

@ -15,7 +15,7 @@ class ProxyService(application: Application) : ServiceBase(null) {
instance = this instance = this
samouraiTorManager = SamouraiTorManager(application, TorKmpManager(application)) samouraiTorManager = SamouraiTorManager(application, TorKmpManager(application))
if(useBundledTor && usingProxy) { if (useBundledTor && usingProxy) {
samouraiTorManager?.start() samouraiTorManager?.start()
} }
} }

View file

@ -5,7 +5,10 @@ import androidx.lifecycle.MutableLiveData
import net.mynero.wallet.model.TorState import net.mynero.wallet.model.TorState
import java.net.Proxy import java.net.Proxy
class SamouraiTorManager(private val appContext: Application?, private val torKmpManager: TorKmpManager) { class SamouraiTorManager(
private val appContext: Application?,
private val torKmpManager: TorKmpManager
) {
fun getTorStateLiveData(): MutableLiveData<TorState> { fun getTorStateLiveData(): MutableLiveData<TorState> {
return torKmpManager.torStateLiveData return torKmpManager.torStateLiveData
} }

View file

@ -5,7 +5,6 @@ import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import net.mynero.wallet.model.TorState
import io.matthewnelson.kmp.tor.KmpTorLoaderAndroid import io.matthewnelson.kmp.tor.KmpTorLoaderAndroid
import io.matthewnelson.kmp.tor.TorConfigProviderAndroid import io.matthewnelson.kmp.tor.TorConfigProviderAndroid
import io.matthewnelson.kmp.tor.common.address.* import io.matthewnelson.kmp.tor.common.address.*
@ -26,11 +25,11 @@ import io.matthewnelson.kmp.tor.manager.common.state.isStarting
import io.matthewnelson.kmp.tor.manager.common.state.isStopping import io.matthewnelson.kmp.tor.manager.common.state.isStopping
import kotlinx.coroutines.* import kotlinx.coroutines.*
import net.mynero.wallet.model.EnumTorState import net.mynero.wallet.model.EnumTorState
import java.lang.Exception import net.mynero.wallet.model.TorState
import java.net.InetSocketAddress import java.net.InetSocketAddress
import java.net.Proxy import java.net.Proxy
class TorKmpManager(application : Application) { class TorKmpManager(application: Application) {
private val TAG = "TorListener" private val TAG = "TorListener"
@ -61,11 +60,15 @@ class TorKmpManager(application : Application) {
put(socks.set(AorDorPort.Value(PortProxy(9263)))) put(socks.set(AorDorPort.Value(PortProxy(9263))))
// Set Flags // Set Flags
socks.setFlags(setOf( socks.setFlags(
Ports.Socks.Flag.OnionTrafficOnly setOf(
)).setIsolationFlags(setOf( Ports.Socks.Flag.OnionTrafficOnly
Ports.IsolationFlag.IsolateClientAddr, )
)).set(AorDorPort.Value(PortProxy(9264))) ).setIsolationFlags(
setOf(
Ports.IsolationFlag.IsolateClientAddr,
)
).set(AorDorPort.Value(PortProxy(9264)))
put(socks) put(socks)
// reset our socks object to defaults // reset our socks object to defaults
@ -142,23 +145,36 @@ class TorKmpManager(application : Application) {
addSegment("test_service") addSegment("test_service")
} }
// Add Hidden services // Add Hidden services
put(HiddenService() put(
.setPorts(ports = setOf( HiddenService()
// Use a unix domain socket to communicate via IPC instead of over TCP .setPorts(
HiddenService.UnixSocket(virtualPort = Port(80), targetUnixSocket = hsPath.builder { ports = setOf(
addSegment(HiddenService.UnixSocket.DEFAULT_UNIX_SOCKET_NAME) // Use a unix domain socket to communicate via IPC instead of over TCP
}), HiddenService.UnixSocket(
)) virtualPort = Port(80),
.setMaxStreams(maxStreams = HiddenService.MaxStreams(value = 2)) targetUnixSocket = hsPath.builder {
.setMaxStreamsCloseCircuit(value = TorF.True) addSegment(HiddenService.UnixSocket.DEFAULT_UNIX_SOCKET_NAME)
.set(FileSystemDir(path = hsPath)) }),
)
)
.setMaxStreams(maxStreams = HiddenService.MaxStreams(value = 2))
.setMaxStreamsCloseCircuit(value = TorF.True)
.set(FileSystemDir(path = hsPath))
) )
put(HiddenService() put(HiddenService()
.setPorts(ports = setOf( .setPorts(
HiddenService.Ports(virtualPort = Port(80), targetPort = Port(1030)), // http ports = setOf(
HiddenService.Ports(virtualPort = Port(443), targetPort = Port(1030)) // https HiddenService.Ports(
)) virtualPort = Port(80),
targetPort = Port(1030)
), // http
HiddenService.Ports(
virtualPort = Port(443),
targetPort = Port(1030)
) // https
)
)
.set(FileSystemDir(path = .set(FileSystemDir(path =
workDir.builder { workDir.builder {
addSegment(HiddenService.DEFAULT_PARENT_DIR_NAME) addSegment(HiddenService.DEFAULT_PARENT_DIR_NAME)
@ -176,7 +192,11 @@ class TorKmpManager(application : Application) {
} }
private val manager: TorManager by lazy { private val manager: TorManager by lazy {
TorManager.newInstance(application = application, loader = loaderAndroid, requiredEvents = null) TorManager.newInstance(
application = application,
loader = loaderAndroid,
requiredEvents = null
)
} }
// only expose necessary interfaces // only expose necessary interfaces
@ -192,12 +212,9 @@ class TorKmpManager(application : Application) {
} }
val torStateLiveData: MutableLiveData<TorState> = MutableLiveData() val torStateLiveData: MutableLiveData<TorState> = MutableLiveData()
get() = field
var torState: TorState = TorState() var torState: TorState = TorState()
get() = field
var proxy: Proxy? = null var proxy: Proxy? = null
get() = field
init { init {
manager.debug(true) manager.debug(true)
@ -210,7 +227,7 @@ class TorKmpManager(application : Application) {
} }
fun isStarting(): Boolean { fun isStarting(): Boolean {
return manager.state.isStarting(); return manager.state.isStarting()
} }
@ -231,7 +248,7 @@ class TorKmpManager(application : Application) {
} }
} }
private inner class TorListener: TorManagerEvent.Listener() { private inner class TorListener : TorManagerEvent.Listener() {
private val _eventLines: MutableLiveData<String> = MutableLiveData("") private val _eventLines: MutableLiveData<String> = MutableLiveData("")
val eventLines: LiveData<String> = _eventLines val eventLines: LiveData<String> = _eventLines
private val events: MutableList<String> = ArrayList(50) private val events: MutableList<String> = ArrayList(50)
@ -313,7 +330,8 @@ class TorKmpManager(application : Application) {
} else { } else {
info.socksInfoToProxyAddressOrNull()?.firstOrNull()?.let { proxyAddress -> info.socksInfoToProxyAddressOrNull()?.firstOrNull()?.let { proxyAddress ->
@Suppress("UNUSED_VARIABLE") @Suppress("UNUSED_VARIABLE")
val socket = InetSocketAddress(proxyAddress.address.value, proxyAddress.port.value) val socket =
InetSocketAddress(proxyAddress.address.value, proxyAddress.port.value)
proxy = Proxy(Proxy.Type.SOCKS, socket) proxy = Proxy(Proxy.Type.SOCKS, socket)
} }
} }

View file

@ -5,6 +5,7 @@
android:left="8dp" android:left="8dp"
android:right="8dp" /> android:right="8dp" />
<solid android:color="@color/button_disabled_bg_color" /> <solid android:color="@color/button_disabled_bg_color" />
<corners android:topLeftRadius="16dp" <corners
android:bottomLeftRadius="16dp"/> android:bottomLeftRadius="16dp"
android:topLeftRadius="16dp" />
</shape> </shape>

View file

@ -5,6 +5,7 @@
android:left="8dp" android:left="8dp"
android:right="8dp" /> android:right="8dp" />
<solid android:color="@color/button_disabled_bg_color" /> <solid android:color="@color/button_disabled_bg_color" />
<corners android:topRightRadius="16dp" <corners
android:bottomRightRadius="16dp"/> android:bottomRightRadius="16dp"
android:topRightRadius="16dp" />
</shape> </shape>

View file

@ -5,6 +5,7 @@
android:left="8dp" android:left="8dp"
android:right="8dp" /> android:right="8dp" />
<solid android:color="@color/oled_colorSecondary" /> <solid android:color="@color/oled_colorSecondary" />
<corners android:topLeftRadius="16dp" <corners
android:bottomLeftRadius="16dp"/> android:bottomLeftRadius="16dp"
android:topLeftRadius="16dp" />
</shape> </shape>

View file

@ -5,6 +5,7 @@
android:left="8dp" android:left="8dp"
android:right="8dp" /> android:right="8dp" />
<solid android:color="@color/oled_colorSecondary" /> <solid android:color="@color/oled_colorSecondary" />
<corners android:topRightRadius="16dp" <corners
android:bottomRightRadius="16dp"/> android:bottomRightRadius="16dp"
android:topRightRadius="16dp" />
</shape> </shape>

View file

@ -2,10 +2,10 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<padding <padding
android:bottom="12dp"
android:left="12dp" android:left="12dp"
android:right="12dp" android:right="12dp"
android:bottom="12dp" android:top="12dp" />
android:top="12dp"/>
<solid android:color="@color/oled_dialogBackgroundColor" /> <solid android:color="@color/oled_dialogBackgroundColor" />
<corners android:radius="16dp" /> <corners android:radius="16dp" />
</shape> </shape>

View file

@ -2,9 +2,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<padding <padding
android:bottom="12dp"
android:left="12dp" android:left="12dp"
android:right="12dp" android:right="12dp" />
android:bottom="12dp"/>
<solid android:color="@color/oled_dialogBackgroundColor" /> <solid android:color="@color/oled_dialogBackgroundColor" />
<corners android:radius="16dp" /> <corners android:radius="16dp" />
</shape> </shape>

View file

@ -1,74 +1,170 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<vector <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="108dp"
android:width="108dp" android:width="108dp"
android:viewportHeight="108" android:height="108dp"
android:viewportWidth="108" android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android"> android:viewportHeight="108">
<path android:fillColor="#3DDC84" <path
android:pathData="M0,0h108v108h-108z"/> android:fillColor="#3DDC84"
<path android:fillColor="#00000000" android:pathData="M9,0L9,108" android:pathData="M0,0h108v108h-108z" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M19,0L19,108" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M9,0L9,108"
<path android:fillColor="#00000000" android:pathData="M29,0L29,108" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M39,0L39,108" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M49,0L49,108" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M59,0L59,108" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M69,0L69,108" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M29,0L29,108"
<path android:fillColor="#00000000" android:pathData="M79,0L79,108" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M89,0L89,108" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M99,0L99,108" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M0,9L108,9" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M0,19L108,19" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M49,0L49,108"
<path android:fillColor="#00000000" android:pathData="M0,29L108,29" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M0,39L108,39" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M0,49L108,49" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M0,59L108,59" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M0,69L108,69" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M69,0L69,108"
<path android:fillColor="#00000000" android:pathData="M0,79L108,79" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M0,89L108,89" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M0,99L108,99" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M19,29L89,29" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M19,39L89,39" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M89,0L89,108"
<path android:fillColor="#00000000" android:pathData="M19,49L89,49" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M19,59L89,59" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M19,69L89,69" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M19,79L89,79" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M29,19L29,89" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M0,9L108,9"
<path android:fillColor="#00000000" android:pathData="M39,19L39,89" android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeColor="#33FFFFFF" />
<path android:fillColor="#00000000" android:pathData="M49,19L49,89" <path
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:fillColor="#00000000"
<path android:fillColor="#00000000" android:pathData="M59,19L59,89" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:strokeWidth="0.8"
<path android:fillColor="#00000000" android:pathData="M69,19L69,89" android:strokeColor="#33FFFFFF" />
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> <path
<path android:fillColor="#00000000" android:pathData="M79,19L79,89" android:fillColor="#00000000"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/> android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector> </vector>

View file

@ -6,5 +6,5 @@
android:viewportHeight="24.0"> android:viewportHeight="24.0">
<path <path
android:fillColor="#ffffff" android:fillColor="#ffffff"
android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/> android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z" />
</vector> </vector>

View file

@ -4,9 +4,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/oled_dialogBackgroundColor"
android:fillViewport="true" android:fillViewport="true"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:background="@color/oled_dialogBackgroundColor"
android:padding="24dp"> android:padding="24dp">
@ -61,13 +61,13 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:digits="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:-[]"
android:hint="@string/node_address_hint" android:hint="@string/node_address_hint"
android:inputType="text" android:inputType="text"
android:digits="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:-[]"
app:layout_constraintBottom_toTopOf="@id/trusted_node_checkbox" app:layout_constraintBottom_toTopOf="@id/trusted_node_checkbox"
app:layout_constraintEnd_toStartOf="@id/node_port_edittext" app:layout_constraintEnd_toStartOf="@id/node_port_edittext"
app:layout_constraintTop_toBottomOf="@id/node_name_edittext" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintTop_toBottomOf="@id/node_name_edittext" />
<EditText <EditText
android:id="@+id/node_port_edittext" android:id="@+id/node_port_edittext"
@ -75,26 +75,26 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:digits="-QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:"
android:hint="@string/node_port_hint" android:hint="@string/node_port_hint"
android:inputType="number" android:inputType="number"
android:digits="-QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:"
app:layout_constraintTop_toTopOf="@id/address_edittext"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toStartOf="@id/paste_address_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_address_imagebutton"
app:layout_constraintStart_toEndOf="@id/address_edittext" /> app:layout_constraintStart_toEndOf="@id/address_edittext"
app:layout_constraintTop_toTopOf="@id/address_edittext" />
<CheckBox <CheckBox
android:id="@+id/trusted_node_checkbox" android:id="@+id/trusted_node_checkbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:minHeight="48dp"
android:text="@string/trusted_daemon" android:text="@string/trusted_daemon"
android:visibility="visible" android:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/username_edittext" app:layout_constraintBottom_toTopOf="@id/username_edittext"
app:layout_constraintTop_toBottomOf="@id/address_edittext"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_edittext" />
<Button <Button
android:id="@+id/add_node_button" android:id="@+id/add_node_button"
@ -114,10 +114,10 @@
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/node_username_hint" android:hint="@string/node_username_hint"
android:inputType="text" android:inputType="text"
app:layout_constraintTop_toBottomOf="@id/trusted_node_checkbox"
app:layout_constraintBottom_toTopOf="@id/password_edittext" app:layout_constraintBottom_toTopOf="@id/password_edittext"
app:layout_constraintEnd_toStartOf="@id/paste_username_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_username_imagebutton"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/trusted_node_checkbox" />
<ImageButton <ImageButton
android:id="@+id/paste_username_imagebutton" android:id="@+id/paste_username_imagebutton"
@ -152,8 +152,8 @@
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:visibility="gone"
android:src="@drawable/ic_content_paste_24dp" android:src="@drawable/ic_content_paste_24dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/password_edittext" app:layout_constraintBottom_toBottomOf="@id/password_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/password_edittext" app:layout_constraintStart_toEndOf="@id/password_edittext"

View file

@ -1,56 +1,57 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:paddingEnd="8dp" android:paddingStart="8dp"
android:paddingStart="8dp"> android:paddingEnd="8dp">
<TextView <TextView
android:id="@+id/address_item_address_textview" android:id="@+id/address_item_address_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Address" android:ellipsize="middle"
android:textStyle="bold"
android:textSize="16sp"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:ellipsize="middle"
android:singleLine="true" android:singleLine="true"
android:text="Address"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/address_label_textview" app:layout_constraintBottom_toTopOf="@id/address_label_textview"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/address_label_textview" android:id="@+id/address_label_textview"
style="@style/MoneroText.Subaddress" style="@style/MoneroText.Subaddress"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Label" android:ellipsize="middle"
android:paddingStart="8dp" android:paddingStart="8dp"
android:paddingEnd="8dp" android:paddingEnd="8dp"
android:singleLine="true"
android:text="Label"
android:textStyle="bold" android:textStyle="bold"
android:ellipsize="middle"
app:layout_constraintTop_toBottomOf="@id/address_item_address_textview"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:singleLine="true" /> app:layout_constraintTop_toBottomOf="@id/address_item_address_textview" />
<TextView <TextView
android:id="@+id/address_amount_textview" android:id="@+id/address_amount_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:text="Amount" android:ellipsize="middle"
android:paddingStart="8dp" android:paddingStart="8dp"
android:paddingEnd="8dp" android:paddingEnd="8dp"
android:ellipsize="middle" android:singleLine="true"
android:text="Amount"
android:textAlignment="viewEnd" android:textAlignment="viewEnd"
android:textColor="@color/oled_positiveColor" android:textColor="@color/oled_positiveColor"
app:layout_constraintTop_toBottomOf="@id/address_item_address_textview"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/address_label_textview" app:layout_constraintStart_toEndOf="@id/address_label_textview"
android:singleLine="true" /> app:layout_constraintTop_toBottomOf="@id/address_item_address_textview" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -14,11 +14,11 @@
android:id="@+id/enter_password_textview" android:id="@+id/enter_password_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:text="@string/edit_address_label" android:text="@string/edit_address_label"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:layout_marginTop="24dp"
android:textSize="32sp" android:textSize="32sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/wallet_password_edittext" app:layout_constraintBottom_toTopOf="@id/wallet_password_edittext"
@ -30,9 +30,9 @@
android:id="@+id/wallet_password_edittext" android:id="@+id/wallet_password_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:layout_marginStart="24dp"
android:hint="@string/label" android:hint="@string/label"
android:inputType="text" android:inputType="text"
app:layout_constraintBottom_toTopOf="@id/unlock_wallet_button" app:layout_constraintBottom_toTopOf="@id/unlock_wallet_button"
@ -59,11 +59,11 @@
android:id="@+id/unlock_wallet_button" android:id="@+id/unlock_wallet_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg"
android:text="@string/save"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:background="@drawable/button_bg"
android:text="@string/save"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_password_edittext" /> app:layout_constraintTop_toBottomOf="@id/wallet_password_edittext" />

View file

@ -4,9 +4,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/oled_dialogBackgroundColor"
android:fillViewport="true" android:fillViewport="true"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:background="@color/oled_dialogBackgroundColor"
android:padding="24dp"> android:padding="24dp">
@ -61,13 +61,13 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:digits="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:-[]"
android:hint="@string/node_address_hint" android:hint="@string/node_address_hint"
android:inputType="text" android:inputType="text"
android:digits="QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:-[]"
app:layout_constraintBottom_toTopOf="@id/trusted_node_checkbox" app:layout_constraintBottom_toTopOf="@id/trusted_node_checkbox"
app:layout_constraintEnd_toStartOf="@id/node_port_edittext" app:layout_constraintEnd_toStartOf="@id/node_port_edittext"
app:layout_constraintTop_toBottomOf="@id/node_name_edittext" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintTop_toBottomOf="@id/node_name_edittext" />
<EditText <EditText
android:id="@+id/node_port_edittext" android:id="@+id/node_port_edittext"
@ -75,26 +75,26 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:digits="-QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:"
android:hint="@string/node_port_hint" android:hint="@string/node_port_hint"
android:inputType="number" android:inputType="number"
android:digits="-QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890.:"
app:layout_constraintTop_toTopOf="@id/address_edittext"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toStartOf="@id/paste_address_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_address_imagebutton"
app:layout_constraintStart_toEndOf="@id/address_edittext" /> app:layout_constraintStart_toEndOf="@id/address_edittext"
app:layout_constraintTop_toTopOf="@id/address_edittext" />
<CheckBox <CheckBox
android:id="@+id/trusted_node_checkbox" android:id="@+id/trusted_node_checkbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:minHeight="48dp"
android:text="@string/trusted_daemon" android:text="@string/trusted_daemon"
android:visibility="visible" android:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/username_edittext" app:layout_constraintBottom_toTopOf="@id/username_edittext"
app:layout_constraintTop_toBottomOf="@id/address_edittext"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_edittext" />
<EditText <EditText
android:id="@+id/username_edittext" android:id="@+id/username_edittext"
@ -104,10 +104,10 @@
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/node_username_hint" android:hint="@string/node_username_hint"
android:inputType="text" android:inputType="text"
app:layout_constraintTop_toBottomOf="@id/trusted_node_checkbox"
app:layout_constraintBottom_toTopOf="@id/password_edittext" app:layout_constraintBottom_toTopOf="@id/password_edittext"
app:layout_constraintEnd_toStartOf="@id/paste_username_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_username_imagebutton"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/trusted_node_checkbox" />
<ImageButton <ImageButton
android:id="@+id/paste_username_imagebutton" android:id="@+id/paste_username_imagebutton"
@ -131,10 +131,10 @@
android:hint="@string/node_password_hint" android:hint="@string/node_password_hint"
android:inputType="textPassword" android:inputType="textPassword"
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/username_edittext"
app:layout_constraintBottom_toTopOf="@id/delete_node_button" app:layout_constraintBottom_toTopOf="@id/delete_node_button"
app:layout_constraintEnd_toStartOf="@id/paste_password_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_password_imagebutton"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/username_edittext" />
<ImageButton <ImageButton
android:id="@+id/paste_password_imagebutton" android:id="@+id/paste_password_imagebutton"
@ -144,8 +144,8 @@
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:padding="8dp" android:padding="8dp"
android:visibility="gone"
android:src="@drawable/ic_content_paste_24dp" android:src="@drawable/ic_content_paste_24dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/password_edittext" app:layout_constraintBottom_toBottomOf="@id/password_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/password_edittext" app:layout_constraintStart_toEndOf="@id/password_edittext"
@ -160,15 +160,16 @@
android:layout_marginEnd="1dp" android:layout_marginEnd="1dp"
android:background="@drawable/button_bg_left" android:background="@drawable/button_bg_left"
android:text="@string/delete" android:text="@string/delete"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/done_editing_button" app:layout_constraintEnd_toStartOf="@id/done_editing_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/password_edittext" /> app:layout_constraintTop_toBottomOf="@id/password_edittext" />
<Button <Button
android:id="@+id/done_editing_button" android:id="@+id/done_editing_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginStart="1dp" android:layout_marginStart="1dp"
android:layout_marginTop="16dp"
android:background="@drawable/button_bg_right" android:background="@drawable/button_bg_right"
android:text="@string/done" android:text="@string/done"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -24,14 +24,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:textAlignment="center"
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
android:textAlignment="center"
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/sync_progress_bar"
app:layout_constraintEnd_toEndOf="@id/sync_progress_bar" app:layout_constraintEnd_toEndOf="@id/sync_progress_bar"
app:layout_constraintStart_toStartOf="@id/sync_progress_bar" app:layout_constraintStart_toStartOf="@id/sync_progress_bar"
app:layout_constraintTop_toTopOf="@id/sync_progress_bar" app:layout_constraintTop_toTopOf="@id/sync_progress_bar"
app:layout_constraintBottom_toBottomOf="@id/sync_progress_bar"
tools:text="Syncing... 3102333/40010203" /> tools:text="Syncing... 3102333/40010203" />
<TextView <TextView
@ -75,20 +75,22 @@
android:id="@+id/no_history_layout" android:id="@+id/no_history_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/balance_locked_textview" app:layout_constraintTop_toBottomOf="@id/balance_locked_textview"
android:visibility="gone"
tools:visibility="visible"> tools:visibility="visible">
<ImageView <ImageView
android:id="@+id/monerochan_imageview" android:id="@+id/monerochan_imageview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="400dp" android:layout_height="400dp"
android:src="@drawable/xmrchan_empty" android:src="@drawable/xmrchan_empty"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/monerochan_empty_tx_textview"
app:layout_constraintEnd_toStartOf="@id/monerochan_empty_tx_textview"/> app:layout_constraintStart_toStartOf="parent" />
<TextView <TextView
android:id="@+id/monerochan_empty_tx_textview" android:id="@+id/monerochan_empty_tx_textview"
android:layout_width="0dp" android:layout_width="0dp"
@ -97,19 +99,20 @@
android:text="@string/no_history_nget_some_monero_in_here" android:text="@string/no_history_nget_some_monero_in_here"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/monerochan_imageview" app:layout_constraintStart_toEndOf="@id/monerochan_imageview"
app:layout_constraintTop_toTopOf="@id/monerochan_imageview"/> app:layout_constraintTop_toTopOf="@id/monerochan_imageview" />
<TextView <TextView
android:id="@+id/empty_tx_textview" android:id="@+id/empty_tx_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAlignment="center"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:text="@string/no_history_nget_some_monero_in_here" android:text="@string/no_history_nget_some_monero_in_here"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<ImageView <ImageView
@ -134,11 +137,11 @@
android:id="@+id/receive_button" android:id="@+id/receive_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg_left" android:layout_marginStart="24dp"
android:text="@string/receive"
android:layout_marginEnd="1dp" android:layout_marginEnd="1dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:layout_marginStart="24dp" android:background="@drawable/button_bg_left"
android:text="@string/receive"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/send_button" app:layout_constraintEnd_toStartOf="@id/send_button"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
@ -147,11 +150,11 @@
android:id="@+id/send_button" android:id="@+id/send_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="24dp"
android:background="@drawable/button_bg_right" android:background="@drawable/button_bg_right"
android:text="@string/send" android:text="@string/send"
android:layout_marginStart="1dp"
android:layout_marginBottom="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/receive_button" /> app:layout_constraintStart_toEndOf="@id/receive_button" />
@ -162,10 +165,10 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:contentDescription="@string/settings"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:padding="8dp" android:padding="8dp"
android:contentDescription="@string/settings"
android:src="@drawable/ic_settings" android:src="@drawable/ic_settings"
app:layout_constraintBottom_toBottomOf="@id/balance_unlocked_textview" app:layout_constraintBottom_toBottomOf="@id/balance_unlocked_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -4,23 +4,27 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<ImageView <ImageView
android:id="@+id/xmrchan_onboarding_imageview" android:id="@+id/xmrchan_onboarding_imageview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scaleType="fitEnd"
android:adjustViewBounds="false" android:adjustViewBounds="false"
android:scaleType="fitEnd"
android:src="@drawable/xmrchan_half" android:src="@drawable/xmrchan_half"
app:layout_constraintBottom_toBottomOf="parent"/> app:layout_constraintBottom_toBottomOf="parent" />
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:paddingEnd="24dp"
android:paddingStart="24dp" android:paddingStart="24dp"
android:paddingTop="24dp"> android:paddingTop="24dp"
android:paddingEnd="24dp">
<TextView <TextView
android:id="@+id/create_wallet_textview" android:id="@+id/create_wallet_textview"
android:layout_width="0dp" android:layout_width="0dp"
@ -40,10 +44,10 @@
android:layout_height="32dp" android:layout_height="32dp"
android:src="@drawable/tor" android:src="@drawable/tor"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/onboarding_tor_loading_progressindicator"
app:layout_constraintEnd_toEndOf="@id/onboarding_tor_loading_progressindicator" app:layout_constraintEnd_toEndOf="@id/onboarding_tor_loading_progressindicator"
app:layout_constraintStart_toStartOf="@id/onboarding_tor_loading_progressindicator" app:layout_constraintStart_toStartOf="@id/onboarding_tor_loading_progressindicator"
app:layout_constraintTop_toTopOf="@id/onboarding_tor_loading_progressindicator" app:layout_constraintTop_toTopOf="@id/onboarding_tor_loading_progressindicator" />
app:layout_constraintBottom_toBottomOf="@id/onboarding_tor_loading_progressindicator"/>
<com.google.android.material.progressindicator.CircularProgressIndicator <com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/onboarding_tor_loading_progressindicator" android:id="@+id/onboarding_tor_loading_progressindicator"
@ -51,9 +55,9 @@
android:layout_height="32dp" android:layout_height="32dp"
android:indeterminate="true" android:indeterminate="true"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/create_wallet_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/create_wallet_textview" app:layout_constraintTop_toTopOf="@id/create_wallet_textview" />
app:layout_constraintBottom_toBottomOf="@id/create_wallet_textview"/>
<EditText <EditText
android:id="@+id/wallet_password_edittext" android:id="@+id/wallet_password_edittext"
@ -88,13 +92,13 @@
android:id="@+id/advanced_settings_dropdown_textview" android:id="@+id/advanced_settings_dropdown_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:text="@string/more_options" android:layout_marginBottom="8dp"
android:textStyle="bold"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:text="@string/more_options"
android:textSize="18sp" android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/more_options_layout" app:layout_constraintBottom_toTopOf="@id/more_options_layout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
@ -105,9 +109,9 @@
android:id="@+id/advanced_settings_chevron_imageview" android:id="@+id/advanced_settings_chevron_imageview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/display_advanced_wallet_creation_options"
android:minWidth="24dp" android:minWidth="24dp"
android:minHeight="24dp" android:minHeight="24dp"
android:contentDescription="@string/display_advanced_wallet_creation_options"
android:src="@drawable/ic_keyboard_arrow_down" android:src="@drawable/ic_keyboard_arrow_down"
app:layout_constraintBottom_toBottomOf="@id/advanced_settings_dropdown_textview" app:layout_constraintBottom_toBottomOf="@id/advanced_settings_dropdown_textview"
app:layout_constraintStart_toEndOf="@id/advanced_settings_dropdown_textview" app:layout_constraintStart_toEndOf="@id/advanced_settings_dropdown_textview"
@ -117,9 +121,10 @@
android:id="@+id/more_options_layout" android:id="@+id/more_options_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/advanced_settings_dropdown_textview"> app:layout_constraintTop_toBottomOf="@id/advanced_settings_dropdown_textview">
<TextView <TextView
android:id="@+id/disable_xmrchan_textview" android:id="@+id/disable_xmrchan_textview"
android:layout_width="0dp" android:layout_width="0dp"
@ -135,8 +140,8 @@
android:id="@+id/show_xmrchan_switch" android:id="@+id/show_xmrchan_switch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -145,37 +150,38 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
tools:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:ellipsize="middle" android:ellipsize="middle"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintBottom_toTopOf="@id/wallet_seed_layout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/wallet_seed_layout"
app:layout_constraintTop_toBottomOf="@id/show_xmrchan_switch" app:layout_constraintTop_toBottomOf="@id/show_xmrchan_switch"
tools:ignore="SpeakableTextPresentCheck" /> tools:ignore="SpeakableTextPresentCheck"
tools:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/wallet_seed_layout" android:id="@+id/wallet_seed_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/card"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/select_node_button" android:background="@drawable/card"
app:layout_constraintBottom_toTopOf="@id/wallet_proxy_layout"> app:layout_constraintBottom_toTopOf="@id/wallet_proxy_layout"
app:layout_constraintTop_toBottomOf="@id/select_node_button">
<Button <Button
android:id="@+id/seed_type_button" android:id="@+id/seed_type_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="32dp" android:layout_height="32dp"
android:background="@drawable/button_bg_small"
android:text="POLYSEED" android:text="POLYSEED"
android:textSize="12sp" android:textSize="12sp"
android:background="@drawable/button_bg_small" app:layout_constraintBottom_toTopOf="@id/seed_type_desc_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintBottom_toTopOf="@id/seed_type_desc_textview"/>
<TextView <TextView
android:id="@+id/seed_type_label_textview" android:id="@+id/seed_type_label_textview"
@ -183,21 +189,21 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Seed version" android:text="Seed version"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="@id/seed_type_button"
app:layout_constraintEnd_toStartOf="@id/seed_type_button" app:layout_constraintEnd_toStartOf="@id/seed_type_button"
app:layout_constraintTop_toTopOf="@id/seed_type_button" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/seed_type_button"/> app:layout_constraintTop_toTopOf="@id/seed_type_button" />
<TextView <TextView
android:id="@+id/seed_type_desc_textview" android:id="@+id/seed_type_desc_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/oled_addressListColor"
android:paddingBottom="16dp"
android:paddingTop="8dp" android:paddingTop="8dp"
android:paddingBottom="16dp"
android:text="16 words instead of 25; just as secure." android:text="16 words instead of 25; just as secure."
app:layout_constraintTop_toBottomOf="@id/seed_type_button" android:textColor="@color/oled_addressListColor"
app:layout_constraintBottom_toTopOf="@id/wallet_seed_edittext"/> app:layout_constraintBottom_toTopOf="@id/wallet_seed_edittext"
app:layout_constraintTop_toBottomOf="@id/seed_type_button" />
<EditText <EditText
android:id="@+id/wallet_seed_edittext" android:id="@+id/wallet_seed_edittext"
@ -215,12 +221,12 @@
android:id="@+id/wallet_restore_height_edittext" android:id="@+id/wallet_restore_height_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/restore_height_optional" android:hint="@string/restore_height_optional"
android:inputType="number" android:inputType="number"
android:minHeight="48dp" android:minHeight="48dp"
android:visibility="gone" android:visibility="gone"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@id/seed_offset_checkbox" app:layout_constraintBottom_toTopOf="@id/seed_offset_checkbox"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -233,10 +239,11 @@
android:minHeight="48dp" android:minHeight="48dp"
android:text="@string/use_password_as_seed_offset" android:text="@string/use_password_as_seed_offset"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_restore_height_edittext"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_restore_height_edittext" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/wallet_proxy_layout" android:id="@+id/wallet_proxy_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -244,6 +251,7 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:background="@drawable/card_no_top" android:background="@drawable/card_no_top"
app:layout_constraintTop_toBottomOf="@id/wallet_seed_layout"> app:layout_constraintTop_toBottomOf="@id/wallet_seed_layout">
<TextView <TextView
android:id="@+id/tor_onboarding_switch_label" android:id="@+id/tor_onboarding_switch_label"
android:layout_width="0dp" android:layout_width="0dp"
@ -259,20 +267,22 @@
android:id="@+id/tor_onboarding_switch" android:id="@+id/tor_onboarding_switch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<CheckBox <CheckBox
android:id="@+id/bundled_tor_checkbox" android:id="@+id/bundled_tor_checkbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="48dp" android:minHeight="48dp"
android:text="@string/use_bundled_tor" android:text="@string/use_bundled_tor"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/wallet_proxy_address_edittext" app:layout_constraintBottom_toTopOf="@id/wallet_proxy_address_edittext"
app:layout_constraintTop_toBottomOf="@id/tor_onboarding_switch"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tor_onboarding_switch" />
<EditText <EditText
android:id="@+id/wallet_proxy_address_edittext" android:id="@+id/wallet_proxy_address_edittext"
android:layout_width="0dp" android:layout_width="0dp"
@ -289,9 +299,9 @@
android:id="@+id/wallet_proxy_port_edittext" android:id="@+id/wallet_proxy_port_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/wallet_proxy_port_hint" android:hint="@string/wallet_proxy_port_hint"
android:layout_marginTop="8dp"
android:inputType="number" android:inputType="number"
android:minHeight="48dp" android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
@ -300,14 +310,15 @@
app:layout_constraintTop_toBottomOf="@id/wallet_proxy_address_edittext" /> app:layout_constraintTop_toBottomOf="@id/wallet_proxy_address_edittext" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<Button <Button
android:id="@+id/create_wallet_button" android:id="@+id/create_wallet_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/create_wallet"
android:enabled="false" android:enabled="false"
android:text="@string/create_wallet"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/more_options_layout" /> app:layout_constraintTop_toBottomOf="@id/more_options_layout" />

View file

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:padding="24dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:padding="24dp">
<TextView <TextView
android:id="@+id/recv_monero_textview" android:id="@+id/recv_monero_textview"
@ -25,13 +24,13 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:src="@drawable/ic_refresh" android:contentDescription="@string/generate_fresh_wallet_address"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/generate_fresh_wallet_address" android:src="@drawable/ic_refresh"
app:layout_constraintBottom_toBottomOf="@id/recv_monero_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/recv_monero_textview" app:layout_constraintTop_toTopOf="@id/recv_monero_textview"
app:layout_constraintBottom_toBottomOf="@id/recv_monero_textview"
app:tint="@color/oled_textColorPrimary" /> app:tint="@color/oled_textColorPrimary" />
<ImageView <ImageView
@ -58,18 +57,18 @@
android:id="@+id/address_textview" android:id="@+id/address_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:textSize="16sp" android:layout_marginEnd="8dp"
android:textStyle="bold"
android:ellipsize="middle" android:ellipsize="middle"
android:singleLine="true"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:singleLine="true"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/address_label_textview"
app:layout_constraintEnd_toStartOf="@id/copy_address_imagebutton" app:layout_constraintEnd_toStartOf="@id/copy_address_imagebutton"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/monero_qr_imageview" app:layout_constraintTop_toBottomOf="@id/monero_qr_imageview"
app:layout_constraintBottom_toTopOf="@id/address_label_textview"
tools:text="ADDRESS" /> tools:text="ADDRESS" />
<TextView <TextView
@ -78,11 +77,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:textSize="14sp"
android:ellipsize="middle" android:ellipsize="middle"
android:singleLine="true"
android:paddingStart="8dp" android:paddingStart="8dp"
android:paddingEnd="8dp" android:paddingEnd="8dp"
android:singleLine="true"
android:textSize="14sp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_textview" app:layout_constraintTop_toBottomOf="@id/address_textview"
tools:text="LABEL" /> tools:text="LABEL" />
@ -91,11 +90,11 @@
android:id="@+id/copy_address_imagebutton" android:id="@+id/copy_address_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:background="@android:color/transparent"
android:contentDescription="@string/copy_selected_wallet_address"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/copy_selected_wallet_address"
android:src="@drawable/ic_content_copy_24dp" android:src="@drawable/ic_content_copy_24dp"
app:layout_constraintBottom_toTopOf="@id/address_list_recyclerview" app:layout_constraintBottom_toTopOf="@id/address_list_recyclerview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -108,20 +107,20 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:textSize="14sp"
android:ellipsize="middle" android:ellipsize="middle"
android:singleLine="true" android:singleLine="true"
android:text="@string/previous_addresses"
android:textSize="14sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/address_list_recyclerview" app:layout_constraintBottom_toTopOf="@id/address_list_recyclerview"
android:text="@string/previous_addresses" /> app:layout_constraintStart_toStartOf="parent" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/address_list_recyclerview" android:id="@+id/address_list_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:background="@drawable/round_bg"
android:layout_marginTop="64dp" android:layout_marginTop="64dp"
android:background="@drawable/round_bg"
android:clipToPadding="true" android:clipToPadding="true"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -4,227 +4,232 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<TextView
android:id="@+id/send_monero_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/send_monero"
android:layout_marginTop="24dp"
android:layout_marginStart="24dp"
android:textSize="32sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/top_controls"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout <TextView
android:id="@+id/top_controls" android:id="@+id/send_monero_textview"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp" android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@id/send_monero_textview" android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent" android:text="@string/send_monero"
app:layout_constraintStart_toEndOf="@id/send_monero_textview" android:textSize="32sp"
app:layout_constraintTop_toTopOf="@id/send_monero_textview"> android:textStyle="bold"
<Button app:layout_constraintEnd_toStartOf="@id/top_controls"
android:id="@+id/send_max_button" app:layout_constraintStart_toStartOf="parent"
android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="parent" />
android:layout_height="wrap_content"
android:background="@drawable/button_bg"
android:text="@string/send_max"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/add_output_button"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<ImageButton <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/add_output_button" android:id="@+id/top_controls"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:layout_marginEnd="24dp"
android:minWidth="48dp" app:layout_constraintBottom_toBottomOf="@id/send_monero_textview"
android:minHeight="48dp" app:layout_constraintEnd_toEndOf="parent"
android:contentDescription="@string/add_recipient_to_transaction" app:layout_constraintStart_toEndOf="@id/send_monero_textview"
android:src="@android:drawable/ic_input_add" app:layout_constraintTop_toTopOf="@id/send_monero_textview">
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/send_max_button"
tools:ignore="SpeakableTextPresentCheck"
tools:visibility="visible"
app:tint="@color/oled_textColorPrimary" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- CREATE LAYOUT -->
<TextView
android:id="@+id/selected_utxos_value_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:text="@string/selected_utxos_value"
android:textSize="14sp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_monero_textview" />
<TextView
android:id="@+id/tx_fee_radiogroup_label_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fee_priority"
android:layout_marginStart="24dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/tx_fee_radiogroup"
app:layout_constraintTop_toTopOf="@id/tx_fee_radiogroup"
app:layout_constraintBottom_toBottomOf="@id/tx_fee_radiogroup"/>
<RadioGroup
android:id="@+id/tx_fee_radiogroup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginStart="8dp"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toTopOf="@id/create_tx_button"
app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview"
app:layout_constraintEnd_toEndOf="parent">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="48dp"
android:text="@string/low"
android:id="@+id/low_fee_radiobutton"
android:checked="true"
android:textSize="16sp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="48dp"
android:text="@string/medium"
android:id="@+id/med_fee_radiobutton"
android:checked="false"
android:textSize="16sp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="48dp"
android:text="@string/high"
android:id="@+id/high_fee_radiobutton"
android:checked="false"
android:textSize="16sp"/>
</RadioGroup>
<Button <Button
android:id="@+id/create_tx_button" android:id="@+id/send_max_button"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/create" android:text="@string/send_max"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:layout_marginBottom="24dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/add_output_button"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" /> tools:visibility="visible" />
<ScrollView <ImageButton
android:id="@+id/add_output_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:contentDescription="@string/add_recipient_to_transaction"
android:minWidth="48dp"
android:minHeight="48dp"
android:src="@android:drawable/ic_input_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/send_max_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/oled_textColorPrimary"
tools:ignore="SpeakableTextPresentCheck"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- CREATE LAYOUT -->
<TextView
android:id="@+id/selected_utxos_value_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:text="@string/selected_utxos_value"
android:textSize="14sp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_monero_textview" />
<TextView
android:id="@+id/tx_fee_radiogroup_label_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="@string/fee_priority"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/tx_fee_radiogroup"
app:layout_constraintEnd_toStartOf="@id/tx_fee_radiogroup"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tx_fee_radiogroup" />
<RadioGroup
android:id="@+id/tx_fee_radiogroup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="24dp"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@id/create_tx_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview">
<RadioButton
android:id="@+id/low_fee_radiobutton"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:checked="true"
android:text="@string/low"
android:textSize="16sp" />
<RadioButton
android:id="@+id/med_fee_radiobutton"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:checked="false"
android:text="@string/medium"
android:textSize="16sp" />
<RadioButton
android:id="@+id/high_fee_radiobutton"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:checked="false"
android:text="@string/high"
android:textSize="16sp" />
</RadioGroup>
<Button
android:id="@+id/create_tx_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="24dp"
android:background="@drawable/button_bg"
android:text="@string/create"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:fillViewport="true"
android:fitsSystemWindows="true"
app:layout_constraintBottom_toTopOf="@id/tx_fee_radiogroup"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/selected_utxos_value_textview">
<LinearLayout
android:id="@+id/transaction_destination_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:fillViewport="true" android:layout_marginTop="8dp"
android:fitsSystemWindows="true" android:clickable="false"
app:layout_constraintBottom_toTopOf="@id/tx_fee_radiogroup" android:clipToPadding="false"
app:layout_constraintEnd_toEndOf="parent" android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent" android:paddingBottom="128dp">
app:layout_constraintTop_toBottomOf="@id/selected_utxos_value_textview">
<LinearLayout
android:id="@+id/transaction_destination_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:paddingBottom="128dp"
android:clickable="false"
android:clipToPadding="false"
android:orientation="vertical"
>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
<!-- SEND LAYOUT --> <!-- SEND LAYOUT -->
<TextView <TextView
android:id="@+id/address_pending_textview" android:id="@+id/address_pending_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginStart="24dp"
android:ellipsize="middle" android:layout_marginTop="16dp"
android:singleLine="true" android:layout_marginEnd="24dp"
android:text="@string/tx_address_text" android:ellipsize="middle"
android:textSize="16sp" android:singleLine="true"
android:textStyle="bold" android:text="@string/tx_address_text"
android:visibility="gone" android:textSize="16sp"
android:layout_marginStart="24dp" android:textStyle="bold"
android:layout_marginEnd="24dp" android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_monero_textview" app:layout_constraintTop_toBottomOf="@id/send_monero_textview"
tools:visibility="gone" /> tools:visibility="gone" />
<TextView <TextView
android:id="@+id/amount_pending_textview" android:id="@+id/amount_pending_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginStart="24dp"
android:text="@string/tx_amount_text" android:layout_marginTop="16dp"
android:textSize="16sp" android:layout_marginEnd="24dp"
android:textStyle="bold" android:text="@string/tx_amount_text"
android:visibility="gone" android:textSize="16sp"
android:layout_marginStart="24dp" android:textStyle="bold"
android:layout_marginEnd="24dp" android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_pending_textview" app:layout_constraintTop_toBottomOf="@id/address_pending_textview"
tools:visibility="gone" /> tools:visibility="gone" />
<TextView <TextView
android:id="@+id/fee_textview" android:id="@+id/fee_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginStart="24dp"
android:text="@string/tx_fee_text" android:layout_marginTop="16dp"
android:textSize="16sp" android:layout_marginEnd="24dp"
android:textStyle="bold" android:text="@string/tx_fee_text"
android:visibility="gone" android:textSize="16sp"
android:layout_marginStart="24dp" android:textStyle="bold"
android:layout_marginEnd="24dp" android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/amount_pending_textview" app:layout_constraintTop_toBottomOf="@id/amount_pending_textview"
tools:visibility="gone" /> tools:visibility="gone" />
<com.ncorti.slidetoact.SlideToActView <com.ncorti.slidetoact.SlideToActView
android:id="@+id/send_tx_slider" android:id="@+id/send_tx_slider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginEnd="32dp" android:layout_marginEnd="32dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:elevation="6dp" android:contentDescription="@string/slide_to_send_transaction"
android:visibility="gone" android:elevation="6dp"
android:importantForAccessibility="yes" android:focusable="true"
android:contentDescription="@string/slide_to_send_transaction" android:importantForAccessibility="yes"
app:area_margin="10dp" android:visibility="gone"
app:border_radius="20dp" app:area_margin="10dp"
app:inner_color="@android:color/white" app:border_radius="20dp"
app:outer_color="@color/oled_colorSecondary" app:inner_color="@android:color/white"
app:slider_height="72dp" app:layout_constraintBottom_toBottomOf="parent"
app:slider_locked="false" app:layout_constraintStart_toStartOf="parent"
app:text="@string/slide_to_send" app:outer_color="@color/oled_colorSecondary"
android:focusable="true" app:slider_height="72dp"
app:layout_constraintBottom_toBottomOf="parent" app:slider_locked="false"
app:layout_constraintStart_toStartOf="parent" app:text="@string/slide_to_send"
app:text_size="18sp" app:text_size="18sp"
tools:visibility="visible"/> tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -5,6 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="net.mynero.wallet.fragment.settings.SettingsFragment"> tools:context="net.mynero.wallet.fragment.settings.SettingsFragment">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -13,24 +14,25 @@
android:id="@+id/settings_textview" android:id="@+id/settings_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/settings"
android:layout_marginTop="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="@string/settings"
android:textSize="32sp" android:textSize="32sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/settings_tor_loading_progressindicator" app:layout_constraintEnd_toStartOf="@id/settings_tor_loading_progressindicator"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView <ImageView
android:id="@+id/settings_tor_icon" android:id="@+id/settings_tor_icon"
android:layout_width="32dp" android:layout_width="32dp"
android:layout_height="32dp" android:layout_height="32dp"
android:layout_marginEnd="24dp"
android:src="@drawable/tor" android:src="@drawable/tor"
android:visibility="invisible" android:visibility="invisible"
android:layout_marginEnd="24dp" app:layout_constraintBottom_toBottomOf="@id/settings_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/settings_textview" app:layout_constraintTop_toTopOf="@id/settings_textview" />
app:layout_constraintBottom_toBottomOf="@id/settings_textview"/>
<com.google.android.material.progressindicator.CircularProgressIndicator <com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/settings_tor_loading_progressindicator" android:id="@+id/settings_tor_loading_progressindicator"
@ -38,20 +40,20 @@
android:layout_height="32dp" android:layout_height="32dp"
android:indeterminate="true" android:indeterminate="true"
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/settings_tor_icon"
app:layout_constraintEnd_toEndOf="@id/settings_tor_icon" app:layout_constraintEnd_toEndOf="@id/settings_tor_icon"
app:layout_constraintStart_toStartOf="@id/settings_tor_icon" app:layout_constraintStart_toStartOf="@id/settings_tor_icon"
app:layout_constraintTop_toTopOf="@id/settings_tor_icon" app:layout_constraintTop_toTopOf="@id/settings_tor_icon" />
app:layout_constraintBottom_toBottomOf="@id/settings_tor_icon"/>
<TextView <TextView
android:id="@+id/wallet_settings_textview" android:id="@+id/wallet_settings_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:layout_marginEnd="24dp"
android:text="@string/wallet" android:text="@string/wallet"
android:textSize="24sp" android:textSize="24sp"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -61,10 +63,10 @@
android:id="@+id/display_seed_button" android:id="@+id/display_seed_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/button_bg"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:background="@drawable/button_bg"
android:text="@string/display_recovery_phrase" android:text="@string/display_recovery_phrase"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
@ -75,10 +77,10 @@
android:id="@+id/display_utxos_button" android:id="@+id/display_utxos_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/button_bg"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:background="@drawable/button_bg"
android:text="@string/view_utxos" android:text="@string/view_utxos"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
@ -89,10 +91,10 @@
android:id="@+id/transaction_settings_textview" android:id="@+id/transaction_settings_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/transactions"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="24dp"
android:text="@string/transactions"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -103,9 +105,9 @@
android:id="@+id/donate_per_tx_label_textview" android:id="@+id/donate_per_tx_label_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="@string/option_donate_per_tx" android:text="@string/option_donate_per_tx"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@id/donate_per_tx_switch" app:layout_constraintBottom_toBottomOf="@id/donate_per_tx_switch"
app:layout_constraintEnd_toStartOf="@id/donate_per_tx_switch" app:layout_constraintEnd_toStartOf="@id/donate_per_tx_switch"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -115,11 +117,11 @@
android:id="@+id/donate_per_tx_desc_textview" android:id="@+id/donate_per_tx_desc_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/option_donate_per_tx_desc"
android:textSize="14sp"
android:textColor="@color/oled_addressListColor"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:text="@string/option_donate_per_tx_desc"
android:textColor="@color/oled_addressListColor"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/donate_per_tx_switch" /> app:layout_constraintTop_toBottomOf="@id/donate_per_tx_switch" />
@ -129,8 +131,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:minHeight="48dp"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_settings_textview" /> app:layout_constraintTop_toBottomOf="@id/transaction_settings_textview" />
@ -138,10 +140,10 @@
android:id="@+id/appearance_settings_textview" android:id="@+id/appearance_settings_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/appearance"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="24dp"
android:text="@string/appearance"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -152,9 +154,9 @@
android:id="@+id/street_mode_label_textview" android:id="@+id/street_mode_label_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="@string/street_mode" android:text="@string/street_mode"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@id/street_mode_switch" app:layout_constraintBottom_toBottomOf="@id/street_mode_switch"
app:layout_constraintEnd_toStartOf="@id/street_mode_switch" app:layout_constraintEnd_toStartOf="@id/street_mode_switch"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -164,10 +166,10 @@
android:id="@+id/street_mode_switch" android:id="@+id/street_mode_switch"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:minHeight="48dp"
android:minWidth="48dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/appearance_settings_textview" /> app:layout_constraintTop_toBottomOf="@id/appearance_settings_textview" />
@ -175,9 +177,9 @@
android:id="@+id/monerochan_label_textview" android:id="@+id/monerochan_label_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="@string/option_hide_xmrchan" android:text="@string/option_hide_xmrchan"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@id/monerochan_switch" app:layout_constraintBottom_toBottomOf="@id/monerochan_switch"
app:layout_constraintEnd_toStartOf="@id/monerochan_switch" app:layout_constraintEnd_toStartOf="@id/monerochan_switch"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -188,8 +190,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:minHeight="48dp"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/street_mode_switch" /> app:layout_constraintTop_toBottomOf="@id/street_mode_switch" />
@ -197,9 +199,9 @@
android:id="@+id/network_settings_textview" android:id="@+id/network_settings_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:text="@string/network" android:text="@string/network"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
@ -214,25 +216,25 @@
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
tools:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:ellipsize="middle" android:ellipsize="middle"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:singleLine="true" android:singleLine="true"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/network_settings_textview" app:layout_constraintTop_toBottomOf="@id/network_settings_textview"
tools:ignore="SpeakableTextPresentCheck" /> tools:ignore="SpeakableTextPresentCheck"
tools:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
<TextView <TextView
android:id="@+id/tor_textview" android:id="@+id/tor_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="@string/tor_switch_label" android:text="@string/tor_switch_label"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="@id/tor_switch" app:layout_constraintBottom_toBottomOf="@id/tor_switch"
app:layout_constraintEnd_toStartOf="@id/tor_switch" app:layout_constraintEnd_toStartOf="@id/tor_switch"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -244,8 +246,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:minHeight="48dp"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/select_node_button" /> app:layout_constraintTop_toBottomOf="@id/select_node_button" />
@ -254,29 +256,30 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="visible" android:visibility="visible"
app:layout_constraintTop_toBottomOf="@id/tor_switch" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintTop_toBottomOf="@id/tor_switch">
<CheckBox <CheckBox
android:id="@+id/bundled_tor_checkbox" android:id="@+id/bundled_tor_checkbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:minHeight="48dp" android:minHeight="48dp"
android:text="@string/use_bundled_tor" android:text="@string/use_bundled_tor"
android:visibility="visible" android:visibility="visible"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/wallet_proxy_address_edittext" app:layout_constraintBottom_toTopOf="@id/wallet_proxy_address_edittext"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText <EditText
android:id="@+id/wallet_proxy_address_edittext" android:id="@+id/wallet_proxy_address_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/wallet_proxy_address_hint" android:hint="@string/wallet_proxy_address_hint"
android:minHeight="48dp" android:minHeight="48dp"
@ -289,11 +292,11 @@
android:id="@+id/wallet_proxy_port_edittext" android:id="@+id/wallet_proxy_port_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/edittext_bg"
android:hint="@string/wallet_proxy_port_hint"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:background="@drawable/edittext_bg"
android:hint="@string/wallet_proxy_port_hint"
android:inputType="number" android:inputType="number"
android:minHeight="48dp" android:minHeight="48dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"

View file

@ -13,9 +13,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:text="@string/transaction_action_recv" android:text="@string/transaction_action_recv"
android:textColor="@color/oled_addressListColor"
android:textSize="42sp" android:textSize="42sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/oled_addressListColor"
app:layout_constraintBottom_toTopOf="@id/transaction_amount_textview" app:layout_constraintBottom_toTopOf="@id/transaction_amount_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -25,63 +25,63 @@
android:id="@+id/transaction_amount_textview" android:id="@+id/transaction_amount_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="@string/tx_amount_no_prefix2" android:text="@string/tx_amount_no_prefix2"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_action_textview"/> app:layout_constraintTop_toBottomOf="@id/transaction_action_textview" />
<TextView <TextView
android:id="@+id/transaction_amount_units_textview" android:id="@+id/transaction_amount_units_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="XMR"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:ellipsize="middle"
android:singleLine="true"
android:text="XMR"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true"
android:ellipsize="middle"
app:layout_constraintStart_toEndOf="@id/transaction_amount_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_action_textview"/> app:layout_constraintStart_toEndOf="@id/transaction_amount_textview"
app:layout_constraintTop_toBottomOf="@id/transaction_action_textview" />
<TextView <TextView
android:id="@+id/transaction_address_label_textview" android:id="@+id/transaction_address_label_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/transaction_destination_desc"
android:textSize="28sp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:textStyle="bold" android:text="@string/transaction_destination_desc"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_amount_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_amount_textview" />
<TextView <TextView
android:id="@+id/transaction_address_textview" android:id="@+id/transaction_address_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="@string/transaction_destination" android:text="@string/transaction_destination"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true" app:layout_constraintBottom_toBottomOf="@id/copy_txaddress_imagebutton"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/copy_txaddress_imagebutton" app:layout_constraintEnd_toStartOf="@id/copy_txaddress_imagebutton"
app:layout_constraintTop_toTopOf="@id/copy_txaddress_imagebutton" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/copy_txaddress_imagebutton"/> app:layout_constraintTop_toTopOf="@id/copy_txaddress_imagebutton" />
<ImageButton <ImageButton
android:id="@+id/copy_txaddress_imagebutton" android:id="@+id/copy_txaddress_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/copy_transaction_addr"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/copy_transaction_addr"
android:src="@drawable/ic_content_copy_24dp" android:src="@drawable/ic_content_copy_24dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/transaction_address_textview" app:layout_constraintStart_toEndOf="@id/transaction_address_textview"
@ -91,37 +91,37 @@
android:id="@+id/transaction_hash_label_textview" android:id="@+id/transaction_hash_label_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/transaction_hash_desc"
android:textSize="28sp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:textStyle="bold" android:text="@string/transaction_hash_desc"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/copy_txaddress_imagebutton"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/copy_txaddress_imagebutton" />
<TextView <TextView
android:id="@+id/transaction_hash_textview" android:id="@+id/transaction_hash_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="@string/transaction_hash" android:text="@string/transaction_hash"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true" app:layout_constraintBottom_toBottomOf="@id/copy_txhash_imagebutton"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/copy_txhash_imagebutton" app:layout_constraintEnd_toStartOf="@id/copy_txhash_imagebutton"
app:layout_constraintTop_toTopOf="@id/copy_txhash_imagebutton" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/copy_txhash_imagebutton"/> app:layout_constraintTop_toTopOf="@id/copy_txhash_imagebutton" />
<ImageButton <ImageButton
android:id="@+id/copy_txhash_imagebutton" android:id="@+id/copy_txhash_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/copy_transaction_hash"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/copy_transaction_hash"
android:src="@drawable/ic_content_copy_24dp" android:src="@drawable/ic_content_copy_24dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/transaction_hash_textview" app:layout_constraintStart_toEndOf="@id/transaction_hash_textview"
@ -133,75 +133,75 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:text="@string/transaction_on_date_label" android:text="@string/transaction_on_date_label"
android:textColor="@color/oled_addressListColor"
android:textSize="28sp" android:textSize="28sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/copy_txhash_imagebutton"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/copy_txhash_imagebutton" />
<TextView <TextView
android:id="@+id/transaction_date_textview" android:id="@+id/transaction_date_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="0" android:text="0"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_date_label_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_date_label_textview" />
<TextView <TextView
android:id="@+id/transaction_conf_label_textview" android:id="@+id/transaction_conf_label_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/transaction_conf_desc"
android:textSize="28sp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:textStyle="bold" android:text="@string/transaction_conf_desc"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_date_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_date_textview" />
<TextView <TextView
android:id="@+id/transaction_conf_textview" android:id="@+id/transaction_conf_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="0" android:text="0"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_label_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_label_textview" />
<TextView <TextView
android:id="@+id/transaction_conf_label2_textview" android:id="@+id/transaction_conf_label2_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/transaction_conf_desc2_confirmed" android:text="@string/transaction_conf_desc2_confirmed"
android:textColor="@color/oled_addressListColor"
android:textSize="28sp" android:textSize="28sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_textview" />
<TextView <TextView
android:id="@+id/tx_block_height_textview" android:id="@+id/tx_block_height_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="0" android:text="0"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:singleLine="true"
android:ellipsize="middle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_label2_textview"/> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/transaction_conf_label2_textview" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -10,12 +10,12 @@
android:id="@+id/view_utxos_textview" android:id="@+id/view_utxos_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:text="@string/view_utxos" android:text="@string/view_utxos"
android:textSize="32sp" android:textSize="32sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_marginTop="24dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -48,8 +48,8 @@
android:id="@+id/freeze_utxos_button" android:id="@+id/freeze_utxos_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg_left"
android:layout_marginEnd="1dp" android:layout_marginEnd="1dp"
android:background="@drawable/button_bg_left"
android:text="@string/freeze" android:text="@string/freeze"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/churn_utxos_button" app:layout_constraintEnd_toStartOf="@id/churn_utxos_button"
@ -69,8 +69,8 @@
android:id="@+id/send_utxos_button" android:id="@+id/send_utxos_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg_right"
android:layout_marginStart="1dp" android:layout_marginStart="1dp"
android:background="@drawable/button_bg_right"
android:text="@string/send" android:text="@string/send"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -4,8 +4,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true"
android:background="@color/oled_dialogBackgroundColor" android:background="@color/oled_dialogBackgroundColor"
android:fillViewport="true"
android:padding="24dp"> android:padding="24dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@ -29,24 +29,24 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/add_node"
android:textSize="12sp"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
app:layout_constraintStart_toEndOf="@id/nodes_textview" android:text="@string/add_node"
app:layout_constraintTop_toTopOf="parent" android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@id/node_selection_recyclerview" app:layout_constraintBottom_toTopOf="@id/node_selection_recyclerview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/nodes_textview"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" /> tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/node_selection_recyclerview" android:id="@+id/node_selection_recyclerview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingBottom="128dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:clipToPadding="false"
android:nestedScrollingEnabled="false" android:nestedScrollingEnabled="false"
android:paddingBottom="128dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View file

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="8dp" android:layout_marginBottom="8dp"
android:layout_marginBottom="8dp"> android:padding="8dp">
<ImageView <ImageView
android:id="@+id/anonymity_network_imageview" android:id="@+id/anonymity_network_imageview"
android:layout_width="20dp" android:layout_width="20dp"
@ -13,58 +13,62 @@
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:src="@drawable/ic_fingerprint" android:src="@drawable/ic_fingerprint"
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/node_uri_textview" app:layout_constraintBottom_toTopOf="@id/node_uri_textview"
app:layout_constraintEnd_toStartOf="@id/node_name_textview"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/node_name_textview"/> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/node_name_textview" android:id="@+id/node_name_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Node Name" android:text="Node Name"
android:textStyle="bold"
android:textSize="16sp" android:textSize="16sp"
app:layout_constraintStart_toEndOf="@id/anonymity_network_imageview" android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/node_uri_textview" app:layout_constraintBottom_toTopOf="@id/node_uri_textview"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/anonymity_network_imageview"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/node_uri_textview" android:id="@+id/node_uri_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="NODE::"
android:ellipsize="middle" android:ellipsize="middle"
app:layout_constraintTop_toBottomOf="@id/node_name_textview" android:singleLine="true"
app:layout_constraintStart_toStartOf="parent" android:text="NODE::"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:singleLine="true" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/node_name_textview" />
<TextView <TextView
android:id="@+id/authenticated_textview" android:id="@+id/authenticated_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/auth"
android:textColor="@color/oled_addressListColor"
android:ellipsize="middle"
android:visibility="gone"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:layout_marginEnd="4dp" android:layout_marginEnd="4dp"
app:layout_constraintTop_toBottomOf="@id/node_uri_textview" android:ellipsize="middle"
android:singleLine="true"
android:text="@string/auth"
android:textColor="@color/oled_addressListColor"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/trusted_node_textview" app:layout_constraintEnd_toStartOf="@id/trusted_node_textview"
android:singleLine="true" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/node_uri_textview" />
<TextView <TextView
android:id="@+id/trusted_node_textview" android:id="@+id/trusted_node_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/trusted"
android:textColor="@color/oled_addressListColor"
android:ellipsize="middle"
android:visibility="gone"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:layout_marginEnd="4dp" android:layout_marginEnd="4dp"
app:layout_constraintTop_toBottomOf="@id/node_uri_textview" android:ellipsize="middle"
android:singleLine="true"
android:text="@string/trusted"
android:textColor="@color/oled_addressListColor"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/authenticated_textview" app:layout_constraintStart_toEndOf="@id/authenticated_textview"
android:singleLine="true" /> app:layout_constraintTop_toBottomOf="@id/node_uri_textview" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -14,11 +14,11 @@
android:id="@+id/enter_password_textview" android:id="@+id/enter_password_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:text="@string/enter_password" android:text="@string/enter_password"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:layout_marginTop="24dp"
android:textSize="32sp" android:textSize="32sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/wallet_password_edittext" app:layout_constraintBottom_toTopOf="@id/wallet_password_edittext"
@ -30,9 +30,9 @@
android:id="@+id/wallet_password_edittext" android:id="@+id/wallet_password_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginBottom="32dp" android:layout_marginBottom="32dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:layout_marginStart="24dp"
android:hint="@string/password" android:hint="@string/password"
android:inputType="textPassword" android:inputType="textPassword"
app:layout_constraintBottom_toTopOf="@id/unlock_wallet_button" app:layout_constraintBottom_toTopOf="@id/unlock_wallet_button"
@ -47,10 +47,10 @@
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/paste_clipboard_into_passphrase_field"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:src="@drawable/ic_content_paste_24dp" android:src="@drawable/ic_content_paste_24dp"
android:contentDescription="@string/paste_clipboard_into_passphrase_field"
app:layout_constraintBottom_toBottomOf="@id/wallet_password_edittext" app:layout_constraintBottom_toBottomOf="@id/wallet_password_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/wallet_password_edittext" app:layout_constraintStart_toEndOf="@id/wallet_password_edittext"
@ -60,11 +60,11 @@
android:id="@+id/unlock_wallet_button" android:id="@+id/unlock_wallet_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/button_bg"
android:text="@string/unlock"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:background="@drawable/button_bg"
android:text="@string/unlock"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_password_edittext" /> app:layout_constraintTop_toBottomOf="@id/wallet_password_edittext" />

View file

@ -6,6 +6,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/oled_dialogBackgroundColor" android:background="@color/oled_dialogBackgroundColor"
android:fitsSystemWindows="true"> android:fitsSystemWindows="true">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -14,22 +15,23 @@
android:id="@+id/send_monero_textview" android:id="@+id/send_monero_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/send_monero" android:layout_marginStart="24dp"
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:text="@string/send_monero"
android:textSize="32sp" android:textSize="32sp"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/selected_utxos_value_textview" app:layout_constraintBottom_toTopOf="@id/selected_utxos_value_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/selected_utxos_value_textview" android:id="@+id/selected_utxos_value_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:text="@string/selected_utxos_value" android:text="@string/selected_utxos_value"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone" android:visibility="gone"
@ -37,14 +39,15 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_monero_textview" /> app:layout_constraintTop_toBottomOf="@id/send_monero_textview" />
<EditText <EditText
android:id="@+id/address_edittext" android:id="@+id/address_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:layout_marginStart="24dp"
android:ellipsize="middle" android:ellipsize="middle"
android:hint="@string/address" android:hint="@string/address"
android:singleLine="true" android:singleLine="true"
@ -53,17 +56,19 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/selected_utxos_value_textview" app:layout_constraintTop_toBottomOf="@id/selected_utxos_value_textview"
tools:visibility="visible" /> tools:visibility="visible" />
<TextView <TextView
android:id="@+id/donate_label_textview" android:id="@+id/donate_label_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/donate_label"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:text="@string/donate_label"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/amount_edittext"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_edittext" app:layout_constraintTop_toBottomOf="@id/address_edittext" />
app:layout_constraintBottom_toTopOf="@id/amount_edittext"/>
<ImageButton <ImageButton
android:id="@+id/paste_address_imagebutton" android:id="@+id/paste_address_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -85,10 +90,10 @@
android:id="@+id/scan_address_imagebutton" android:id="@+id/scan_address_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:layout_marginEnd="24dp"
android:src="@drawable/ic_scan" android:src="@drawable/ic_scan"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -101,9 +106,9 @@
android:id="@+id/amount_edittext" android:id="@+id/amount_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:layout_marginStart="24dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/amount" android:hint="@string/amount"
android:inputType="numberDecimal" android:inputType="numberDecimal"
@ -116,11 +121,11 @@
android:id="@+id/sending_all_textview" android:id="@+id/sending_all_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:text="@string/sending_all" android:text="@string/sending_all"
android:layout_marginStart="24dp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/amount_edittext" app:layout_constraintBottom_toBottomOf="@id/amount_edittext"
@ -133,9 +138,9 @@
android:id="@+id/send_max_button" android:id="@+id/send_max_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/send_max" android:text="@string/send_max"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toBottomOf="@id/amount_edittext" app:layout_constraintBottom_toBottomOf="@id/amount_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/amount_edittext" app:layout_constraintStart_toEndOf="@id/amount_edittext"
@ -146,56 +151,59 @@
android:id="@+id/tx_fee_radiogroup_label_textview" android:id="@+id/tx_fee_radiogroup_label_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/fee_priority"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:text="@string/fee_priority"
android:textSize="16sp" android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="@id/tx_fee_radiogroup"
app:layout_constraintEnd_toStartOf="@id/tx_fee_radiogroup" app:layout_constraintEnd_toStartOf="@id/tx_fee_radiogroup"
app:layout_constraintTop_toTopOf="@id/tx_fee_radiogroup" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/tx_fee_radiogroup"/> app:layout_constraintTop_toTopOf="@id/tx_fee_radiogroup" />
<RadioGroup <RadioGroup
android:id="@+id/tx_fee_radiogroup" android:id="@+id/tx_fee_radiogroup"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
app:layout_constraintTop_toBottomOf="@id/send_max_button" android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@id/create_tx_button" app:layout_constraintBottom_toTopOf="@id/create_tx_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview" app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview"
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintTop_toBottomOf="@id/send_max_button">
<RadioButton <RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/low"
android:id="@+id/low_fee_radiobutton" android:id="@+id/low_fee_radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" android:checked="true"
android:text="@string/low"
android:textSize="16sp" /> android:textSize="16sp" />
<RadioButton <RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/medium"
android:id="@+id/med_fee_radiobutton" android:id="@+id/med_fee_radiobutton"
android:checked="false"
android:textSize="16sp"/>
<RadioButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/high"
android:id="@+id/high_fee_radiobutton"
android:checked="false" android:checked="false"
android:textSize="16sp"/> android:text="@string/medium"
android:textSize="16sp" />
<RadioButton
android:id="@+id/high_fee_radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="@string/high"
android:textSize="16sp" />
</RadioGroup> </RadioGroup>
<Button <Button
android:id="@+id/create_tx_button" android:id="@+id/create_tx_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/create" android:text="@string/create"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tx_fee_radiogroup_label_textview" app:layout_constraintTop_toBottomOf="@id/tx_fee_radiogroup_label_textview"
@ -207,15 +215,15 @@
android:id="@+id/address_pending_textview" android:id="@+id/address_pending_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ellipsize="middle" android:ellipsize="middle"
android:singleLine="true" android:singleLine="true"
android:text="@string/tx_address_text" android:text="@string/tx_address_text"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toTopOf="@id/amount_pending_textview" app:layout_constraintBottom_toTopOf="@id/amount_pending_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -226,13 +234,13 @@
android:id="@+id/amount_pending_textview" android:id="@+id/amount_pending_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:text="@string/tx_amount_text" android:text="@string/tx_amount_text"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toTopOf="@id/fee_textview" app:layout_constraintBottom_toTopOf="@id/fee_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -243,13 +251,13 @@
android:id="@+id/fee_textview" android:id="@+id/fee_textview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:text="@string/tx_fee_text" android:text="@string/tx_fee_text"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintBottom_toTopOf="@id/send_tx_button" app:layout_constraintBottom_toTopOf="@id/send_tx_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -260,13 +268,13 @@
android:id="@+id/send_tx_button" android:id="@+id/send_tx_button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:layout_marginBottom="16dp"
android:background="@drawable/button_bg" android:background="@drawable/button_bg"
android:text="@string/send" android:text="@string/send"
android:visibility="gone" android:visibility="gone"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fee_textview" app:layout_constraintTop_toBottomOf="@id/fee_textview"

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -20,10 +19,10 @@
android:visibility="visible" android:visibility="visible"
app:indicatorInset="0dp" app:indicatorInset="0dp"
app:indicatorSize="30dp" app:indicatorSize="30dp"
app:trackThickness="4dp" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/> app:trackThickness="4dp" />
<TextView <TextView
android:id="@+id/tvConfirmations" android:id="@+id/tvConfirmations"
@ -33,42 +32,42 @@
android:paddingBottom="1dp" android:paddingBottom="1dp"
android:text="8" android:text="8"
android:visibility="visible" android:visibility="visible"
app:layout_constraintTop_toTopOf="@id/pbConfirmations"
app:layout_constraintBottom_toBottomOf="@id/pbConfirmations" app:layout_constraintBottom_toBottomOf="@id/pbConfirmations"
app:layout_constraintEnd_toEndOf="@id/pbConfirmations"
app:layout_constraintStart_toStartOf="@id/pbConfirmations" app:layout_constraintStart_toStartOf="@id/pbConfirmations"
app:layout_constraintEnd_toEndOf="@id/pbConfirmations"/> app:layout_constraintTop_toTopOf="@id/pbConfirmations" />
<TextView <TextView
android:id="@+id/tx_amount" android:id="@+id/tx_amount"
style="@style/MoneroText.PosAmount" style="@style/MoneroText.PosAmount"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="+ 999.999999"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
app:layout_constraintBottom_toTopOf="@id/tx_failed" app:layout_constraintBottom_toTopOf="@id/tx_failed"
app:layout_constraintTop_toTopOf="@id/pbConfirmations" app:layout_constraintEnd_toStartOf="@id/tx_datetime"
app:layout_constraintStart_toEndOf="@id/pbConfirmations" app:layout_constraintStart_toEndOf="@id/pbConfirmations"
app:layout_constraintEnd_toStartOf="@id/tx_datetime"/> app:layout_constraintTop_toTopOf="@id/pbConfirmations"
tools:text="+ 999.999999" />
<TextView <TextView
android:id="@+id/tx_failed" android:id="@+id/tx_failed"
style="@style/MoneroText.PosFee" style="@style/MoneroText.PosFee"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/tx_list_failed_text" android:text="@string/tx_list_failed_text"
android:visibility="gone" android:visibility="gone"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="@id/pbConfirmations" app:layout_constraintBottom_toBottomOf="@id/pbConfirmations"
app:layout_constraintStart_toEndOf="@id/pbConfirmations" app:layout_constraintStart_toEndOf="@id/pbConfirmations"
app:layout_constraintTop_toBottomOf="@id/tx_amount"/> app:layout_constraintTop_toBottomOf="@id/tx_amount" />
<TextView <TextView
android:id="@+id/tx_datetime" android:id="@+id/tx_datetime"
style="@style/MoneroText.PosDate" style="@style/MoneroText.PosDate"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="2017-05-22 21:32" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/> tools:text="2017-05-22 21:32" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -15,48 +14,49 @@
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:hint="@string/amount" android:hint="@string/amount"
android:inputType="numberDecimal" android:inputType="numberDecimal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/address_edittext" app:layout_constraintBottom_toTopOf="@id/address_edittext"
app:layout_constraintEnd_toStartOf="@id/paste_amount_imagebutton" app:layout_constraintEnd_toStartOf="@id/paste_amount_imagebutton"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" /> tools:visibility="visible" />
<TextView <TextView
android:id="@+id/sending_all_textview" android:id="@+id/sending_all_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:text="@string/sending_all" android:text="@string/sending_all"
android:layout_marginStart="24dp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/address_edittext" app:layout_constraintBottom_toTopOf="@id/address_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="gone" /> tools:visibility="gone" />
<TextView <TextView
android:id="@+id/to_address_label_textview" android:id="@+id/to_address_label_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/to"
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:text="@string/to"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/address_edittext"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toStartOf="@id/address_edittext"/> app:layout_constraintEnd_toStartOf="@id/address_edittext"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/address_edittext" />
<EditText <EditText
android:id="@+id/address_edittext" android:id="@+id/address_edittext"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="4dp" android:layout_marginBottom="4dp"
android:background="@drawable/edittext_bg" android:background="@drawable/edittext_bg"
android:layout_marginStart="8dp"
android:ellipsize="middle" android:ellipsize="middle"
android:hint="@string/address" android:hint="@string/address"
android:singleLine="true" android:singleLine="true"
@ -64,15 +64,16 @@
app:layout_constraintStart_toEndOf="@id/to_address_label_textview" app:layout_constraintStart_toEndOf="@id/to_address_label_textview"
app:layout_constraintTop_toBottomOf="@id/amount_edittext" app:layout_constraintTop_toBottomOf="@id/amount_edittext"
tools:visibility="visible" /> tools:visibility="visible" />
<ImageButton <ImageButton
android:id="@+id/paste_amount_imagebutton" android:id="@+id/paste_amount_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/paste_clipboard_into_amount_field"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/paste_clipboard_into_amount_field"
android:src="@drawable/ic_content_paste_24dp" android:src="@drawable/ic_content_paste_24dp"
app:layout_constraintBottom_toBottomOf="@id/amount_edittext" app:layout_constraintBottom_toBottomOf="@id/amount_edittext"
app:layout_constraintEnd_toStartOf="@id/remove_output_imagebutton" app:layout_constraintEnd_toStartOf="@id/remove_output_imagebutton"
@ -80,15 +81,16 @@
app:layout_constraintTop_toTopOf="@id/amount_edittext" app:layout_constraintTop_toTopOf="@id/amount_edittext"
tools:ignore="SpeakableTextPresentCheck" tools:ignore="SpeakableTextPresentCheck"
tools:visibility="visible" /> tools:visibility="visible" />
<ImageButton <ImageButton
android:id="@+id/paste_address_imagebutton" android:id="@+id/paste_address_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/paste_clipboard_into_address_field"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/paste_clipboard_into_address_field"
android:src="@drawable/ic_content_paste_24dp" android:src="@drawable/ic_content_paste_24dp"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toStartOf="@id/scan_address_imagebutton" app:layout_constraintEnd_toStartOf="@id/scan_address_imagebutton"
@ -96,31 +98,33 @@
app:layout_constraintTop_toTopOf="@id/address_edittext" app:layout_constraintTop_toTopOf="@id/address_edittext"
tools:ignore="SpeakableTextPresentCheck" tools:ignore="SpeakableTextPresentCheck"
tools:visibility="visible" /> tools:visibility="visible" />
<ImageButton <ImageButton
android:id="@+id/scan_address_imagebutton" android:id="@+id/scan_address_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/scan_qr_code_for_address_field"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:layout_marginEnd="24dp"
android:src="@drawable/ic_scan" android:src="@drawable/ic_scan"
android:contentDescription="@string/scan_qr_code_for_address_field"
app:layout_constraintBottom_toBottomOf="@id/address_edittext" app:layout_constraintBottom_toBottomOf="@id/address_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/paste_address_imagebutton" app:layout_constraintStart_toEndOf="@id/paste_address_imagebutton"
app:layout_constraintTop_toTopOf="@id/address_edittext" app:layout_constraintTop_toTopOf="@id/address_edittext"
tools:ignore="SpeakableTextPresentCheck" tools:ignore="SpeakableTextPresentCheck"
tools:visibility="visible" /> tools:visibility="visible" />
<ImageButton <ImageButton
android:id="@+id/remove_output_imagebutton" android:id="@+id/remove_output_imagebutton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/remove_recipient_from_transaction"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:layout_marginEnd="24dp"
android:contentDescription="@string/remove_recipient_from_transaction"
android:src="@android:drawable/ic_delete" android:src="@android:drawable/ic_delete"
app:layout_constraintBottom_toBottomOf="@id/amount_edittext" app:layout_constraintBottom_toBottomOf="@id/amount_edittext"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View file

@ -1,145 +1,154 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="12dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:background="@drawable/round_bg"> android:background="@drawable/round_bg"
android:padding="12dp">
<TextView <TextView
android:id="@+id/utxo_coin_label" android:id="@+id/utxo_coin_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Coin" android:text="Coin"
android:textStyle="bold"
android:textSize="20sp"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="20sp"
app:layout_constraintEnd_toStartOf="@id/utxo_outpoint_textview" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/utxo_address_label" app:layout_constraintBottom_toTopOf="@id/utxo_address_label"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintEnd_toStartOf="@id/utxo_outpoint_textview"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/utxo_outpoint_textview" android:id="@+id/utxo_outpoint_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Outpoint"
android:ellipsize="middle"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:textStyle="bold" android:ellipsize="middle"
android:singleLine="true"
android:text="Outpoint"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintTop_toTopOf="parent" android:textStyle="bold"
app:layout_constraintStart_toEndOf="@id/utxo_coin_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/utxo_address_label" app:layout_constraintBottom_toTopOf="@id/utxo_address_label"
android:singleLine="true" /> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/utxo_coin_label"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/utxo_address_label" android:id="@+id/utxo_address_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Address"
android:textStyle="bold"
android:textSize="20sp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:text="Address"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="20sp"
app:layout_constraintEnd_toStartOf="@id/utxo_address_textview"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/utxo_pub_key_label" app:layout_constraintBottom_toTopOf="@id/utxo_pub_key_label"
app:layout_constraintTop_toBottomOf="@id/utxo_coin_label"/> app:layout_constraintEnd_toStartOf="@id/utxo_address_textview"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/utxo_coin_label" />
<TextView <TextView
android:id="@+id/utxo_address_textview" android:id="@+id/utxo_address_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="middle"
android:singleLine="true"
android:text="Address" android:text="Address"
android:textSize="14sp" android:textSize="14sp"
android:ellipsize="middle"
android:layout_marginStart="8dp"
android:singleLine="true"
app:layout_constraintStart_toEndOf="@id/utxo_address_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/utxo_address_label" app:layout_constraintBottom_toTopOf="@id/utxo_address_label"
app:layout_constraintTop_toBottomOf="@id/utxo_address_label"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/utxo_address_label"
app:layout_constraintTop_toBottomOf="@id/utxo_address_label" />
<TextView <TextView
android:id="@+id/utxo_pub_key_label" android:id="@+id/utxo_pub_key_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Public Key"
android:textStyle="bold"
android:textSize="20sp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:text="Public Key"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintStart_toStartOf="parent" android:textSize="20sp"
app:layout_constraintEnd_toStartOf="@id/utxo_pub_key_textview" android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/utxo_amount_label" app:layout_constraintBottom_toTopOf="@id/utxo_amount_label"
app:layout_constraintTop_toBottomOf="@id/utxo_address_label"/> app:layout_constraintEnd_toStartOf="@id/utxo_pub_key_textview"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/utxo_address_label" />
<TextView <TextView
android:id="@+id/utxo_pub_key_textview" android:id="@+id/utxo_pub_key_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Public Key" android:layout_marginStart="8dp"
android:textSize="14sp"
android:ellipsize="middle" android:ellipsize="middle"
android:singleLine="true" android:singleLine="true"
android:layout_marginStart="8dp" android:text="Public Key"
app:layout_constraintStart_toEndOf="@id/utxo_pub_key_label" android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/utxo_pub_key_label" app:layout_constraintBottom_toTopOf="@id/utxo_pub_key_label"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_label"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/utxo_pub_key_label"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_label" />
<TextView <TextView
android:id="@+id/utxo_amount_label" android:id="@+id/utxo_amount_label"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Amount"
android:textStyle="bold"
android:ellipsize="middle"
android:textSize="20sp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:ellipsize="middle"
android:singleLine="true"
android:text="Amount"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_textview" android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/utxo_amount_textview" app:layout_constraintBottom_toTopOf="@id/utxo_amount_textview"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/utxo_global_index_label" app:layout_constraintEnd_toStartOf="@id/utxo_global_index_label"
android:singleLine="true" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_textview" />
<TextView <TextView
android:id="@+id/utxo_amount_textview" android:id="@+id/utxo_amount_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Amount"
android:ellipsize="middle"
android:textSize="14sp"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
app:layout_constraintTop_toBottomOf="@id/utxo_amount_label" android:ellipsize="middle"
android:singleLine="true"
android:text="Amount"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/utxo_global_index_textview" app:layout_constraintEnd_toStartOf="@id/utxo_global_index_textview"
android:singleLine="true" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/utxo_amount_label" />
<TextView <TextView
android:id="@+id/utxo_global_index_label" android:id="@+id/utxo_global_index_label"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Global Index"
android:ellipsize="middle" android:ellipsize="middle"
android:gravity="end" android:gravity="end"
android:textStyle="bold" android:singleLine="true"
android:textSize="20sp" android:text="Global Index"
android:textColor="@color/oled_addressListColor" android:textColor="@color/oled_addressListColor"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_textview" android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/utxo_global_index_textview" app:layout_constraintBottom_toTopOf="@id/utxo_global_index_textview"
app:layout_constraintStart_toEndOf="@id/utxo_amount_label"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:singleLine="true" /> app:layout_constraintStart_toEndOf="@id/utxo_amount_label"
app:layout_constraintTop_toBottomOf="@id/utxo_pub_key_textview" />
<TextView <TextView
android:id="@+id/utxo_global_index_textview" android:id="@+id/utxo_global_index_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="999999999999"
android:ellipsize="middle" android:ellipsize="middle"
android:gravity="end" android:gravity="end"
android:singleLine="true"
android:text="999999999999"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintTop_toBottomOf="@id/utxo_global_index_label"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/utxo_amount_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:singleLine="true" /> app:layout_constraintStart_toEndOf="@id/utxo_amount_textview"
app:layout_constraintTop_toBottomOf="@id/utxo_global_index_label" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -4,9 +4,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/oled_dialogBackgroundColor"
android:fillViewport="true" android:fillViewport="true"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:background="@color/oled_dialogBackgroundColor"
android:padding="24dp"> android:padding="24dp">
@ -32,9 +32,9 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:text="@string/wallet_seed_label"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:text="@string/wallet_seed_label"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/recv_monero_textview" /> app:layout_constraintTop_toBottomOf="@id/recv_monero_textview" />
@ -44,24 +44,24 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:textSize="12sp"
android:textColor="#f00"
android:text="@string/wallet_seed_desc" android:text="@string/wallet_seed_desc"
app:layout_constraintVertical_bias="0.0" android:textColor="#f00"
android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@id/information_textview" app:layout_constraintBottom_toTopOf="@id/information_textview"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_seed_label_textview" /> app:layout_constraintTop_toBottomOf="@id/wallet_seed_label_textview"
app:layout_constraintVertical_bias="0.0" />
<TextView <TextView
android:id="@+id/wallet_seed_offset_textview" android:id="@+id/wallet_seed_offset_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:textSize="11sp"
android:textColor="#f80"
android:visibility="gone"
android:text="@string/wallet_seed_offset_desc" android:text="@string/wallet_seed_offset_desc"
android:textColor="#f80"
android:textSize="11sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/information_textview" /> app:layout_constraintTop_toBottomOf="@id/information_textview" />
@ -82,9 +82,9 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
android:text="@string/wallet_viewkey_label"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:text="@string/wallet_viewkey_label"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wallet_seed_offset_textview" /> app:layout_constraintTop_toBottomOf="@id/wallet_seed_offset_textview" />
@ -94,14 +94,14 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:textSize="12sp"
android:textColor="#f80"
android:text="@string/wallet_viewkey_desc" android:text="@string/wallet_viewkey_desc"
app:layout_constraintVertical_bias="0.0" android:textColor="#f80"
android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@id/copy_viewkey_imagebutton"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/copy_viewkey_imagebutton" app:layout_constraintTop_toBottomOf="@id/wallet_viewkey_label_textview"
app:layout_constraintTop_toBottomOf="@id/wallet_viewkey_label_textview" /> app:layout_constraintVertical_bias="0.0" />
<TextView <TextView
android:id="@+id/viewkey_textview" android:id="@+id/viewkey_textview"
@ -109,10 +109,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@id/copy_viewkey_imagebutton"
app:layout_constraintEnd_toStartOf="@id/copy_viewkey_imagebutton" app:layout_constraintEnd_toStartOf="@id/copy_viewkey_imagebutton"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/copy_viewkey_imagebutton" app:layout_constraintTop_toTopOf="@id/copy_viewkey_imagebutton"
app:layout_constraintBottom_toBottomOf="@id/copy_viewkey_imagebutton"
tools:text="INFORMATION" /> tools:text="INFORMATION" />
<ImageButton <ImageButton
@ -120,26 +120,28 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:contentDescription="@string/copy_wallet_s_private_view_key"
android:minWidth="48dp" android:minWidth="48dp"
android:minHeight="48dp" android:minHeight="48dp"
android:contentDescription="@string/copy_wallet_s_private_view_key"
android:src="@drawable/ic_content_copy_24dp" android:src="@drawable/ic_content_copy_24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.0"
app:layout_constraintBottom_toTopOf="@id/wallet_restore_height_label_textview" app:layout_constraintBottom_toTopOf="@id/wallet_restore_height_label_textview"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/viewkey_textview" app:layout_constraintStart_toEndOf="@id/viewkey_textview"
app:layout_constraintTop_toBottomOf="@id/wallet_viewkey_desc_textview" /> app:layout_constraintTop_toBottomOf="@id/wallet_viewkey_desc_textview"
app:layout_constraintVertical_bias="0.0" />
<TextView <TextView
android:id="@+id/wallet_restore_height_label_textview" android:id="@+id/wallet_restore_height_label_textview"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:text="@string/wallet_restore_height_label"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold" android:textStyle="bold"
android:text="@string/wallet_restore_height_label"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/copy_viewkey_imagebutton" /> app:layout_constraintTop_toBottomOf="@id/copy_viewkey_imagebutton" />
<TextView <TextView
android:id="@+id/restore_height_textview" android:id="@+id/restore_height_textview"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/> <background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@mipmap/ic_launcher_foreground"/> <foreground android:drawable="@mipmap/ic_launcher_foreground" />
</adaptive-icon> </adaptive-icon>

View file

@ -11,27 +11,23 @@
tools:layout="@layout/fragment_home"> tools:layout="@layout/fragment_home">
<action <action
android:id="@+id/nav_to_settings" android:id="@+id/nav_to_settings"
app:destination="@id/settings_fragment"> app:destination="@id/settings_fragment"></action>
</action>
<action <action
android:id="@+id/nav_to_receive" android:id="@+id/nav_to_receive"
app:destination="@id/receive_fragment"> app:destination="@id/receive_fragment"></action>
</action>
<action <action
android:id="@+id/nav_to_send" android:id="@+id/nav_to_send"
app:destination="@id/send_fragment"> app:destination="@id/send_fragment"></action>
</action>
<action <action
android:id="@+id/nav_to_onboarding" android:id="@+id/nav_to_onboarding"
app:destination="@id/onboarding_fragment"> app:destination="@id/onboarding_fragment"></action>
</action>
<action <action
android:id="@+id/nav_to_transaction" android:id="@+id/nav_to_transaction"
app:destination="@id/transaction_fragment"> app:destination="@id/transaction_fragment">
<argument <argument
android:name="nav_arg_txinfo" android:name="nav_arg_txinfo"
app:argType="net.mynero.wallet.model.TransactionInfo" app:argType="net.mynero.wallet.model.TransactionInfo"
app:nullable="true"/> app:nullable="true" />
</action> </action>
</fragment> </fragment>
<fragment <fragment
@ -41,21 +37,18 @@
tools:layout="@layout/fragment_settings"> tools:layout="@layout/fragment_settings">
<action <action
android:id="@+id/nav_to_utxos" android:id="@+id/nav_to_utxos"
app:destination="@id/utxos_fragment"> app:destination="@id/utxos_fragment"></action>
</action>
</fragment> </fragment>
<fragment <fragment
android:id="@+id/send_fragment" android:id="@+id/send_fragment"
android:name="net.mynero.wallet.fragment.send.SendFragment" android:name="net.mynero.wallet.fragment.send.SendFragment"
android:label="fragment_send_amount" android:label="fragment_send_amount"
tools:layout="@layout/fragment_send"> tools:layout="@layout/fragment_send"></fragment>
</fragment>
<fragment <fragment
android:id="@+id/receive_fragment" android:id="@+id/receive_fragment"
android:name="net.mynero.wallet.fragment.receive.ReceiveFragment" android:name="net.mynero.wallet.fragment.receive.ReceiveFragment"
android:label="fragment_send_amount" android:label="fragment_send_amount"
tools:layout="@layout/fragment_receive"> tools:layout="@layout/fragment_receive"></fragment>
</fragment>
<fragment <fragment
android:id="@+id/utxos_fragment" android:id="@+id/utxos_fragment"
android:name="net.mynero.wallet.fragment.utxos.UtxosFragment" android:name="net.mynero.wallet.fragment.utxos.UtxosFragment"
@ -68,8 +61,7 @@
tools:layout="@layout/fragment_onboarding"> tools:layout="@layout/fragment_onboarding">
<action <action
android:id="@+id/nav_to_home" android:id="@+id/nav_to_home"
app:destination="@id/main_fragment"> app:destination="@id/main_fragment"></action>
</action>
</fragment> </fragment>
<fragment <fragment
android:id="@+id/transaction_fragment" android:id="@+id/transaction_fragment"

View file

@ -80,10 +80,8 @@
<string name="node_port_hint">18081</string> <string name="node_port_hint">18081</string>
<string name="node_username_hint">Username (optional)</string> <string name="node_username_hint">Username (optional)</string>
<string name="node_password_hint">Passphrase</string> <string name="node_password_hint">Passphrase</string>
<string name="transaction">Transaction</string>
<string name="transaction_action_sent">You sent</string> <string name="transaction_action_sent">You sent</string>
<string name="transaction_action_recv">You received</string> <string name="transaction_action_recv">You received</string>
<string name="amount_label">Amount</string>
<string name="tx_amount_no_prefix">%1$s XMR</string> <string name="tx_amount_no_prefix">%1$s XMR</string>
<string name="tx_amount_no_prefix2">999.99999999999</string> <string name="tx_amount_no_prefix2">999.99999999999</string>
<string name="wallet_proxy_address_hint">127.0.0.1</string> <string name="wallet_proxy_address_hint">127.0.0.1</string>
@ -91,27 +89,21 @@
<string name="no_history_loading">Loading your wallet…</string> <string name="no_history_loading">Loading your wallet…</string>
<string name="no_history_nget_some_monero_in_here">No transactions to display.\nAcquire coins by doing jobs, selling products, mining it, or buying some peer-to-peer.</string> <string name="no_history_nget_some_monero_in_here">No transactions to display.\nAcquire coins by doing jobs, selling products, mining it, or buying some peer-to-peer.</string>
<string name="node_button_text">Node: %1$s</string> <string name="node_button_text">Node: %1$s</string>
<string name="connected">Connected</string>
<string name="disconnected">Disconnected</string>
<string name="version_mismatch">Version mismatch</string>
<string name="transaction_hash">Transaction Hash</string> <string name="transaction_hash">Transaction Hash</string>
<string name="transaction_hash_desc">in a transaction with id</string> <string name="transaction_hash_desc">in a transaction with id</string>
<string name="transaction_destination">Destination</string> <string name="transaction_destination">Destination</string>
<string name="transaction_destination_desc">to address</string> <string name="transaction_destination_desc">to address</string>
<string name="confirmations">Confirmations</string>
<string name="transaction_conf_desc">It has been confirmed</string> <string name="transaction_conf_desc">It has been confirmed</string>
<string name="transaction_conf_desc2_confirmed">times, and was mined in block</string> <string name="transaction_conf_desc2_confirmed">times, and was mined in block</string>
<string name="transaction_conf_desc2_unconfirmed">times, and is currently in the mempool</string> <string name="transaction_conf_desc2_unconfirmed">times, and is currently in the mempool</string>
<string name="transaction_conf_1_desc2_confirmed">time, and was mined in block</string> <string name="transaction_conf_1_desc2_confirmed">time, and was mined in block</string>
<string name="date">Date</string>
<string name="transaction_on_date_label">on</string> <string name="transaction_on_date_label">on</string>
<string name="node_selecting">Selecting node…</string>
<string name="node_selected">Using node: %1$s</string> <string name="node_selected">Using node: %1$s</string>
<string name="fee_priority">Fee priority:</string> <string name="fee_priority">Fee priority:</string>
<string name="low">Low</string> <string name="low">Low</string>
<string name="medium">Medium</string> <string name="medium">Medium</string>
<string name="high">High</string> <string name="high">High</string>
<string name="view_utxos">View outputs</string> <string name="view_utxos">View coins</string>
<string name="selected_utxos_value">Selected value: %1$s XMR</string> <string name="selected_utxos_value">Selected value: %1$s XMR</string>
<string name="selected_utxos_value_churning">Selected value: %1$s XMR\n\nThe anonymity benefits of churning are still being researched. Only proceed if you know what you are doing.</string> <string name="selected_utxos_value_churning">Selected value: %1$s XMR\n\nThe anonymity benefits of churning are still being researched. Only proceed if you know what you are doing.</string>
<string name="global_index_text">%1$d</string> <string name="global_index_text">%1$d</string>
@ -133,7 +125,6 @@
<string name="wallet_viewkey_label">Private view-key</string> <string name="wallet_viewkey_label">Private view-key</string>
<string name="wallet_viewkey_desc">Anyone with your private view-key can see all incoming transactions!</string> <string name="wallet_viewkey_desc">Anyone with your private view-key can see all incoming transactions!</string>
<string name="wallet_restore_height_label">Restore height</string> <string name="wallet_restore_height_label">Restore height</string>
<string name="block_height">Block Height</string>
<string name="use_password_as_seed_offset">Use passphrase as seed offset</string> <string name="use_password_as_seed_offset">Use passphrase as seed offset</string>
<string name="trusted_daemon">Trusted daemon</string> <string name="trusted_daemon">Trusted daemon</string>
<string name="use_bundled_tor">Let Mysu start and manage a Tor daemon</string> <string name="use_bundled_tor">Let Mysu start and manage a Tor daemon</string>