From e2c3854b574762434841a7371854a3d88893f054 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 15:11:53 +0200 Subject: [PATCH 01/11] Improve graph layout --- app/src/main/res/layout/row_graph.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/row_graph.xml b/app/src/main/res/layout/row_graph.xml index d4c78ac4..799076ec 100644 --- a/app/src/main/res/layout/row_graph.xml +++ b/app/src/main/res/layout/row_graph.xml @@ -2,17 +2,18 @@ + android:layout_height="wrap_content"> + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file From 0651263e45a530a5ab432e90d6ed5f24d774b6fc Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 15:14:13 +0200 Subject: [PATCH 02/11] Update calendar graph UI --- .../android/ui/fragment/GraphFragment.kt | 1 + .../android/ui/graph/GraphExtensions.kt | 26 +++++++++---------- .../android/ui/view/RowViewType.kt | 3 ++- 3 files changed, 16 insertions(+), 14 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 4738acf0..1c8ecc05 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 @@ -158,6 +158,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co val colors = arrayOf(R.color.green_light).toIntArray() dataSet.setColors(colors, context) dataSet.setDrawCircles(false) + dataSet.setDrawValues(false) val lineData = LineData(listOf(dataSet)) this.chartView = when (stat.graphType) { 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 e5f6e8a9..deefb062 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,31 +1,29 @@ package net.pokeranalytics.android.ui.graph import android.content.Context -import android.graphics.Typeface import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import com.github.mikephil.charting.charts.BarLineChartBase import com.github.mikephil.charting.components.XAxis import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.extensions.px + + fun BarLineChartBase<*>.setStyle(small: Boolean, context: 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 - - 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 - this.xAxis.setDrawLabels(true) this.xAxis.setDrawGridLines(true) - this.xAxis.granularity = 1.0f this.xAxis.isGranularityEnabled = true + this.xAxis.granularity = 1.0f + this.xAxis.textColor = ContextCompat.getColor(context, R.color.chart_default) + this.xAxis.typeface = ResourcesCompat.getFont(context, R.font.roboto_medium) + this.xAxis.labelCount = 4 + this.xAxis.textSize = 12f this.xAxis.isEnabled = true // Y Axis @@ -41,12 +39,14 @@ fun BarLineChartBase<*>.setStyle(small: Boolean, context: Context) { 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.axisLeft.typeface = ResourcesCompat.getFont(context, R.font.roboto_medium) + 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.axisLeft.textSize = 12f this.axisRight.isEnabled = false this.legend.isEnabled = false + this.data.isHighlightEnabled = !small + this.description.isEnabled = false // @todo 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 7a062a13..c36d8028 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 @@ -329,6 +329,7 @@ enum class RowViewType(private var layoutRes: Int) { val colors = arrayOf(R.color.green_light).toIntArray() dataSet.setColors(colors, context) dataSet.setDrawCircles(false) + dataSet.setDrawValues(false) val lineData = LineData(listOf(dataSet)) val chartView = when (row.stat.graphType) { @@ -348,7 +349,7 @@ enum class RowViewType(private var layoutRes: Int) { it.addView(chartView) } - chartView.setStyle(false, context) + chartView.setStyle(true, context) chartView.setTouchEnabled(false) chartView.highlightValue((entries.size - 1).toFloat(), 0) } From 689d29fb5d9c5d884bc0cfe09da971a38702e05e Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 17:39:17 +0200 Subject: [PATCH 03/11] Update layouts --- .../res/layout-sw320dp/fragment_calendar.xml | 16 ++++++++ .../res/layout-sw400dp/fragment_calendar.xml | 38 +++++++++++++------ app/src/main/res/layout/fragment_calendar.xml | 16 ++++++++ .../res/layout/fragment_calendar_details.xml | 30 ++++++++++++--- ...agment_evograph.xml => fragment_graph.xml} | 0 5 files changed, 83 insertions(+), 17 deletions(-) rename app/src/main/res/layout/{fragment_evograph.xml => fragment_graph.xml} (100%) diff --git a/app/src/main/res/layout-sw320dp/fragment_calendar.xml b/app/src/main/res/layout-sw320dp/fragment_calendar.xml index 1f773978..7bb22310 100644 --- a/app/src/main/res/layout-sw320dp/fragment_calendar.xml +++ b/app/src/main/res/layout-sw320dp/fragment_calendar.xml @@ -83,6 +83,22 @@ + + + android:orientation="horizontal" + android:padding="8dp"> + app:chipSpacing="8dp" + app:singleSelection="false"> + android:text="@string/month" /> + android:text="@string/year" /> @@ -51,27 +51,27 @@ android:id="@+id/filtersSession" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:singleSelection="false" - app:chipSpacing="6dp"> + app:chipSpacing="6dp" + app:singleSelection="false"> + android:text="@string/all" /> + android:text="@string/cash_game" /> + android:text="@string/tournament" /> @@ -87,6 +87,22 @@ + + + + + android:text="@string/all" /> + android:text="@string/cash_game" /> + android:text="@string/tournament" /> + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/appBar" /> diff --git a/app/src/main/res/layout/fragment_evograph.xml b/app/src/main/res/layout/fragment_graph.xml similarity index 100% rename from app/src/main/res/layout/fragment_evograph.xml rename to app/src/main/res/layout/fragment_graph.xml From f1c4587b28815ecb5f57dd2174e422c8fdb83810 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 17:39:43 +0200 Subject: [PATCH 04/11] Add animations functions --- .../android/ui/extensions/UIExtensions.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt index e7535db1..a067ebb3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt @@ -5,11 +5,13 @@ import android.content.Context import android.content.Intent import android.content.res.Resources import android.net.Uri +import android.view.View import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.AppCompatTextView import androidx.browser.customtabs.CustomTabsIntent import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.TextFormat @@ -107,4 +109,16 @@ fun showAlertDialog(context: Context, title: Int? = null, message: Int? = null) fun AppCompatTextView.setTextFormat(textFormat: TextFormat, context: Context) { this.setTextColor(textFormat.getColor(context)) this.text = textFormat.text +} + +fun View.hideWithAnimation() { + isVisible = true + animate().cancel() + animate().alpha(0f).withEndAction { isVisible = false }.start() +} + +fun View.showWithAnimation() { + isVisible = true + animate().cancel() + animate().alpha(1f).start() } \ No newline at end of file From f07c8184138bf0c95d63bc9800ab527a2bbe786e Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 17:40:39 +0200 Subject: [PATCH 05/11] Refactor and clean code --- .../android/ui/fragment/GraphFragment.kt | 91 +++++++++---------- 1 file changed, 44 insertions(+), 47 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 1c8ecc05..3326309f 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 @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.BarLineChartBase import com.github.mikephil.charting.charts.LineChart @@ -14,7 +15,7 @@ import com.github.mikephil.charting.listener.OnChartValueSelectedListener import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_evograph.* +import kotlinx.android.synthetic.main.fragment_graph.* import kotlinx.coroutines.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.* @@ -40,39 +41,46 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co private var stat: Stat = Stat.NETRESULT private var reports: MutableMap = hashMapOf() - lateinit private var computableGroup: ComputableGroup - lateinit private var selectedReport: Report - - lateinit var legendView: LegendView - lateinit var chartView: BarLineChartBase<*> + private lateinit var computableGroup: ComputableGroup + private lateinit var selectedReport: Report + private lateinit var legendView: LegendView + private lateinit var chartView: BarLineChartBase<*> + private var displayAggregationChoices: Boolean = true private var aggregationTypes: List = listOf() override val coroutineContext: CoroutineContext get() = Dispatchers.Main - companion object { - - } - - fun setData(stat: Stat, group: ComputableGroup, report: Report) { - this.stat = stat - this.computableGroup = group - - this.aggregationTypes = stat.aggregationTypes - this.reports[this.aggregationTypes.first()] = report - this.selectedReport = report - - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_evograph, container, false) + return inflater.inflate(R.layout.fragment_graph, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initUI() + loadGraph(selectedReport) + } + + // OnChartValueSelectedListener + override fun onNothingSelected() { + // nothing to do + } + + override fun onValueSelected(e: Entry?, h: Highlight?) { + e?.let { entry -> + val identifier = entry.data as ObjectIdentifier + val item = getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() + item?.let { + + val formattedDate = DateFormat.getDateInstance(DateFormat.SHORT).format(it.startDate()) + 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) + } + } } /** @@ -86,8 +94,6 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co this.legendView = LegendView(requireContext()) this.legendContainer.addView(this.legendView) - this.loadGraph(this.selectedReport) - this.aggregationTypes.forEach { type -> val chip = Chip(requireContext()) chip.id = type.ordinal @@ -97,6 +103,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co this.chipGroup.addView(chip) } + this.chipGroup.isVisible = displayAggregationChoices this.chipGroup.check(this.stat.aggregationTypes.first().ordinal) this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { @@ -147,8 +154,10 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } - - fun loadGraph(report: Report) { + /** + * Load graph + */ + private fun loadGraph(report: Report) { report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries -> @@ -183,29 +192,17 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } - // OnChartValueSelectedListener - - override fun onNothingSelected() { - // nothing to do - } - - override fun onValueSelected(e: Entry?, h: Highlight?) { - - e?.let { entry -> - - val identifier = entry.data as ObjectIdentifier - val item = getRealm().where(identifier.clazz).equalTo("id", identifier.id).findAll().firstOrNull() - item?.let { - - val formattedDate = DateFormat.getDateInstance(DateFormat.SHORT).format(it.startDate()) - 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) - } - - } + /** + * Set data + */ + fun setData(stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean) { + this.stat = stat + this.computableGroup = group + this.aggregationTypes = stat.aggregationTypes + this.reports[this.aggregationTypes.first()] = report + this.selectedReport = report + this.displayAggregationChoices = displayAggregationChoices } } \ No newline at end of file From 87e1ae3bbefe23e9f2a94485108ee1d32832d1e4 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 17:41:15 +0200 Subject: [PATCH 06/11] Improve UI --- .../android/ui/activity/StatisticDetailsActivity.kt | 4 +++- .../android/ui/fragment/CalendarDetailsFragment.kt | 11 ++++++++++- .../android/ui/fragment/CalendarFragment.kt | 8 ++++++++ .../android/ui/fragment/StatisticDetailsFragment.kt | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt index 52e4a81e..e7fa885e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt @@ -22,12 +22,14 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { // Unparcel fails when setting a custom Parcelable object on Entry so we use a static reference to passe objects var parameters: GraphParameters? = null + var displayAggregationChoices: Boolean = true /** * Default constructor */ - fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report) { + fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { parameters = GraphParameters(stat, group, report) + this.displayAggregationChoices = displayAggregationChoices val intent = Intent(context, StatisticDetailsActivity::class.java) context.startActivity(intent) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt index ddf831f2..bead1e0e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.tabs.TabLayout import io.realm.Realm @@ -72,7 +73,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable is GraphRow -> { //TODO: Open graph details row.report.results.firstOrNull()?.group?.let { computableGroup -> - StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report) + StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false) } } } @@ -146,6 +147,10 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable */ private fun launchStatComputation() { + progressBar.isVisible = true + progressBar.animate().alpha(1f).start() + recyclerView.animate().alpha(0f).start() + computedResults?.let { computedResults -> GlobalScope.launch { @@ -193,6 +198,10 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable launch(Dispatchers.Main) { statsAdapter.notifyDataSetChanged() + progressBar.animate().cancel() + progressBar.animate().alpha(0f).withEndAction { progressBar.isVisible = false }.start() + recyclerView.animate().cancel() + recyclerView.animate().alpha(1f).start() } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt index 255b6393..edf63519 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -23,6 +23,8 @@ import net.pokeranalytics.android.ui.activity.CalendarDetailsActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource +import net.pokeranalytics.android.ui.extensions.hideWithAnimation +import net.pokeranalytics.android.ui.extensions.showWithAnimation import net.pokeranalytics.android.ui.fragment.components.SessionObserverFragment import net.pokeranalytics.android.ui.view.CalendarTabs import net.pokeranalytics.android.ui.view.RowRepresentable @@ -219,6 +221,9 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep */ private fun launchStatComputation() { + progressBar?.showWithAnimation() + recyclerView?.hideWithAnimation() + GlobalScope.launch { val calendar = Calendar.getInstance() @@ -373,6 +378,9 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep calendarAdapter.notifyDataSetChanged() + progressBar?.hideWithAnimation() + recyclerView?.showWithAnimation() + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt index 26401474..8ea97620 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt @@ -61,7 +61,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { fragmentTransaction.commit() StatisticDetailsActivity.parameters?.let { - fragment.setData(it.stat, it.computableGroup, it.report) + fragment.setData(it.stat, it.computableGroup, it.report, StatisticDetailsActivity.displayAggregationChoices) StatisticDetailsActivity.parameters = null } ?: run { throw Exception("Missing graph parameters") From 0d42b6f84ad79cbec62c63c7344576072abf2d29 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 19:11:00 +0200 Subject: [PATCH 07/11] Close realm --- .../net/pokeranalytics/android/ui/fragment/CalendarFragment.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt index edf63519..d985b9a5 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -308,6 +308,8 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep } */ + realm.close() + GlobalScope.launch(Dispatchers.Main) { displayData() } From 6bbf0db52c823c7389e8596e1defc6bd10dbff3b Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 19:11:11 +0200 Subject: [PATCH 08/11] Fix layout --- .../java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt index 406a0fa7..faa0d030 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/MoreFragment.kt @@ -44,7 +44,7 @@ class MoreFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, // Life Cycle override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_calendar, container, false) + return inflater.inflate(R.layout.fragment_more, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { From 49087b394b52bfbb23651e52364ae0390959f50b Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 19:11:33 +0200 Subject: [PATCH 09/11] Fix typo --- .../net/pokeranalytics/android/model/comparison/Comparator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt index de02cb45..fbb51d8d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt @@ -71,7 +71,7 @@ enum class Comparator { BLIND -> { val blinds = arrayListOf() val realm = Realm.getDefaultInstance() - realm.where().distinct("blind", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map { + realm.where().distinct("blinds", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map { it.blinds?.let { stake -> blinds.add(QueryCondition.BLIND().apply { setBlind(stake, it.hasDefaultCurrency)}) } From 2a5f014235fe8c05d57573a3bf0951496ed4bf77 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 19:17:18 +0200 Subject: [PATCH 10/11] Clean files --- .../android/ui/fragment/GraphFragment.kt | 49 ++++++++----- .../android/ui/fragment/ReportsFragment.kt | 73 ++++++++++--------- 2 files changed, 72 insertions(+), 50 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 3326309f..25798bad 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 @@ -14,9 +14,9 @@ import com.github.mikephil.charting.highlight.Highlight import com.github.mikephil.charting.listener.OnChartValueSelectedListener import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup -import io.realm.Realm import kotlinx.android.synthetic.main.fragment_graph.* -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.* import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity @@ -26,9 +26,7 @@ import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.graph.PALineDataSet import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.view.LegendView -import timber.log.Timber import java.text.DateFormat -import java.util.* import kotlin.coroutines.CoroutineContext class GraphParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) { @@ -37,15 +35,28 @@ class GraphParameters(var stat: Stat, var computableGroup: ComputableGroup, var class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, CoroutineScope { + companion object { + + /** + * Create new instance + */ + fun newInstance(): GraphFragment { + val fragment = GraphFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + private lateinit var parentActivity: PokerAnalyticsActivity private var stat: Stat = Stat.NETRESULT private var reports: MutableMap = hashMapOf() - private lateinit var computableGroup: ComputableGroup - private lateinit var selectedReport: Report - private lateinit var legendView: LegendView - private lateinit var chartView: BarLineChartBase<*> + private var computableGroup: ComputableGroup? = null + private var selectedReport: Report? = null + private var legendView: LegendView? = null + private var chartView: BarLineChartBase<*>? = null private var displayAggregationChoices: Boolean = true private var aggregationTypes: List = listOf() @@ -60,7 +71,11 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initUI() - loadGraph(selectedReport) + + selectedReport?.let { + loadGraph(it) + } + } // OnChartValueSelectedListener @@ -78,7 +93,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co 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) + this.legendView?.setItemData(this.stat, formattedDate, entryValue, totalStatValue) } } } @@ -122,6 +137,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } + /* private fun launchStatComputation() { GlobalScope.launch(coroutineContext) { @@ -151,8 +167,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } } } - } + */ /** * Load graph @@ -160,8 +176,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co private fun loadGraph(report: Report) { report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries -> - - this.legendView.prepareWithStat(this.stat, entries.size) + + this.legendView?.prepareWithStat(this.stat, entries.size) val dataSet = PALineDataSet(entries, this.stat.name, requireContext()) val colors = arrayOf(R.color.green_light).toIntArray() @@ -184,10 +200,9 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co this.chartContainer.addView(this.chartView) - this.chartView.setStyle(false, requireContext()) - this.chartView.setOnChartValueSelectedListener(this) - - this.chartView.highlightValue((entries.size - 1).toFloat(), 0) + this.chartView?.setStyle(false, requireContext()) + this.chartView?.setOnChartValueSelectedListener(this) + this.chartView?.highlightValue((entries.size - 1).toFloat(), 0) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index 7883f75e..b8b5738a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -7,49 +7,49 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_stats.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.ui.activity.ComparisonChartActivity import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.ReportRow +import timber.log.Timber class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSource, RowRepresentableDelegate { - companion object { - - /** - * Create new instance - */ - fun newInstance(): ReportsFragment { - val fragment = ReportsFragment() - val bundle = Bundle() - fragment.arguments = bundle - return fragment - } - - val rowRepresentation: List by lazy { - val rows = ArrayList() - rows.addAll(ReportRow.getRows()) - rows - } - } + companion object { + + /** + * Create new instance + */ + fun newInstance(): ReportsFragment { + val fragment = ReportsFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + + val rowRepresentation: List by lazy { + val rows = ArrayList() + rows.addAll(ReportRow.getRows()) + rows + } + } private lateinit var reportsAdapter: RowRepresentableAdapter // Life Cycle - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_reports, container, false) - } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_reports, container, false) + } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initData() - initUI() - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } // Rows @@ -59,17 +59,23 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { super.onRowSelected(position, row, fromAction) - ComparisonChartActivity.newInstance(requireContext()) + Timber.d("row: $row") + when (row) { + ReportRow.DAY_OF_WEEKS -> { + //TODO: Open ComparisonChartActivity with correct data + //TODO: Calcul report before or after + } + } } // Business - /** - * Init data - */ - private fun initData() { - } + /** + * Init data + */ + private fun initData() { + } /** * Init UI @@ -87,4 +93,5 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour } } + } \ No newline at end of file From 29932cc92f3f438c7b9efb1fc10adac4ebbfb268 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 17 Apr 2019 19:34:32 +0200 Subject: [PATCH 11/11] Clean code --- .../android/ui/fragment/GraphFragment.kt | 94 +++++++++---------- 1 file changed, 46 insertions(+), 48 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 9de21a2a..d44e822e 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 @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.BarLineChartBase import com.github.mikephil.charting.charts.LineChart @@ -48,34 +49,19 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } private lateinit var parentActivity: PokerAnalyticsActivity + private lateinit var computableGroup: ComputableGroup + private lateinit var selectedReport: Report + private lateinit var legendView: LegendView + private lateinit var chartView: BarLineChartBase<*> private var stat: Stat = Stat.NETRESULT private var reports: MutableMap = hashMapOf() - lateinit private var computableGroup: ComputableGroup - - lateinit private var selectedReport: Report - - lateinit var legendView: LegendView - lateinit var chartView: BarLineChartBase<*> - private var aggregationTypes: List = listOf() + private var displayAggregationChoices: Boolean = true override val coroutineContext: CoroutineContext get() = Dispatchers.Main - companion object { - - } - - fun setData(stat: Stat, group: ComputableGroup, report: Report) { - this.stat = stat - this.computableGroup = group - - this.aggregationTypes = stat.aggregationTypes - this.reports[this.aggregationTypes.first()] = report - this.selectedReport = report - - } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_evograph, container, false) @@ -86,6 +72,35 @@ 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 { + + 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) + } + } + } + + /** * Init UI */ @@ -116,6 +131,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co this.chipGroup.addView(chip) } + this.chipGroup.isVisible = displayAggregationChoices this.chipGroup.check(this.stat.aggregationTypes.first().ordinal) this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { @@ -209,35 +225,17 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co } - // 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 { - - 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) - } + /** + * Set data + */ + fun setData(stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { + this.stat = stat + this.computableGroup = group - } + this.aggregationTypes = stat.aggregationTypes + this.reports[this.aggregationTypes.first()] = report + this.selectedReport = report + this.displayAggregationChoices = displayAggregationChoices }