Browse Source

Add Tx send confirmation

connman
adityapk00 5 years ago
parent
commit
6d27953f0c
  1. 4
      app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt
  2. 58
      app/src/main/java/com/adityapk/zcash/zqwandroid/SendActivity.kt
  3. 2
      app/src/main/java/com/adityapk/zcash/zqwandroid/TransactionItemFragment.kt
  4. 55
      app/src/main/java/com/adityapk/zcash/zqwandroid/TxDetailsActivity.kt
  5. 8
      app/src/main/res/layout/content_send.xml

4
app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt

@ -6,8 +6,8 @@ import com.beust.klaxon.Parser
object DataModel {
class MainResponse(val balance: Double, val saplingAddress: String, val zecprice: Double)
class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String,
val addr: String, val txid: String)
class TransactionItem(val type: String, val datetime: Long, val amount: String, val memo: String?,
val addr: String, val txid: String?)
var mainResponseData : MainResponse? = null
var transactions : List<TransactionItem> ?= null

58
app/src/main/java/com/adityapk/zcash/zqwandroid/SendActivity.kt

@ -1,27 +1,27 @@
package com.adityapk.zcash.zqwandroid
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatActivity
import android.text.Editable
import android.text.TextWatcher
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import com.beust.klaxon.Klaxon
import kotlinx.android.synthetic.main.activity_send.*
import kotlinx.android.synthetic.main.content_send.*
import kotlinx.android.synthetic.main.content_tx_details.*
import java.text.DecimalFormat
import android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT
import android.content.Context.INPUT_METHOD_SERVICE
import android.support.v4.content.ContextCompat.getSystemService
import android.view.inputmethod.InputMethodManager
class SendActivity : AppCompatActivity() {
private val REQUEST_ADDRESS = 1
private val REQUEST_CONFIRM = 2
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_send)
@ -29,20 +29,20 @@ class SendActivity : AppCompatActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
title = "Send Transaction"
// Clear the valid address prompt
txtValidAddress.text = ""
imageButton.setOnClickListener { view ->
val intent = Intent(this, QrReaderActivity::class.java)
startActivityForResult(intent, 1)
startActivityForResult(intent, REQUEST_ADDRESS)
}
sendAddress.addTextChangedListener (object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable?) {
}
override fun afterTextChanged(s: Editable?) {}
@SuppressLint("SetTextI18n")
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
@ -73,14 +73,38 @@ class SendActivity : AppCompatActivity() {
amountZEC.text = "ZEC " + DecimalFormat("#.########").format(usd / zprice)
}
})
btnSend.setOnClickListener { view ->
val intent = Intent(this, TxDetailsActivity::class.java)
val amt = amountZEC.text.toString()
val parsedAmt = amt.substring("ZEC ".length, amt.length)
val tx = DataModel.TransactionItem("confirm", 0, parsedAmt,
txtSendMemo.text.toString(), sendAddress.text.toString(), "")
intent.putExtra("EXTRA_TXDETAILS", Klaxon().toJsonString(tx))
startActivityForResult(intent, REQUEST_CONFIRM)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
sendAddress.setText(data?.dataString ?: "nothing", TextView.BufferType.EDITABLE)
amountUSD.requestFocus()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
when (requestCode) {
REQUEST_ADDRESS -> {
if (resultCode == Activity.RESULT_OK) {
sendAddress.setText(data?.dataString ?: "nothing", TextView.BufferType.EDITABLE)
amountUSD.requestFocus()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
}
}
REQUEST_CONFIRM -> {
if (resultCode == Activity.RESULT_OK) {
// Send
finish()
} else {
// Cancel
}
}
}
}
fun isValidAddress(a: String) : Boolean {

2
app/src/main/java/com/adityapk/zcash/zqwandroid/TransactionItemFragment.kt

@ -67,7 +67,7 @@ class TransactionItemFragment : Fragment() {
val amt = view.findViewById<TextView>(R.id.txamt)
val amtzec = tx?.amount?.toDoubleOrNull() ?: 0.0
amt.text = (if (tx?.type == "send") "" else "+") + DecimalFormat("#0.00########").format(amtzec) + " ZEC"
amt.text = "ZEC " + (if (tx?.type == "send") "" else "+") + DecimalFormat("#0.00########").format(amtzec)
if (tx?.type == "send") {
val col = view.findViewById<ImageView>(R.id.typeColor)

55
app/src/main/java/com/adityapk/zcash/zqwandroid/TxDetailsActivity.kt

@ -1,6 +1,7 @@
package com.adityapk.zcash.zqwandroid
import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.beust.klaxon.Klaxon
@ -27,16 +28,23 @@ class TxDetailsActivity : AppCompatActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
title = "Tx Details"
title = "Transaction Details"
tx = Klaxon().parse(StringReader(intent.getStringExtra("EXTRA_TXDETAILS")))
if (tx?.type == "send")
imgTypeColor.setImageResource(R.color.colorAccent)
txtType.text = tx?.type?.capitalize()
txtDateTime.text = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM)
.format(Date((tx?.datetime ?: 0) * 1000))
if (tx?.type == "confirm") {
txtType.text = "Confirm Transaction"
txtDateTime.text = ""
btnExternal.text = "Confirm and Send"
} else {
txtType.text = tx?.type?.capitalize()
txtDateTime.text = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM)
.format(Date((tx?.datetime ?: 0) * 1000))
}
txtAddress.text = if (tx?.addr.isNullOrBlank()) "(Shielded Address)" else tx?.addr
val amt = kotlin.math.abs(tx?.amount?.toDoubleOrNull() ?: 0.0)
@ -53,10 +61,43 @@ class TxDetailsActivity : AppCompatActivity() {
}
btnExternal.setOnClickListener { v ->
val browserIntent = Intent(Intent.ACTION_VIEW,
Uri.parse("https://explorer.zcha.in/transactions/${tx?.txid}"))
startActivity(browserIntent)
if (tx?.type == "confirm") {
setResult(Activity.RESULT_OK)
finish()
} else {
val browserIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://explorer.zcha.in/transactions/${tx?.txid}")
)
startActivity(browserIntent)
}
}
}
override fun getSupportParentActivityIntent(): Intent? {
return getParentActivityIntentImpl()
}
override fun getParentActivityIntent(): Intent? {
return getParentActivityIntentImpl()
}
private fun getParentActivityIntentImpl(): Intent {
var i: Intent? = null
// Here you need to do some logic to determine from which Activity you came.
// example: you could pass a variable through your Intent extras and check that.
if (tx?.type == "confirm") {
i = Intent(this, SendActivity::class.java)
// set any flags or extras that you need.
// If you are reusing the previous Activity (i.e. bringing it to the top
// without re-creating a new instance) set these flags:
i.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
} else {
i = Intent(this, MainActivity::class.java)
i.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
}
return i
}
}

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

@ -79,7 +79,7 @@
android:textAlignment="center" android:singleLine="true" android:selectAllOnFocus="true"
android:inputType="numberDecimal" android:maxLength="14"/>
<TextView
android:text="0.0 ZEC"
android:text="ZEC 0.0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -115,13 +115,13 @@
app:layout_constraintTop_toBottomOf="@id/AmountLayout" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/button3">
app:layout_constraintBottom_toTopOf="@+id/btnSend">
<EditText
android:layout_width="0dp"
android:layout_height="0dp"
android:inputType="text"
android:ems="10"
android:id="@+id/editText3" android:layout_marginTop="8dp"
android:id="@+id/txtSendMemo" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/textView9" android:layout_marginStart="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginBottom="8dp"
@ -139,7 +139,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/button3" android:layout_marginTop="8dp"
android:id="@+id/btnSend" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/MemoLayout" android:background="@color/colorAccent"
android:textColor="@android:color/white"/>
</android.support.constraint.ConstraintLayout>
Loading…
Cancel
Save