From 40bb446e31f8a8abf383d8a3a9fc89db7fae9a98 Mon Sep 17 00:00:00 2001 From: Marcin Moskal Date: Tue, 23 Jan 2018 17:34:11 +0100 Subject: [PATCH] Set near-zero summary amount color to neutral --- .../flat/fragment/ChargeLikeFragment.kt | 7 +++- .../flat/fragment/SummaryLayoutFragment.kt | 38 +++++++++++++------ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/pl/rpieja/flat/fragment/ChargeLikeFragment.kt b/app/src/main/java/pl/rpieja/flat/fragment/ChargeLikeFragment.kt index e84ce1a..fa89a06 100644 --- a/app/src/main/java/pl/rpieja/flat/fragment/ChargeLikeFragment.kt +++ b/app/src/main/java/pl/rpieja/flat/fragment/ChargeLikeFragment.kt @@ -36,6 +36,7 @@ abstract class ChargeLikeFragment abstract fun updateItemView(viewHolder: VH, item: T) abstract fun createViewHolder(view: View): VH + abstract fun formatAmount(amountTextView: TextView, amount: Double) private var recyclerView: RecyclerView? = null private var elements: List? = null @@ -94,8 +95,12 @@ abstract class ChargeLayoutFragment: override fun updateItemView(viewHolder: ChargeViewHolder, item: T) { viewHolder.chargeName.text = item.chargeName - viewHolder.chargeAmount.text = currencyFormat.format(item.chargeAmount).toString() + formatAmount(viewHolder.chargeAmount, item.chargeAmount) viewHolder.chargeUsers.text = android.text.TextUtils.join(", ", getUsers(item).map { user -> user.name }) } + + override fun formatAmount(amountTextView: TextView, amount: Double) { + amountTextView.text = currencyFormat.format(amount).toString() + } } \ No newline at end of file diff --git a/app/src/main/java/pl/rpieja/flat/fragment/SummaryLayoutFragment.kt b/app/src/main/java/pl/rpieja/flat/fragment/SummaryLayoutFragment.kt index fc8c426..6897555 100644 --- a/app/src/main/java/pl/rpieja/flat/fragment/SummaryLayoutFragment.kt +++ b/app/src/main/java/pl/rpieja/flat/fragment/SummaryLayoutFragment.kt @@ -1,12 +1,14 @@ package pl.rpieja.flat.fragment import android.arch.lifecycle.ViewModel +import android.content.Context import android.support.v7.widget.RecyclerView import android.view.View import android.widget.TextView import pl.rpieja.flat.R import pl.rpieja.flat.dto.Summary import pl.rpieja.flat.dto.User +import kotlin.math.absoluteValue class SummaryViewHolder(view: View): RecyclerView.ViewHolder(view) { val amountTextView: TextView = itemView.findViewById(R.id.summaryAmount) @@ -20,21 +22,33 @@ abstract class SummaryLayoutFragment: override fun getUsers(item: Summary): List = item.fromUsers override fun updateItemView(viewHolder: SummaryViewHolder, item: Summary) { - val colorNegative = context!!.getColor(R.color.amountNegative) - val colorPositive = context!!.getColor(R.color.amountPositive) - val colorNeutral = context!!.getColor(R.color.amountNeutral) + formatAmount(viewHolder.amountTextView, item.amount) + viewHolder.userTextView.text = item.chargeName + } - val amountColor = when { - item.chargeAmount > 0 -> colorNegative - item.chargeAmount < 0 -> colorPositive - else -> colorNeutral - } + override fun createViewHolder(view: View): SummaryViewHolder = SummaryViewHolder(view) - viewHolder.amountTextView.setTextColor(amountColor) - viewHolder.amountTextView.text = currencyFormat.format(item.chargeAmount) + // getColor() requires context, available after onAttach + private var colorNegative: Int? = null + private var colorPositive: Int? = null + private var colorNeutral: Int? = null - viewHolder.userTextView.text = item.chargeName + override fun onAttach(context: Context?) { + super.onAttach(context) + colorNegative = context!!.getColor(R.color.amountNegative) + colorPositive = context.getColor(R.color.amountPositive) + colorNeutral = context.getColor(R.color.amountNeutral) } - override fun createViewHolder(view: View): SummaryViewHolder = SummaryViewHolder(view) + override fun formatAmount(amountTextView: TextView, amount: Double) { + val roundAmount = if (amount.absoluteValue < 0.01) 0.0 else amount + val color = when { + amount >= 0.01 -> colorNegative + amount <= -0.01 -> colorPositive + else -> colorNeutral + } + + amountTextView.text = currencyFormat.format(roundAmount).toString() + amountTextView.setTextColor(color!!) + } } \ No newline at end of file