Browse Source

Merge pull request #32 from N1CK145/dev

Get data from API anstead of SD/SDL + Added new currencies
chat
Duke Leto 5 years ago
committed by GitHub
parent
commit
48811879b5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 35
      app/src/main/java/org/myhush/silentdragon/ConnectionManager.kt
  2. 9
      app/src/main/java/org/myhush/silentdragon/DataModel.kt
  3. 34
      app/src/main/java/org/myhush/silentdragon/MainActivity.kt
  4. 6
      app/src/main/java/org/myhush/silentdragon/ReceiveActivity.kt
  5. 61
      app/src/main/java/org/myhush/silentdragon/SendActivity.kt
  6. 36
      app/src/main/java/org/myhush/silentdragon/SettingsActivity.kt
  7. 6
      app/src/main/java/org/myhush/silentdragon/TxDetailsActivity.kt
  8. 2
      app/src/main/java/org/myhush/silentdragon/UnconfirmedTxItemFragment.kt
  9. 272
      app/src/main/res/layout/activity_settings.xml
  10. 4
      app/src/main/res/layout/content_main.xml
  11. 4
      app/src/main/res/layout/content_receive.xml
  12. 59
      app/src/main/res/layout/content_send.xml
  13. 2
      app/src/main/res/layout/content_tx_details.xml
  14. 2
      app/src/main/res/layout/fragment_unconfirmed_tx_item.xml

35
app/src/main/java/org/myhush/silentdragon/ConnectionManager.kt

@ -2,12 +2,17 @@ package org.myhush.silentdragon
import android.content.Intent
import android.util.Log
import com.beust.klaxon.Json
import com.beust.klaxon.JsonObject
import com.beust.klaxon.json
import okhttp3.*
import okio.ByteString
import org.json.JSONObject
import java.lang.Exception
import java.net.ConnectException
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.collections.HashMap
object ConnectionManager {
@ -19,8 +24,8 @@ object ConnectionManager {
*/
fun refreshAllData() {
// First, try to make a connection.
makeConnection()
initCurrencies()
}
// Attempt a connection to the server. If there is no saved connection, we'll set the connection status
@ -105,8 +110,36 @@ object ConnectionManager {
i.putExtra("doDisconnect", doDisconnect)
SilentDragonApp.appContext?.sendBroadcast(i)
}
fun initCurrencies(){
try {
DataModel.currencySymbols["USD"] = "$"
DataModel.currencySymbols["EUR"] = ""
DataModel.currencySymbols["JPY"] = "¥"
Thread {
val client = OkHttpClient()
val request: Request = Request.Builder()
.url("https://api.coingecko.com/api/v3/simple/price?ids=hush&vs_currencies=usd,eur,jpy,btc")
.build()
val response: Response = client.newCall(request).execute()
val json: JSONObject = JSONObject(response.body()?.string())["hush"] as JSONObject
if (json.length() > 0){
for (cur: String in json.keys()){
DataModel.currencyValues[cur.toUpperCase()] = json.getDouble(cur)
if(!DataModel.currencySymbols.containsKey(cur.toUpperCase()))
DataModel.currencySymbols[cur.toUpperCase()] = cur.toUpperCase()
}
}
}.start()
}catch (e: Exception){
e.printStackTrace()
}
}
private class WebsocketClient (directConn: Boolean) : WebSocketListener() {
val m_directConn = directConn
val TAG = "WebsocketClient"

9
app/src/main/java/org/myhush/silentdragon/DataModel.kt

@ -13,14 +13,19 @@ import java.math.BigInteger
object DataModel {
class MainResponse(val balance: Double, val maxspendable: Double, val maxzspendable: Double? = null,
val saplingAddress: String, val tAddress: String, val zecprice: Double, val tokenName: String,
val saplingAddress: String, val tAddress: String, val tokenName: String,
val serverversion: String)
class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String?,
val addr: String, val txid: String?, val confirmations: Long)
var mainResponseData : MainResponse? = null
var transactions : List<TransactionItem> ?= null
var transactions : List<TransactionItem>? = null
val fee: Double = 0.0001
var currencyValues: HashMap<String, Double?> = HashMap()
var currencySymbols: HashMap<String, String> = HashMap()
var selectedCurrency: String = ""
fun isTestnet(): Boolean {
return mainResponseData?.tokenName != "HUSH"

34
app/src/main/java/org/myhush/silentdragon/MainActivity.kt

@ -2,13 +2,11 @@ package org.myhush.silentdragon
import android.annotation.SuppressLint
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.*
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.StrictMode
import android.support.constraint.ConstraintLayout
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
@ -35,6 +33,8 @@ class MainActivity : AppCompatActivity(),
}
override fun onCreate(savedInstanceState: Bundle?) {
//StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()) // TESTING
super.onCreate(savedInstanceState)
title = getString(R.string.app_name)
@ -45,6 +45,7 @@ class MainActivity : AppCompatActivity(),
// When creating, clear all the data first
setMainStatus("")
DataModel.init()
btnConnect.setOnClickListener {
@ -66,8 +67,8 @@ class MainActivity : AppCompatActivity(),
}
txtMainBalanceUSD.setOnClickListener {
Toast.makeText(applicationContext, "1 HUSH = $${DecimalFormat("#.##")
.format(DataModel.mainResponseData?.zecprice)}", Toast.LENGTH_LONG).show()
Toast.makeText(applicationContext, "1 HUSH = ${DataModel.currencySymbols[DataModel.selectedCurrency]}${DecimalFormat("#.##")
.format(DataModel.currencyValues[DataModel.selectedCurrency])}", Toast.LENGTH_LONG).show()
}
bottomNav.setOnNavigationItemSelectedListener {
@ -89,9 +90,16 @@ class MainActivity : AppCompatActivity(),
}
}
loadSharedPref()
updateUI(false)
}
private fun loadSharedPref() {
var ref: SharedPreferences = getSharedPreferences("MainFile", 0)
DataModel.selectedCurrency = ref.getString("currency", "USD")
}
private fun setMainStatus(status: String) {
lblBalance.text = ""
txtMainBalanceUSD.text = ""
@ -101,6 +109,7 @@ class MainActivity : AppCompatActivity(),
@SuppressLint("SetTextI18n")
private fun updateUI(updateTxns: Boolean) {
runOnUiThread {
Log.i(TAG, "Updating UI $updateTxns")
@ -149,18 +158,22 @@ class MainActivity : AppCompatActivity(),
ConnectionStatus.CONNECTED -> {
scrollViewTxns.visibility = ScrollView.VISIBLE
layoutConnect.visibility = ConstraintLayout.GONE
ConnectionManager.initCurrencies()
if (DataModel.mainResponseData == null) {
setMainStatus("Loading...")
} else {
val cur = DataModel.selectedCurrency
val price = DataModel.currencyValues[cur]?: 0.0
val bal = DataModel.mainResponseData?.balance ?: 0.0
val zPrice = DataModel.mainResponseData?.zecprice ?: 0.0
val balText = DecimalFormat("#0.00000000").format(bal)
lblBalance.text = "Balance"
txtMainBalance.text = balText + " ${DataModel.mainResponseData?.tokenName} "
//txtMainBalance.text = balText.substring(0, balText.length - 8) + " ${DataModel.mainResponseData?.tokenName} "
txtMainBalanceUSD.text = "$" + DecimalFormat("###,###,##0.00").format(bal * zPrice)
txtMainBalance.text = balText.substring(0, balText.length - 4) + " ${DataModel.mainResponseData?.tokenName} "
if(cur.length > 1)
txtMainBalanceUSD.text = "${DataModel.currencySymbols[cur]} " + DecimalFormat("0.00000000").format(bal * price)
else
txtMainBalanceUSD.text = "${DataModel.currencySymbols[cur]} " + DecimalFormat("#,##0.00").format(bal * price)
// Enable the send and recieve buttons
bottomNav.menu.findItem(R.id.action_recieve).isEnabled = true
@ -351,4 +364,5 @@ class MainActivity : AppCompatActivity(),
private val TAG = "MainActivity"
}

6
app/src/main/java/org/myhush/silentdragon/ReceiveActivity.kt

@ -81,7 +81,7 @@ class ReceiveActivity : AppCompatActivity() {
addrTxt.setOnClickListener {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("HUSH address", addr)
val clip = ClipData.newPlainText("Hush address", addr)
clipboard.primaryClip = clip
Toast.makeText(applicationContext, "Copied address to clipboard", Toast.LENGTH_SHORT).show()
}
@ -89,13 +89,13 @@ class ReceiveActivity : AppCompatActivity() {
fun setTAddr() {
addr = DataModel.mainResponseData?.tAddress ?: ""
txtRcvAddrTitle.text = "Your HUSH transparent address"
txtRcvAddrTitle.text = "Your Hush transparent address"
setAddr()
}
fun setZAddr() {
addr = DataModel.mainResponseData?.saplingAddress ?: ""
txtRcvAddrTitle.text = "Your HUSH shielded address"
txtRcvAddrTitle.text = "Your Hush shielded address"
setAddr()
}

61
app/src/main/java/org/myhush/silentdragon/SendActivity.kt

@ -7,6 +7,7 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.provider.ContactsContract
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
import android.text.Editable
@ -16,6 +17,7 @@ import android.text.TextWatcher
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import android.widget.Toast
import com.beust.klaxon.Klaxon
import kotlinx.android.synthetic.main.activity_send.*
import kotlinx.android.synthetic.main.content_send.*
@ -58,6 +60,12 @@ class SendActivity : AppCompatActivity() {
)
}
if (DataModel.currencyValues["USD"] == null)
ConnectionManager.initCurrencies()
amountUSD.text = "${DataModel.currencySymbols[DataModel.selectedCurrency]} 0.00"
textViewFee.text = "0.0001 HUSH"
sendAddress.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable?) {}
@ -70,7 +78,7 @@ class SendActivity : AppCompatActivity() {
R.color.white_selected
))
} else {
txtValidAddress.text = "Not a valid HUSH address!"
txtValidAddress.text = "Not a valid Hush address!"
txtValidAddress.setTextColor(ContextCompat.getColor(applicationContext, R.color.colorAccent))
}
@ -78,7 +86,7 @@ class SendActivity : AppCompatActivity() {
txtSendMemo.isEnabled = false
chkIncludeReplyTo.isEnabled = false
txtSendMemo.text = SpannableStringBuilder("")
txtSendMemoTitle.text = "(No Memo for TADDR)"
txtSendMemoTitle.text = "(No Memo for t-Addresses)"
} else {
txtSendMemo.isEnabled = true
chkIncludeReplyTo.isEnabled = true
@ -94,20 +102,19 @@ class SendActivity : AppCompatActivity() {
@SuppressLint("SetTextI18n")
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val hush = s.toString().toDoubleOrNull()
val zprice = DataModel.mainResponseData?.zecprice
val price = DataModel.currencyValues[DataModel.selectedCurrency]
val symbol = DataModel.currencySymbols[DataModel.selectedCurrency]
if (hush == null) {
txtSendCurrencySymbol.text = "" // Let the placeholder show the "$" sign
}
else
{
if (hush == null)
txtSendCurrencySymbol.text = "" // Let the placeholder show
else {
txtSendCurrencySymbol.text = "HUSH"
if (hush == null || zprice == null)
amountUSD.text = "$0.0"
else
amountUSD.text = "$" + DecimalFormat("###,###,##0.00").format(hush * zprice)
}
if (hush == null || price == null)
amountUSD.text = "$symbol 0.0"
else
amountUSD.text = "$symbol " + DecimalFormat("#.########").format(hush * price)
}
})
@ -141,7 +148,7 @@ class SendActivity : AppCompatActivity() {
// First, check if the address is correct.
val toAddr = sendAddress.text.toString()
if (!DataModel.isValidAddress(toAddr)) {
showErrorDialog("Invalid destination HUSH address!")
showErrorDialog("Invalid destination Hush address!")
return
}
@ -162,8 +169,8 @@ class SendActivity : AppCompatActivity() {
amt.toDouble() <= DataModel.mainResponseData?.maxspendable ?: Double.MAX_VALUE) {
val alertDialog = AlertDialog.Builder(this@SendActivity)
alertDialog.setTitle("Send from TADDR ?")
alertDialog.setMessage("$amt ${DataModel.mainResponseData?.tokenName} is more than the balance in " +
alertDialog.setTitle("Send from t-addr?")
alertDialog.setMessage("${DataModel.mainResponseData?.tokenName} $amt is more than the balance in " +
"your shielded address. This Tx will have to be sent from a transparent address, and will" +
" not be private.\n\nAre you absolutely sure?")
alertDialog.apply {
@ -232,29 +239,19 @@ class SendActivity : AppCompatActivity() {
private fun setAmountHUSH(amt: Double) {
amountHUSH.setText((DecimalFormat("#.########").format(amt) + "${DataModel.mainResponseData?.tokenName}"))
setAmount(amt)
setAmountUSD(amt)
}
private fun setAmountUSD(amt: Double?) {
if (amt == null) {
return;
return
}
// Since there is a text-change listner on the USD field, we set the USD first, then override the
// HUSH field manually.
val zprice = DataModel.mainResponseData?.zecprice ?: 0.0
amountHUSH.setText((DecimalFormat("#.########").format(amt) + "${DataModel.mainResponseData?.tokenName}"))
amountUSD.text = "$" + DecimalFormat("###,###,##0.00").format(amt)
}
private fun setAmount(amt: Double?) {
val zprice = DataModel.mainResponseData?.zecprice
if (amt == null || zprice == null)
amountUSD.text = "$0.0"
else
amountUSD.text = "$" + DecimalFormat("###,###,##0.00").format(amt)
Toast.makeText(this.applicationContext, amt.toString(), Toast.LENGTH_SHORT).show()
amountUSD.text =
"${DataModel.currencySymbols[DataModel.selectedCurrency]} " + DecimalFormat("#.########").format(amt)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -296,8 +293,6 @@ class SendActivity : AppCompatActivity() {
finish()
}
} else {
// Cancel
}
}
}

36
app/src/main/java/org/myhush/silentdragon/SettingsActivity.kt

@ -1,7 +1,12 @@
package org.myhush.silentdragon
import android.content.SharedPreferences
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Adapter
import android.widget.AdapterView
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.activity_settings.*
class SettingsActivity : AppCompatActivity() {
@ -29,9 +34,40 @@ class SettingsActivity : AppCompatActivity() {
updateUI()
}
spinnerCurrency!!.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
var cur = parent.adapter.getItem(pos).toString() // Set selected currency
DataModel.selectedCurrency = cur // Set cur as selected
// Save currency
var pref: SharedPreferences = getSharedPreferences("MainFile",0)
var editor: SharedPreferences.Editor = pref.edit()
editor.putString("currency", DataModel.selectedCurrency)
editor.commit()
}
override fun onNothingSelected(parent: AdapterView<out Adapter>?) {}
}
}
private fun fillSpinner(){
val items = DataModel.currencyValues.keys.toMutableList()
var adapter: ArrayAdapter<String> = ArrayAdapter(this, android.R.layout.simple_spinner_item, items)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item)
spinnerCurrency.adapter = adapter
}
fun updateUI() {
fillSpinner()
txtSettingsConnString.text = DataModel.getConnString(SilentDragonApp.appContext!!)
?: "Not Connected"

6
app/src/main/java/org/myhush/silentdragon/TxDetailsActivity.kt

@ -58,10 +58,12 @@ class TxDetailsActivity : AppCompatActivity() {
val amt = kotlin.math.abs(tx?.amount?.toDoubleOrNull() ?: 0.0)
val amtStr = DecimalFormat("#0.0000####").format(amt)
val cur = DataModel.selectedCurrency
val symbol = DataModel.currencySymbols[cur]
txtAmtHush.text = " $amtStr ${DataModel.mainResponseData?.tokenName}"
txtAmtUSD.text = "$" + DecimalFormat("###,###,##0.00").format(
(amt) * (DataModel.mainResponseData?.zecprice ?: 0.0))
txtAmtUSD.text = "$symbol " + DecimalFormat("#,##0.00").format(
(amt) * (DataModel.currencyValues[cur] ?: 0.0))
if (tx?.memo.isNullOrBlank()) {
layoutMemo.visibility = ConstraintLayout.GONE

2
app/src/main/java/org/myhush/silentdragon/UnconfirmedTxItemFragment.kt

@ -55,7 +55,7 @@ class UnconfirmedTxItemFragment : Fragment() {
}
val txt = view.findViewById<TextView>(R.id.txtUnconfirmedTx)
txt.text = (if (tx?.type == "send") "Sending " else "Receiving ") +
txt.text = (if (tx?.type == "send") "Sending" else "Receiving") +
DecimalFormat("#0.00########").format(kotlin.math.abs(tx?.amount?.toDoubleOrNull() ?: 0.0)) + " ${DataModel.mainResponseData?.tokenName} "
return view

272
app/src/main/res/layout/activity_settings.xml

@ -8,106 +8,200 @@
tools:context="org.myhush.silentdragon.SettingsActivity">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent" android:id="@+id/scrollView2"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout android:layout_width="0dp" android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/linearLayout" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
android:id="@+id/scrollView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:text="address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtSettingsConnString"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="16dp"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/textView"/>
android:id="@+id/txtSettingsConnString"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:text="address"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<Button
android:text="Disconnect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnDisconnect"
app:layout_constraintTop_toBottomOf="@+id/txtSettingsConnString" android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"/>
android:id="@+id/btnDisconnect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="Disconnect"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtSettingsConnString" />
<TextView
android:text="SilentDragon connection address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="16dp" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="16dp"/>
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="SilentDragon connection address"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/divider"
android:layout_width="0dp"
android:background="?android:attr/listDivider"
app:layout_constraintTop_toBottomOf="@+id/btnDisconnect" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:visibility="visible" android:layout_height="2dp"
android:layout_marginTop="8dp"/>
android:id="@+id/divider"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:background="?android:attr/listDivider"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnDisconnect" />
<CheckBox
android:text="Disallow routing over external service/internet"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/chkDisallowInternet" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/divider" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"/>
android:id="@+id/chkDisallowInternet"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:text="Disallow routing over external service/internet"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/divider" />
<TextView
android:text="If checked, the app will only attempt a direct connection to SilentDragon, and not route traffic over the internet via the WormHole service at wormhole.myhush.org . Please see the https://myhush.org/silentdragon for more details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/textView4" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="16dp" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/chkDisallowInternet"/>
android:id="@+id/textView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="If checked, the app will only attempt a direct connection to SilentDragon, and not route traffic over the internet via the WormHole service at wormhole.myhush.org . Please see the https://myhush.org/silentdragon for more details"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/chkDisallowInternet" />
<View
android:id="@+id/divider3"
android:layout_width="0dp"
android:background="?android:attr/listDivider"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:visibility="visible" android:layout_height="2dp"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginTop="16dp" app:layout_constraintTop_toBottomOf="@+id/textView4"/>
android:id="@+id/divider3"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:background="?android:attr/listDivider"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/spinnerCurrency" />
<View
android:id="@+id/divider4"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:background="?android:attr/listDivider"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4" />
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lblServerVersion" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/textView10"/>
android:id="@+id/lblServerVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView10" />
<TextView
android:text="SilentDragon version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView10" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/lblVersionName" android:textStyle="bold"/>
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="SilentDragon version"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lblVersionName" />
<TextView
android:text="SilentDragonAndroid version"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/textView3" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/divider3" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="16dp"/>
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="SilentDragonAndroid version"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/divider3" />
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lblVersionName" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/textView3" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp"/>
android:id="@+id/lblVersionName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="TextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<View
android:id="@+id/divider2"
android:layout_width="0dp"
android:background="?android:attr/listDivider"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp" android:visibility="visible" android:layout_height="2dp"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginTop="16dp" app:layout_constraintTop_toBottomOf="@+id/lblServerVersion"/>
android:id="@+id/divider2"
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:background="?android:attr/listDivider"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lblServerVersion" />
<Spinner
android:id="@+id/spinnerCurrency"
android:layout_width="374dp"
android:layout_height="47dp"
android:layout_marginStart="10dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView11" />
<TextView
android:id="@+id/textView11"
android:layout_width="131dp"
android:layout_height="44dp"
android:layout_marginTop="16dp"
android:text="Currency"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/divider4" />
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>

4
app/src/main/res/layout/content_main.xml

@ -30,7 +30,7 @@
android:id="@+id/txtMainBalance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXXXXX.XXXXXXXX HUSH"
android:text="0.0 Hush"
android:textColor="@android:color/white"
android:textSize="30sp"
app:layout_constraintBottom_toTopOf="@+id/txtMainBalanceUSD"
@ -45,7 +45,7 @@
android:layout_marginStart="154dp"
android:layout_marginEnd="154dp"
android:layout_marginBottom="32dp"
android:text="$0.0"
android:text="0.0 $"
android:textColor="@color/light_grey"
app:layout_constraintBottom_toBottomOf="@+id/imageView2"
app:layout_constraintEnd_toEndOf="parent"

4
app/src/main/res/layout/content_receive.xml

@ -28,12 +28,12 @@
android:textSize="24sp" android:fontFamily="monospace" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/txtRcvAddrTitle" app:layout_constraintVertical_bias="0.0"/>
<TextView
android:text="Your HUSH Sapling Address"
android:text="Your Hush Sapling Address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/txtRcvAddrTitle" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/imageView" android:textColor="@color/light_grey"/>
app:layout_constraintTop_toBottomOf="@+id/imageView" android:textColor="@color/colorPrimary"/>
<android.support.design.widget.TabLayout
android:layout_width="395dp"
android:layout_height="wrap_content"

59
app/src/main/res/layout/content_send.xml

@ -15,16 +15,20 @@
<android.support.constraint.ConstraintLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" android:id="@+id/linearLayout3">
<android.support.constraint.ConstraintLayout
android:id="@+id/toLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toLayout"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="16dp" android:layout_marginStart="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="3dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@id/AmountLayout"
android:layout_marginBottom="8dp" app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
>
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView7"
@ -60,15 +64,18 @@
app:layout_constraintTop_toBottomOf="@+id/textView7"
tools:layout_conversion_absoluteHeight="45dp"
tools:layout_conversion_absoluteWidth="0dp" />
<ImageButton
android:layout_width="37dp"
android:layout_height="41dp" app:srcCompat="@android:drawable/ic_menu_camera"
android:id="@+id/imageButton"
android:layout_width="37dp"
android:layout_height="41dp"
android:layout_marginTop="16dp"
android:background="@android:color/transparent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView7"
app:srcCompat="@android:drawable/ic_menu_camera"
tools:layout_conversion_absoluteHeight="51dp"
tools:layout_conversion_absoluteWidth="56dp" android:layout_marginTop="16dp"
android:background="@android:color/transparent"/>
tools:layout_conversion_absoluteWidth="56dp" />
<TextView
android:id="@+id/txtValidAddress"
@ -99,8 +106,8 @@
android:id="@+id/amountHUSH"
android:layout_width="173dp"
android:layout_height="66dp"
android:layout_marginTop="16dp"
android:hint="0.00 HUSH"
android:layout_marginTop="17dp"
android:hint="0.00 Hush"
android:inputType="numberDecimal"
android:maxLength="14"
android:selectAllOnFocus="true"
@ -118,7 +125,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="$0.00"
android:text="$ 0.00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ -145,6 +152,28 @@
app:layout_constraintStart_toEndOf="@+id/amountHUSH"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="3dp"
android:text="Fee:"
android:textColor="#FFFFFF"
app:layout_constraintEnd_toStartOf="@+id/textViewFee"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textViewFee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="0.0001 HUSH"
android:textColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
@ -158,8 +187,8 @@
<EditText
android:id="@+id/txtSendMemo"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_width="361dp"
android:layout_height="168dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"

2
app/src/main/res/layout/content_tx_details.xml

@ -122,7 +122,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView6" />
<TextView
android:text="$45.23"
android:text="$ 45.23"
android:layout_width="0dp"
android:layout_height="wrap_content" android:id="@+id/txtAmtUSD"
android:layout_marginTop="8dp"

2
app/src/main/res/layout/fragment_unconfirmed_tx_item.xml

@ -38,7 +38,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:text="Receiving 0.12345678 HUSH"
android:text="Recieving HUSH 0.12345678"
android:textSize="18sp"
app:layout_constraintStart_toEndOf="@+id/prgUnconfirmed"
app:layout_constraintTop_toTopOf="parent" />

Loading…
Cancel
Save