diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 318a8459..9c056d4a 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -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().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().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().findAll() if (sessions.size < 10) { diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 83728288..cb6ec90b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -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 } 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 19026d74..81384180 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 @@ -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 -} diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt deleted file mode 100644 index 1f4776ce..00000000 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentName.kt +++ /dev/null @@ -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 = "" - -} diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt new file mode 100644 index 00000000..b294be9e --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentType.kt @@ -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 = ArrayList() + +} diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt index 22a70618..23778e65 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SessionFragment.kt @@ -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().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 diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt index 346f46b5..d93df7c3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt @@ -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, - override var resId: Int? = null, - var title: String? = null, - var value: String? = null) : RowRepresentable { +class HeaderRowRepresentable( + customViewType: RowViewType? = RowViewType.HEADER, + override var resId: Int? = null, + var title: String? = null, + 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,38 +118,49 @@ enum class SessionRow : RowRepresentable { /** * Return the rows to display for the current session state */ - fun getRowsForState(sessionState: SessionState): ArrayList { - return when (sessionState) { - SessionState.PENDING -> { - arrayListOf(GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE) + fun getRows(type: Int, sessionState: SessionState): ArrayList { + when (type) { + Session.TYPE_TOURNAMENT -> { + 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 -> { - arrayListOf( - CASHED_OUT, BUY_IN, TIPS, - GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT - ) + 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 + ) + } + 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 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 diff --git a/app/src/main/res/values/array_tournament_type.xml b/app/src/main/res/values/array_tournament_type.xml new file mode 100644 index 00000000..5517b8f9 --- /dev/null +++ b/app/src/main/res/values/array_tournament_type.xml @@ -0,0 +1,8 @@ + + + + MTT + Sit&Go + Turbo Sit&Go + + \ No newline at end of file