Improve Graph management & bankroll graph details

dev
Aurelien Hubert 7 years ago
parent 17b27f085b
commit 614524b118
  1. 10
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/BankrollInstrumentedUnitTest.kt
  2. 5
      app/src/main/AndroidManifest.xml
  3. 6
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt
  4. 70
      app/src/main/java/net/pokeranalytics/android/ui/activity/GraphActivity.kt
  5. 24
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt
  6. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt

@ -73,16 +73,16 @@ class BankrollInstrumentedUnitTest : SessionInstrumentedUnitTest() {
val br1 = realm.where(Bankroll::class.java).equalTo("name", "br1").findFirst() val br1 = realm.where(Bankroll::class.java).equalTo("name", "br1").findFirst()
val brSetup1 = BankrollReportSetup(br1) val brSetup1 = BankrollReportSetup(br1)
val report1 = BankrollCalculator.computeReport(brSetup1) val report1 = BankrollCalculator.computeReport(realm, brSetup1)
Assert.assertEquals(400.0, report1.total, EPSILON) Assert.assertEquals(400.0, report1.total, EPSILON)
val br2 = realm.where(Bankroll::class.java).equalTo("name", "br2").findFirst() val br2 = realm.where(Bankroll::class.java).equalTo("name", "br2").findFirst()
val brSetup2 = BankrollReportSetup(br2) val brSetup2 = BankrollReportSetup(br2)
val report2 = BankrollCalculator.computeReport(brSetup2) val report2 = BankrollCalculator.computeReport(realm, brSetup2)
Assert.assertEquals(2000.0, report2.total, EPSILON) Assert.assertEquals(2000.0, report2.total, EPSILON)
val brSetupAll = BankrollReportSetup() val brSetupAll = BankrollReportSetup()
val reportAll = BankrollCalculator.computeReport(brSetupAll) val reportAll = BankrollCalculator.computeReport(realm, brSetupAll)
Assert.assertEquals(2400.0, reportAll.total, EPSILON) Assert.assertEquals(2400.0, reportAll.total, EPSILON)
} }
@ -117,11 +117,11 @@ class BankrollInstrumentedUnitTest : SessionInstrumentedUnitTest() {
} }
val brSetup1 = BankrollReportSetup(br1) val brSetup1 = BankrollReportSetup(br1)
val report1 = BankrollCalculator.computeReport(brSetup1) val report1 = BankrollCalculator.computeReport(realm, brSetup1)
Assert.assertEquals(400.0, report1.total, EPSILON) Assert.assertEquals(400.0, report1.total, EPSILON)
val brSetupAll = BankrollReportSetup() val brSetupAll = BankrollReportSetup()
val reportAll = BankrollCalculator.computeReport(brSetupAll) val reportAll = BankrollCalculator.computeReport(realm, brSetupAll)
Assert.assertEquals(4000.0, reportAll.total, EPSILON) Assert.assertEquals(4000.0, reportAll.total, EPSILON)
} }

@ -57,6 +57,11 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.GraphActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity <activity
android:name="net.pokeranalytics.android.ui.activity.StatisticDetailsActivity" android:name="net.pokeranalytics.android.ui.activity.StatisticDetailsActivity"
android:launchMode="singleTop" android:launchMode="singleTop"

@ -11,9 +11,9 @@ class BankrollCalculator {
companion object { companion object {
fun computeReport(setup: BankrollReportSetup) : BankrollReport { fun computeReport(realm: Realm, setup: BankrollReportSetup) : BankrollReport {
val realm = Realm.getDefaultInstance() //val realm = Realm.getDefaultInstance()
val report = BankrollReport(setup) val report = BankrollReport(setup)
@ -81,7 +81,7 @@ class BankrollCalculator {
report.generateGraphPointsIfNecessary() report.generateGraphPointsIfNecessary()
realm.close() //realm.close()
return report return report
} }

@ -0,0 +1,70 @@
package net.pokeranalytics.android.ui.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.github.mikephil.charting.data.BarDataSet
import com.github.mikephil.charting.data.LineDataSet
import kotlinx.android.synthetic.main.activity_graph.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.GraphFragment
class GraphActivity : PokerAnalyticsActivity() {
companion object {
private var lineDataSets: List<LineDataSet>? = null
private var barDataSets: List<BarDataSet>? = null
private var style: GraphFragment.Style? = GraphFragment.Style.LINE
private var activityTitle: String? = null
/**
* Default constructor
*/
fun newInstance(
context: Context, lineDataSets: List<LineDataSet>? = null, barDataSets: List<BarDataSet>? = null,
style: GraphFragment.Style = GraphFragment.Style.LINE, title: String? = null
) {
this.lineDataSets = lineDataSets
this.barDataSets = barDataSets
this.style = style
this.activityTitle = title
val intent = Intent(context, GraphActivity::class.java)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_graph)
initUI()
}
/**
* Init UI
*/
private fun initUI() {
activityTitle?.let {
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
title = activityTitle
activityTitle = null
}
style?.let {
val fragmentTransaction = supportFragmentManager.beginTransaction()
val graphFragment = GraphFragment.newInstance(lineDataSets, barDataSets, it)
fragmentTransaction.add(R.id.container, graphFragment)
fragmentTransaction.commit()
}
lineDataSets = null
barDataSets = null
style = null
}
}

@ -7,8 +7,8 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.github.mikephil.charting.data.LineDataSet
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_bankroll.* import kotlinx.android.synthetic.main.fragment_bankroll.*
@ -31,7 +31,7 @@ import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity import net.pokeranalytics.android.ui.activity.BankrollDetailsActivity
import net.pokeranalytics.android.ui.activity.DataListActivity import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity import net.pokeranalytics.android.ui.activity.GraphActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -107,13 +107,8 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
when (row) { when (row) {
is GraphRow -> { is GraphRow -> {
row.report?.let { report -> val lineDataSet = row.dataSet as LineDataSet
row.stat?.let { stat -> GraphActivity.newInstance(requireContext(), listOf(lineDataSet), title = getString(R.string.bankroll))
report.results.firstOrNull()?.group?.let { computableGroup ->
StatisticDetailsActivity.newInstance(requireContext(), stat, computableGroup, report, false, row.title)
}
}
}
} }
else -> { else -> {
if (bankrollReportForRow.containsKey(row)) { if (bankrollReportForRow.containsKey(row)) {
@ -138,12 +133,14 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou
GlobalScope.launch { GlobalScope.launch {
launch(Dispatchers.Main) {
val startDate = Date() val startDate = Date()
val realm = Realm.getDefaultInstance() //val realm = Realm.getDefaultInstance()
// Graph // Graph
val globalBankrollReportSetup = BankrollReportSetup() val globalBankrollReportSetup = BankrollReportSetup()
val globalBankrollReport = BankrollCalculator.computeReport(globalBankrollReportSetup) val globalBankrollReport = BankrollCalculator.computeReport(getRealm(), globalBankrollReportSetup)
rows.add(0, GraphRow(dataSet = globalBankrollReport.lineDataSet(requireContext()))) rows.add(0, GraphRow(dataSet = globalBankrollReport.lineDataSet(requireContext())))
rows.add(globalBankrollReport) rows.add(globalBankrollReport)
bankrollReportForRow[globalBankrollReport] = globalBankrollReport bankrollReportForRow[globalBankrollReport] = globalBankrollReport
@ -151,16 +148,15 @@ class BankrollFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSou
// Bankrolls // Bankrolls
rows.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.bankrolls)) rows.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.bankrolls))
realm.close() //realm.close()
Timber.d("initData: ${System.currentTimeMillis() - startDate.time}ms") Timber.d("initData: ${System.currentTimeMillis() - startDate.time}ms")
launch(Dispatchers.Main) {
val bankrolls = LiveData.BANKROLL.items(getRealm()) as RealmResults<Bankroll> val bankrolls = LiveData.BANKROLL.items(getRealm()) as RealmResults<Bankroll>
bankrolls.forEach { bankrolls.forEach {
val bankrollReportSetup = BankrollReportSetup(it) val bankrollReportSetup = BankrollReportSetup(it)
val bankrollReport = BankrollCalculator.computeReport(bankrollReportSetup) val bankrollReport = BankrollCalculator.computeReport(getRealm(), bankrollReportSetup)
val computedStat = ComputedStat(Stat.NET_RESULT, bankrollReport.total) val computedStat = ComputedStat(Stat.NET_RESULT, bankrollReport.total)
val row = CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = it.name, computedStat = computedStat, isSelectable = true) val row = CustomizableRowRepresentable(RowViewType.TITLE_VALUE_ARROW, title = it.name, computedStat = computedStat, isSelectable = true)

@ -22,6 +22,7 @@ import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry
import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.view.MultiLineLegendView import net.pokeranalytics.android.ui.view.MultiLineLegendView
import timber.log.Timber
class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
@ -101,7 +102,6 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
private fun initUI() { private fun initUI() {
parentActivity = activity as PokerAnalyticsActivity parentActivity = activity as PokerAnalyticsActivity
parentActivity.title = stat.localizedTitle(requireContext())
this.legendView = when (this.style) { this.legendView = when (this.style) {
Style.MULTILINE -> MultiLineLegendView(requireContext()) Style.MULTILINE -> MultiLineLegendView(requireContext())
@ -129,15 +129,12 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chartView = lineChart this.chartView = lineChart
dataSets.firstOrNull()?.let { dataSet -> dataSets.firstOrNull()?.let { dataSet ->
this.legendView.prepareWithStat(this.stat, dataSet.entryCount, this.style) this.legendView.prepareWithStat(this.stat, dataSet.entryCount, this.style)
if (dataSet.entryCount > 0) { if (dataSet.entryCount > 0) {
val entry = dataSet.getEntryForIndex(dataSet.entryCount - 1) val entry = dataSet.getEntryForIndex(dataSet.entryCount - 1)
this.selectValue(entry, dataSet) this.selectValue(entry, dataSet)
} }
} }
} }
this.barDataSetList?.let { dataSets -> this.barDataSetList?.let { dataSets ->

Loading…
Cancel
Save