From d2bc919a43fb868ff99c74799197d1055ecd1c9a Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 28 Feb 2019 16:50:15 +0100 Subject: [PATCH] Refactor DynamicValueTextView to FormattedTextView --- .../android/ui/view/DynamicValueTextView.kt | 60 ------------------- .../android/ui/view/FormattedTextView.kt | 47 +++++++++++++++ .../android/ui/view/RowViewType.kt | 8 ++- .../android/ui/view/SessionRowView.kt | 6 +- .../res/layout/row_header_title_amount.xml | 2 +- .../layout/row_header_title_amount_big.xml | 2 +- .../res/layout/row_header_title_value.xml | 2 +- app/src/main/res/layout/row_session_view.xml | 2 +- app/src/main/res/values/attrs.xml | 2 +- 9 files changed, 62 insertions(+), 69 deletions(-) delete mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/DynamicValueTextView.kt create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/FormattedTextView.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/DynamicValueTextView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/DynamicValueTextView.kt deleted file mode 100644 index 0e5e3d58..00000000 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/DynamicValueTextView.kt +++ /dev/null @@ -1,60 +0,0 @@ -package net.pokeranalytics.android.ui.view - -import android.content.Context -import android.util.AttributeSet -import androidx.appcompat.widget.AppCompatTextView -import androidx.core.content.ContextCompat -import net.pokeranalytics.android.R -import net.pokeranalytics.android.util.toCurrency - -/** - * Extended TextView to display amount in the right color / currency - * Work in progress - */ -class DynamicValueTextView: AppCompatTextView { - - var isCurrency: Boolean = false - var amount: Double = 0.0 - set(value) { - field = value - updateUI() - } - - constructor(context: Context?) : super(context) { - init(null) - } - - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { - init(attrs) - } - - constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - init(attrs) - } - - /** - * Init class - */ - private fun init(attrs: AttributeSet?) { - context.theme.obtainStyledAttributes( attrs, R.styleable.DynamicValueTextView, 0, 0).apply { - try { - isCurrency = getBoolean(R.styleable.DynamicValueTextView_isCurrency, false) - amount = getFloat(R.styleable.DynamicValueTextView_amount, 0f).toDouble() - updateUI() - } finally { - recycle() - } - } - } - - /** - * Update the UI to manage currency format & color management - */ - private fun updateUI() { - if (isCurrency) { - setTextColor(ContextCompat.getColor(context, if (amount >= 0) R.color.green else R.color.red)) - text = amount.toCurrency() - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/FormattedTextView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/FormattedTextView.kt new file mode 100644 index 00000000..831fd19b --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/FormattedTextView.kt @@ -0,0 +1,47 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView +import net.pokeranalytics.android.calculus.TextFormat + +/** + * Extended TextView to display a TextFormat object + */ +class FormattedTextView: AppCompatTextView { + + var textFormat: TextFormat? = null + set(value) { + field = value + updateUI() + } + + constructor(context: Context?) : super(context) { + init(null) + } + + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { + init(attrs) + } + + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init(attrs) + } + + /** + * Init class + */ + private fun init(attrs: AttributeSet?) { + } + + /** + * Update the UI to manage currency format & color management + */ + private fun updateUI() { + textFormat?.let { + setTextColor(it.getColor(context)) + text = it.text + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 0287aab7..0e7a146a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -16,6 +16,8 @@ import kotlinx.android.synthetic.main.row_title_switch.view.* import kotlinx.android.synthetic.main.row_title_value.view.* import kotlinx.android.synthetic.main.row_title_value_action.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.ComputedStat +import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.view.rowrepresentable.HeaderRowRepresentable @@ -28,7 +30,6 @@ interface BindableHolder { fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { } - } @@ -178,12 +179,13 @@ enum class RowViewType { itemView.rowHeaderTitleAmount_title.text = row.title } - itemView.rowHeaderTitleAmount_value.isCurrency = true - itemView.rowHeaderTitleAmount_value.amount = try { + val value = try { row.value?.toDouble() ?: 0.0 } catch (e: Exception) { 0.0 } + val stat = ComputedStat(Stat.NETRESULT, value) + itemView.rowHeaderTitleAmount_value.textFormat = stat.format(itemView.context) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt index 89262a63..e26a7e48 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt @@ -8,6 +8,8 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import kotlinx.android.synthetic.main.row_session_view.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.ComputedStat +import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.getState @@ -123,7 +125,9 @@ class SessionRowView : FrameLayout { rowHistorySession.playingTitle.isVisible = false val result = session.result?.net ?: 0.0 - rowHistorySession.gameResult.amount = result + + val stat = ComputedStat(Stat.NETRESULT, result) + rowHistorySession.gameResult.textFormat = stat.format(context) } } diff --git a/app/src/main/res/layout/row_header_title_amount.xml b/app/src/main/res/layout/row_header_title_amount.xml index 1dc898e8..83737250 100644 --- a/app/src/main/res/layout/row_header_title_amount.xml +++ b/app/src/main/res/layout/row_header_title_amount.xml @@ -24,7 +24,7 @@ app:layout_constraintTop_toTopOf="parent" tools:text="Title" /> - - - - - +