From e361fab41c14d4ce7623e5d24ded3e39fd4aad62 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 18 Apr 2019 09:51:43 +0200 Subject: [PATCH 1/3] Fixing crash when selecting Stats > Number of sessions --- .../pokeranalytics/android/calculus/Stat.kt | 2 + .../android/ui/fragment/GraphFragment.kt | 86 ++++++++++--------- 2 files changed, 48 insertions(+), 40 deletions(-) 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 51ddc180..671582ae 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -193,6 +193,8 @@ enum class Stat : RowRepresentable { val resId = when (this) { AVERAGE, AVERAGE_DURATION, NET_BB_PER_100_HANDS, HOURLY_RATE_BB, AVERAGE_NET_BB, ROI, WIN_RATIO, HOURLY_RATE -> R.string.average + NUMBER_OF_SETS -> R.string.number_of_sessions + NUMBER_OF_GAMES -> R.string.number_of_records NETRESULT, DURATION -> R.string.total STANDARD_DEVIATION -> R.string.net_result STANDARD_DEVIATION_HOURLY -> R.string.hour_rate_without_pauses 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 d44e822e..da987ffe 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 @@ -72,35 +72,20 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co initUI() } - // OnChartValueSelectedListener - override fun onNothingSelected() { - // nothing to do - } - - override fun onValueSelected(e: Entry?, h: Highlight?) { - e?.let { entry -> - - val statEntry = when (entry.data) { - is ObjectIdentifier -> { - val identifier = entry.data as ObjectIdentifier - getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() - } - is StatEntry -> entry.data as StatEntry? - else -> null - } - - statEntry?.let { + /** + * Set data + */ + fun setData(stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { + this.stat = stat + this.computableGroup = group - val formattedDate = it.entryTitle - val entryValue = it.formattedValue(this.stat, requireContext()) - val totalStatValue = this.stat.format(e.y.toDouble(), currency = null, context = requireContext()) + this.aggregationTypes = stat.aggregationTypes + this.reports[this.aggregationTypes.first()] = report + this.selectedReport = report + this.displayAggregationChoices = displayAggregationChoices - this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) - } - } } - /** * Init UI */ @@ -122,9 +107,9 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co this.loadGraph(this.aggregationTypes.first(), this.selectedReport) - this.aggregationTypes.forEach { type -> + this.aggregationTypes.forEachIndexed { index, type -> val chip = Chip(requireContext()) - chip.id = type.ordinal + chip.id = index chip.text = requireContext().getString(type.resId) chip.chipStartPadding = 8f.px chip.chipEndPadding = 8f.px @@ -132,7 +117,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } this.chipGroup.isVisible = displayAggregationChoices - this.chipGroup.check(this.stat.aggregationTypes.first().ordinal) + this.chipGroup.check(0) this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { @@ -161,7 +146,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co val realm = Realm.getDefaultInstance() - val report = Calculator.computeStatsWithEvolutionByAggregationType(realm, computableGroup, aggregationType) + val report = + Calculator.computeStatsWithEvolutionByAggregationType(realm, computableGroup, aggregationType) reports[aggregationType] = report r = report @@ -188,7 +174,12 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co val graphEntries = when (aggregationType) { AggregationType.SESSION, AggregationType.DURATION -> report.results.firstOrNull()?.defaultStatEntries(stat) - AggregationType.MONTH, AggregationType.YEAR -> report.lineEntries(this.stat) + AggregationType.MONTH, AggregationType.YEAR -> { + when (this.stat) { + Stat.NUMBER_OF_GAMES, Stat.NUMBER_OF_SETS -> report.barEntries(this.stat) + else -> report.lineEntries(this.stat) + } + } } graphEntries?.let { entries -> @@ -225,18 +216,33 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } - /** - * Set data - */ - fun setData(stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { - this.stat = stat - this.computableGroup = group + // OnChartValueSelectedListener - this.aggregationTypes = stat.aggregationTypes - this.reports[this.aggregationTypes.first()] = report - this.selectedReport = report - this.displayAggregationChoices = displayAggregationChoices + override fun onNothingSelected() { + // nothing to do + } + + override fun onValueSelected(e: Entry?, h: Highlight?) { + e?.let { entry -> + val statEntry = when (entry.data) { + is ObjectIdentifier -> { + val identifier = entry.data as ObjectIdentifier + getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() + } + is StatEntry -> entry.data as StatEntry? + else -> null + } + + statEntry?.let { + + val formattedDate = it.entryTitle + val entryValue = it.formattedValue(this.stat, requireContext()) + val totalStatValue = this.stat.format(e.y.toDouble(), currency = null, context = requireContext()) + + this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) + } + } } } \ No newline at end of file From c0c06a9972f22408507ecb86491b3c1b04e4794f Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 18 Apr 2019 09:59:49 +0200 Subject: [PATCH 2/3] Hide counter session for some stats --- .../main/java/net/pokeranalytics/android/calculus/Stat.kt | 8 ++++++++ .../java/net/pokeranalytics/android/ui/view/LegendView.kt | 1 + 2 files changed, 9 insertions(+) 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 671582ae..a012d352 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -241,6 +241,14 @@ enum class Stat : RowRepresentable { } } + val shouldShowNumberOfSessions: Boolean + get() { + return when (this) { + NUMBER_OF_GAMES, NUMBER_OF_SETS -> false + else -> true + } + } + override val viewType: Int = RowViewType.TITLE_VALUE.ordinal } 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 3d94b2a3..ddf431be 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 @@ -58,6 +58,7 @@ class LegendView : FrameLayout { } this.counter.text = "$counter ${context.getString(R.string.sessions)}" + this.counter.isVisible = stat.shouldShowNumberOfSessions } From a75b0aea832d54700fb1412e1e4baa7277f0a3e3 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 18 Apr 2019 10:04:36 +0200 Subject: [PATCH 3/3] cleanup --- .../net/pokeranalytics/android/ui/fragment/GraphFragment.kt | 2 +- .../main/java/net/pokeranalytics/android/ui/view/LegendView.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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 da987ffe..8323de0d 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 @@ -238,7 +238,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co val formattedDate = it.entryTitle val entryValue = it.formattedValue(this.stat, requireContext()) - val totalStatValue = this.stat.format(e.y.toDouble(), currency = null, context = requireContext()) + val totalStatValue = this.stat.format(entry.y.toDouble(), currency = null, context = requireContext()) this.legendView.setItemData(this.stat, formattedDate, entryValue, totalStatValue) } 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 ddf431be..f2cce401 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 @@ -57,7 +57,8 @@ class LegendView : FrameLayout { this.stat2Name.isVisible = false } - this.counter.text = "$counter ${context.getString(R.string.sessions)}" + val counterText = "$counter ${context.getString(R.string.sessions)}" + this.counter.text = counterText this.counter.isVisible = stat.shouldShowNumberOfSessions }