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 825af61d..839ab4e5 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 @@ -142,6 +142,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat field = value this.computeNetDuration() this.dateChanged() + this.defineDefaultTournamentBuyinIfNecessary() this.computeStats() } @@ -407,9 +408,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat when (getState()) { SessionState.PENDING, SessionState.PLANNED -> { this.startDate = Date() - if (this.tournamentEntryFee != null) { - this.result?.buyin = this.tournamentEntryFee - } + this.defineDefaultTournamentBuyinIfNecessary() } SessionState.PAUSED -> { val pauseDate = this.pauseDate @@ -427,6 +426,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } } + private fun defineDefaultTournamentBuyinIfNecessary() { + if (this.tournamentEntryFee != null && this.result?.buyin == null) { + this.result?.buyin = this.tournamentEntryFee + } + } + /** * Pause a session */ 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 a5b12c9d..ec737828 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 @@ -11,7 +11,7 @@ import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.fragment.StatisticDetailsFragment -class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) +class StatisticsDetailsParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report, var title: String? = null) class StatisticDetailsActivity : PokerAnalyticsActivity() { @@ -24,8 +24,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { /** * Default constructor */ - fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true) { - parameters = StatisticsDetailsParameters(stat, group, report) + fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report, displayAggregationChoices: Boolean = true, title: String? = null) { + parameters = StatisticsDetailsParameters(stat, group, report, title) this.displayAggregationChoices = displayAggregationChoices val intent = Intent(context, StatisticDetailsActivity::class.java) context.startActivity(intent) @@ -50,7 +50,7 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() { fragmentTransaction.commit() parameters?.let { - statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices) + statisticDetailsFragment.setData(it.stat, it.computableGroup, it.report, displayAggregationChoices, it.title) parameters = null } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt index c43f02d4..63dab8ef 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/RowRepresentableDataSource.kt @@ -39,6 +39,7 @@ interface RowRepresentableDataSource: EditableDataSource, DisplayableDataSource, * To do that, this interface overrides and provides a default implementation to specific methods of [RowRepresentableDataSource] */ interface StaticRowRepresentableDataSource: RowRepresentableDataSource { + override fun rowRepresentableForPosition(position:Int): RowRepresentable? { this.adapterRows()?.let { return it[position] 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 f1f89ee5..e9a272aa 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 @@ -52,8 +52,19 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable private var sessionTypeCondition: QueryCondition? = null private var rowRepresentables: ArrayList = ArrayList() - //private var stat: Stat = Stat.NET_RESULT - //private var entries: List = ArrayList() + /** + * Set data + */ + fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) { + + this.computedResults = computedResults + this.sessionTypeCondition = sessionTypeCondition + this.title = title + + displayData() + launchStatComputation() + + } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_calendar_details, container, false) @@ -64,21 +75,6 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable initUI() } - override fun adapterRows(): List? { - return rowRepresentables - } - - override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { - when (row) { - is GraphRow -> { - //TODO: Open graph details - row.report.results.firstOrNull()?.group?.let { computableGroup -> - StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false) - } - } - } - } - /** * Init UI */ @@ -93,6 +89,16 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable parentActivity.supportActionBar?.setDisplayHomeAsUpEnabled(true) setHasOptionsMenu(true) + var tabIndexToSelect = 0 + sessionTypeCondition?.let { + tabIndexToSelect = when (it) { + QueryCondition.IsCash -> 1 + QueryCondition.IsTournament -> 2 + else -> 0 + } + } + + tabs.getTabAt(tabIndexToSelect)?.select() tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { @@ -121,6 +127,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable adapter = statsAdapter } + } /** @@ -132,16 +139,24 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable toolbar.title = it } - sessionTypeCondition?.let { - when (it) { - QueryCondition.IsCash -> tabs.getTabAt(1)?.select() - QueryCondition.IsTournament -> tabs.getTabAt(2)?.select() - else -> tabs.getTabAt(0)?.select() + } + + // StaticRowRepresentableDataSource + + override fun adapterRows(): List? { + return rowRepresentables + } + + override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { + when (row) { + is GraphRow -> { + row.report.results.firstOrNull()?.group?.let { computableGroup -> + StatisticDetailsActivity.newInstance(requireContext(), row.stat, computableGroup, row.report, false, row.title) + } } } } - /** * Launch stat computation */ @@ -187,7 +202,7 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.NET_RESULT), it.computedStat(Stat.HOURLY_RATE))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.LOCATIONS_PLAYED), it.computedStat(Stat.LONGEST_STREAKS))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.distribution)) - rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION)) + rowRepresentables.add(GraphRow(report, Stat.STANDARD_DEVIATION, requireContext().getString(R.string.distribution))) rowRepresentables.add(StatDoubleRow(it.computedStat(Stat.WIN_RATIO), it.computedStat(Stat.MAXIMUM_NETRESULT))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.volume)) rowRepresentables.add(GraphRow(report, Stat.HOURLY_DURATION)) @@ -207,18 +222,4 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable } } - /** - * Set data - */ - fun setData(computedResults: ComputedResults?, sessionTypeCondition: QueryCondition?, title: String?) { - - this.computedResults = computedResults - this.sessionTypeCondition = sessionTypeCondition - this.title = title - - displayData() - launchStatComputation() - - } - } \ 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 c3602d3d..d580caa2 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 @@ -48,6 +48,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { private lateinit var graphFragment: GraphFragment private lateinit var selectedReport: Report + private var title: String? = null private var reports: MutableMap = hashMapOf() private var stat: Stat = Stat.NET_RESULT private var displayAggregationChoices: Boolean = true @@ -61,6 +62,21 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { initUI() } + /** + * Set data + */ + fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean, title: String? = null) { + this.stat = stat + this.computableGroup = computableGroup + this.selectedReport = report + this.displayAggregationChoices = displayAggregationChoices + this.title = title + + stat.aggregationTypes.firstOrNull()?.let { + reports[it] = report + } + } + /** * Init UI */ @@ -89,7 +105,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { } } - toolbar.title = stat.localizedTitle(requireContext()) + toolbar.title = this.title ?: stat.localizedTitle(requireContext()) val aggregationTypes = stat.aggregationTypes aggregationTypes.forEachIndexed { index, type -> @@ -117,6 +133,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { return } } + else -> {} } reports[aggregationType]?.let { report -> @@ -191,19 +208,4 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { } - - /** - * Set data - */ - fun setData(stat: Stat, computableGroup: ComputableGroup, report: Report, displayAggregationChoices: Boolean) { - this.stat = stat - this.computableGroup = computableGroup - this.selectedReport = report - this.displayAggregationChoices = displayAggregationChoices - - stat.aggregationTypes.firstOrNull()?.let { - reports[it] = report - } - } - } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt index 432d713b..addddf61 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/graph/GraphUnderlyingEntry.kt @@ -22,7 +22,7 @@ interface GraphUnderlyingEntry { ): LegendContent { return when (stat) { - Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO -> { + Stat.NUMBER_OF_SETS, Stat.NUMBER_OF_GAMES, Stat.WIN_RATIO, Stat.HOURLY_DURATION, Stat.AVERAGE_HOURLY_DURATION -> { val totalStatValue = stat.format(entry.y.toDouble(), currency = null) DefaultLegendValues(this.entryTitle, totalStatValue) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt index 5803cc84..b877e42e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/GraphRow.kt @@ -6,7 +6,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -class GraphRow(var report: Report, var stat: Stat) : RowRepresentable { +class GraphRow(var report: Report, var stat: Stat, var title: String? = null) : RowRepresentable { override val viewType: Int get() = RowViewType.GRAPH.ordinal