summaryrefslogtreecommitdiff
path: root/app/src/main/java/net/taler/wallet/history
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2019-12-27 11:13:19 -0300
committerTorsten Grote <t@grobox.de>2019-12-27 11:13:19 -0300
commit35ba17db04f48f4ec41f55ac6944051093f7b78b (patch)
tree4f315cfc5ffe5d386eb7b8d86666ceefbc82fcc4 /app/src/main/java/net/taler/wallet/history
parent89037988ca55cdd68e3be6294125b04ebfc50e77 (diff)
downloadwallet-android-35ba17db04f48f4ec41f55ac6944051093f7b78b.tar.gz
wallet-android-35ba17db04f48f4ec41f55ac6944051093f7b78b.tar.bz2
wallet-android-35ba17db04f48f4ec41f55ac6944051093f7b78b.zip
Use special layout for withdraw event in wallet history
This is how it could be done for all event types.
Diffstat (limited to 'app/src/main/java/net/taler/wallet/history')
-rw-r--r--app/src/main/java/net/taler/wallet/history/HistoryEvent.kt7
-rw-r--r--app/src/main/java/net/taler/wallet/history/WalletHistory.kt13
-rw-r--r--app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt75
3 files changed, 63 insertions, 32 deletions
diff --git a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
index be48ac9..34f3164 100644
--- a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
+++ b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt
@@ -5,13 +5,6 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY
import com.fasterxml.jackson.annotation.JsonSubTypes.Type
import com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME
-import org.json.JSONObject
-
-open class HistoryEntry(
- val detail: JSONObject,
- val type: String,
- val timestamp: JSONObject
-)
enum class ReserveType {
/**
diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
index 89c6b3f..cdc90ae 100644
--- a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
+++ b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt
@@ -24,7 +24,6 @@ import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import net.taler.wallet.HistoryResult
import net.taler.wallet.R
import net.taler.wallet.WalletViewModel
@@ -35,17 +34,13 @@ import net.taler.wallet.WalletViewModel
class WalletHistory : Fragment() {
lateinit var model: WalletViewModel
- lateinit var historyAdapter: WalletHistoryAdapter
+ private val historyAdapter = WalletHistoryAdapter()
lateinit var historyPlaceholder: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
- historyAdapter = WalletHistoryAdapter(
- HistoryResult(listOf())
- )
-
model = activity?.run {
ViewModelProviders.of(this)[WalletViewModel::class.java]
} ?: throw Exception("Invalid Activity")
@@ -68,7 +63,7 @@ class WalletHistory : Fragment() {
private fun updateHistory() {
model.getHistory {
- if (it.history.isEmpty()) {
+ if (it.isEmpty()) {
historyPlaceholder.visibility = View.VISIBLE
}
historyAdapter.update(it)
@@ -81,7 +76,9 @@ class WalletHistory : Fragment() {
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_show_history, container, false)
- val myLayoutManager = LinearLayoutManager(context)
+ val myLayoutManager = LinearLayoutManager(context).apply {
+ reverseLayout = true // show latest events first
+ }
val myItemDecoration = DividerItemDecoration(context, myLayoutManager.orientation)
view.findViewById<RecyclerView>(R.id.list_history).apply {
layoutManager = myLayoutManager
diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
index 46bca30..37dc742 100644
--- a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
+++ b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt
@@ -1,41 +1,82 @@
package net.taler.wallet.history
+import android.text.format.DateUtils.*
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import net.taler.wallet.HistoryResult
+import androidx.annotation.CallSuper
+import androidx.recyclerview.widget.RecyclerView.Adapter
+import androidx.recyclerview.widget.RecyclerView.ViewHolder
import net.taler.wallet.R
-class WalletHistoryAdapter(private var myDataset: HistoryResult) : RecyclerView.Adapter<WalletHistoryAdapter.MyViewHolder>() {
+internal class WalletHistoryAdapter(private var history: History = History()) :
+ Adapter<HistoryEventViewHolder>() {
init {
setHasStableIds(false)
}
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
- val rowView = LayoutInflater.from(parent.context).inflate(R.layout.history_row, parent, false)
- return MyViewHolder(rowView)
+ override fun getItemViewType(position: Int): Int = when (history[position]) {
+ is HistoryWithdrawnEvent -> R.layout.history_withdrawn
+ else -> R.layout.history_row
}
- override fun getItemCount(): Int {
- return myDataset.history.size
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryEventViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false)
+ return when (viewType) {
+ R.layout.history_withdrawn -> HistoryWithdrawnEventViewHolder(view)
+ else -> HistoryEventViewHolder(view)
+ }
}
- override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
- val h = myDataset.history[myDataset.history.size - position - 1]
- val text = holder.rowView.findViewById<TextView>(R.id.history_text)
- val subText = holder.rowView.findViewById<TextView>(R.id.history_subtext)
- text.text = h.type
- subText.text = h.timestamp.toString() + "\n" + h.detail.toString(1)
+ override fun getItemCount(): Int = history.size
+
+ override fun onBindViewHolder(holder: HistoryEventViewHolder, position: Int) {
+ val event = history[position]
+ holder.bind(event)
}
- fun update(updatedHistory: HistoryResult) {
- this.myDataset = updatedHistory
+ fun update(updatedHistory: History) {
+ this.history = updatedHistory
this.notifyDataSetChanged()
}
- class MyViewHolder(val rowView: View) : RecyclerView.ViewHolder(rowView)
+}
+
+internal open class HistoryEventViewHolder(protected val v: View) : ViewHolder(v) {
+
+ protected val title: TextView = v.findViewById(R.id.title)
+ private val time: TextView = v.findViewById(R.id.time)
+
+ @CallSuper
+ open fun bind(event: HistoryEvent) {
+ title.text = event::class.java.simpleName
+ time.text = getRelativeTime(event.timestamp.ms)
+ }
+
+ private fun getRelativeTime(timestamp: Long): CharSequence {
+ val now = System.currentTimeMillis()
+ return getRelativeTimeSpanString(timestamp, now, MINUTE_IN_MILLIS, FORMAT_ABBREV_RELATIVE)
+ }
+
+ protected fun getString(resId: Int) = v.context.getString(resId)
+
+}
+
+internal class HistoryWithdrawnEventViewHolder(v: View) : HistoryEventViewHolder(v) {
+
+ private val amountWithdrawnRaw: TextView = v.findViewById(R.id.amountWithdrawnRaw)
+ private val amountWithdrawnEffective: TextView = v.findViewById(R.id.amountWithdrawnEffective)
+
+ override fun bind(event: HistoryEvent) {
+ super.bind(event)
+ event as HistoryWithdrawnEvent
+
+ title.text = getString(R.string.history_event_withdrawn)
+ amountWithdrawnRaw.text = event.amountWithdrawnRaw
+ amountWithdrawnEffective.text = event.amountWithdrawnEffective
+ }
+
}