diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e2af584..65ed5289 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,7 +61,7 @@ android:name="net.pokeranalytics.android.ui.modules.session.SessionActivity" android:launchMode="singleTop" android:screenOrientation="portrait" - android:windowSoftInputMode="adjustNothing" /> + android:windowSoftInputMode="stateAlwaysHidden|adjustNothing" /> + get() { + this.blinds?.let { blinds -> + val blindsSplit = blinds.split(BLIND_SEPARATOR) + return blindsSplit.mapNotNull { + try { + NumberFormat.getInstance().parse(it)?.toDouble() + } catch (e: ParseException) { + null + } + } + } + return listOf() + } + + fun generateStakes() { + + if (this.ante == null && this.ante == null) { + setHolderStakes(null) + return + } + + val components = arrayListOf() + + this.blinds?.let { components.add("${cbBlinds}${it}") } + this.ante?.let { components.add("${cbAnte}${it.formatted}") } + + val code = this.bankroll?.currency?.code ?: UserDefaults.currency.currencyCode + components.add("${cbCode}${code}") + + setHolderStakes(components.joinToString(cbSeparator)) + } + + fun defineHighestBet() { + val bets = arrayListOf() + this.ante?.let { bets.add(it) } + bets.addAll(this.blindValues) + setHolderBiggestBet(bets.maxOrNull()) + } + +} \ No newline at end of file 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 index b1917b33..ade36d37 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt @@ -128,7 +128,7 @@ class Patcher { realm.executeTransaction { val sessions = realm.where(Session::class.java).findAll() sessions.forEach { session -> - val blinds = arrayListOf(session.cgSmallBlind, session.cgBigBlind).filterNotNull() + val blinds = arrayListOf(session.cgOldSmallBlind, session.cgOldBigBlind).filterNotNull() val blindsFormatted = blinds.map { NumberFormat.getInstance().format(it) } if (blindsFormatted.isNotEmpty()) { session.cgBlinds = blindsFormatted.joinToString(BLIND_SEPARATOR) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 4e07160e..2876d457 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -254,13 +254,27 @@ class PokerAnalyticsMigration : RealmMigration { // Migrate to version 12 if (currentVersion == 11) { - schema.get("Session")?.addField("cgAnte", Double::class.java) - ?.setNullable("cgAnte", true) - schema.get("Session")?.addField("cgBiggestBet", Double::class.java) - ?.setNullable("cgBiggestBet", true) - schema.get("Session")?.addField("cgStakes", String::class.java) - schema.get("Session")?.addField("cgBlinds", String::class.java) - schema.get("Session")?.removeField("blinds") + + schema.get("Session")?.let { ss -> + + ss.addField("cgAnte", Double::class.java) + ?.setNullable("cgAnte", true) + ss.addField("cgBiggestBet", Double::class.java) + ?.setNullable("cgBiggestBet", true) + ss.addField("cgStakes", String::class.java) + ss.addField("cgBlinds", String::class.java) + ss.removeField("blinds") + + ss.renameField("cgSmallBlind", "cgOldSmallBlind") + ss.renameField("cgBigBlind", "cgOldBigBlind") + } + + schema.get("HandHistory")?.let { hs -> + hs.addField("cgStakes", String::class.java) + hs.addField("cgBlinds", String::class.java) + hs.renameField("smallBlind", "oldSmallBlind") + hs.renameField("bigBlind", "oldBigBlind") + } currentVersion++ } 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 40ba08b5..28a6be15 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 @@ -36,7 +36,7 @@ open class ComputableResult : RealmObject(), Filterable { } this.bbNet = session.bbNet - this.hasBigBlind = if (session.cgBigBlind != null) 1 else 0 + this.hasBigBlind = if (session.cgBiggestBet != null) 1 else 0 this.estimatedHands = session.estimatedHands this.bbPer100Hands = session.bbNet / (session.numberOfHandsPerHour * session.hourlyDuration) * 100 diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt index bad54e3e..ce63e633 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt @@ -150,7 +150,7 @@ open class Result : RealmObject(), Filterable { fun computeNumberOfRebuy() { this.session?.let { if (it.isCashGame()) { - it.cgBigBlind?.let { bb -> + it.cgBiggestBet?.let { bb -> if (bb > 0.0) { this.numberOfRebuy = (this.buyin ?: 0.0) / (bb * 100.0) } else { 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 454ee931..b8fb7fd4 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 @@ -32,18 +32,22 @@ import net.pokeranalytics.android.ui.adapter.UnmanagedRowRepresentableException import net.pokeranalytics.android.ui.graph.Graph import net.pokeranalytics.android.ui.view.* import net.pokeranalytics.android.ui.view.rows.SessionPropertiesRow -import net.pokeranalytics.android.util.* -import net.pokeranalytics.android.util.extensions.* +import net.pokeranalytics.android.util.CrashLogging +import net.pokeranalytics.android.util.NULL_TEXT +import net.pokeranalytics.android.util.TextFormat +import net.pokeranalytics.android.util.UserDefaults +import net.pokeranalytics.android.util.extensions.hourMinute +import net.pokeranalytics.android.util.extensions.shortDateTime +import net.pokeranalytics.android.util.extensions.toCurrency +import net.pokeranalytics.android.util.extensions.toMinutes import java.text.DateFormat -import java.text.NumberFormat -import java.text.ParseException import java.util.* import java.util.Currency typealias BB = Double open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Timed, - TimeFilterable, Filterable, DatedBankrollGraphEntry { + TimeFilterable, Filterable, DatedBankrollGraphEntry, StakesHolder { enum class Type(val value: String) { CASH_GAME("Cash Game"), @@ -64,11 +68,6 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim companion object { - private val cbSeparator = ";" - private val cbAnte = "A=" - private val cbBlinds = "B=" - private val cbCode = "C=" - fun newInstance(realm: Realm, isTournament: Boolean, bankroll: Bankroll? = null, managed: Boolean = true): Session { val session = Session() session.result = Result() @@ -302,17 +301,15 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim // Cash Game // The small blind value - var cgSmallBlind: Double? = null + var cgOldSmallBlind: Double? = null set(value) { field = value -// formatBlinds() } // The big blind value - var cgBigBlind: Double? = null + var cgOldBigBlind: Double? = null set(value) { field = value -// formatBlinds() this.computeStats() this.result?.computeNumberOfRebuy() } @@ -427,7 +424,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim */ val bbNet: BB get() { - val bb = this.cgBigBlind + val bb = this.cgBiggestBet val result = this.result return if (bb != null && result != null) { result.net / bb @@ -752,8 +749,8 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim copy.game = this.game copy.limit = this.limit - copy.cgSmallBlind = this.cgSmallBlind - copy.cgBigBlind = this.cgBigBlind + copy.cgBiggestBet = this.cgBiggestBet + copy.cgAnte = this.cgAnte copy.tournamentEntryFee = this.tournamentEntryFee copy.tournamentFeatures = this.tournamentFeatures copy.tournamentName = this.tournamentName @@ -798,8 +795,8 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim // } // } } else if (value == null) { - cgSmallBlind = null - cgBigBlind = null + this.cgBiggestBet = null + this.cgAnte = null } SessionPropertiesRow.BREAK_TIME -> { this.breakDuration = (value as Double? ?: 0.0).toLong() * 60 * 1000 @@ -1081,45 +1078,71 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim /// Stakes - fun generateStakes() { +// fun generateStakes() { +// +// if (this.cgAnte == null && this.cgAnte == null) { +// this.cgStakes = null +// return +// } +// +// val components = arrayListOf() +// +// this.cgBlinds?.let { components.add("${cbBlinds}${it}") } +// this.cgAnte?.let { components.add("${cbAnte}${it.formatted}") } +// +// val code = this.bankroll?.currency?.code ?: UserDefaults.currency.currencyCode +// components.add("${cbCode}${code}") +// +// this.cgStakes = components.joinToString(cbSeparator) +// } +// +// fun defineHighestBet() { +// val bets = arrayListOf() +// this.cgAnte?.let { bets.add(it) } +// bets.addAll(this.blindValues) +// this.cgBiggestBet = bets.maxOrNull() +// } - if (this.cgAnte == null && this.cgAnte == null) { - this.cgStakes = null - return - } + /// StakesHolder - val components = arrayListOf() + override val ante: Double? + get() { return this.cgAnte } + + override val blinds: String? + get() { return this.cgBlinds } - this.cgBlinds?.let { components.add("${cbBlinds}${it}") } - this.cgAnte?.let { components.add("${cbAnte}${it.formatted}") } + override val biggestBet: Double? + get() { return this.cgBiggestBet } - val code = this.bankroll?.currency?.code ?: UserDefaults.currency.currencyCode - components.add("${cbCode}${code}") + override val stakes: String? + get() { return this.cgStakes } - this.cgStakes = components.joinToString(cbSeparator) +// override val bankroll: Bankroll? +// get() { return this.bankroll } + + override fun setHolderStakes(stakes: String?) { + this.cgStakes = stakes } - fun defineHighestBet() { - val bets = arrayListOf() - this.cgAnte?.let { bets.add(it) } - bets.addAll(this.blindValues) - this.cgBiggestBet = bets.maxOrNull() + override fun setHolderBiggestBet(biggestBet: Double?) { + this.cgBiggestBet = biggestBet } - private val blindValues: List - get() { - this.cgBlinds?.let { blinds -> - val blindsSplit = blinds.split(BLIND_SEPARATOR) - return blindsSplit.mapNotNull { - try { - NumberFormat.getInstance().parse(it)?.toDouble() - } catch (e: ParseException) { - null - } - } - } - return listOf() - } +// +// private val blindValues: List +// get() { +// this.cgBlinds?.let { blinds -> +// val blindsSplit = blinds.split(BLIND_SEPARATOR) +// return blindsSplit.mapNotNull { +// try { +// NumberFormat.getInstance().parse(it)?.toDouble() +// } catch (e: ParseException) { +// null +// } +// } +// } +// return listOf() +// } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt index 9b8549d9..e751143f 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt @@ -15,10 +15,8 @@ import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.handhistory.HandSetup import net.pokeranalytics.android.model.handhistory.Position import net.pokeranalytics.android.model.handhistory.Street -import net.pokeranalytics.android.model.interfaces.Deletable -import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus -import net.pokeranalytics.android.model.interfaces.Identifiable -import net.pokeranalytics.android.model.interfaces.TimeFilterable +import net.pokeranalytics.android.model.interfaces.* +import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.modules.handhistory.evaluator.EvaluatorBridge import net.pokeranalytics.android.ui.modules.handhistory.model.ActionReadRow @@ -35,7 +33,7 @@ import kotlin.math.max data class PositionAmount(var position: Int, var amount: Double, var isAllin: Boolean) open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, TimeFilterable, - CardHolder, Comparator { + CardHolder, Comparator, StakesHolder { @PrimaryKey override var id = UUID.randomUUID().toString() @@ -64,34 +62,67 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, /*** * The small blind */ - var smallBlind: Double? = null + var oldSmallBlind: Double? = null set(value) { field = value - if (this.bigBlind == null && value != null) { - this.bigBlind = value * 2 - } +// if (this.bigBlind == null && value != null) { +// this.bigBlind = value * 2 +// } } /*** * The big blind */ - var bigBlind: Double? = null + var oldBigBlind: Double? = null set(value) { field = value - if (this.smallBlind == null && value != null) { - this.smallBlind = value / 2 - } +// if (this.smallBlind == null && value != null) { +// this.smallBlind = value / 2 +// } } + /*** + * Big blind ante + */ + var bigBlindAnte: Boolean = false + /*** * The ante */ - var ante: Double = 0.0 + override var ante: Double? = 0.0 + set(value) { + field = value + this.generateStakes() + this.defineHighestBet() + } /*** - * Big blind ante + * The blinds */ - var bigBlindAnte: Boolean = false + override var blinds: String? = null + set(value) { + field = value + this.generateStakes() + this.defineHighestBet() + } + + override var biggestBet: Double? = null + + /*** + * The coded stakes + */ + override var stakes: String? = null + + override val bankroll: Bankroll? + get() { return this.session?.bankroll } + + override fun setHolderStakes(stakes: String?) { + this.stakes = stakes + } + + override fun setHolderBiggestBet(biggestBet: Double?) { + this.biggestBet = biggestBet + } /*** * Number of players in the hand @@ -164,8 +195,8 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, this.playerSetups.removeAll(this.playerSetups) handSetup.tableSize?.let { this.numberOfPlayers = it } - handSetup.smallBlind?.let { this.smallBlind = it } - handSetup.bigBlind?.let { this.bigBlind = it } + handSetup.ante?.let { this.ante = it } + handSetup.blinds?.let { this.blinds = it } this.session = handSetup.session this.date = this.session?.handHistoryAutomaticDate ?: Date() @@ -180,8 +211,17 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, this.actions.clear() - this.addAction(0, Action.Type.POST_SB, this.smallBlind) - this.addAction(1, Action.Type.POST_BB, this.bigBlind) + this.blindValues.forEachIndexed { index, blind -> + val action = when(index) { + 0 -> Action.Type.POST_SB + 1 -> Action.Type.POST_BB + else -> Action.Type.STRADDLE + } + this.addAction(index, action, blind) + } + +// this.addAction(0, Action.Type.POST_SB, this.smallBlind) +// this.addAction(1, Action.Type.POST_BB, this.bigBlind) // var lastStraddler: Int? = null @@ -237,9 +277,9 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, val anteSum: Double get() { return if (bigBlindAnte) { - this.bigBlind ?: 0.0 + this.biggestBet ?: 0.0 } else { - this.ante * this.numberOfPlayers + (this.ante ?: 0.0) * this.numberOfPlayers } } @@ -303,14 +343,20 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, val players = "${this.numberOfPlayers} ${context.getString(R.string.players)}" val firstLineComponents = mutableListOf(this.date.fullDate(), players) - this.smallBlind?.let { sb -> - this.bigBlind?.let { bb -> - firstLineComponents.add("${sb.formatted}/${bb.formatted}") + this.blinds?.let { firstLineComponents.add(it) } + +// this.smallBlind?.let { sb -> +// this.bigBlind?.let { bb -> +// firstLineComponents.add("${sb.formatted}/${bb.formatted}") +// } +// } + + this.ante?.let { + if (it > 0.0) { + firstLineComponents.add("ante ${this.ante}") } } - if (this.ante > 0.0) { - firstLineComponents.add("ante ${this.ante}") - } + string = string.plus(firstLineComponents.joinToString(" - ")) string = string.addLineReturn(2) @@ -373,12 +419,12 @@ open class HandHistory : RealmObject(), Deletable, RowRepresentable, Filterable, fun anteForPosition(position: Position): Double { return if (this.bigBlindAnte) { if (position == Position.BB) { - this.bigBlind ?: 0.0 + this.biggestBet ?: 0.0 } else { 0.0 } } else { - this.ante + this.ante ?: 0.0 } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/FavoriteSessionFinder.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/FavoriteSessionFinder.kt index 1e1f33eb..fe40b2bb 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/FavoriteSessionFinder.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/FavoriteSessionFinder.kt @@ -86,8 +86,8 @@ class FavoriteSessionFinder { when (session.type) { Session.Type.CASH_GAME.ordinal -> { - session.cgSmallBlind = fav.cgSmallBlind - session.cgBigBlind = fav.cgBigBlind + session.cgAnte = fav.cgAnte + session.cgBlinds = fav.cgBlinds } Session.Type.TOURNAMENT.ordinal -> { session.tournamentEntryFee = fav.tournamentEntryFee 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 ceee25aa..19bdad1d 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 @@ -292,7 +292,7 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep private fun sessionsCSVExport() { val sessions = getRealm().where(Session::class.java).findAll().sort("startDate") - val csv = ProductCSVDescriptors.pokerAnalyticsAndroid.toCSV(sessions) + val csv = ProductCSVDescriptors.pokerAnalyticsAndroidSessions.toCSV(sessions) this.shareCSV(csv, "Sessions") } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStakesFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStakesFragment.kt index 510a43dd..bdb8c266 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStakesFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetStakesFragment.kt @@ -34,7 +34,12 @@ class BottomSheetStakesFragment : BottomSheetFragment() { override fun onStart() { super.onStart() -// binding.editText2.requestFocus() + +// binding.editText2.setTextIsSelectable(true) +// binding.editText2.isFocusableInTouchMode = false + + binding.editText2.requestFocus() + } /** @@ -60,7 +65,12 @@ class BottomSheetStakesFragment : BottomSheetFragment() { // binding.editText2.setRawInputType(InputType.TYPE_CLASS_TEXT) //= InputType.TYPE_NULL // data[1].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES // binding.editText2.inputType = InputType.TYPE_NULL +// binding.editText2.setTextIsSelectable(false) +// editText.setTextIsSelectable(true) + + binding.editText2.setRawInputType(InputType.TYPE_CLASS_TEXT) binding.editText2.setTextIsSelectable(true) + binding.editText2.showSoftInputOnFocus = false binding.editText2.onCreateInputConnection(EditorInfo())?.let { binding.stakesKeyboard.inputConnection = it @@ -93,16 +103,16 @@ class BottomSheetStakesFragment : BottomSheetFragment() { this.model.secondStringValue = it?.toString() } - binding.editText2.setOnEditorActionListener { _, actionId, _ -> - if (actionId == EditorInfo.IME_ACTION_DONE) { - this.onRowValueChanged() -// this.delegate.onRowValueChanged(values, row) - dismiss() - true - } else { - false - } - } +// binding.editText2.setOnEditorActionListener { _, actionId, _ -> +// if (actionId == EditorInfo.IME_ACTION_DONE) { +// this.onRowValueChanged() +//// this.delegate.onRowValueChanged(values, row) +// dismiss() +// true +// } else { +// false +// } +// } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/editor/EditorAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/editor/EditorAdapter.kt index b0f6ec9d..8232aedf 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/editor/EditorAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/editor/EditorAdapter.kt @@ -192,7 +192,8 @@ class EditorAdapter( "Edit Text not found for tag: $tag, class: $this" ) - // hides soft input view + // hides soft input view, + // 22/06/22: does not seem useful as - I believe - manifest activity has android:windowSoftInputMode="stateAlwaysHidden" editText.setTextIsSelectable(true) // Enabled diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionList.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionList.kt index e92454c7..cae80b2a 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionList.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/ActionList.kt @@ -536,9 +536,9 @@ class ActionList(var listener: ActionListListener? = null) : ArrayList this.handHistory.smallBlind = amount + Action.Type.POST_SB -> this.handHistory.oldSmallBlind = amount Action.Type.POST_BB -> { - this.handHistory.bigBlind = amount + this.handHistory.oldBigBlind = amount if (this.handHistory.bigBlindAnte) { this.updateBigBlindRemainingStack() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/EditorViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/EditorViewModel.kt index 8cba02d5..02a39844 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/EditorViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/handhistory/model/EditorViewModel.kt @@ -30,7 +30,6 @@ import net.pokeranalytics.android.util.CrashLogging import net.pokeranalytics.android.util.extensions.findById import net.pokeranalytics.android.util.extensions.formatted import timber.log.Timber -import java.lang.Exception import java.text.DecimalFormat import java.text.ParseException import kotlin.coroutines.CoroutineContext @@ -261,8 +260,10 @@ class EditorViewModel : ViewModel(), RowRepresentableDataSource, CardCentralizer rows.add(CustomizableRowRepresentable(customViewType = HandRowType.HEADER, resId = R.string.settings, value = "")) rows.add(HandRowType.PLAYER_NUMBER) - if (this.handHistory.ante > 0) { - rows.add(HandRowType.ANTE) + this.handHistory.ante?.let { + if (it > 0) { + rows.add(HandRowType.ANTE) + } } if (this.handHistory.bigBlindAnte) { @@ -796,7 +797,7 @@ class EditorViewModel : ViewModel(), RowRepresentableDataSource, CardCentralizer val string = when (row) { HandRowType.PLAYER_NUMBER -> this.handHistory.numberOfPlayers.toString() HandRowType.COMMENT -> this.handHistory.comment ?: context.getString(R.string.comment) - HandRowType.ANTE -> this.handHistory.ante.formatted + HandRowType.ANTE -> this.handHistory.ante?.formatted HandRowType.BIG_BLIND_ANTE_READ -> context.getString(R.string.yes) // HandRowType.HERO_POSITION -> context.getString(R.string.set_hero_position) // HandRowType.PLAYER_POSITION -> context.getString(R.string.set_position_details) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt index 432d6f15..bd0af066 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt @@ -26,7 +26,6 @@ import net.pokeranalytics.android.model.extensions.getState import net.pokeranalytics.android.model.extensions.scheduleStopNotification import net.pokeranalytics.android.model.interfaces.SaveValidityStatus import net.pokeranalytics.android.model.realm.* -import net.pokeranalytics.android.util.CrashLogging import net.pokeranalytics.android.model.utils.FavoriteSessionFinder import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate @@ -38,6 +37,7 @@ import net.pokeranalytics.android.ui.modules.datalist.DataListActivity import net.pokeranalytics.android.ui.modules.handhistory.HandHistoryActivity import net.pokeranalytics.android.ui.view.* import net.pokeranalytics.android.ui.view.rows.SessionPropertiesRow +import net.pokeranalytics.android.util.CrashLogging import net.pokeranalytics.android.util.Preferences import net.pokeranalytics.android.util.extensions.* import timber.log.Timber @@ -585,7 +585,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr ) SessionPropertiesRow.BUY_IN -> row.editingDescriptors( mapOf( - "bb" to session.cgBigBlind, + "bb" to session.cgBiggestBet, "fee" to session.tournamentEntryFee, "ratedBuyin" to session.result?.buyin ) @@ -628,8 +628,8 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr ) SessionPropertiesRow.TIPS -> row.editingDescriptors( mapOf( - "sb" to session.cgSmallBlind?.round(), - "bb" to session.cgBigBlind?.round(), + "sb" to session.cgBiggestBet?.round(), + "bb" to session.cgBiggestBet?.round(), "tips" to session.result?.tips ) ) diff --git a/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt b/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt index a5e94be2..c13ecc34 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/FakeDataManager.kt @@ -90,9 +90,13 @@ class FakeDataManager { if (isTournament) { session.tournamentEntryFee = buyin } else { - val bigBlind = arrayListOf(1.0, 2.0, 4.0).random() - session.cgBigBlind = bigBlind - session.cgSmallBlind = bigBlind / 2.0 + + session.cgAnte = arrayListOf(1.0, null).random() + session.cgBlinds = arrayListOf("1/2", "2/5/10", "2").random() + +// val bigBlind = arrayListOf(1.0, 2.0, 4.0).random() +// session.cgBigBlind = bigBlind +// session.cgSmallBlind = bigBlind / 2.0 } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt index 168460d6..dcb1b3c3 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt @@ -8,12 +8,14 @@ import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.utils.DataUtils +import net.pokeranalytics.android.util.BLIND_SEPARATOR import net.pokeranalytics.android.util.extensions.count import net.pokeranalytics.android.util.extensions.getOrCreate import net.pokeranalytics.android.util.extensions.setHourMinutes import org.apache.commons.csv.CSVRecord import timber.log.Timber import java.text.DateFormat +import java.text.NumberFormat import java.text.ParseException import java.text.SimpleDateFormat import java.util.* @@ -57,6 +59,9 @@ abstract class PACSVDescriptor(source: DataSource, var stackingIn: Double? = null var stackingOut: Double? = null + var sb: Double? = null + var bb: Double? = null + this.fields.forEach { field -> this.fieldMapping[field]?.let { index -> @@ -169,38 +174,40 @@ abstract class PACSVDescriptor(source: DataSource, is SessionField.Bankroll -> bankrollName = value is SessionField.LimitType -> session.limit = Limit.getInstance(value)?.ordinal is SessionField.Comment -> session.comment = value - is SessionField.Blind -> { // 1/2 - val blinds = field.parse(value) - session.cgSmallBlind = blinds?.first - session.cgBigBlind = blinds?.second + is SessionField.Blind, is SessionField.Blinds -> { // 1/2 + session.cgBlinds = value + +// val blinds = field.parse(value) +// session.cgSmallBlind = blinds?.first +// session.cgBigBlind = blinds?.second } is SessionField.SmallBlind -> { - val sb = field.parse(value) - if (sb != null && sb > 0.0) { - session.cgSmallBlind = sb - } else {} + sb = field.parse(value) +// if (sb != null && sb > 0.0) { +// session.cgSmallBlind = sb +// } else {} } is SessionField.BigBlind -> { - val bb = field.parse(value) - if (bb != null && bb > 0.0) { - session.cgBigBlind = bb - } else {} - } - is SessionField.Blinds -> { - val blinds = value.split("/") - when (blinds.size) { - 0 -> {} - 1 -> { - session.cgBigBlind = field.parse(blinds.first()) - } - else -> { - session.cgSmallBlind = field.parse(blinds[blinds.size - 2]) - session.cgBigBlind = field.parse(blinds.last()) - } - } + bb = field.parse(value) +// if (bb != null && bb > 0.0) { +// session.cgBigBlind = bb +// } else {} } +// is SessionField.Blinds -> { +// val blinds = value.split("/") +// when (blinds.size) { +// 0 -> {} +// 1 -> { +// session.cgBigBlind = field.parse(blinds.first()) +// } +// else -> { +// session.cgSmallBlind = field.parse(blinds[blinds.size - 2]) +// session.cgBigBlind = field.parse(blinds.last()) +// } +// } +// } is SessionField.Ante -> { - // unmanaged atm + session.cgAnte = field.parse(value) } is SessionField.TableSize -> session.tableSize = TableSize.valueForLabel(value) is SessionField.TournamentPosition -> session.result?.tournamentFinalPosition = @@ -256,6 +263,11 @@ abstract class PACSVDescriptor(source: DataSource, } + val blinds = arrayListOf(sb, bb).filterNotNull() + if (blinds.isNotEmpty()) { + session.cgBlinds = blinds.joinToString(BLIND_SEPARATOR) { NumberFormat.getInstance().format(it) } + } + val bankroll = Bankroll.getOrCreate(realm, bankrollName, isLive, currencyCode, currencyRate) session.bankroll = bankroll diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt index 137d840c..05bdf663 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt @@ -18,7 +18,8 @@ class ProductCSVDescriptors { runGoodTournaments, pokerAnalyticsiOS, pokerAnalytics6iOS, - pokerAnalyticsAndroid, + pokerAnalyticsAndroidSessions, + pokerAnalyticsAndroid6Sessions, pokerAnalyticsAndroidTransactions ) @@ -239,7 +240,7 @@ class ProductCSVDescriptors { ) } - val pokerAnalyticsAndroid: SessionCSVDescriptor + val pokerAnalyticsAndroidSessions: SessionCSVDescriptor get() { return SessionCSVDescriptor( DataSource.POKER_ANALYTICS, @@ -273,6 +274,42 @@ class ProductCSVDescriptors { SessionField.Comment("Comment") ) } + + + val pokerAnalyticsAndroid6Sessions: SessionCSVDescriptor + get() { + return SessionCSVDescriptor( + DataSource.POKER_ANALYTICS, + true, + SessionField.Start("Start Date", dateFormat = "MM/dd/yy HH:mm:ss"), + SessionField.End("End Date", dateFormat = "MM/dd/yy HH:mm:ss"), + SessionField.Break("Break"), + SessionField.SessionType("Type"), + SessionField.Live("Live"), + SessionField.NumberOfTables("Tables"), + SessionField.Buyin("Buyin"), + SessionField.CashedOut("Cashed Out"), + SessionField.NetResult("Online Net"), + SessionField.Tips("Tips"), + SessionField.HandsCount("Hands Count"), + SessionField.LimitType("Limit"), + SessionField.Game("Game"), + SessionField.TableSize("Table Size"), + SessionField.Location("Location"), + SessionField.Bankroll("Bankroll"), + SessionField.CurrencyCode("Currency Code"), + SessionField.CurrencyRate("Currency Rate"), + SessionField.Ante("Antes"), + SessionField.Blinds("Blinds"), + SessionField.TournamentTypeName("Tournament Type"), + SessionField.TournamentName("Tournament Name"), + SessionField.TournamentEntryFee("Entry fee"), + SessionField.TournamentNumberOfPlayers("Number of players"), + SessionField.TournamentFeatures("Tournament Features"), + SessionField.TournamentPosition("Position"), + SessionField.Comment("Comment") + ) + } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt index 52af5f00..982e0cb5 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt @@ -7,7 +7,6 @@ import net.pokeranalytics.android.model.TournamentType import net.pokeranalytics.android.model.realm.CustomField import net.pokeranalytics.android.model.realm.Session import org.apache.commons.csv.CSVRecord -import timber.log.Timber /** * A SessionCSVDescriptor is a CSVDescriptor specialized in parsing Session objects @@ -63,8 +62,10 @@ class SessionCSVDescriptor(source: DataSource, isTournament: Boolean?, vararg el is SessionField.Bankroll -> data.bankroll?.name is SessionField.CurrencyCode -> data.bankroll?.currency?.code is SessionField.CurrencyRate -> field.format(data.bankroll?.currency?.rate) - is SessionField.SmallBlind -> field.format(data.cgSmallBlind) - is SessionField.BigBlind -> field.format(data.cgBigBlind) +// is SessionField.SmallBlind -> field.format(data.cgSmallBlind) +// is SessionField.BigBlind -> field.format(data.cgBigBlind) + is SessionField.Blinds -> data.cgBlinds + is SessionField.Ante -> field.format(data.cgAnte) is SessionField.TournamentType -> field.format(data.tournamentType) is SessionField.TournamentTypeName -> { data.tournamentType?.let { tt -> diff --git a/app/src/main/res/layout/bottom_sheet_stakes.xml b/app/src/main/res/layout/bottom_sheet_stakes.xml index 3d292b64..aab40f52 100644 --- a/app/src/main/res/layout/bottom_sheet_stakes.xml +++ b/app/src/main/res/layout/bottom_sheet_stakes.xml @@ -42,7 +42,6 @@ android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:gravity="center" - android:imeOptions="actionDone" android:lines="1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"