Browse Source

Add unconfirmed Tx fragment

connman
adityapk00 6 years ago
parent
commit
ef12bdb098
  1. 58
      app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt
  2. 4
      app/src/main/java/com/adityapk/zcash/zqwandroid/SendActivity.kt
  3. 5
      app/src/main/java/com/adityapk/zcash/zqwandroid/TransactionItemFragment.kt
  4. 2
      app/src/main/java/com/adityapk/zcash/zqwandroid/TxDetailsActivity.kt
  5. 120
      app/src/main/java/com/adityapk/zcash/zqwandroid/UnconfirmedTxItemFragment.kt
  6. 23
      app/src/main/res/layout/content_main.xml
  7. 41
      app/src/main/res/layout/fragment_unconfirmed_tx_item.xml

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

@ -2,12 +2,16 @@ package com.adityapk.zcash.zqwandroid
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Typeface
import android.net.Uri
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.util.TypedValue
import android.view.Menu
import android.view.MenuItem
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.Toast
import com.beust.klaxon.Klaxon
import com.beust.klaxon.json
@ -16,9 +20,12 @@ import kotlinx.android.synthetic.main.content_main.*
import okhttp3.*
import okio.ByteString
import java.text.DecimalFormat
import android.widget.TextView
class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInteractionListener {
class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInteractionListener , UnconfirmedTxItemFragment.OnFragmentInteractionListener{
override fun onFragmentInteraction(uri: Uri) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
@ -111,10 +118,55 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
balanceSmall.text = balText.substring(balText.length - 4, balText.length)
balanceUSD.text = "$ " + DecimalFormat("#,##0.00").format(bal * zPrice)
txList.removeAllViewsInLayout()
addPastTransactions(DataModel.transactions)
}
}
private fun addPastTransactions(txns: List<DataModel.TransactionItem>?) {
txList.removeAllViewsInLayout()
// If there are no transactions, just return (don't add any headers either)
if (txns.isNullOrEmpty())
return
val addTitle = fun(title: String) {
// Add the "Past Transactions" TextView
val tv = TextView(this)
tv.text = title
val params = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
params.setMargins(16, 16, 16, 16)
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f)
tv.layoutParams = params
tv.setTypeface(null, Typeface.BOLD)
txList.addView(tv)
}
// Split all the transactions into confirmations = 0 and confirmations > 0
// Unconfirmed first
val unconfirmed = txns.filter { t -> t.confirmations == 0L }
if (unconfirmed.isNotEmpty()) {
//addTitle("Recent Transactions")
val fragTx = supportFragmentManager.beginTransaction()
for (tx in unconfirmed) {
fragTx.add(
txList.id ,
UnconfirmedTxItemFragment.newInstance(Klaxon().toJsonString(tx), ""),
"tag1"
)
}
fragTx.commit()
}
// Add all confirmed transactions
val confirmed = txns.filter { t -> t.confirmations > 0L }
if (confirmed.isNotEmpty()) {
addTitle("Recent Transactions")
val fragTx = supportFragmentManager.beginTransaction()
var oddeven = "odd"
for (tx in DataModel.transactions.orEmpty()) {
for (tx in confirmed) {
fragTx.add(
txList.id ,
TransactionItemFragment.newInstance(Klaxon().toJsonString(tx), oddeven),

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

@ -9,6 +9,7 @@ import android.os.Bundle
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
import android.text.Editable
import android.text.InputType
import android.text.TextWatcher
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
@ -16,9 +17,6 @@ import com.beust.klaxon.Klaxon
import kotlinx.android.synthetic.main.activity_send.*
import kotlinx.android.synthetic.main.content_send.*
import java.text.DecimalFormat
import android.content.DialogInterface
import android.content.DialogInterface.BUTTON_NEUTRAL
import android.text.InputType
class SendActivity : AppCompatActivity() {

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

@ -79,11 +79,6 @@ class TransactionItemFragment : Fragment() {
return view
}
// TODO: Rename method, update argument and hook method into UI event
fun onButtonPressed(uri: Uri) {
listener?.onFragmentInteraction(uri)
}
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnFragmentInteractionListener) {

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

@ -40,7 +40,7 @@ class TxDetailsActivity : AppCompatActivity() {
txtDateTime.text = ""
btnExternal.text = "Confirm and Send"
} else {
txtType.text = tx?.type?.capitalize()
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))
}

120
app/src/main/java/com/adityapk/zcash/zqwandroid/UnconfirmedTxItemFragment.kt

@ -0,0 +1,120 @@
package com.adityapk.zcash.zqwandroid
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.support.constraint.ConstraintLayout
import android.support.v4.app.Fragment
import android.support.v4.content.ContextCompat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.beust.klaxon.Klaxon
import java.text.DateFormat
import java.text.DecimalFormat
import java.util.*
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
/**
* A simple [Fragment] subclass.
* Activities that contain this fragment must implement the
* [UnconfirmedTxItemFragment.OnFragmentInteractionListener] interface
* to handle interaction events.
* Use the [UnconfirmedTxItemFragment.newInstance] factory method to
* create an instance of this fragment.
*
*/
class UnconfirmedTxItemFragment : Fragment() {
// TODO: Rename and change types of parameters
private var tx: DataModel.TransactionItem? = null
private var param2: String? = null
private var listener: OnFragmentInteractionListener? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
tx = Klaxon().parse(it.getString(ARG_PARAM1))
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_unconfirmed_tx_item, container, false)
view.findViewById<ConstraintLayout>(R.id.layoutUnconfirmedItem).setOnClickListener { v ->
val intent = Intent(activity, TxDetailsActivity::class.java)
intent.putExtra("EXTRA_TXDETAILS", Klaxon().toJsonString(tx))
startActivity(intent)
}
val txt = view.findViewById<TextView>(R.id.txtUnconfirmedTx)
txt.text = (if (tx?.type == "send") "Sending" else "Receiving") +
" ZEC " + (if (tx?.type == "send") "" else "+") +
DecimalFormat("#0.00########").format(tx?.amount?.toDoubleOrNull() ?: 0.0)
return view
}
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnFragmentInteractionListener) {
listener = context
} else {
throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener")
}
}
override fun onDetach() {
super.onDetach()
listener = null
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
*
*
* See the Android Training lesson [Communicating with Other Fragments]
* (http://developer.android.com/training/basics/fragments/communicating.html)
* for more information.
*/
interface OnFragmentInteractionListener {
// TODO: Update argument type and name
fun onFragmentInteraction(uri: Uri)
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment UnconfirmedTxItemFragment.
*/
// TODO: Rename and change types and number of parameters
@JvmStatic
fun newInstance(param1: String, param2: String) =
UnconfirmedTxItemFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
}

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

@ -15,8 +15,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:id="@+id/imageView2"
app:layout_constraintHorizontal_bias="0.524"
app:layout_constraintBottom_toTopOf="@id/pastTransactionsLayout"
android:layout_marginBottom="8dp" app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:text="Balance"
android:layout_width="wrap_content"
@ -52,29 +51,13 @@
app:layout_constraintEnd_toEndOf="parent" android:id="@+id/imageView3"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="125dp"/>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/pastTransactionsLayout"
app:layout_constraintTop_toBottomOf="@+id/imageView2"
app:layout_constraintBottom_toTopOf="@+id/scrollView3" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="32dp">
<TextView
android:text="Past Transactions"
android:layout_width="0dp"
android:layout_height="wrap_content" android:id="@+id/textView2"
app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginStart="8dp"
android:textSize="18sp" android:textStyle="bold"/>
</android.support.constraint.ConstraintLayout>
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" android:id="@+id/scrollView3"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="16dp"
android:fillViewport="true" android:clipToPadding="false" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/pastTransactionsLayout">
android:fillViewport="true" android:clipToPadding="false"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/imageView3">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txList" android:orientation="vertical"/>

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

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UnconfirmedTxItemFragment" android:id="@+id/frameLayout">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp" android:background="@color/light_grey"
android:id="@+id/layoutUnconfirmedItem" android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent">
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prgUnconfirmed" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="8dp"
android:layout_marginStart="32dp" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp" android:progress="23"/>
<TextView
android:text="Recieving ZEC 0.12345678"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/txtUnconfirmedTx"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp" android:layout_marginStart="24dp"
app:layout_constraintStart_toEndOf="@+id/prgUnconfirmed" android:textSize="18sp"/>
<TextView
android:text="Unconfirmed Transaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView9"
app:layout_constraintTop_toBottomOf="@+id/txtUnconfirmedTx" android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="8dp"
app:layout_constraintLeft_toLeftOf="@+id/txtUnconfirmedTx" android:textColor="@color/colorAccent"/>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
Loading…
Cancel
Save