From d6355d78515dd01c5779ba5b1cdbe8c4691352a5 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 19 Apr 2019 16:01:28 +0200 Subject: [PATCH] Provide legend for distribution graph --- .../pokeranalytics/android/calculus/Report.kt | 2 +- .../pokeranalytics/android/calculus/Stat.kt | 22 +++++++++++++-- .../android/model/realm/Currency.kt | 7 +++++ .../android/model/realm/Session.kt | 28 ++++++++++++++++++- .../android/model/realm/SessionSet.kt | 3 +- .../android/ui/fragment/GraphFragment.kt | 10 ++++--- ...rgeNumberFormatter.kt => AxisFormatter.kt} | 0 .../android/ui/view/LegendView.kt | 18 +++++++----- .../android/ui/view/RowViewType.kt | 9 ++---- 9 files changed, 76 insertions(+), 23 deletions(-) rename app/src/main/java/net/pokeranalytics/android/ui/graph/{LargeNumberFormatter.kt => AxisFormatter.kt} (100%) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt index ccb2441e..3bc5bef6 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt @@ -419,7 +419,7 @@ class ComputedResults(group: ComputableGroup, shouldManageMultiGroupProgressValu override val entryTitle: String = this.group.name - override fun formattedValue(stat: Stat, context: Context): TextFormat { + override fun formattedValue(stat: Stat): TextFormat { this.computedStat(stat)?.let { return it.format() } ?: run { diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt index bacf6695..3e731206 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -1,10 +1,12 @@ package net.pokeranalytics.android.calculus import android.content.Context +import com.github.mikephil.charting.data.Entry import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.FormattingException import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.ui.graph.AxisFormatting +import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.NULL_TEXT @@ -25,7 +27,23 @@ class ObjectIdentifier(var id: String, var clazz: Class) { interface StatEntry { val entryTitle: String - fun formattedValue(stat: Stat, context: Context): TextFormat + fun formattedValue(stat: Stat): TextFormat + + fun legendValues(stat: Stat, entry: Entry) : LegendView.Values { + + return when (stat) { + Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES -> { + val totalStatValue = stat.format(entry.y.toDouble(), currency = null) + LegendView.Values(this.entryTitle, totalStatValue) + } + else -> { + val entryValue = this.formattedValue(stat) + val totalStatValue = stat.format(entry.y.toDouble(), currency = null) + LegendView.Values(this.entryTitle, entryValue, totalStatValue) + } + } + + } } @@ -239,7 +257,7 @@ enum class Stat : RowRepresentable { val significantIndividualValue: Boolean get() { return when (this) { - WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES -> false + WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES, STANDARD_DEVIATION -> false else -> true } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt index 5dc19015..304f3a2b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.util.UserDefaults import java.util.* open class Currency : RealmObject() { @@ -42,4 +43,10 @@ open class Currency : RealmObject() { } } + + fun hasMainCurrencyCode() : Boolean { + this.code?.let { return it == UserDefaults.currency.currencyCode } + return false + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 9e99cfcc..b6362de8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android.model.realm import android.content.Context +import com.github.mikephil.charting.data.Entry import io.realm.Realm import io.realm.RealmList import io.realm.RealmObject @@ -26,6 +27,7 @@ import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.model.utils.SessionSetManager import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException +import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType @@ -921,7 +923,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate) } - override fun formattedValue(stat: Stat, context: Context): TextFormat { + override fun formattedValue(stat: Stat): TextFormat { this.result?.let { result -> @@ -961,6 +963,30 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } + override fun legendValues(stat: Stat, entry: Entry) : LegendView.Values { + + return when (stat) { + Stat.STANDARD_DEVIATION -> { + val left = this.formattedValue(Stat.NET_RESULT) + + val hasMainCurrencyCode = this.bankroll?.currency?.hasMainCurrencyCode() ?: false + var right: TextFormat? = null + + if (!hasMainCurrencyCode) { + this.computableResult?.ratedNet?.let { ratedNet -> + right = Stat.NET_RESULT.format(ratedNet) + } + } + + return LegendView.Values(this.entryTitle, left, right) + + } else -> { + return super.legendValues(stat, entry) + } + } + + } + // Timed override val objectIdentifier: ObjectIdentifier diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt index e2777e86..f5aa245f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt @@ -1,6 +1,5 @@ package net.pokeranalytics.android.model.realm -import android.content.Context import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults @@ -118,7 +117,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable { return DateFormat.getDateInstance(DateFormat.SHORT).format(this.startDate) } - override fun formattedValue(stat: Stat, context: Context) : TextFormat { + override fun formattedValue(stat: Stat) : TextFormat { return when (stat) { Stat.NET_RESULT, Stat.AVERAGE -> stat.format(this.ratedNet, currency = null) Stat.DURATION, Stat.AVERAGE_DURATION -> stat.format(this.netDuration.toDouble(), currency = null) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt index 9509cf81..fcdcc9ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt @@ -174,11 +174,13 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } statEntry?.let { - val formattedDate = it.entryTitle - val entryValue = it.formattedValue(this.stat, requireContext()) - val totalStatValue = this.stat.format(entry.y.toDouble(), currency = null) + this.legendView.setItemData(it.legendValues(stat, entry)) - this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) +// val formattedDate = it.entryTitle +// val entryValue = it.formattedValue(this.stat, requireContext()) +// val totalStatValue = this.stat.format(entry.y.toDouble(), currency = null) +// +// this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/LargeNumberFormatter.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/AxisFormatter.kt similarity index 100% rename from app/src/main/java/net/pokeranalytics/android/ui/graph/LargeNumberFormatter.kt rename to app/src/main/java/net/pokeranalytics/android/ui/graph/AxisFormatter.kt diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt index f2cce401..bbd1f847 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/LegendView.kt @@ -17,6 +17,8 @@ import net.pokeranalytics.android.ui.extensions.setTextFormat */ class LegendView : FrameLayout { + class Values(var title: String, var leftFormat: TextFormat, var rightFormat: TextFormat? = null) + private lateinit var legendLayout: ConstraintLayout /** @@ -66,17 +68,19 @@ class LegendView : FrameLayout { /** * */ - fun setItemData(stat: Stat, title: String, statFormat1: TextFormat, statFormat2: TextFormat) { + fun setItemData(values: Values) { - this.title.text = title + this.title.text = values.title - if (stat.significantIndividualValue) { - this.stat1Value.setTextFormat(statFormat1, context) - this.stat2Value.setTextFormat(statFormat2, context) - } else { - this.stat1Value.setTextFormat(statFormat2, context) + this.stat1Value.setTextFormat(values.leftFormat, context) + values.rightFormat?.let { + this.stat2Value.setTextFormat(it, context) } + val showRightStat = values.rightFormat != null + this.stat2Name.isVisible = showRightStat + this.stat2Value.isVisible = showRightStat + } } \ 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 f832bf98..a76a4d83 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 @@ -89,9 +89,9 @@ enum class RowViewType(private var layoutRes: Int) { return when (this) { // Row View Holder - HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, - LOCATION_TITLE, INFO, - TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, + HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE, + INFO, TITLE, TITLE_ARROW, TITLE_ICON_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, + TITLE_SWITCH, TITLE_CHECK, TITLE_VALUE_CHECK, DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(layout) // Row Session @@ -297,8 +297,6 @@ enum class RowViewType(private var layoutRes: Int) { } } - - // Listener val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, row) @@ -307,7 +305,6 @@ enum class RowViewType(private var layoutRes: Int) { } } - /** * Display a stat */