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 c2bdcd05..bdf7866d 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 @@ -286,6 +286,10 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim // The number of tables played at the same time var numberOfTables: Int = 1 + set(value) { + field = value + this.computeStats() + } // The hand histories of the session @LinkingObjects("session") @@ -490,7 +494,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim val tableSize = this.tableSize ?: 9 // 9 is the default table size if null val config = UserConfig.getConfiguration(this.realm) val playerHandsPerHour = if (this.isLive) config.liveDealtHandsPerHour else config.onlineDealtHandsPerHour - return playerHandsPerHour / tableSize.toDouble() + return this.numberOfTables * playerHandsPerHour / tableSize.toDouble() } val hourlyRate: Double @@ -871,6 +875,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim } } SessionPropertiesRow.HANDS_COUNT -> handsCount = (value as Double?)?.toInt() + SessionPropertiesRow.NUMBER_OF_TABLES -> this.numberOfTables = (value as Double?)?.toInt() ?: 1 is CustomField -> { customFieldEntries.filter { it.customField?.id == row.id }.let { customFieldEntries.removeAll(it) @@ -1046,6 +1051,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim SessionPropertiesRow.TOURNAMENT_NAME -> tournamentName?.name ?: NULL_TEXT SessionPropertiesRow.HANDS -> this.handHistories?.size.toString() SessionPropertiesRow.HANDS_COUNT -> this.handsCountFormatted(context) + SessionPropertiesRow.NUMBER_OF_TABLES -> this.numberOfTables.toString() is CustomField -> { customFieldEntries.find { it.customField?.id == row.id }?.let { customFieldEntry -> return customFieldEntry.getFormattedValue(currency) 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 701f76fe..9ae44b4c 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 @@ -206,9 +206,10 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr currentSession.location = realmLocation } - updateSessionUI(true) + this.updateSessionUI(true) } } + sessionHasBeenUserCustomized = false } } @@ -264,7 +265,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr when (row) { SessionPropertiesRow.CASHED_OUT, SessionPropertiesRow.PRIZE, SessionPropertiesRow.NET_RESULT, SessionPropertiesRow.BUY_IN, SessionPropertiesRow.TIPS, SessionPropertiesRow.START_DATE, - SessionPropertiesRow.END_DATE, SessionPropertiesRow.BREAK_TIME -> updateSessionUI() + SessionPropertiesRow.END_DATE, SessionPropertiesRow.BREAK_TIME, SessionPropertiesRow.NUMBER_OF_TABLES -> updateSessionUI() SessionPropertiesRow.BANKROLL -> { updateSessionUI() updateMenuUI() // result capture method @@ -626,6 +627,11 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr "defaultValue" to session.handsCount ) ) + SessionPropertiesRow.NUMBER_OF_TABLES -> row.editingDescriptors( + mapOf( + "defaultValue" to session.numberOfTables + ) + ) SessionPropertiesRow.TIPS -> row.editingDescriptors( mapOf( "sb" to session.cgBiggestBet?.round(), diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt index 0a39e752..f40ba622 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/SessionPropertiesRow.kt @@ -35,6 +35,7 @@ enum class SessionPropertiesRow : RowRepresentable { TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, + NUMBER_OF_TABLES, START_DATE, END_DATE, @@ -104,7 +105,11 @@ enum class SessionPropertiesRow : RowRepresentable { Session.Type.CASH_GAME.ordinal -> { when (state) { SessionState.PENDING, SessionState.PLANNED -> { - return arrayListOf(GAME, STAKES, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) + return if (session.isLive) { + arrayListOf(GAME, STAKES, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) + } else { + arrayListOf(GAME, STAKES, LOCATION, BANKROLL, TABLE_SIZE, NUMBER_OF_TABLES, START_DATE, END_DATE) + } } SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { @@ -132,18 +137,28 @@ enum class SessionPropertiesRow : RowRepresentable { fields.add(HANDS) } fields.add(SeparatorRow()) - fields.addAll(listOf( + fields.addAll( + listOf( GAME, STAKES, LOCATION, BANKROLL, - TABLE_SIZE, + TABLE_SIZE + ) + ) + if (!session.isLive) { + fields.add(NUMBER_OF_TABLES) + } + + fields.addAll( + listOf( SeparatorRow(), START_DATE, END_DATE, BREAK_TIME ) ) + if (state == SessionState.FINISHED) { fields.add(HANDS_COUNT) } @@ -175,6 +190,7 @@ enum class SessionPropertiesRow : RowRepresentable { TOURNAMENT_TYPE -> R.string.tournament_type TOURNAMENT_NAME -> R.string.tournament_name TOURNAMENT_FEATURE -> R.string.tournament_feature + NUMBER_OF_TABLES -> R.string.number_of_tables START_DATE -> R.string.start_date END_DATE -> R.string.end_date BREAK_TIME -> R.string.break_time @@ -190,7 +206,7 @@ enum class SessionPropertiesRow : RowRepresentable { NET_RESULT, PRIZE, POSITION, PLAYERS, CASHED_OUT, INITIAL_BUY_IN, BUY_IN, TIPS, GAME, STAKES, LOCATION, BANKROLL, TABLE_SIZE, COMMENT, TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, HANDS, - START_DATE, END_DATE, BREAK_TIME, HANDS_COUNT -> RowViewType.TITLE_VALUE.ordinal + START_DATE, END_DATE, BREAK_TIME, HANDS_COUNT, NUMBER_OF_TABLES -> RowViewType.TITLE_VALUE.ordinal } } @@ -198,7 +214,7 @@ enum class SessionPropertiesRow : RowRepresentable { get() { return when (this) { NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, - PRIZE, HANDS_COUNT -> BottomSheetType.NUMERIC_TEXT + PRIZE, HANDS_COUNT, NUMBER_OF_TABLES -> BottomSheetType.NUMERIC_TEXT BUY_IN, TIPS -> BottomSheetType.SUM STAKES -> BottomSheetType.CASH_GAME_STAKES GAME -> BottomSheetType.LIST_GAME @@ -278,7 +294,7 @@ enum class SessionPropertiesRow : RowRepresentable { ) ) } - HANDS_COUNT -> { + HANDS_COUNT, NUMBER_OF_TABLES -> { arrayListOf( RowRepresentableEditDescriptor(inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_SIGNED)