Browse Source

Hush as input and $ calculated to send a Tx

duke
N1CK145 5 years ago
parent
commit
5705df5909
  1. 4
      app/build.gradle
  2. 61
      app/src/main/java/org/myhush/silentdragon/SendActivity.kt
  3. 31
      app/src/main/res/layout/content_send.xml
  4. 2
      build.gradle

4
app/build.gradle

@ -22,7 +22,7 @@ android {
vectorDrawables.useSupportLibrary = true
}
signingConfigs {
/*signingConfigs {
release {
storeFile file(secretProperties["store_file_location"])
keyAlias secretProperties["key_alias"]
@ -37,7 +37,7 @@ android {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}*/
}
dependencies {

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

@ -37,13 +37,12 @@ class SendActivity : AppCompatActivity() {
// Clear the valid address prompt
txtValidAddress.text = ""
txtSendCurrencySymbol.text = ""
if (intent.getStringExtra("address") != null)
sendAddress.setText(intent.getStringExtra("address"), TextView.BufferType.EDITABLE)
if (intent.getDoubleExtra("amount", -1.0) > 0)
setAmountUSD(intent.getDoubleExtra("amount", 0.0))
setAmountHUSH(intent.getDoubleExtra("amount", 0.0))
if (intent.getBooleanExtra("includeReplyTo", false))
chkIncludeReplyTo.isChecked = true
@ -87,26 +86,20 @@ class SendActivity : AppCompatActivity() {
}
})
amountUSD.addTextChangedListener(object : TextWatcher {
amountHUSH.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable?) {}
@SuppressLint("SetTextI18n")
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val usd = s.toString().toDoubleOrNull()
val hush = s.toString().toDoubleOrNull()
val zprice = DataModel.mainResponseData?.zecprice
if (usd == null) {
txtSendCurrencySymbol.text = "" // Let the placeholder show the "$" sign
} else {
txtSendCurrencySymbol.text = "$"
}
if (usd == null || zprice == null)
amountHUSH.text = "${DataModel.mainResponseData?.tokenName} 0.0"
if (hush == null || zprice == null)
amountUSD.text = "$ 0.0"
else
amountHUSH.text =
"${DataModel.mainResponseData?.tokenName} " + DecimalFormat("#.########").format(usd / zprice)
amountUSD.text =
"$ " + DecimalFormat("#.########").format(hush * zprice)
}
})
@ -146,10 +139,9 @@ class SendActivity : AppCompatActivity() {
// Then if the amount is valid
val amt = amountHUSH.text.toString()
val parsedAmt = amt.substring("${DataModel.mainResponseData?.tokenName} ".length, amt.length)
// amount=0 xtns are valid
if (parsedAmt.toDoubleOrNull() == null || parsedAmt.toDouble() < 0.0 ) {
if (amt.toDoubleOrNull() == null || amt.toDouble() < 0.0 ) {
showErrorDialog("Invalid amount!")
return
}
@ -158,12 +150,12 @@ class SendActivity : AppCompatActivity() {
// Check if this is more than the maxzspendable
if (DataModel.mainResponseData?.maxzspendable != null) {
if (parsedAmt.toDouble() > DataModel.mainResponseData?.maxzspendable!! &&
parsedAmt.toDouble() <= DataModel.mainResponseData?.maxspendable ?: Double.MAX_VALUE) {
if (amt.toDouble() > DataModel.mainResponseData?.maxzspendable!! &&
amt.toDouble() <= DataModel.mainResponseData?.maxspendable ?: Double.MAX_VALUE) {
val alertDialog = AlertDialog.Builder(this@SendActivity)
alertDialog.setTitle("Send from t-addr?")
alertDialog.setMessage("${DataModel.mainResponseData?.tokenName} $parsedAmt is more than the balance in " +
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 {
@ -177,7 +169,7 @@ class SendActivity : AppCompatActivity() {
}
// Warning if spending more than total
if (parsedAmt.toDouble() > DataModel.mainResponseData?.maxspendable ?: Double.MAX_VALUE) {
if (amt.toDouble() > DataModel.mainResponseData?.maxspendable ?: Double.MAX_VALUE) {
showErrorDialog("Can't spend more than ${DataModel.mainResponseData?.tokenName} " +
"${DataModel.mainResponseData?.maxspendable} in a single Tx")
return
@ -200,12 +192,11 @@ class SendActivity : AppCompatActivity() {
private fun doConfirm() {
val toAddr = sendAddress.text.toString()
val amt = amountHUSH.text.toString()
val parsedAmt = amt.substring("${DataModel.mainResponseData?.tokenName} ".length, amt.length)
val memo = txtSendMemo.text.toString() + getReplyToAddressIfChecked(toAddr)
val intent = Intent(this, TxDetailsActivity::class.java)
val tx = DataModel.TransactionItem(
"confirm", 0, parsedAmt, memo,
"confirm", 0, amt, memo,
toAddr, "", 0
)
intent.putExtra("EXTRA_TXDETAILS", Klaxon().toJsonString(tx))
@ -231,12 +222,12 @@ class SendActivity : AppCompatActivity() {
private fun Double.format(digits: Int): String? = java.lang.String.format("%.${digits}f", this)
private fun setAmountUSD(amt: Double) {
amountUSD.setText(amt.format(2))
setAmount(amt / (DataModel.mainResponseData?.zecprice ?: 0.0))
private fun setAmountHUSH(amt: Double) {
amountHUSH.setText(amt.format(2))
setAmount(amt * (DataModel.mainResponseData?.zecprice ?: 0.0))
}
private fun setAmountHush(amt: Double?) {
private fun setAmountUSD(amt: Double?) {
if (amt == null) {
return;
}
@ -244,25 +235,19 @@ class SendActivity : AppCompatActivity() {
// 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
amountUSD.setText( (zprice * amt).format(2))
amountHUSH.setText( (zprice / amt).format(2))
amountHUSH.text =
amountUSD.text =
"${DataModel.mainResponseData?.tokenName} " + DecimalFormat("#.########").format(amt)
}
private fun setAmount(amt: Double?) {
val zprice = DataModel.mainResponseData?.zecprice
if (amt == null) {
txtSendCurrencySymbol.text = "" // Let the placeholder show the "$" sign
} else {
txtSendCurrencySymbol.text = "$"
}
if (amt == null || zprice == null)
amountHUSH.text = "${DataModel.mainResponseData?.tokenName} 0.0"
amountUSD.text = "${DataModel.mainResponseData?.tokenName} 0.0"
else
amountHUSH.text =
amountUSD.text =
"${DataModel.mainResponseData?.tokenName} " + DecimalFormat("#.########").format(amt)
}
@ -281,7 +266,7 @@ class SendActivity : AppCompatActivity() {
amt = amt?.replace(",", ".")
if (amt != null) {
setAmountHush(amt.toDoubleOrNull())
setAmountUSD(amt.toDoubleOrNull())
}
val memo = data.data?.getQueryParameter("memo")
@ -292,7 +277,7 @@ class SendActivity : AppCompatActivity() {
sendAddress.setText(data?.dataString ?: "", TextView.BufferType.EDITABLE)
}
amountUSD.requestFocus()
amountHUSH.requestFocus()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
}

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

@ -96,33 +96,33 @@
app:layout_constraintTop_toBottomOf="@id/toLayout">
<EditText
android:id="@+id/amountUSD"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/amountHUSH"
android:layout_width="173dp"
android:layout_height="66dp"
android:layout_marginTop="16dp"
android:hint="$ 0.00"
android:hint="HUSH 0.00"
android:inputType="numberDecimal"
android:maxLength="14"
android:selectAllOnFocus="true"
android:singleLine="true"
android:textAlignment="center"
android:textColor="#FFFFFF"
android:textSize="36sp"
app:layout_constraintBottom_toTopOf="@+id/amountHUSH"
android:textSize="30sp"
app:layout_constraintBottom_toTopOf="@+id/amountUSD"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/amountHUSH"
android:id="@+id/amountUSD"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="HUSH 0.0"
android:text="$ 0.00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/amountUSD" />
app:layout_constraintTop_toBottomOf="@+id/amountHUSH" />
<TextView
android:id="@+id/textView8"
@ -136,15 +136,16 @@
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txtSendCurrencySymbol"
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:text="$"
android:textColor="#FFFFFF"
android:textSize="36sp"
app:layout_constraintEnd_toStartOf="@+id/amountUSD"
android:layout_marginStart="12dp"
android:layout_marginTop="30dp"
android:text="HUSH"
android:textSize="27sp"
app:layout_constraintStart_toEndOf="@+id/amountHUSH"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"

2
build.gradle

@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.android.tools.build:gradle:3.5.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong

Loading…
Cancel
Save