From 44202dc50bbbc591762f9061406dcaa46ceed0c9 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 12 Apr 2019 14:20:48 +0200 Subject: [PATCH] Graph styling + restricting for proper stats --- .../pokeranalytics/android/calculus/Stat.kt | 11 ++- .../android/ui/fragment/GraphFragment.kt | 4 +- .../android/ui/fragment/StatsFragment.kt | 2 +- .../android/ui/graph/GraphExtensions.kt | 93 ++++++++----------- .../android/ui/view/RowViewType.kt | 7 +- 5 files changed, 59 insertions(+), 58 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 d4e89d06..e4b93588 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -203,7 +203,16 @@ enum class Stat : RowRepresentable { get() { return when (this) { NETRESULT -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR, AggregationType.DURATION) - else -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR, AggregationType.DURATION) + NUMBER_OF_GAMES, NUMBER_OF_SETS -> listOf(AggregationType.MONTH, AggregationType.YEAR) + else -> listOf(AggregationType.SESSION, AggregationType.MONTH, AggregationType.YEAR) + } + } + + val hasEvolutionGraph: Boolean + get() { + return when (this) { + DURATION, AVERAGE_DURATION -> false + else -> true } } 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 6afffdbf..0b1ad19b 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 @@ -96,9 +96,11 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.chartContainer.addView(this.chartView) - this.chartView.setStyle(requireContext()) + this.chartView.setStyle(false, requireContext()) this.chartView.setOnChartValueSelectedListener(this) + this.chartView.highlightValue((this.entries.size - 1).toFloat(), 0) + this.stat.aggregationTypes.forEach { type -> val chip = Chip(requireContext()) chip.id = type.ordinal diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt index 65cb1378..30decac6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt @@ -199,7 +199,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - if (row is StatRepresentable) { + if (row is StatRepresentable && row.stat.hasEvolutionGraph) { // filter groups val groupResults = this.report?.results?.filter { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt index ee94423e..d5c5dfcc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphExtensions.kt @@ -1,76 +1,63 @@ package net.pokeranalytics.android.ui.graph import android.content.Context +import android.graphics.Typeface import androidx.core.content.ContextCompat import com.github.mikephil.charting.charts.BarLineChartBase import com.github.mikephil.charting.components.XAxis import net.pokeranalytics.android.R import net.pokeranalytics.android.util.extensions.px -//fun BarChart.setStyle(context: Context) { -// GraphHelper.setStyle(this, context) -//} +fun BarLineChartBase<*>.setStyle(small: Boolean, context: Context) { -fun BarLineChartBase<*>.setStyle(context: Context) { - GraphHelper.setStyle(this, context) -} + // X Axis + this.xAxis.axisLineColor = ContextCompat.getColor(context, R.color.chart_default) + this.xAxis.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px) + this.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default) + this.xAxis.labelCount = 4 + this.xAxis.position = XAxis.XAxisPosition.BOTTOM -class GraphHelper { + this.xAxis.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px) - companion object { + this.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default) + this.xAxis.typeface = Typeface.DEFAULT + this.xAxis.labelCount = 4 + this.xAxis.position = XAxis.XAxisPosition.BOTTOM - fun setStyle(chart: BarLineChartBase<*>, context: Context) { + this.xAxis.setDrawLabels(true) + this.xAxis.setDrawGridLines(true) + this.xAxis.granularity = 1.0f + this.xAxis.isGranularityEnabled = true + this.xAxis.isEnabled = true - chart.xAxis.axisLineColor = ContextCompat.getColor(context, R.color.chart_default) - chart.xAxis.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px) - chart.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default) - chart.xAxis.labelCount = 4 - chart.xAxis.position = XAxis.XAxisPosition.BOTTOM + // Y Axis + this.axisLeft.setDrawAxisLine(false) + this.axisLeft.setDrawGridLines(true) + this.axisLeft.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px) - chart.axisLeft.enableGridDashedLine(3.0f.px, 5.0f.px, 1.0f.px) + this.axisLeft.setDrawZeroLine(true) +// this.axisLeft.zeroLineWidth = 1.0f.px + this.axisLeft.zeroLineColor = ContextCompat.getColor(context, R.color.chart_default) -// this.xAxis.axisLineWidth = ChartAppearance.lineWidth -// this.xAxis.enableGridDashedLine(3.0f, 5.0f, 1.0f) -// -// this.xAxis.labelTextColor = ChartAppearance.defaultColor -// this.xAxis.labelFont = Fonts.graphAxis -// this.xAxis.labelCount = 4 -// this.xAxis.labelPosition = .bottom -// -// this.xAxis.drawLabelsEnabled = true -// this.xAxis.drawGridLinesEnabled = true -// this.xAxis.granularity = 1.0 -// this.xAxis.granularityEnabled = true -// this.xAxis.enabled = true -// -// // Y Axis -// this.leftAxis.drawAxisLineEnabled = false -// this.leftAxis.drawGridLinesEnabled = true -// this.leftAxis.gridLineDashLengths = [3.0, 5.0] -// -// this.leftAxis.drawZeroLineEnabled = true -// this.leftAxis.zeroLineWidth = ChartAppearance.lineWidth -// this.leftAxis.zeroLineColor = ChartAppearance.defaultColor -// -// this.leftAxis.granularityEnabled = true -// this.leftAxis.granularity = 1.0 -// -// this.leftAxis.labelTextColor = ChartAppearance.defaultColor -// this.leftAxis.labelFont = Fonts.graphAxis -// this.leftAxis.labelCount = small ? 1 : 7 // @todo not great if interval is [0..2] for number of records as we get decimals -// + this.axisLeft.isGranularityEnabled = true + this.axisLeft.granularity = 1.0f + + this.axisLeft.textColor = ContextCompat.getColor(context, R.color.chart_default) + this.axisLeft.typeface = Typeface.DEFAULT + this.axisLeft.labelCount = + if (small) 1 else 7 // @todo not great if interval is [0..2] for number of records as we get decimals + + this.axisRight.isEnabled = false + this.legend.isEnabled = false + + +// @todo // if timeYAxis { -// this.leftAxis.valueFormatter = HourValueFormatter() +// this.axisLeft.valueFormatter = HourValueFormatter() // } else { -// this.leftAxis.valueFormatter = LargeNumberFormatter() +// this.axisLeft.valueFormatter = LargeNumberFormatter() // } // -// this.rightAxis.enabled = false -// -// this.legend.enabled = false - - } - } } 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 1659120d..4ffd4bec 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 @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_history_session.view.* import kotlinx.android.synthetic.main.row_transaction.view.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.StatRepresentable import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter @@ -232,11 +233,13 @@ enum class RowViewType(private var layoutRes: Int) { itemView.findViewById(R.id.value)?.let { view -> adapter.dataSource.contentDescriptorForRow(row)?.textFormat?.let { view.setTextFormat(it, itemView.context) -// view.text = it.text -// view.setTextColor(it.getColor(itemView.context)) } } + if (row is StatRepresentable) { + itemView.findViewById(R.id.nextArrow)?.isVisible = row.stat.hasEvolutionGraph + } + // Listener val listener = View.OnClickListener { adapter.delegate?.onRowSelected(position, row)