blob: a2684e11dfc2de2acaaa199d774abafee7296541 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
/*
* This file is part of GNU Taler
* (C) 2020 Taler Systems S.A.
*
* GNU Taler is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 3, or (at your option) any later version.
*
* GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
package net.taler.wallet.history
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView.Adapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import net.taler.common.exhaustive
import net.taler.common.toRelativeTime
import net.taler.wallet.R
import net.taler.wallet.history.DevHistoryAdapter.HistoryViewHolder
import net.taler.wallet.transactions.AmountType
internal class DevHistoryAdapter(
private val listener: OnEventClickListener
) : Adapter<HistoryViewHolder>() {
private var history: List<HistoryEvent> = ArrayList()
init {
setHasStableIds(false)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.list_item_history, parent, false)
return HistoryViewHolder(view)
}
override fun getItemCount(): Int = history.size
override fun onBindViewHolder(holder: HistoryViewHolder, position: Int) {
val transaction = history[position]
holder.bind(transaction)
}
fun update(updatedHistory: List<HistoryEvent>) {
this.history = updatedHistory
this.notifyDataSetChanged()
}
internal open inner class HistoryViewHolder(private val v: View) : ViewHolder(v) {
protected val context: Context = v.context
private val icon: ImageView = v.findViewById(R.id.icon)
protected val title: TextView = v.findViewById(R.id.title)
private val time: TextView = v.findViewById(R.id.time)
private val amount: TextView = v.findViewById(R.id.amount)
private val amountColor = amount.currentTextColor
open fun bind(historyEvent: HistoryEvent) {
v.setOnClickListener { listener.onTransactionClicked(historyEvent) }
icon.setImageResource(historyEvent.icon)
title.text = historyEvent.title
time.text = historyEvent.timestamp.ms.toRelativeTime(context)
bindAmount(historyEvent.displayAmount)
}
private fun bindAmount(displayAmount: DisplayAmount?) {
if (displayAmount == null) {
amount.visibility = GONE
} else {
amount.visibility = VISIBLE
when (displayAmount.type) {
AmountType.Positive -> {
amount.text = context.getString(
R.string.amount_positive, displayAmount.amount.amountStr
)
amount.setTextColor(context.getColor(R.color.green))
}
AmountType.Negative -> {
amount.text = context.getString(
R.string.amount_negative, displayAmount.amount.amountStr
)
amount.setTextColor(context.getColor(R.color.red))
}
AmountType.Neutral -> {
amount.text = displayAmount.amount.amountStr
amount.setTextColor(amountColor)
}
}.exhaustive
}
}
}
}
|