diff options
author | Torsten Grote <t@grobox.de> | 2019-12-27 11:13:19 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2019-12-27 11:13:19 -0300 |
commit | 35ba17db04f48f4ec41f55ac6944051093f7b78b (patch) | |
tree | 4f315cfc5ffe5d386eb7b8d86666ceefbc82fcc4 /app/src/main/java/net/taler/wallet/history | |
parent | 89037988ca55cdd68e3be6294125b04ebfc50e77 (diff) | |
download | wallet-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')
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 + } + } |