forked from hush/SilentDragonAndroid-old
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
5.9 KiB
169 lines
5.9 KiB
// Copyright 2019-2020 The Hush developers
|
|
package org.myhush.silentdragon
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.app.Activity
|
|
import android.os.Bundle
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import com.beust.klaxon.Klaxon
|
|
import kotlinx.android.synthetic.main.activity_tx_details.*
|
|
import kotlinx.android.synthetic.main.content_tx_details.*
|
|
import java.io.StringReader
|
|
import java.text.DateFormat
|
|
import java.text.DecimalFormat
|
|
import java.util.*
|
|
import android.content.Intent
|
|
import android.net.Uri
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
import android.view.Menu
|
|
import android.view.MenuItem
|
|
import android.view.View
|
|
|
|
class TxDetailsActivity : AppCompatActivity() {
|
|
|
|
private var tx : DataModel.TransactionItem? = null
|
|
|
|
@SuppressLint("SetTextI18n")
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(R.layout.activity_tx_details)
|
|
setSupportActionBar(toolbar)
|
|
|
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
|
|
|
title = resources.getString(R.string.transaction_details)
|
|
|
|
tx = Klaxon().parse(StringReader(intent.getStringExtra("EXTRA_TXDETAILS")))
|
|
|
|
if (tx?.type == "send")
|
|
imgTypeColor.setImageResource(R.color.colorAccent)
|
|
|
|
if (tx?.type == "confirm") {
|
|
|
|
txtType.text = getString(R.string.confirm_transaction)
|
|
txtDateTime.text = ""
|
|
btnExternal.text = getString(R.string.confirm_and_send)
|
|
} else {
|
|
//txtType.text = tx?.type?.capitalize() + if (tx?.confirmations == 0L) getString(R.string.unconfirmed_tx) else ""
|
|
txtType.text = if (tx?.type == "send") getString(R.string.sent) else getString(R.string.received) + if (tx?.confirmations == 0L) getString(R.string.unconfirmed_tx) else ""
|
|
txtDateTime.text = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM)
|
|
.format(Date((tx?.datetime ?: 0) * 1000))
|
|
|
|
// Check if there is a reply-to address
|
|
if (getReplyToAddress(tx?.memo) != null) {
|
|
btnExternal.text = getString(R.string.reply)
|
|
} else {
|
|
btnExternal.visibility = View.GONE
|
|
}
|
|
}
|
|
|
|
txtAddress.text = if (tx?.addr.isNullOrBlank()) getString(R.string.shielded_address) else tx?.addr
|
|
|
|
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 = "$symbol " + DecimalFormat("#,##0.00").format(
|
|
(amt) * (DataModel.currencyValues[cur] ?: 0.0))
|
|
|
|
if (tx?.memo.isNullOrBlank()) {
|
|
layoutMemo.visibility = ConstraintLayout.GONE
|
|
} else {
|
|
txtMemo.text = tx?.memo
|
|
}
|
|
|
|
btnExternal.setOnClickListener { v ->
|
|
if (tx?.type == "confirm") {
|
|
val data = Intent()
|
|
data.data = Uri.parse(Klaxon().toJsonString(tx))
|
|
setResult(Activity.RESULT_OK, data)
|
|
|
|
finish()
|
|
} else {
|
|
val intent = Intent(this, SendActivity::class.java)
|
|
intent.putExtra("address", getReplyToAddress(tx?.memo))
|
|
intent.putExtra("amount", 0.01)
|
|
intent.putExtra("includeReplyTo", true)
|
|
startActivity(intent)
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun getReplyToAddress(memo: String?): String? {
|
|
if (memo == null)
|
|
return null
|
|
|
|
val lastPost = memo.trim().lastIndexOfAny("\r\n".toCharArray())
|
|
val lastWord = memo.substring(lastPost + 1)
|
|
return if (DataModel.isValidAddress(lastWord) && DataModel.isSaplingAddress(
|
|
lastWord
|
|
)
|
|
)
|
|
lastWord
|
|
else
|
|
null
|
|
}
|
|
|
|
private fun viewOnExplorer(txid: String?) {
|
|
val uri = if (DataModel.isTestnet()) {
|
|
"https://explorer.myhush.org/tx/"
|
|
} else {
|
|
"https://explorer.myhush.org/tx/"
|
|
} + txid
|
|
val browserIntent = Intent(
|
|
Intent.ACTION_VIEW,
|
|
Uri.parse(uri)
|
|
)
|
|
startActivity(browserIntent)
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
|
menuInflater.inflate(R.menu.menu_txdetails, menu)
|
|
|
|
tx = Klaxon().parse(StringReader(intent.getStringExtra("EXTRA_TXDETAILS")))
|
|
if (tx?.type == "confirm") {
|
|
menu!!.removeItem(R.id.action_view)
|
|
}
|
|
return true
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
|
return when (item?.itemId) {
|
|
R.id.action_view -> {
|
|
viewOnExplorer(tx?.txid)
|
|
|
|
return true
|
|
}
|
|
else -> super.onOptionsItemSelected(item as MenuItem)
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
|