|
|
@ -14,6 +14,12 @@ import java.util.* |
|
|
|
import android.content.Intent |
|
|
|
import android.net.Uri |
|
|
|
import android.support.constraint.ConstraintLayout |
|
|
|
import android.view.Menu |
|
|
|
import android.view.MenuItem |
|
|
|
import android.view.View |
|
|
|
import android.R.attr.right |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TxDetailsActivity : AppCompatActivity() { |
|
|
@ -43,6 +49,13 @@ class TxDetailsActivity : AppCompatActivity() { |
|
|
|
txtType.text = tx?.type?.capitalize() + if (tx?.confirmations == 0L) " (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 = "Reply" |
|
|
|
} else { |
|
|
|
btnExternal.visibility = View.GONE |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
txtAddress.text = if (tx?.addr.isNullOrBlank()) "(Shielded Address)" else tx?.addr |
|
|
@ -64,21 +77,56 @@ class TxDetailsActivity : AppCompatActivity() { |
|
|
|
if (tx?.type == "confirm") { |
|
|
|
val data = Intent() |
|
|
|
data.data = Uri.parse(Klaxon().toJsonString(tx)) |
|
|
|
setResult(Activity.RESULT_OK, data); |
|
|
|
setResult(Activity.RESULT_OK, data) |
|
|
|
|
|
|
|
finish() |
|
|
|
} else { |
|
|
|
val uri = if (DataModel.isTestnet()) { |
|
|
|
"https://explorer.testnet.z.cash/tx/" |
|
|
|
} else { |
|
|
|
"https://explorer.zcha.in/transactions/" |
|
|
|
} + tx?.txid |
|
|
|
val browserIntent = Intent( |
|
|
|
Intent.ACTION_VIEW, |
|
|
|
Uri.parse(uri) |
|
|
|
) |
|
|
|
startActivity(browserIntent) |
|
|
|
val intent = Intent(this, SendActivity::class.java) |
|
|
|
intent.putExtra("address", getReplyToAddress(tx?.memo)) |
|
|
|
intent.putExtra("amount", 0.01) |
|
|
|
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.testnet.z.cash/tx/" |
|
|
|
} else { |
|
|
|
"https://explorer.zcha.in/transactions/" |
|
|
|
} + 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) |
|
|
|
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) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|