diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 1b81d955..35ea4536 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -60,7 +60,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") - this.createFakeSessions() +// this.createFakeSessions() } Patcher.patchAll(this.applicationContext) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt index f4b61d7f..63501b46 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt @@ -7,7 +7,8 @@ import io.realm.RealmResults import net.pokeranalytics.android.R import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition -import net.pokeranalytics.android.model.interfaces.Timed +import net.pokeranalytics.android.model.interfaces.GraphIdentifiableEntry +//import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.SessionSet @@ -196,7 +197,7 @@ class ComputedResults(group: ComputableGroup, shouldManageMultiGroupProgressValu /** * Adds a value to the evolution values */ - fun addEvolutionValue(value: Double, duration: Double? = null, stat: Stat, data: Timed) { + fun addEvolutionValue(value: Double, duration: Double? = null, stat: Stat, data: GraphIdentifiableEntry) { val point = if (duration != null) { Point(duration, y = value, data = data.objectIdentifier) 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 2b8a30c8..ec9e50a7 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Stat.kt @@ -159,10 +159,15 @@ 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, RISK_OF_RUIN -> { + WIN_RATIO, ROI -> { val color = if (value * 100 >= this.threshold) R.color.green else R.color.red return TextFormat("${(value * 100).formatted()}%", color) - } // white amountsr + } + RISK_OF_RUIN -> { + val color = if (value * 100 <= this.threshold) R.color.green else R.color.red + return TextFormat("${(value * 100).formatted()}%", color) + } + // white amountsr AVERAGE_BUYIN, STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> { return TextFormat(value.toCurrency(currency)) diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt index b6c079d6..f3bbe059 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReport.kt @@ -4,9 +4,10 @@ import android.content.Context import com.github.mikephil.charting.data.Entry import com.github.mikephil.charting.data.LineDataSet import io.realm.Realm +import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition -import net.pokeranalytics.android.model.interfaces.DatedValue +import net.pokeranalytics.android.model.interfaces.DatedGraphEntry import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.ui.graph.DataSetFactory @@ -116,12 +117,12 @@ class BankrollReport(var setup: BankrollReportSetup) { /** * The list of dated items used for the graph */ - private var evolutionItems: MutableList = mutableListOf() + private var evolutionItems: MutableList = mutableListOf() /** * Adds a list of dated items to the evolution items used to get the bankroll graph */ - fun addDatedItems(items: Collection) { + fun addDatedItems(items: Collection) { this.evolutionItems.addAll(items) } @@ -143,7 +144,7 @@ class BankrollReport(var setup: BankrollReportSetup) { bucket.addTransaction(transaction) } ?: run { - throw IllegalStateException("Transaction has no type") + throw PAIllegalStateException("Transaction has no type") } } @@ -162,7 +163,7 @@ class BankrollReport(var setup: BankrollReportSetup) { var total = this.initial this.evolutionItems.forEach { total += it.amount - val point = BRGraphPoint(total, it.date, it) + val point = BRGraphPoint(total, it.date, it.objectIdentifier) this.evolutionPoints.add(point) } @@ -276,6 +277,6 @@ class TransactionBucket(var name: String, useRate: Boolean = false) { data class BRGraphPoint(var value: Double, var date: Date, var data: Any? = null) { - var variation: Double = 0.0 +// var variation: Double = 0.0 } diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReportManager.kt b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReportManager.kt index 9f68008f..a6fd8917 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReportManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReportManager.kt @@ -70,7 +70,7 @@ object BankrollReportManager { GlobalScope.launch(coroutineContext) { var report: BankrollReport? = null - val scope = GlobalScope.async { + val coroutine = GlobalScope.async { val s = Date() Timber.d(">>>>> start computing bankroll...") @@ -86,8 +86,11 @@ object BankrollReportManager { Timber.d(">>>>> ended in $duration seconds") } - scope.await() - report?.let { handler(it) } + coroutine.await() + + report?.let { + handler(it) + } } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Dated.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Dated.kt index 86cea43b..bb20862a 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Dated.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Dated.kt @@ -12,4 +12,6 @@ interface DatedValue : Dated { var amount: Double -} \ No newline at end of file +} + +interface DatedGraphEntry : DatedValue, GraphIdentifiableEntry \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt index 05624c3a..26ebd99a 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt @@ -55,6 +55,7 @@ interface Identifiable : RealmModel { * A unique uniqueIdentifier getter */ var id: String + } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt index 1123f298..31ca5fe9 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt @@ -4,7 +4,13 @@ import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry import net.pokeranalytics.android.ui.graph.ObjectIdentifier import java.util.* -interface Timed : GraphUnderlyingEntry, Identifiable { +interface GraphIdentifiableEntry : GraphUnderlyingEntry, Identifiable { + + val objectIdentifier : ObjectIdentifier + +} + +interface Timed : GraphIdentifiableEntry { fun startDate() : Date? @@ -30,6 +36,4 @@ interface Timed : GraphUnderlyingEntry, Identifiable { val hourlyDuration: Double get() = this.netDuration / 3600000.0 - val objectIdentifier : ObjectIdentifier - } \ No newline at end of file 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 088ac609..aa97a132 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 @@ -46,7 +46,7 @@ import kotlin.collections.ArrayList typealias BB = Double open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDataSource, RowRepresentable, Timed, - TimeFilterable, Filterable, DatedValue { + TimeFilterable, Filterable, DatedGraphEntry { enum class Type { CASH_GAME, @@ -791,7 +791,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat } return NULL_TEXT } - else -> throw UnmanagedRowRepresentableException("Unmanaged row = ${row}") + else -> throw UnmanagedRowRepresentableException("Unmanaged row = $row") } } @@ -1138,7 +1138,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat DefaultLegendValues(this.entryTitle(context), left, right) } else -> { - super.legendValues(stat, entry, style, groupName, context) + super.legendValues(stat, entry, style, groupName, context) } } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt index 748b3e84..66432946 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt @@ -13,7 +13,7 @@ import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.interfaces.* import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.GraphFragment -import net.pokeranalytics.android.ui.graph.GraphUnderlyingEntry +import net.pokeranalytics.android.ui.graph.ObjectIdentifier import net.pokeranalytics.android.ui.view.DefaultLegendValues import net.pokeranalytics.android.ui.view.LegendContent import net.pokeranalytics.android.ui.view.RowRepresentable @@ -26,8 +26,8 @@ import java.util.* import kotlin.collections.ArrayList -open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, TimeFilterable, Filterable, DatedValue, - GraphUnderlyingEntry { +open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, TimeFilterable, + Filterable, DatedGraphEntry { companion object { @@ -134,7 +134,10 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo return SaveValidityStatus.VALID } - // GraphUnderlyingEntry + // GraphIdentifiableEntry + + override val objectIdentifier: ObjectIdentifier + get() = ObjectIdentifier(this.id, Transaction::class.java) override fun entryTitle(context: Context): String { return DateFormat.getDateInstance(DateFormat.SHORT).format(this.date) @@ -158,4 +161,5 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo return DefaultLegendValues(this.entryTitle(context), entryValue, totalStatValue, leftName = leftName) } + } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt index 97d98541..6cb4fb42 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollFragment.kt @@ -31,7 +31,10 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType -import net.pokeranalytics.android.ui.view.rowrepresentable.* +import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollGraphRow +import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollMainRow +import net.pokeranalytics.android.ui.view.rowrepresentable.BankrollTotalRow +import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable import net.pokeranalytics.android.util.extensions.sorted import java.util.* import kotlin.collections.ArrayList @@ -110,15 +113,15 @@ class BankrollFragment : DeletableItemFragment(), StaticRowRepresentableDataSour override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { lastItemClickedPosition = position when (row) { + is BankrollGraphRow -> { + val lineDataSet = row.dataSet as LineDataSet + GraphActivity.newInstance(requireContext(), listOf(lineDataSet), title = getString(R.string.bankroll)) + } is BankrollRowRepresentable -> { BankrollReportManager.reportForBankroll(row.bankrollId) { bankrollReport -> BankrollDetailsActivity.newInstanceForResult(this, bankrollReport, RequestCode.BANKROLL_DETAILS.value) } } - is GraphRow -> { - val lineDataSet = row.dataSet as LineDataSet - GraphActivity.newInstance(requireContext(), listOf(lineDataSet), title = getString(R.string.bankroll)) - } } } 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 dfcc828a..18d92fdd 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 @@ -32,7 +32,7 @@ import kotlin.coroutines.CoroutineContext class StatisticsFragment : FilterableFragment() { - val coroutineContext: CoroutineContext + private val coroutineContext: CoroutineContext get() = Dispatchers.Main private lateinit var tableReportFragment: ComposableTableReportFragment 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 897ff3f9..01d9ead9 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 @@ -3,13 +3,13 @@ package net.pokeranalytics.android.ui.graph import android.content.Context import com.github.mikephil.charting.data.Entry import net.pokeranalytics.android.calculus.Stat -import net.pokeranalytics.android.model.interfaces.Timed +import net.pokeranalytics.android.model.interfaces.GraphIdentifiableEntry import net.pokeranalytics.android.ui.fragment.GraphFragment import net.pokeranalytics.android.ui.view.DefaultLegendValues import net.pokeranalytics.android.ui.view.LegendContent import net.pokeranalytics.android.util.TextFormat -class ObjectIdentifier(var id: String, var clazz: Class) { +class ObjectIdentifier(var id: String, var clazz: Class) { } 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 42e6da6f..9a453d39 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 @@ -428,8 +428,8 @@ enum class RowViewType(private var layoutRes: Int) { /** * Display a legend */ - inner class LegendDefaultViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), - BindableHolder { + inner class LegendDefaultViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { if (row is BankrollRowRepresentable) {