diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 988c9d92..da086eb8 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -67,7 +67,7 @@ class PokerAnalyticsApplication : Application() { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") Timber.d("Realm path = ${Realm.getDefaultInstance().path}") - this.createFakeSessions() +// this.createFakeSessions() } Patcher.patchAll(this.applicationContext) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index c77b4117..77c1a953 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -284,6 +284,13 @@ class Calculator { results.addStat(ROI, roi) } + val shouldComputeITMRatio = options.stats.contains(TOURNAMENT_ITM_RATIO) || computableGroup.displayedStats?.contains(TOURNAMENT_ITM_RATIO) == true + if (shouldComputeITMRatio) { + val itmCount = computables.count { it.session?.result?.cashout ?: 0.0 > 0.0 } // should we add a property inside ComputableResult for better performance? + val itmRatio = itmCount.toDouble() / computables.size.toDouble() + results.addStat(TOURNAMENT_ITM_RATIO, itmRatio) + } + if (options.computeLocationsPlayed) { results.addStat(LOCATIONS_PLAYED, computables.distinctBy { it.session?.location?.id }.size.toDouble()) } diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/ComputableGroup.kt b/app/src/main/java/net/pokeranalytics/android/calculus/ComputableGroup.kt index eae144f3..5572a0aa 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/ComputableGroup.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/ComputableGroup.kt @@ -12,7 +12,7 @@ import net.pokeranalytics.android.model.realm.SessionSet /** * A sessionGroup of computable items identified by a name */ -class ComputableGroup(var query: Query, var stats: List? = null) { +class ComputableGroup(var query: Query, var displayedStats: List? = null) { /** * A subgroup used to compute stat variation 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 e05ebb6a..0b8316eb 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -53,6 +53,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres TOTAL_BUYIN(27), RISK_OF_RUIN(28), STANDARD_DEVIATION_BB(29), + TOURNAMENT_ITM_RATIO(30) ; companion object : IntSearchable { @@ -129,6 +130,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres MAXIMUM_DURATION -> R.string.longest_session DAYS_PLAYED -> R.string.days_played TOTAL_BUYIN -> R.string.total_buyin + TOURNAMENT_ITM_RATIO -> R.string.itm_ratio else -> throw PAIllegalStateException("Stat ${this.name} name required but undefined") } } @@ -161,7 +163,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres HOURLY_DURATION, AVERAGE_HOURLY_DURATION, MAXIMUM_DURATION -> { return TextFormat(value.formattedHourlyDuration()) } // red/green percentages - WIN_RATIO, ROI -> { + WIN_RATIO, ROI, TOURNAMENT_ITM_RATIO -> { val color = if (value * 100 >= this.threshold) R.color.green else R.color.red return TextFormat("${(value * 100).formatted}%", color) } @@ -185,6 +187,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres get() { return when (this) { RISK_OF_RUIN -> 5.0 + TOURNAMENT_ITM_RATIO -> 10.0 WIN_RATIO -> 50.0 else -> 0.0 } @@ -205,7 +208,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres STANDARD_DEVIATION_BB -> R.string.average_net_result_bb_ STANDARD_DEVIATION_HOURLY -> R.string.hour_rate_without_pauses STANDARD_DEVIATION_BB_PER_100_HANDS -> R.string.net_result_bb_per_100_hands - WIN_RATIO, HOURLY_DURATION -> return this.localizedTitle(context) + WIN_RATIO, HOURLY_DURATION, TOURNAMENT_ITM_RATIO -> return this.localizedTitle(context) else -> null } resId?.let { @@ -257,7 +260,7 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres val legendHideRightValue: Boolean get() { return when (this) { - AVERAGE, NUMBER_OF_SETS, NUMBER_OF_GAMES, WIN_RATIO, + AVERAGE, NUMBER_OF_SETS, NUMBER_OF_GAMES, WIN_RATIO, TOURNAMENT_ITM_RATIO, HOURLY_DURATION, AVERAGE_HOURLY_DURATION -> true else -> false } @@ -269,7 +272,8 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres val graphSignificantIndividualValue: Boolean get() { return when (this) { - AVERAGE, WIN_RATIO, NUMBER_OF_SETS, NUMBER_OF_GAMES, + AVERAGE, WIN_RATIO, TOURNAMENT_ITM_RATIO, + NUMBER_OF_SETS, NUMBER_OF_GAMES, STANDARD_DEVIATION, HOURLY_DURATION -> false else -> true } @@ -315,7 +319,8 @@ enum class Stat(override var uniqueIdentifier: Int) : IntIdentifiable, RowRepres return when (this) { NET_RESULT, NET_BB_PER_100_HANDS, HOURLY_RATE_BB, AVERAGE_HOURLY_DURATION, HOURLY_DURATION, - NUMBER_OF_SETS, ROI, AVERAGE_BUYIN, WIN_RATIO, + NUMBER_OF_SETS, ROI, AVERAGE_BUYIN, + WIN_RATIO, TOURNAMENT_ITM_RATIO, AVERAGE_NET_BB, NUMBER_OF_GAMES, AVERAGE -> true else -> false } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt index 5beffd8b..b3f977f8 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt @@ -4,7 +4,7 @@ import io.realm.RealmObject import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.QueryCondition -open class ComputableResult() : RealmObject(), Filterable { +open class ComputableResult : RealmObject(), Filterable { var ratedNet: Double = 0.0 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index 32bd0571..468b598b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -210,7 +210,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener { Stat.NET_RESULT, Stat.HOURLY_RATE, Stat.ROI, - Stat.WIN_RATIO, + Stat.TOURNAMENT_ITM_RATIO, Stat.NUMBER_OF_GAMES, Stat.AVERAGE_BUYIN ) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt index 47341493..3b8dcf07 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt @@ -160,7 +160,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab report.results.forEach { result -> val title = result.group.query.getName(requireContext()).capitalize() rows.add(CustomizableRowRepresentable(title = title)) - val statList = result.group.stats ?: report.options.stats + val statList = result.group.displayedStats ?: report.options.stats statList.forEach { stat -> rows.add(StatRow(stat, result.computedStat(stat), result.group.query.getName(requireContext()))) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4d3348f1..b750faf0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -811,5 +811,6 @@ posts Show tips on front page App tips + ITM ratio