Start working on tournament session

feature/top10
Aurelien Hubert 7 years ago
parent d2d643e244
commit 5374a9f605
  1. 21
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/model/LiveData.kt
  3. 53
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  4. 16
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt
  5. 40
      app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt
  6. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt
  7. 91
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  8. 8
      app/src/main/res/values/array_tournament_type.xml

@ -6,10 +6,7 @@ import io.realm.RealmConfiguration
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.Result
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.TimeFrame
import net.pokeranalytics.android.util.PokerAnalyticsLogs import net.pokeranalytics.android.util.PokerAnalyticsLogs
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
@ -73,10 +70,10 @@ class PokerAnalyticsApplication : Application() {
*/ */
private fun createDefaultData() { private fun createDefaultData() {
val realm = Realm.getDefaultInstance()
val gamesName = resources.getStringArray(R.array.game_name) val gamesName = resources.getStringArray(R.array.game_name)
val gamesShortName = resources.getStringArray(R.array.game_short_name) val gamesShortName = resources.getStringArray(R.array.game_short_name)
val realm = Realm.getDefaultInstance()
if (realm.where<Game>().findAll().isEmpty()) { if (realm.where<Game>().findAll().isEmpty()) {
realm.executeTransaction { realm.executeTransaction {
for ((index, name) in gamesName.withIndex()) { for ((index, name) in gamesName.withIndex()) {
@ -89,6 +86,18 @@ class PokerAnalyticsApplication : Application() {
} }
} }
val tournamentType = resources.getStringArray(R.array.tournament_type)
if (realm.where<TournamentType>().findAll().isEmpty()) {
realm.executeTransaction {
for (type in tournamentType) {
val tournament = TournamentType()
tournament.id = UUID.randomUUID().toString()
tournament.name = type
realm.copyToRealmOrUpdate(tournament)
}
}
}
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
val sessions = realm.where<Session>().findAll() val sessions = realm.where<Session>().findAll()
if (sessions.size < 10) { if (sessions.size < 10) {

@ -16,6 +16,7 @@ enum class LiveData : Localizable {
BANKROLL, BANKROLL,
GAME, GAME,
LOCATION, LOCATION,
TOURNAMENT_TYPE,
TOURNAMENT_FEATURE, TOURNAMENT_FEATURE,
TRANSACTION_TYPE; TRANSACTION_TYPE;
@ -50,6 +51,7 @@ enum class LiveData : Localizable {
BANKROLL -> Bankroll::class.java BANKROLL -> Bankroll::class.java
GAME -> Game::class.java GAME -> Game::class.java
LOCATION -> Location::class.java LOCATION -> Location::class.java
TOURNAMENT_TYPE -> TournamentType::class.java
TOURNAMENT_FEATURE -> TournamentFeature::class.java TOURNAMENT_FEATURE -> TournamentFeature::class.java
TRANSACTION_TYPE -> TransactionType::class.java TRANSACTION_TYPE -> TransactionType::class.java
} }
@ -73,6 +75,7 @@ enum class LiveData : Localizable {
BANKROLL -> Bankroll() BANKROLL -> Bankroll()
GAME -> Game() GAME -> Game()
LOCATION -> Location() LOCATION -> Location()
TOURNAMENT_TYPE -> TournamentType()
TOURNAMENT_FEATURE -> TournamentFeature() TOURNAMENT_FEATURE -> TournamentFeature()
TRANSACTION_TYPE -> TransactionType() TRANSACTION_TYPE -> TransactionType()
} }
@ -95,6 +98,7 @@ enum class LiveData : Localizable {
BANKROLL -> R.string.bankroll BANKROLL -> R.string.bankroll
GAME -> R.string.game GAME -> R.string.game
LOCATION -> R.string.location LOCATION -> R.string.location
TOURNAMENT_TYPE -> R.string.tournament_type
TOURNAMENT_FEATURE -> R.string.tournament_type TOURNAMENT_FEATURE -> R.string.tournament_type
TRANSACTION_TYPE -> R.string.operation_types TRANSACTION_TYPE -> R.string.operation_types
} }

@ -26,13 +26,27 @@ import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, Savable, open class Session : RealmObject(), SessionInterface, Savable,
RowRepresentableDataSource, RowRepresentable { RowRepresentableDataSource, RowRepresentable {
companion object {
// Type: cash game = 0, tournament = 1
const val TYPE_GAME = 0
const val TYPE_TOURNAMENT = 1
fun newInstance(): Session {
val session = Session()
session.result = Result()
session.timeFrame = TimeFrame()
return session
}
}
@PrimaryKey @PrimaryKey
var id = UUID.randomUUID().toString() var id = UUID.randomUUID().toString()
/** /**
* Indicates the type of session, cash game or tournament * Indicates the type of session, cash game or tournament
*/ */
var type: Int = 0 // cash game = 0, tournament = 1 var type: Int = TYPE_GAME
// The result of the main user // The result of the main user
var result: Result? = null var result: Result? = null
@ -90,7 +104,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
var tournamentNumberOfPlayers: Int? = null var tournamentNumberOfPlayers: Int? = null
// The name of the tournament // The name of the tournament
var tournamentType: TournamentName? = null var tournamentType: TournamentType? = null
// The kind of the tournament, MTT or SnG // The kind of the tournament, MTT or SnG
var tournamentKind: Int? = null var tournamentKind: Int? = null
@ -217,15 +231,6 @@ open class Session : RealmObject(), SessionInterface, Savable,
return if (gameTitle.isNotBlank()) gameTitle else "--" return if (gameTitle.isNotBlank()) gameTitle else "--"
} }
companion object {
fun newInstance(): Session {
var session: Session = Session()
session.result = Result()
session.timeFrame = TimeFrame()
return session
}
}
@Ignore // SessionInterface value @Ignore // SessionInterface value
override var value: Double = 0.0 override var value: Double = 0.0
get() { get() {
@ -280,12 +285,12 @@ open class Session : RealmObject(), SessionInterface, Savable,
// Headers // Headers
when (getState()) { when (getState()) {
SessionState.STARTED -> { SessionState.STARTED -> {
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,title = getDuration(), rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,
value = result?.net.toString())) title = getDuration(), value = result?.net.toString()))
} }
SessionState.PAUSED -> { SessionState.PAUSED -> {
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT, resId = R.string.pause, rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,
value = result?.net.toString())) resId = R.string.pause, value = result?.net.toString()))
} }
SessionState.FINISHED -> { SessionState.FINISHED -> {
rows.add( rows.add(
@ -306,7 +311,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
} }
// Rows // Rows
rows.addAll(SessionRow.getRowsForState(getState())) rows.addAll(SessionRow.getRows(type, getState()))
return rows return rows
} }
@ -323,6 +328,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionRow.GAME -> getGameTitle() SessionRow.GAME -> getGameTitle()
SessionRow.LOCATION -> location?.name ?: "--" SessionRow.LOCATION -> location?.name ?: "--"
SessionRow.BANKROLL -> bankroll?.name ?: "--" SessionRow.BANKROLL -> bankroll?.name ?: "--"
SessionRow.TOURNAMENT_TYPE -> tournamentType?.name ?: "--"
SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: "--" SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: "--"
SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.shortDateTime() ?: "--" else "--" SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.shortDateTime() ?: "--" else "--"
SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.shortDateTime() ?: "--" else "--" SessionRow.END_DATE -> if (timeFrame != null) timeFrame?.endDate?.shortDateTime() ?: "--" else "--"
@ -350,6 +356,12 @@ open class Session : RealmObject(), SessionInterface, Savable,
RowRepresentableEditDescriptor(result?.cashout?.round(), inputType = InputType.TYPE_CLASS_NUMBER) RowRepresentableEditDescriptor(result?.cashout?.round(), inputType = InputType.TYPE_CLASS_NUMBER)
) )
} }
SessionRow.INITIAL_BUY_IN -> {
data.add(
//TODO: Manage initial buy in
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER)
)
}
SessionRow.BUY_IN -> { SessionRow.BUY_IN -> {
// Add first & second buttons values, current value & set the 2 edit texts // Add first & second buttons values, current value & set the 2 edit texts
data.add(RowRepresentableEditDescriptor(100.0 * (cgBigBlind ?: 0.0))) data.add(RowRepresentableEditDescriptor(100.0 * (cgBigBlind ?: 0.0)))
@ -392,6 +404,10 @@ open class Session : RealmObject(), SessionInterface, Savable,
// Add current bankroll and bankrolls list // Add current bankroll and bankrolls list
data.add(RowRepresentableEditDescriptor(bankroll, data = LiveData.BANKROLL.items(realm))) data.add(RowRepresentableEditDescriptor(bankroll, data = LiveData.BANKROLL.items(realm)))
} }
SessionRow.TOURNAMENT_TYPE -> {
// Add current tournament type and tournament types list
data.add(RowRepresentableEditDescriptor(tournamentType, data = LiveData.TOURNAMENT_TYPE.items(realm)))
}
SessionRow.BLINDS -> { SessionRow.BLINDS -> {
data.add( data.add(
RowRepresentableEditDescriptor( RowRepresentableEditDescriptor(
@ -474,6 +490,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
cgSmallBlind = null cgSmallBlind = null
cgBigBlind = null cgBigBlind = null
} }
SessionRow.TOURNAMENT_TYPE -> tournamentType = value as TournamentType?
SessionRow.START_DATE -> if (value is Date?) { SessionRow.START_DATE -> if (value is Date?) {
if (value == null) { if (value == null) {
timeFrame = null timeFrame = null
@ -496,7 +513,3 @@ open class Session : RealmObject(), SessionInterface, Savable,
} }
enum class TournamentKind {
MTT,
SNG
}

@ -1,16 +0,0 @@
package net.pokeranalytics.android.model.realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import java.util.*
open class TournamentName() : RealmObject() {
@PrimaryKey
var id = UUID.randomUUID().toString()
// The name of the tournament
var name: String = ""
}

@ -0,0 +1,40 @@
package net.pokeranalytics.android.model.realm
import io.realm.RealmObject
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.SimpleRow
import java.util.*
open class TournamentType : RealmObject(), Savable, RowRepresentableDataSource, RowRepresentable {
@PrimaryKey
var id = UUID.randomUUID().toString()
// The name of the tournament
var name: String = ""
override fun getDisplayName(): String {
return this.name
}
override fun uniqueIdentifier(): String {
return this.id
}
override fun updateValue(value: Any?, row: RowRepresentable) {
when (row) {
SimpleRow.NAME -> this.name = value as String? ?: ""
}
}
@Ignore
override var displayHeader: Boolean = false
@Ignore
override var headerValues: ArrayList<String> = ArrayList()
}

@ -236,7 +236,6 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
* Set fragment data * Set fragment data
*/ */
fun setData(isTournament: Boolean, sessionId: String) { fun setData(isTournament: Boolean, sessionId: String) {
toolbar.title = if (isTournament) getString(R.string.tournament) else getString(R.string.cash_game)
val realm = getRealm() val realm = getRealm()
val sessionRealm = realm.where<Session>().equalTo("id", sessionId).findFirst() val sessionRealm = realm.where<Session>().equalTo("id", sessionId).findFirst()
@ -245,9 +244,12 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
} else { } else {
realm.beginTransaction() realm.beginTransaction()
currentSession = realm.createObject(Session::class.java, UUID.randomUUID().toString()) currentSession = realm.createObject(Session::class.java, UUID.randomUUID().toString())
currentSession.type = if (isTournament) Session.TYPE_TOURNAMENT else Session.TYPE_GAME
realm.commitTransaction() realm.commitTransaction()
} }
toolbar.title = if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game)
sessionAdapter = RowRepresentableAdapter(currentSession, this) sessionAdapter = RowRepresentableAdapter(currentSession, this)
recyclerView.adapter = sessionAdapter recyclerView.adapter = sessionAdapter

@ -4,6 +4,7 @@ import android.content.Context
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.extensions.SessionState import net.pokeranalytics.android.model.extensions.SessionState
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
/** /**
@ -43,7 +44,7 @@ interface RowRepresentable : Displayable {
* An interface used so that enums values can be represented visually * An interface used so that enums values can be represented visually
* as rows in RecyclerViews * as rows in RecyclerViews
*/ */
interface Displayable: Localizable { interface Displayable : Localizable {
/** /**
* The type of view associated with the row * The type of view associated with the row
*/ */
@ -78,10 +79,12 @@ interface Displayable: Localizable {
/** /**
* A class to display headers as row representable * A class to display headers as row representable
*/ */
class HeaderRowRepresentable(customViewType: RowViewType? = RowViewType.HEADER, class HeaderRowRepresentable(
override var resId: Int? = null, customViewType: RowViewType? = RowViewType.HEADER,
var title: String? = null, override var resId: Int? = null,
var value: String? = null) : RowRepresentable { var title: String? = null,
var value: String? = null
) : RowRepresentable {
override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER.ordinal override val viewType: Int = customViewType?.ordinal ?: RowViewType.HEADER.ordinal
override var displayHeader: Boolean = false override var displayHeader: Boolean = false
@ -91,8 +94,12 @@ class HeaderRowRepresentable(customViewType: RowViewType? = RowViewType.HEADER,
enum class SessionRow : RowRepresentable { enum class SessionRow : RowRepresentable {
PRIZE,
CASHED_OUT, CASHED_OUT,
INITIAL_BUY_IN,
BUY_IN, BUY_IN,
POSITION,
PLAYERS,
TIPS, TIPS,
GAME, GAME,
@ -100,6 +107,7 @@ enum class SessionRow : RowRepresentable {
LOCATION, LOCATION,
BANKROLL, BANKROLL,
TABLE_SIZE, TABLE_SIZE,
TOURNAMENT_TYPE,
START_DATE, START_DATE,
END_DATE, END_DATE,
@ -110,38 +118,49 @@ enum class SessionRow : RowRepresentable {
/** /**
* Return the rows to display for the current session state * Return the rows to display for the current session state
*/ */
fun getRowsForState(sessionState: SessionState): ArrayList<RowRepresentable> { fun getRows(type: Int, sessionState: SessionState): ArrayList<RowRepresentable> {
return when (sessionState) { when (type) {
SessionState.PENDING -> { Session.TYPE_TOURNAMENT -> {
arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) return when (sessionState) {
SessionState.PENDING -> {
arrayListOf(
GAME, INITIAL_BUY_IN, LOCATION, BANKROLL, TABLE_SIZE, TOURNAMENT_TYPE,
START_DATE, END_DATE
)
}
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> {
arrayListOf(
PRIZE, BUY_IN, POSITION, PLAYERS, TIPS,
GAME, INITIAL_BUY_IN, LOCATION, BANKROLL, TABLE_SIZE, TOURNAMENT_TYPE,
START_DATE, END_DATE, BREAK_TIME, COMMENT
)
}
else -> arrayListOf()
}
} }
SessionState.STARTED -> { Session.TYPE_GAME -> {
arrayListOf( return when (sessionState) {
CASHED_OUT, BUY_IN, TIPS, SessionState.PENDING -> {
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE)
) }
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> {
arrayListOf(
CASHED_OUT, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT
)
}
else -> arrayListOf()
}
} }
SessionState.PAUSED -> {
arrayListOf(
CASHED_OUT, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT
)
}
SessionState.FINISHED -> {
arrayListOf(
CASHED_OUT, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT
)
}
else -> arrayListOf()
} }
return arrayListOf()
} }
} }
override val needSeparator: Boolean override val needSeparator: Boolean
get() { get() {
return when (this) { return when (this) {
TIPS -> true SessionRow.TIPS -> true
else -> false else -> false
} }
} }
@ -149,16 +168,19 @@ enum class SessionRow : RowRepresentable {
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {
PRIZE -> R.string.prize
POSITION -> R.string.position
PLAYERS -> R.string.players
CASHED_OUT -> R.string.cashed_out CASHED_OUT -> R.string.cashed_out
INITIAL_BUY_IN -> R.string.initial_stack
BUY_IN -> R.string.buyin BUY_IN -> R.string.buyin
TIPS -> R.string.tips TIPS -> R.string.tips
GAME -> R.string.game GAME -> R.string.game
BLINDS -> R.string.blinds BLINDS -> R.string.blinds
LOCATION -> R.string.location LOCATION -> R.string.location
BANKROLL -> R.string.bankroll BANKROLL -> R.string.bankroll
TABLE_SIZE -> R.string.table_size TABLE_SIZE -> R.string.table_size
TOURNAMENT_TYPE -> R.string.tournament_type
START_DATE -> R.string.start_date START_DATE -> R.string.start_date
END_DATE -> R.string.end_date END_DATE -> R.string.end_date
BREAK_TIME -> R.string.break_time BREAK_TIME -> R.string.break_time
@ -169,19 +191,20 @@ enum class SessionRow : RowRepresentable {
override val viewType: Int override val viewType: Int
get() { get() {
return when (this) { return when (this) {
CASHED_OUT, BUY_IN, TIPS, PRIZE, POSITION, PLAYERS, CASHED_OUT, INITIAL_BUY_IN, BUY_IN, TIPS,
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, COMMENT,
TOURNAMENT_TYPE, START_DATE, END_DATE, BREAK_TIME -> RowViewType.TITLE_VALUE.ordinal
} }
} }
override val bottomSheetType: BottomSheetType override val bottomSheetType: BottomSheetType
get() { get() {
return when (this) { return when (this) {
CASHED_OUT, BREAK_TIME -> BottomSheetType.EDIT_TEXT CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME -> BottomSheetType.EDIT_TEXT
BUY_IN, TIPS -> BottomSheetType.SUM BUY_IN, TIPS -> BottomSheetType.SUM
BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT
GAME -> BottomSheetType.LIST_GAME GAME -> BottomSheetType.LIST_GAME
LOCATION, BANKROLL -> BottomSheetType.LIST LOCATION, BANKROLL, TOURNAMENT_TYPE -> BottomSheetType.LIST
TABLE_SIZE -> BottomSheetType.GRID TABLE_SIZE -> BottomSheetType.GRID
COMMENT -> BottomSheetType.EDIT_TEXT COMMENT -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE else -> BottomSheetType.NONE

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="tournament_type">
<item>MTT</item>
<item>Sit&amp;Go</item>
<item>Turbo Sit&amp;Go</item>
</string-array>
</resources>
Loading…
Cancel
Save