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. 63
      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.kotlin.where
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.realm.Game
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.model.realm.*
import net.pokeranalytics.android.util.PokerAnalyticsLogs
import timber.log.Timber
import java.util.*
@ -73,10 +70,10 @@ class PokerAnalyticsApplication : Application() {
*/
private fun createDefaultData() {
val realm = Realm.getDefaultInstance()
val gamesName = resources.getStringArray(R.array.game_name)
val gamesShortName = resources.getStringArray(R.array.game_short_name)
val realm = Realm.getDefaultInstance()
if (realm.where<Game>().findAll().isEmpty()) {
realm.executeTransaction {
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) {
val sessions = realm.where<Session>().findAll()
if (sessions.size < 10) {

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

@ -26,13 +26,27 @@ import kotlin.collections.ArrayList
open class Session : RealmObject(), SessionInterface, Savable,
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
var id = UUID.randomUUID().toString()
/**
* 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
var result: Result? = null
@ -90,7 +104,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
var tournamentNumberOfPlayers: Int? = null
// The name of the tournament
var tournamentType: TournamentName? = null
var tournamentType: TournamentType? = null
// The kind of the tournament, MTT or SnG
var tournamentKind: Int? = null
@ -217,15 +231,6 @@ open class Session : RealmObject(), SessionInterface, Savable,
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
override var value: Double = 0.0
get() {
@ -280,12 +285,12 @@ open class Session : RealmObject(), SessionInterface, Savable,
// Headers
when (getState()) {
SessionState.STARTED -> {
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,title = getDuration(),
value = result?.net.toString()))
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,
title = getDuration(), value = result?.net.toString()))
}
SessionState.PAUSED -> {
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT, resId = R.string.pause,
value = result?.net.toString()))
rows.add(HeaderRowRepresentable(RowViewType.HEADER_TITLE_AMOUNT,
resId = R.string.pause, value = result?.net.toString()))
}
SessionState.FINISHED -> {
rows.add(
@ -306,7 +311,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
}
// Rows
rows.addAll(SessionRow.getRowsForState(getState()))
rows.addAll(SessionRow.getRows(type, getState()))
return rows
}
@ -323,6 +328,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
SessionRow.GAME -> getGameTitle()
SessionRow.LOCATION -> location?.name ?: "--"
SessionRow.BANKROLL -> bankroll?.name ?: "--"
SessionRow.TOURNAMENT_TYPE -> tournamentType?.name ?: "--"
SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: "--"
SessionRow.START_DATE -> if (timeFrame != null) timeFrame?.startDate?.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)
)
}
SessionRow.INITIAL_BUY_IN -> {
data.add(
//TODO: Manage initial buy in
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER)
)
}
SessionRow.BUY_IN -> {
// Add first & second buttons values, current value & set the 2 edit texts
data.add(RowRepresentableEditDescriptor(100.0 * (cgBigBlind ?: 0.0)))
@ -392,6 +404,10 @@ open class Session : RealmObject(), SessionInterface, Savable,
// Add current bankroll and bankrolls list
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 -> {
data.add(
RowRepresentableEditDescriptor(
@ -474,6 +490,7 @@ open class Session : RealmObject(), SessionInterface, Savable,
cgSmallBlind = null
cgBigBlind = null
}
SessionRow.TOURNAMENT_TYPE -> tournamentType = value as TournamentType?
SessionRow.START_DATE -> if (value is Date?) {
if (value == 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
*/
fun setData(isTournament: Boolean, sessionId: String) {
toolbar.title = if (isTournament) getString(R.string.tournament) else getString(R.string.cash_game)
val realm = getRealm()
val sessionRealm = realm.where<Session>().equalTo("id", sessionId).findFirst()
@ -245,9 +244,12 @@ class SessionFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Bott
} else {
realm.beginTransaction()
currentSession = realm.createObject(Session::class.java, UUID.randomUUID().toString())
currentSession.type = if (isTournament) Session.TYPE_TOURNAMENT else Session.TYPE_GAME
realm.commitTransaction()
}
toolbar.title = if (currentSession.type == Session.TYPE_TOURNAMENT) getString(R.string.tournament) else getString(R.string.cash_game)
sessionAdapter = RowRepresentableAdapter(currentSession, this)
recyclerView.adapter = sessionAdapter

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