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"
minSdkVersion 21
targetSdkVersion 34
versionCode 50600
versionName "0.5.6 'Fluorine Fermi'"
versionCode 50601
versionName "0.5.6.1 'Fluorine Fermi'"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
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 result;
env->GetLongArrayRegion(arr_j, element,1, &result);
env->GetLongArrayRegion(arr_j, element, 1, &result);
return result;
}
@ -349,7 +349,8 @@ Java_net_mynero_wallet_model_WalletManager_createWalletJ(JNIEnv *env, jobject in
JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_WalletManager_createWalletPolyseedJ(JNIEnv *env, jobject instance,
jstring path, jstring password, jstring passpharse,
jstring path, jstring password,
jstring passpharse,
jstring language,
jint networkType) {
std::string seed_words;
@ -728,7 +729,8 @@ Java_net_mynero_wallet_model_Wallet_getSeed(JNIEnv *env, jobject instance, jstri
}
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);
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
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);
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
@ -921,7 +924,8 @@ Java_net_mynero_wallet_model_Wallet_getConnectionStatusJ(JNIEnv *env, jobject in
return wallet->connected();
}
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);
if (trusted) {
wallet->setTrustedDaemon(true);
@ -1132,7 +1136,8 @@ Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject inst
Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id,
amount, (uint32_t) mixin_count,
_priority,
(uint32_t) accountIndex, {}, _key_images);
(uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(dst_addr, _dst_addr);
env->ReleaseStringUTFChars(payment_id, _payment_id);
@ -1141,10 +1146,12 @@ Java_net_mynero_wallet_model_Wallet_createTransactionJ(JNIEnv *env, jobject inst
JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobject instance,
jobject dst_addrs, jstring payment_id,
jobject dst_addrs,
jstring payment_id,
jlongArray amounts, jint mixin_count,
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::vector<std::string> _dst_addrs = java2cpp(env, dst_addrs);
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::PendingTransaction *tx = wallet->createTransactionMultDest(_dst_addrs, _payment_id,
_dst_amounts, (uint32_t) mixin_count,
_dst_amounts,
(uint32_t) mixin_count,
_priority,
(uint32_t) accountIndex, {}, _key_images);
(uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(payment_id, _payment_id);
return reinterpret_cast<jlong>(tx);
@ -1165,7 +1174,8 @@ Java_net_mynero_wallet_model_Wallet_createTransactionMultDestJ(JNIEnv *env, jobj
JNIEXPORT jlong JNICALL
Java_net_mynero_wallet_model_Wallet_estimateTransactionFee(JNIEnv *env, jobject instance,
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::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
uint64_t fee = wallet->estimateTransactionFee(dest_vector, _priority);
@ -1190,7 +1200,8 @@ Java_net_mynero_wallet_model_Wallet_createSweepTransaction(JNIEnv *env, jobject
Monero::PendingTransaction *tx = wallet->createTransaction(_dst_addr, _payment_id,
empty, (uint32_t) mixin_count,
_priority,
(uint32_t) accountIndex, {}, _key_images);
(uint32_t) accountIndex, {},
_key_images);
env->ReleaseStringUTFChars(dst_addr, _dst_addr);
env->ReleaseStringUTFChars(payment_id, _payment_id);
@ -1281,7 +1292,8 @@ Java_net_mynero_wallet_model_Coins_refreshJ(JNIEnv *env, jobject instance) {
}
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);
const char *_publicKey = env->GetStringUTFChars(publicKey, nullptr);
if (frozen) {

View File

@ -4,11 +4,7 @@ import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
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.PasswordListener
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.util.Constants
import net.mynero.wallet.util.UriData
import timber.log.Timber
import java.io.File
class MainActivity : AppCompatActivity(), MoneroHandlerThread.Listener, PasswordListener {

View File

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

View File

@ -1,18 +1,13 @@
package net.mynero.wallet.fragment.dialog
import android.app.Activity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.mynero.wallet.R
import net.mynero.wallet.adapter.NodeSelectionAdapter
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.Companion.fromJson
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.PrefService
import net.mynero.wallet.util.Constants

View File

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

View File

@ -163,13 +163,14 @@ class OnboardingFragment : Fragment(), NodeSelectionDialogListener, AddNodeListe
}
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)
samouraiTorManager?.getTorStateLiveData()?.observe(viewLifecycleOwner) { state ->
samouraiTorManager.getProxy()?.address()?.let { socketAddress ->
if(socketAddress.toString().isEmpty()) return@let
if(mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) {
if (socketAddress.toString().isEmpty()) return@let
if (mViewModel?.useProxy?.value == true && mViewModel?.useBundledTor?.value == true) {
torIcon?.visibility = View.VISIBLE
indicatorCircle?.visibility = View.INVISIBLE
val proxyString = socketAddress.toString().substring(1)
@ -187,10 +188,12 @@ class OnboardingFragment : Fragment(), NodeSelectionDialogListener, AddNodeListe
torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.INVISIBLE
}
EnumTorState.STARTING, EnumTorState.STOPPING -> {
torIcon?.visibility = View.INVISIBLE
indicatorCircle?.visibility = View.VISIBLE
}
else -> {}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,7 @@
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.livedata.SingleLiveEvent
import net.mynero.wallet.model.WalletManager
import net.mynero.wallet.util.Constants
class DaemonService(thread: MoneroHandlerThread) : ServiceBase(thread) {
val daemonChangeEvents: SingleLiveEvent<Node> = SingleLiveEvent()

View File

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

View File

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

View File

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

View File

@ -5,7 +5,10 @@ import androidx.lifecycle.MutableLiveData
import net.mynero.wallet.model.TorState
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> {
return torKmpManager.torStateLiveData
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,5 +6,5 @@
android:viewportHeight="24.0">
<path
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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,13 +4,14 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="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:layout_marginTop="24dp"
android:text="@string/send_monero"
android:textSize="32sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/top_controls"
@ -26,6 +27,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/send_monero_textview"
app:layout_constraintTop_toTopOf="@id/send_monero_textview">
<Button
android:id="@+id/send_max_button"
android:layout_width="wrap_content"
@ -43,17 +45,17 @@
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:contentDescription="@string/add_recipient_to_transaction"
android:src="@android:drawable/ic_input_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="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"
app:tint="@color/oled_textColorPrimary" />
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- CREATE LAYOUT -->
@ -61,9 +63,9 @@
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:layout_marginEnd="24dp"
android:text="@string/selected_utxos_value"
android:textSize="14sp"
android:visibility="invisible"
@ -76,57 +78,60 @@
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:text="@string/fee_priority"
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_constraintTop_toTopOf="@id/tx_fee_radiogroup"
app:layout_constraintBottom_toBottomOf="@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:orientation="horizontal"
android:layout_marginStart="8dp"
android:layout_marginEnd="24dp"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@id/create_tx_button"
app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview"
app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tx_fee_radiogroup_label_textview">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="48dp"
android:text="@string/low"
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: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"/>
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:background="@drawable/button_bg"
android:text="@string/create"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginStart="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" />
@ -140,16 +145,16 @@
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_height="0dp"
android:layout_marginTop="8dp"
android:paddingBottom="128dp"
android:clickable="false"
android:clipToPadding="false"
android:orientation="vertical"
>
android:paddingBottom="128dp">
</LinearLayout>
</ScrollView>
@ -158,15 +163,15 @@
android:id="@+id/address_pending_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ellipsize="middle"
android:singleLine="true"
android:text="@string/tx_address_text"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/send_monero_textview"
@ -176,13 +181,13 @@
android:id="@+id/amount_pending_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:text="@string/tx_amount_text"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/address_pending_textview"
@ -192,13 +197,13 @@
android:id="@+id/fee_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:text="@string/tx_fee_text"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="gone"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/amount_pending_textview"
@ -211,20 +216,20 @@
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="24dp"
android:elevation="6dp"
android:visibility="gone"
android:importantForAccessibility="yes"
android:contentDescription="@string/slide_to_send_transaction"
android:elevation="6dp"
android:focusable="true"
android:importantForAccessibility="yes"
android:visibility="gone"
app:area_margin="10dp"
app:border_radius="20dp"
app:inner_color="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:outer_color="@color/oled_colorSecondary"
app:slider_height="72dp"
app:slider_locked="false"
app:text="@string/slide_to_send"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:text_size="18sp"
tools:visibility="visible"/>
</androidx.constraintlayout.widget.ConstraintLayout>
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -80,10 +80,8 @@
<string name="node_port_hint">18081</string>
<string name="node_username_hint">Username (optional)</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_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_prefix2">999.99999999999</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_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="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_desc">in a transaction with id</string>
<string name="transaction_destination">Destination</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_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_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="node_selecting">Selecting node…</string>
<string name="node_selected">Using node: %1$s</string>
<string name="fee_priority">Fee priority:</string>
<string name="low">Low</string>
<string name="medium">Medium</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_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>
@ -133,7 +125,6 @@
<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_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="trusted_daemon">Trusted daemon</string>
<string name="use_bundled_tor">Let Mysu start and manage a Tor daemon</string>