From 0bc2eb3fe4ec298b44909874efb6d5deeed74dc7 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 16 Apr 2019 10:33:58 +0200 Subject: [PATCH 1/4] Refactored parameters for GraphFragment --- .../ui/activity/StatisticDetailsActivity.kt | 7 ++-- .../android/ui/fragment/GraphFragment.kt | 32 +++++++++++-------- .../ui/fragment/StatisticDetailsFragment.kt | 2 +- .../android/ui/fragment/StatsFragment.kt | 5 ++- 4 files changed, 25 insertions(+), 21 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 4a9ef680..5a2b4d39 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 @@ -3,9 +3,8 @@ package net.pokeranalytics.android.ui.activity import android.content.Context import android.content.Intent import android.os.Bundle -import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_graph.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.GraphParameters @@ -26,8 +25,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { /** * Default constructor */ - fun newInstance(context: Context, stat: Stat, entries: List) { - parameters = GraphParameters(stat, entries) + fun newInstance(context: Context, stat: Stat, report: Report) { + parameters = GraphParameters(stat, report) val intent = Intent(context, StatisticDetailsActivity::class.java) context.startActivity(intent) } 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 7e0b6647..6479fe10 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 @@ -15,22 +15,18 @@ import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup import kotlinx.android.synthetic.main.fragment_evograph.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.calculus.GraphType -import net.pokeranalytics.android.calculus.ObjectIdentifier -import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.calculus.* import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity +import net.pokeranalytics.android.ui.extensions.ChipGroupExtension +import net.pokeranalytics.android.ui.extensions.px 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 net.pokeranalytics.android.ui.extensions.ChipGroupExtension -import net.pokeranalytics.android.ui.extensions.px -import net.pokeranalytics.android.ui.extensions.toast import java.text.DateFormat -class GraphParameters(stat: Stat, entries: List) { - var stat: Stat = stat - var entries: List = entries +class GraphParameters(var stat: Stat, var report: Report) { + } class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { @@ -38,18 +34,27 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { private lateinit var parentActivity: PokerAnalyticsActivity private var stat: Stat = Stat.NETRESULT + private var reports: Map = hashMapOf() private var entries: List = ArrayList() lateinit var legendView: LegendView lateinit var chartView: BarLineChartBase<*> + private var aggregationTypes: List = listOf() + companion object { } - fun setData(stat: Stat, entries: List) { + fun setData(stat: Stat, report: Report) { this.stat = stat - this.entries = entries + + this.aggregationTypes = stat.aggregationTypes +// this.report = report + report.results.firstOrNull()?.defaultStatEntries(stat)?.let { + this.entries = it + } + } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -98,7 +103,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.chartView.highlightValue((this.entries.size - 1).toFloat(), 0) - this.stat.aggregationTypes.forEach { type -> + this.aggregationTypes.forEach { type -> val chip = Chip(requireContext()) chip.id = type.ordinal chip.text = requireContext().getString(type.resId) @@ -112,7 +117,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { super.onCheckedChanged(group, checkedId) - toast("Show: ${stat.aggregationTypes[group.getChildAt(checkedId).id].name}") + val aggregationType = aggregationTypes[checkedId] +// toast("Show: ${this.aggregationTypes[group.getChildAt(checkedId).id].name}") } }) 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 50413327..bb5d8ad0 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.entries) + fragment.setData(it.stat, it.report) StatisticDetailsActivity.parameters = null } ?: run { throw Exception("Missing graph parameters") 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 14202d82..4c0c34e2 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 @@ -225,6 +225,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc val realm = Realm.getDefaultInstance() val options = Calculator.Options() options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD + options.displayedStats = listOf(stat) report = Calculator.computeGroups(realm, listOf(computableGroup), options) realm.close() @@ -236,9 +237,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc test.await() if (!isDetached) { - report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries -> - StatisticDetailsActivity.newInstance(requireContext(), stat, entries) - } + StatisticDetailsActivity.newInstance(requireContext(), stat, report) } } From f2b6fab607914e3965388e0fc00f7f85e0e2d349 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 16 Apr 2019 10:57:54 +0200 Subject: [PATCH 2/4] cherry picking of b591ba9 --- .../java/net/pokeranalytics/android/model/realm/Bankroll.kt | 6 +----- .../android/ui/fragment/BankrollDataFragment.kt | 6 +++--- .../pokeranalytics/android/ui/fragment/SettingsFragment.kt | 1 - .../bottomsheet/BottomSheetNumericTextFragment.kt | 1 + .../android/ui/view/rowrepresentable/BankrollRow.kt | 4 ++-- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt index 9ceba9f5..45f8dcd9 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt @@ -101,11 +101,7 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat this.currency?.code = value as String? } BankrollRow.RATE -> { - value?.let { rate -> - this.currency?.rate = (rate as String).toDouble() - } ?: run { - this.currency?.rate = null - } + this.currency?.rate = value as Double? } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 01c247b9..6e5604ff 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt @@ -114,8 +114,8 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS return when (row) { SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name)) BankrollRow.RATE -> { - val rate = this.bankroll.currency?.rate ?: 1.0 - row.editingDescriptors(mapOf("defaultValue" to rate.toRate())) + val rate = this.bankroll.currency?.rate + row.editingDescriptors(mapOf("defaultValue" to rate)) } else -> null } @@ -204,7 +204,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS override fun onResponse(call: Call>, response: Response>) { response.body()?.let { it[currenciesConverterValue]?.value?.let { rate -> - onRowValueChanged(rate.toString(), BankrollRow.RATE) + onRowValueChanged(rate, BankrollRow.RATE) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index 3d681cee..4ed534d9 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -58,7 +58,6 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta private lateinit var settingsAdapterRow: RowRepresentableAdapter private lateinit var parentActivity: PokerAnalyticsActivity - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_settings, container, false) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt index da9486d5..da8f8510 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt @@ -63,6 +63,7 @@ class BottomSheetNumericTextFragment : BottomSheetFragment() { data[0].defaultValue?.let { if (it is Double || it is Long) { val formatter = NumberFormat.getNumberInstance() + formatter.maximumFractionDigits = 6 formatter.isGroupingUsed = false editText1.setText(formatter.format(it)) } else { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt index df724f8e..f5cfdc6a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt @@ -40,14 +40,14 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource { return when (this) { LIVE -> BottomSheetType.NONE CURRENCY -> BottomSheetType.NONE - RATE -> BottomSheetType.EDIT_TEXT + RATE -> BottomSheetType.NUMERIC_TEXT REFRESH_RATE -> BottomSheetType.NONE } } override fun editingDescriptors(map: Map): ArrayList? { return when (this) { - BankrollRow.RATE -> { + RATE -> { val defaultValue : Any? by map arrayListOf( RowRepresentableEditDescriptor(defaultValue, R.string.rate, InputType.TYPE_CLASS_NUMBER From f6ae11fa4a11e407143add35b174f2a281ebfdb8 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 16 Apr 2019 11:17:44 +0200 Subject: [PATCH 3/4] Fixes crash when setting break and refresh UI --- .../java/net/pokeranalytics/android/model/realm/Session.kt | 2 +- .../net/pokeranalytics/android/ui/fragment/SessionFragment.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) 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 b13c5e89..8722f4f9 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 @@ -779,7 +779,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat cgBigBlind = null } SessionRow.BREAK_TIME -> { - this.breakDuration = if (value != null) (value as String).toLong() * 60 * 1000 else 0 + this.breakDuration = (value as Double? ?: 0.0).toLong() * 60 * 1000 } SessionRow.BUY_IN -> { val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index 45767d22..346396de 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -115,8 +115,7 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate { sessionAdapter.refreshRow(row) when (row) { SessionRow.CASHED_OUT, SessionRow.PRIZE, SessionRow.NET_RESULT, SessionRow.BUY_IN, SessionRow.TIPS, - SessionRow.START_DATE, SessionRow.END_DATE, SessionRow.BANKROLL -> updateSessionUI() - SessionRow.BREAK_TIME -> this.sessionAdapter.notifyDataSetChanged() + SessionRow.START_DATE, SessionRow.END_DATE, SessionRow.BANKROLL, SessionRow.BREAK_TIME -> updateSessionUI() } } From 998cbe037faa490dcb80f12cfcfeff2bfcd06b98 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 16 Apr 2019 11:29:26 +0200 Subject: [PATCH 4/4] Patch session set break times --- .../android/PokerAnalyticsApplication.kt | 3 ++ .../android/model/migrations/Patcher.kt | 28 +++++++++++++++++++ .../android/model/realm/SessionSet.kt | 1 + 3 files changed, 32 insertions(+) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index a9d8e4cd..1c9b7d94 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -9,6 +9,7 @@ import io.realm.RealmConfiguration import io.realm.kotlin.where import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import net.pokeranalytics.android.model.migrations.Patcher import net.pokeranalytics.android.model.migrations.PokerAnalyticsMigration import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.utils.Seed @@ -53,6 +54,8 @@ class PokerAnalyticsApplication : Application() { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") //this.createFakeSessions() } + + Patcher.patchBreaks() } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt new file mode 100644 index 00000000..498cf6d2 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt @@ -0,0 +1,28 @@ +package net.pokeranalytics.android.model.migrations + +import io.realm.Realm +import net.pokeranalytics.android.model.realm.SessionSet + +class Patcher { + + companion object { + + fun patchBreaks() { + + val realm = Realm.getDefaultInstance() + val sets = realm.where(SessionSet::class.java).findAll() + + realm.executeTransaction { + sets.forEach { + it.computeStats() + } + + } + realm.close() + + } + + } + + +} \ No newline at end of file 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 77f4dc1b..cb3506c5 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 @@ -63,6 +63,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable { this.ratedNet = this.sessions?.sumByDouble { it.computableResult?.ratedNet ?: 0.0 } ?: 0.0 this.estimatedHands = this.sessions?.sumByDouble { it.estimatedHands } ?: 0.0 this.bbNet = this.sessions?.sumByDouble { it.bbNet } ?: 0.0 + this.breakDuration = this.sessions?.max("breakDuration")?.toLong() ?: 0L } /**