@ -3,7 +3,6 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import android.text.InputType
import android.widget.Toast
import androidx.fragment.app.Fragment
import io.realm.RealmResults
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.TournamentType
import net.pokeranalytics.android.model.extensions.SessionState
@ -14,174 +13,173 @@ import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheet
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.helpers.DateTimePickerManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditData
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowEditableDataSource
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.extensions.round
import net.pokeranalytics.android.util.extensions.sorted
import java.util.*
import kotlin.collections.ArrayList
enum class SessionRow : RowRepresentable {
PRIZE ,
CASHED _OUT ,
NET _RESULT ,
INITIAL _BUY _IN ,
BUY _IN ,
POSITION ,
PLAYERS ,
TIPS ,
PRIZE ,
CASHED _OUT ,
NET _RESULT ,
INITIAL _BUY _IN ,
BUY _IN ,
POSITION ,
PLAYERS ,
TIPS ,
GAME ,
BLINDS ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
START _DATE ,
END _DATE ,
GAME ,
BLINDS ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
START _DATE ,
END _DATE ,
BREAK _TIME ,
COMMENT ;
BREAK _TIME ,
COMMENT ;
companion object {
/ * *
* Return the rows to display for the current session state
* /
fun getRows ( session : Session ) : List < RowRepresentable > {
when ( session . type ) {
Session . Type . TOURNAMENT . ordinal -> {
return when ( session . getState ( ) ) {
SessionState . PENDING , SessionState . PLANNED -> {
arrayListOf (
GAME ,
INITIAL _BUY _IN ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
START _DATE ,
END _DATE
)
}
SessionState . STARTED , SessionState . PAUSED , SessionState . FINISHED -> {
arrayListOf (
PRIZE ,
BUY _IN ,
POSITION ,
PLAYERS ,
TIPS ,
COMMENT ,
SeparatorRow ( ) ,
GAME ,
INITIAL _BUY _IN ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
SeparatorRow ( ) ,
START _DATE ,
END _DATE ,
BREAK _TIME
)
}
}
}
Session . Type . CASH _GAME . ordinal -> {
when ( session . getState ( ) ) {
SessionState . PENDING , SessionState . PLANNED -> {
return arrayListOf ( GAME , BLINDS , LOCATION , BANKROLL , TABLE _SIZE , START _DATE , END _DATE )
}
SessionState . STARTED , SessionState . PAUSED , SessionState . FINISHED -> {
companion object {
/ * *
* Return the rows to display for the current session state
* /
fun getRows ( session : Session ) : List < RowRepresentable > {
when ( session . type ) {
Session . Type . TOURNAMENT . ordinal -> {
return when ( session . getState ( ) ) {
SessionState . PENDING , SessionState . PLANNED -> {
arrayListOf (
GAME ,
INITIAL _BUY _IN ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
START _DATE ,
END _DATE
)
}
SessionState . STARTED , SessionState . PAUSED , SessionState . FINISHED -> {
arrayListOf (
PRIZE ,
BUY _IN ,
POSITION ,
PLAYERS ,
TIPS ,
COMMENT ,
SeparatorRow ( ) ,
GAME ,
INITIAL _BUY _IN ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
TOURNAMENT _TYPE ,
TOURNAMENT _NAME ,
TOURNAMENT _FEATURE ,
SeparatorRow ( ) ,
START _DATE ,
END _DATE ,
BREAK _TIME
)
}
}
}
Session . Type . CASH _GAME . ordinal -> {
when ( session . getState ( ) ) {
SessionState . PENDING , SessionState . PLANNED -> {
return arrayListOf ( GAME , BLINDS , LOCATION , BANKROLL , TABLE _SIZE , START _DATE , END _DATE )
}
SessionState . STARTED , SessionState . PAUSED , SessionState . FINISHED -> {
val fields = mutableListOf < RowRepresentable > ( )
when {
session . hasBuyin -> fields . addAll ( listOf ( CASHED _OUT , BUY _IN , TIPS ) )
session . hasNetResult -> fields . add ( NET _RESULT )
session . isLive -> fields . addAll ( listOf ( CASHED _OUT , BUY _IN , TIPS ) )
else -> fields . add ( NET _RESULT )
}
fields . add ( COMMENT )
fields . add ( SeparatorRow ( ) )
fields . addAll ( listOf (
GAME ,
BLINDS ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
START _DATE ,
END _DATE ,
BREAK _TIME
val fields = mutableListOf < RowRepresentable > ( )
when {
session . hasBuyin -> fields . addAll ( listOf ( CASHED _OUT , BUY _IN , TIPS ) )
session . hasNetResult -> fields . add ( NET _RESULT )
session . isLive -> fields . addAll ( listOf ( CASHED _OUT , BUY _IN , TIPS ) )
else -> fields . add ( NET _RESULT )
}
fields . add ( COMMENT )
fields . add ( SeparatorRow ( ) )
fields . addAll (
listOf (
GAME ,
BLINDS ,
LOCATION ,
BANKROLL ,
TABLE _SIZE ,
START _DATE ,
END _DATE ,
BREAK _TIME
)
)
return fields
}
}
}
}
return arrayListOf ( )
}
}
)
)
return fields
}
}
}
}
return arrayListOf ( )
}
}
override val resId : Int ?
get ( ) {
return when ( this ) {
NET _RESULT -> R . string . net _result
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
TOURNAMENT _NAME -> R . string . tournament _name
TOURNAMENT _FEATURE -> R . string . tournament _feature
START _DATE -> R . string . start _date
END _DATE -> R . string . end _date
BREAK _TIME -> R . string . break _time
COMMENT -> R . string . comment
}
}
override val resId : Int ?
get ( ) {
return when ( this ) {
NET _RESULT -> R . string . net _result
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
TOURNAMENT _NAME -> R . string . tournament _name
TOURNAMENT _FEATURE -> R . string . tournament _feature
START _DATE -> R . string . start _date
END _DATE -> R . string . end _date
BREAK _TIME -> R . string . break _time
COMMENT -> R . string . comment
}
}
override val viewType : Int
get ( ) {
return when ( this ) {
NET _RESULT , PRIZE , POSITION , PLAYERS , CASHED _OUT , INITIAL _BUY _IN , BUY _IN , TIPS ,
GAME , BLINDS , LOCATION , BANKROLL , TABLE _SIZE , COMMENT ,
TOURNAMENT _TYPE , TOURNAMENT _NAME , TOURNAMENT _FEATURE , START _DATE , END _DATE , BREAK _TIME -> RowViewType . TITLE _VALUE . ordinal
}
}
override val viewType : Int
get ( ) {
return when ( this ) {
NET _RESULT , PRIZE , POSITION , PLAYERS , CASHED _OUT , INITIAL _BUY _IN , BUY _IN , TIPS ,
GAME , BLINDS , LOCATION , BANKROLL , TABLE _SIZE , COMMENT ,
TOURNAMENT _TYPE , TOURNAMENT _NAME , TOURNAMENT _FEATURE , START _DATE , END _DATE , BREAK _TIME -> RowViewType . TITLE _VALUE . ordinal
}
}
override val bottomSheetType : BottomSheetType
get ( ) {
return when ( this ) {
NET _RESULT , CASHED _OUT , INITIAL _BUY _IN , BREAK _TIME , POSITION , PLAYERS , PRIZE -> BottomSheetType . NUMERIC _TEXT
BUY _IN , TIPS -> BottomSheetType . SUM
BLINDS -> BottomSheetType . DOUBLE _EDIT _TEXT
GAME -> BottomSheetType . LIST _GAME
TOURNAMENT _TYPE -> BottomSheetType . LIST _STATIC
LOCATION , BANKROLL , TOURNAMENT _NAME -> BottomSheetType . LIST
TOURNAMENT _FEATURE -> BottomSheetType . MULTI _SELECTION
TABLE _SIZE -> BottomSheetType . GRID
COMMENT -> BottomSheetType . EDIT _TEXT _MULTI _LINES
else -> BottomSheetType . NONE
}
}
override val bottomSheetType : BottomSheetType
get ( ) {
return when ( this ) {
NET _RESULT , CASHED _OUT , INITIAL _BUY _IN , BREAK _TIME , POSITION , PLAYERS , PRIZE -> BottomSheetType . NUMERIC _TEXT
BUY _IN , TIPS -> BottomSheetType . SUM
BLINDS -> BottomSheetType . DOUBLE _EDIT _TEXT
GAME -> BottomSheetType . LIST _GAME
TOURNAMENT _TYPE -> BottomSheetType . LIST _STATIC
LOCATION , BANKROLL , TOURNAMENT _NAME -> BottomSheetType . LIST
TOURNAMENT _FEATURE -> BottomSheetType . MULTI _SELECTION
TABLE _SIZE -> BottomSheetType . GRID
COMMENT -> BottomSheetType . EDIT _TEXT _MULTI _LINES
else -> BottomSheetType . NONE
}
}
override fun startEditing ( dataSource : Any ? , parent : Fragment ? ) {
@ -190,39 +188,31 @@ enum class SessionRow : RowRepresentable {
if ( parent == null ) return
if ( parent !is RowRepresentableDelegate ) return
val session : Session = dataSource
val data = RowEditableDataSource ( session . currency )
when ( this ) {
START _DATE -> DateTimePickerManager . create ( parent . requireContext ( ) , this , parent , dataSource . startDate )
START _DATE -> {
data . appendDateDescriptor ( session . startDate )
}
END _DATE -> {
if ( dataSource . startDate == null ) {
if ( session . startDate == null ) {
Toast . makeText ( parent . context , R . string . session _missing _start _date , Toast . LENGTH _SHORT ) . show ( )
return
} else {
DateTimePickerManager . create (
parent . requireContext ( ) ,
this ,
parent ,
dataSource . endDate ?: dataSource . startDate ?: Date ( ) ,
dataSource . startDate
)
data . appendDateDescriptor ( session . endDate ?: session . startDate ?: Date ( ) , session . startDate )
}
}
else -> BottomSheetFragment . newCreate ( this , parent , this . editingData ( dataSource ) )
}
}
override val valueCanBeClearedWhenEditing : Boolean
get ( ) {
return when ( this ) {
BANKROLL -> false
else -> true
}
}
private fun editingData ( session : Session ) : RowRepresentableEditData ? {
val data = RowRepresentableEditData ( session . currency )
when ( this ) {
BANKROLL -> data . append ( session . bankroll , data = session . realm . sorted < Bankroll > ( ) as RealmResults < RowRepresentable > )
CASHED _OUT , PRIZE -> data . append ( session . result ?. cashout , inputType = InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL or InputType . TYPE _NUMBER _FLAG _SIGNED )
NET _RESULT -> data . append ( session . result ?. netResult , inputType = InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL or InputType . TYPE _NUMBER _FLAG _SIGNED )
BANKROLL -> data . append ( session . bankroll , data = session . realm . sorted < Bankroll > ( ) )
CASHED _OUT , PRIZE -> data . append (
session . result ?. cashout ,
inputType = InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL or InputType . TYPE _NUMBER _FLAG _SIGNED
)
NET _RESULT -> data . append (
session . result ?. netResult ,
inputType = InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL or InputType . TYPE _NUMBER _FLAG _SIGNED
)
INITIAL _BUY _IN -> data . append ( session . tournamentEntryFee ?. round ( ) , inputType = InputType . TYPE _CLASS _NUMBER )
BUY _IN -> {
val bb : Double ? = session . cgBigBlind
@ -243,7 +233,10 @@ enum class SessionRow : RowRepresentable {
data . append ( inputType = InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL )
}
POSITION -> data . append ( session . result ?. tournamentFinalPosition , inputType = InputType . TYPE _CLASS _NUMBER )
PLAYERS -> data . append ( session . tournamentNumberOfPlayers . toString ( ) , inputType = InputType . TYPE _CLASS _NUMBER )
PLAYERS -> data . append (
session . tournamentNumberOfPlayers . toString ( ) ,
inputType = InputType . TYPE _CLASS _NUMBER
)
TIPS -> {
val sb : String ? = session . cgSmallBlind ?. round ( )
val bb : String ? = session . cgBigBlind ?. round ( )
@ -256,21 +249,39 @@ enum class SessionRow : RowRepresentable {
}
GAME -> {
data . append ( session . limit )
data . append ( session . game , data = session . realm . sorted < Game > ( ) as RealmResults < RowRepresentable > )
data . append ( session . game , data = session . realm . sorted < Game > ( ) )
}
BLINDS -> {
data . append ( session . cgSmallBlind ?. round ( ) , R . string . smallblind , InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL )
data . append ( session . cgBigBlind ?. round ( ) , R . string . bigblind , InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL )
data . append (
session . cgSmallBlind ?. round ( ) ,
R . string . smallblind ,
InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL
)
data . append (
session . cgBigBlind ?. round ( ) ,
R . string . bigblind ,
InputType . TYPE _CLASS _NUMBER or InputType . TYPE _NUMBER _FLAG _DECIMAL
)
}
LOCATION -> data . append ( session . location , data = session . realm . sorted < Location > ( ) as RealmResults < RowRepresentable > )
LOCATION -> data . append ( session . location , data = session . realm . sorted < Location > ( ) )
TABLE _SIZE -> data . append ( session . tableSize )
TOURNAMENT _TYPE -> data . append ( session . tournamentType , staticData = TournamentType . values ( ) . map { it } )
TOURNAMENT _NAME -> data . append ( session . tournamentName , data = session . realm . sorted < TournamentName > ( ) as RealmResults < RowRepresentable > )
TOURNAMENT _FEATURE -> data . append ( session . tournamentFeatures , data = session . realm . sorted < TournamentFeature > ( ) as RealmResults < RowRepresentable > )
TOURNAMENT _NAME -> data . append ( session . tournamentName , data = session . realm . sorted < TournamentName > ( ) )
TOURNAMENT _FEATURE -> data . append (
session . tournamentFeatures ,
data = session . realm . sorted < TournamentFeature > ( )
)
BREAK _TIME -> data . append ( hint = R . string . in _minutes , inputType = InputType . TYPE _CLASS _NUMBER )
COMMENT -> data . append ( session . comment , R . string . comment )
else -> { }
}
return data
BottomSheetFragment . create ( this , parent , data )
}
override val valueCanBeClearedWhenEditing : Boolean
get ( ) {
return when ( this ) {
BANKROLL -> false
else -> true
}
}
}