Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

feature/top10
Aurelien Hubert 7 years ago
commit 8c8de475da
  1. 2
      app/build.gradle
  2. 1
      app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt
  3. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Bankroll.kt
  4. 9
      app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt
  5. 46
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  6. 7
      app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
  7. 19
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt
  8. 32
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
  9. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
  11. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt
  12. 85
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetNumericTextFragment.kt
  13. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetType.kt
  14. 4
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/BankrollRow.kt
  15. 116
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SessionRow.kt

@ -28,7 +28,7 @@ android {
applicationId "net.pokeranalytics.android" applicationId "net.pokeranalytics.android"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 28 targetSdkVersion 28
versionCode 8 versionCode 16
versionName "1.0" versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

@ -40,6 +40,7 @@ class PokerAnalyticsMigration : RealmMigration {
it.renameField("filterElements", "filterConditions") it.renameField("filterElements", "filterConditions")
} }
schema.get("SessionSet")?.let { schema.get("SessionSet")?.let {
it.addField("id", String::class.java).setRequired("id", true)
it.addPrimaryKey("id") it.addPrimaryKey("id")
} }
currentVersion++ currentVersion++

@ -101,11 +101,7 @@ open class Bankroll() : RealmObject(), NameManageable, StaticRowRepresentableDat
this.currency?.code = value as String? this.currency?.code = value as String?
} }
BankrollRow.RATE -> { BankrollRow.RATE -> {
value?.let { rate -> this.currency?.rate = value as Double?
this.currency?.rate = (rate as String).toDouble()
} ?: run {
this.currency?.rate = null
}
} }
} }
} }

@ -80,12 +80,15 @@ open class Result : RealmObject() {
private fun computeNet() { private fun computeNet() {
val transactionsSum = transactions.sumByDouble { it.amount } val transactionsSum = transactions.sumByDouble { it.amount }
this.netResult?.let {
this.net = it + transactionsSum val isLive = this.session?.bankroll?.live ?: true
} ?: run { if (isLive) {
val buyin = this.buyin ?: 0.0 val buyin = this.buyin ?: 0.0
val cashOut = this.cashout ?: 0.0 val cashOut = this.cashout ?: 0.0
this.net = cashOut - buyin + transactionsSum this.net = cashOut - buyin + transactionsSum
} else {
val netResult = this.netResult ?: 0.0
this.net = netResult + transactionsSum
} }
// Precompute results // Precompute results

@ -650,7 +650,8 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
SessionRow.BLINDS -> getFormattedBlinds() SessionRow.BLINDS -> getFormattedBlinds()
SessionRow.BREAK_TIME -> if (this.breakDuration > 0.0) this.breakDuration.toMinutes() else NULL_TEXT SessionRow.BREAK_TIME -> if (this.breakDuration > 0.0) this.breakDuration.toMinutes() else NULL_TEXT
SessionRow.BUY_IN -> this.result?.buyin?.toCurrency(currency) ?: NULL_TEXT SessionRow.BUY_IN -> this.result?.buyin?.toCurrency(currency) ?: NULL_TEXT
SessionRow.CASHED_OUT, SessionRow.PRIZE, SessionRow.NET_RESULT -> this.result?.cashout?.toCurrency(currency) ?: NULL_TEXT SessionRow.CASHED_OUT, SessionRow.PRIZE -> this.result?.cashout?.toCurrency(currency) ?: NULL_TEXT
SessionRow.NET_RESULT -> this.result?.netResult?.toCurrency(currency) ?: NULL_TEXT
SessionRow.COMMENT -> if (this.comment.isNotEmpty()) this.comment else NULL_TEXT SessionRow.COMMENT -> if (this.comment.isNotEmpty()) this.comment else NULL_TEXT
SessionRow.END_DATE -> this.endDate?.shortDateTime() ?: NULL_TEXT SessionRow.END_DATE -> this.endDate?.shortDateTime() ?: NULL_TEXT
SessionRow.GAME -> getFormattedGame() SessionRow.GAME -> getFormattedGame()
@ -687,7 +688,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
override fun actionIconForRow(row: RowRepresentable): Int? { override fun actionIconForRow(row: RowRepresentable): Int? {
return when (row) { return when (row) {
SessionRow.START_DATE, SessionRow.END_DATE -> { SessionRow.START_DATE, SessionRow.END_DATE -> {
net.pokeranalytics.android.R.drawable.ic_close R.drawable.ic_close
} }
else -> null else -> null
} }
@ -722,14 +723,14 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
SessionRow.BUY_IN -> row.editingDescriptors(mapOf( SessionRow.BUY_IN -> row.editingDescriptors(mapOf(
"bb" to cgBigBlind, "bb" to cgBigBlind,
"fee" to this.tournamentEntryFee, "fee" to this.tournamentEntryFee,
"ratedBuyin" to ratedBuyin "ratedBuyin" to result?.buyin
)) ))
SessionRow.BREAK_TIME -> row.editingDescriptors(mapOf()) SessionRow.BREAK_TIME -> row.editingDescriptors(mapOf())
SessionRow.CASHED_OUT, SessionRow.PRIZE -> row.editingDescriptors(mapOf( SessionRow.CASHED_OUT, SessionRow.PRIZE -> row.editingDescriptors(mapOf(
"defaultValue" to result?.cashout?.round() "defaultValue" to result?.cashout
)) ))
SessionRow.NET_RESULT -> row.editingDescriptors(mapOf( SessionRow.NET_RESULT -> row.editingDescriptors(mapOf(
"defaultValue" to result?.netResult?.round() "defaultValue" to result?.netResult
)) ))
SessionRow.COMMENT -> row.editingDescriptors(mapOf( SessionRow.COMMENT -> row.editingDescriptors(mapOf(
"defaultValue" to this.comment)) "defaultValue" to this.comment))
@ -789,24 +790,19 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
SessionRow.CASHED_OUT, SessionRow.PRIZE -> { SessionRow.CASHED_OUT, SessionRow.PRIZE -> {
val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java) val localResult = if (this.result != null) this.result as Result else realm.createObject(Result::class.java)
if (value == null) { localResult.cashout = value as Double?
localResult.cashout = null
} else {
localResult.cashout = (value as String).toDouble()
}
this.result = localResult this.result = localResult
} }
SessionRow.NET_RESULT -> { SessionRow.NET_RESULT -> {
this.result?.let { result -> this.result?.let { result ->
result.netResult = (value as String).toDouble() result.netResult = value as Double?
} }
} }
SessionRow.COMMENT -> comment = value as String? ?: "" SessionRow.COMMENT -> comment = value as String? ?: ""
SessionRow.END_DATE -> if (value is Date?) { SessionRow.END_DATE -> if (value is Date?) {
this.endDate = value this.endDate = value
} }
SessionRow.GAME -> { SessionRow.GAME -> {
if (value is ArrayList<*>) { if (value is ArrayList<*>) {
@ -825,15 +821,26 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} else if (value == null) { } else if (value == null) {
limit = null limit = null
game = null game = null
} }
} }
SessionRow.INITIAL_BUY_IN -> tournamentEntryFee = if (value == null) null else (value as String).toDouble() SessionRow.INITIAL_BUY_IN -> {
this.tournamentEntryFee = (value as Double?)
}
SessionRow.LOCATION -> location = value as Location? SessionRow.LOCATION -> location = value as Location?
SessionRow.PLAYERS -> tournamentNumberOfPlayers = if (value != null) (value as String).toInt() else null SessionRow.PLAYERS -> {
if (value is Double) {
this.tournamentNumberOfPlayers = value.toInt()
} else {
this.tournamentNumberOfPlayers = null
}
}
SessionRow.POSITION -> { SessionRow.POSITION -> {
val localResult = if (result != null) result as Result else realm.createObject(Result::class.java) val localResult = if (result != null) result as Result else realm.createObject(Result::class.java)
localResult.tournamentFinalPosition = if (value == null) null else (value as String).toInt() if (value is Double) {
localResult.tournamentFinalPosition = value.toInt()
} else {
localResult.tournamentFinalPosition = null
}
result = localResult result = localResult
} }
SessionRow.START_DATE -> if (value is Date) { SessionRow.START_DATE -> if (value is Date) {
@ -847,9 +854,14 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
} }
SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName? SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName?
SessionRow.TOURNAMENT_TYPE -> tournamentType = value as Int? SessionRow.TOURNAMENT_TYPE -> tournamentType = value as Int?
SessionRow.TOURNAMENT_FEATURE -> value?.let { SessionRow.TOURNAMENT_FEATURE -> {
value?.let {
tournamentFeatures = RealmList() tournamentFeatures = RealmList()
tournamentFeatures.addAll((it as ArrayList<TournamentFeature>)) tournamentFeatures.addAll((it as ArrayList<TournamentFeature>))
} ?: run {
tournamentFeatures.removeAll(this.tournamentFeatures)
}
} }
} }
} }

@ -3,9 +3,8 @@ package net.pokeranalytics.android.ui.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import com.github.mikephil.charting.data.Entry
import kotlinx.android.synthetic.main.activity_graph.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.calculus.Stat import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.fragment.GraphParameters import net.pokeranalytics.android.ui.fragment.GraphParameters
@ -26,8 +25,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
/** /**
* Default constructor * Default constructor
*/ */
fun newInstance(context: Context, stat: Stat, entries: List<Entry>) { fun newInstance(context: Context, stat: Stat, report: Report) {
parameters = GraphParameters(stat, entries) parameters = GraphParameters(stat, report)
val intent = Intent(context, StatisticDetailsActivity::class.java) val intent = Intent(context, StatisticDetailsActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }

@ -88,18 +88,15 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
return when (row) { return when (row) {
SimpleRow.NAME -> if (bankroll.name.isNotEmpty()) bankroll.name else NULL_TEXT SimpleRow.NAME -> if (bankroll.name.isNotEmpty()) bankroll.name else NULL_TEXT
BankrollRow.CURRENCY -> { BankrollRow.CURRENCY -> {
bankroll.currency?.let { bankroll.currency?.code?.let { code ->
Currency.getInstance(it.code).currencyCode Currency.getInstance(code).currencyCode
} ?: run { } ?: run {
NULL_TEXT NULL_TEXT
} }
} }
BankrollRow.RATE -> { BankrollRow.RATE -> {
this.bankroll.currency?.rate?.let { rate -> val rate = this.bankroll.currency?.rate ?: 1.0
rate.toRate() rate.toRate()
} ?: run {
1.0.toRate()
}
} }
else -> super.stringForRow(row) else -> super.stringForRow(row)
} }
@ -117,12 +114,8 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
return when (row) { return when (row) {
SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name)) SimpleRow.NAME -> row.editingDescriptors(mapOf("defaultValue" to this.bankroll.name))
BankrollRow.RATE -> { BankrollRow.RATE -> {
val rate = this.bankroll.currency?.rate
this.bankroll.currency?.rate?.let { rate -> row.editingDescriptors(mapOf("defaultValue" to rate))
row.editingDescriptors(mapOf("defaultValue" to rate.toRate()))
} ?: run {
row.editingDescriptors(mapOf())
}
} }
else -> null else -> null
} }
@ -211,7 +204,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) { override fun onResponse(call: Call<Map<String, CurrencyConverterValue>>, response: Response<Map<String, CurrencyConverterValue>>) {
response.body()?.let { response.body()?.let {
it[currenciesConverterValue]?.value?.let { rate -> it[currenciesConverterValue]?.value?.let { rate ->
onRowValueChanged(rate.toString(), BankrollRow.RATE) onRowValueChanged(rate, BankrollRow.RATE)
} }
} }

@ -15,22 +15,18 @@ import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup import com.google.android.material.chip.ChipGroup
import kotlinx.android.synthetic.main.fragment_evograph.* import kotlinx.android.synthetic.main.fragment_evograph.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.GraphType import net.pokeranalytics.android.calculus.*
import net.pokeranalytics.android.calculus.ObjectIdentifier
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment
import net.pokeranalytics.android.ui.graph.PALineDataSet import net.pokeranalytics.android.ui.graph.PALineDataSet
import net.pokeranalytics.android.ui.graph.setStyle import net.pokeranalytics.android.ui.graph.setStyle
import net.pokeranalytics.android.ui.view.LegendView import net.pokeranalytics.android.ui.view.LegendView
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.extensions.toast
import java.text.DateFormat import java.text.DateFormat
class GraphParameters(stat: Stat, entries: List<Entry>) { class GraphParameters(var stat: Stat, var report: Report) {
var stat: Stat = stat
var entries: List<Entry> = entries
} }
class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener { class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
@ -38,18 +34,27 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
private lateinit var parentActivity: PokerAnalyticsActivity private lateinit var parentActivity: PokerAnalyticsActivity
private var stat: Stat = Stat.NETRESULT private var stat: Stat = Stat.NETRESULT
private var reports: Map<AggregationType, Report> = hashMapOf()
private var entries: List<Entry> = ArrayList() private var entries: List<Entry> = ArrayList()
lateinit var legendView: LegendView lateinit var legendView: LegendView
lateinit var chartView: BarLineChartBase<*> lateinit var chartView: BarLineChartBase<*>
private var aggregationTypes: List<AggregationType> = listOf()
companion object { companion object {
} }
fun setData(stat: Stat, entries: List<Entry>) { fun setData(stat: Stat, report: Report) {
this.stat = stat this.stat = stat
this.entries = entries
this.aggregationTypes = stat.aggregationTypes
// this.report = report
report.results.firstOrNull()?.defaultStatEntries(stat)?.let {
this.entries = it
}
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -98,7 +103,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chartView.highlightValue((this.entries.size - 1).toFloat(), 0) this.chartView.highlightValue((this.entries.size - 1).toFloat(), 0)
this.stat.aggregationTypes.forEach { type -> this.aggregationTypes.forEach { type ->
val chip = Chip(requireContext()) val chip = Chip(requireContext())
chip.id = type.ordinal chip.id = type.ordinal
chip.text = requireContext().getString(type.resId) chip.text = requireContext().getString(type.resId)
@ -112,7 +117,8 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener {
this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() {
override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { override fun onCheckedChanged(group: ChipGroup, checkedId: Int) {
super.onCheckedChanged(group, checkedId) super.onCheckedChanged(group, checkedId)
toast("Show: ${stat.aggregationTypes[group.getChildAt(checkedId).id].name}") val aggregationType = aggregationTypes[checkedId]
// toast("Show: ${this.aggregationTypes[group.getChildAt(checkedId).id].name}")
} }
}) })

@ -58,7 +58,6 @@ class SettingsFragment : PokerAnalyticsFragment(), RowRepresentableDelegate, Sta
private lateinit var settingsAdapterRow: RowRepresentableAdapter private lateinit var settingsAdapterRow: RowRepresentableAdapter
private lateinit var parentActivity: PokerAnalyticsActivity private lateinit var parentActivity: PokerAnalyticsActivity
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_settings, container, false) return inflater.inflate(R.layout.fragment_settings, container, false)
} }

@ -61,7 +61,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
fragmentTransaction.commit() fragmentTransaction.commit()
StatisticDetailsActivity.parameters?.let { StatisticDetailsActivity.parameters?.let {
fragment.setData(it.stat, it.entries) fragment.setData(it.stat, it.report)
StatisticDetailsActivity.parameters = null StatisticDetailsActivity.parameters = null
} ?: run { } ?: run {
throw Exception("Missing graph parameters") throw Exception("Missing graph parameters")

@ -225,6 +225,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
val options = Calculator.Options() val options = Calculator.Options()
options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD
options.displayedStats = listOf(stat)
report = Calculator.computeGroups(realm, listOf(computableGroup), options) report = Calculator.computeGroups(realm, listOf(computableGroup), options)
realm.close() realm.close()
@ -236,9 +237,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
test.await() test.await()
if (!isDetached) { if (!isDetached) {
report.results.firstOrNull()?.defaultStatEntries(stat)?.let { entries -> StatisticDetailsActivity.newInstance(requireContext(), stat, report)
StatisticDetailsActivity.newInstance(requireContext(), stat, entries)
}
} }
} }

@ -0,0 +1,85 @@
package net.pokeranalytics.android.ui.fragment.components.bottomsheet
import android.os.Bundle
import android.text.InputType
import android.view.LayoutInflater
import android.view.View
import android.view.inputmethod.EditorInfo
import androidx.core.widget.addTextChangedListener
import kotlinx.android.synthetic.main.bottom_sheet_edit_text.*
import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.exceptions.RowRepresentableEditDescriptorException
import java.text.NumberFormat
class BottomSheetNumericTextFragment : BottomSheetFragment() {
private var value: Double? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initData()
initUI()
}
override fun onStart() {
super.onStart()
editText1.requestFocus()
}
override fun getValue(): Any? {
return this.value
}
/**
* Init data
*/
private fun initData() {
}
/**
* Init UI
*/
private fun initUI() {
val data = getData()?:throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor not found")
if (data.size != 1) {
throw RowRepresentableEditDescriptorException("RowRepresentableEditDescriptor inconsistency")
}
LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_edit_text, view?.bottomSheetContainer, true)
data[0].hint?.let { editText1.hint = getString(it) }
editText1.inputType = data[0].inputType ?: InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
editText1.addTextChangedListener {
this.value = try {
editText1.text.toString().toDouble()
} catch (e: Exception) {
null
}
}
data[0].defaultValue?.let {
if (it is Double || it is Long) {
val formatter = NumberFormat.getNumberInstance()
formatter.maximumFractionDigits = 6
formatter.isGroupingUsed = false
editText1.setText(formatter.format(it))
} else {
editText1.setText(it.toString())
}
}
editText1.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
delegate.onRowValueChanged(getValue(), row)
dismiss()
true
} else {
false
}
}
}
}

@ -11,6 +11,7 @@ enum class BottomSheetType {
EDIT_TEXT { override fun newInstance() = BottomSheetEditTextFragment()}, EDIT_TEXT { override fun newInstance() = BottomSheetEditTextFragment()},
EDIT_TEXT_MULTI_LINES { override fun newInstance() = BottomSheetEditTextMultiLinesFragment()}, EDIT_TEXT_MULTI_LINES { override fun newInstance() = BottomSheetEditTextMultiLinesFragment()},
DOUBLE_EDIT_TEXT { override fun newInstance() = BottomSheetDoubleEditTextFragment()}, DOUBLE_EDIT_TEXT { override fun newInstance() = BottomSheetDoubleEditTextFragment()},
NUMERIC_TEXT { override fun newInstance() = BottomSheetNumericTextFragment()},
SUM { override fun newInstance() = BottomSheetSumFragment()}; SUM { override fun newInstance() = BottomSheetSumFragment()};
abstract fun newInstance(): BottomSheetFragment abstract fun newInstance(): BottomSheetFragment
@ -26,7 +27,7 @@ enum class BottomSheetType {
val addRequired : Boolean val addRequired : Boolean
get() = when (this) { get() = when (this) {
EDIT_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false EDIT_TEXT, NUMERIC_TEXT, DOUBLE_EDIT_TEXT, EDIT_TEXT_MULTI_LINES, GRID, LIST_STATIC, SUM -> false
else -> true else -> true
} }
} }

@ -40,14 +40,14 @@ enum class BankrollRow : RowRepresentable, DefaultEditDataSource {
return when (this) { return when (this) {
LIVE -> BottomSheetType.NONE LIVE -> BottomSheetType.NONE
CURRENCY -> BottomSheetType.NONE CURRENCY -> BottomSheetType.NONE
RATE -> BottomSheetType.EDIT_TEXT RATE -> BottomSheetType.NUMERIC_TEXT
REFRESH_RATE -> BottomSheetType.NONE REFRESH_RATE -> BottomSheetType.NONE
} }
} }
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? { override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) { return when (this) {
BankrollRow.RATE -> { RATE -> {
val defaultValue : Any? by map val defaultValue : Any? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(defaultValue, R.string.rate, InputType.TYPE_CLASS_NUMBER RowRepresentableEditDescriptor(defaultValue, R.string.rate, InputType.TYPE_CLASS_NUMBER

@ -49,17 +49,39 @@ enum class SessionRow : RowRepresentable {
return when (session.getState()) { return when (session.getState()) {
SessionState.PENDING, SessionState.PLANNED -> { SessionState.PENDING, SessionState.PLANNED -> {
arrayListOf( arrayListOf(
GAME, INITIAL_BUY_IN, LOCATION, BANKROLL, TABLE_SIZE, TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, GAME,
START_DATE, END_DATE INITIAL_BUY_IN,
LOCATION,
BANKROLL,
TABLE_SIZE,
TOURNAMENT_TYPE,
TOURNAMENT_NAME,
TOURNAMENT_FEATURE,
START_DATE,
END_DATE
) )
} }
SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> { SessionState.STARTED, SessionState.PAUSED, SessionState.FINISHED -> {
arrayListOf( arrayListOf(
PRIZE, BUY_IN, POSITION, PLAYERS, TIPS, PRIZE,
BUY_IN,
POSITION,
PLAYERS,
TIPS,
SeparatorRowRepresentable(), SeparatorRowRepresentable(),
GAME, INITIAL_BUY_IN, LOCATION, BANKROLL, TABLE_SIZE, TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, GAME,
INITIAL_BUY_IN,
LOCATION,
BANKROLL,
TABLE_SIZE,
TOURNAMENT_TYPE,
TOURNAMENT_NAME,
TOURNAMENT_FEATURE,
SeparatorRowRepresentable(), SeparatorRowRepresentable(),
START_DATE, END_DATE, BREAK_TIME, COMMENT START_DATE,
END_DATE,
BREAK_TIME,
COMMENT
) )
} }
} }
@ -73,15 +95,33 @@ enum class SessionRow : RowRepresentable {
val liveBankroll = session.bankroll?.live ?: false val liveBankroll = session.bankroll?.live ?: false
return if (liveBankroll) { return if (liveBankroll) {
arrayListOf( arrayListOf(
CASHED_OUT, BUY_IN, TIPS, CASHED_OUT,
BUY_IN,
TIPS,
SeparatorRowRepresentable(), SeparatorRowRepresentable(),
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT GAME,
BLINDS,
LOCATION,
BANKROLL,
TABLE_SIZE,
START_DATE,
END_DATE,
BREAK_TIME,
COMMENT
) )
} else { } else {
arrayListOf( arrayListOf(
NET_RESULT, NET_RESULT,
SeparatorRowRepresentable(), SeparatorRowRepresentable(),
GAME, BLINDS, LOCATION, BANKROLL, TABLE_SIZE, START_DATE, END_DATE, BREAK_TIME, COMMENT GAME,
BLINDS,
LOCATION,
BANKROLL,
TABLE_SIZE,
START_DATE,
END_DATE,
BREAK_TIME,
COMMENT
) )
} }
} }
@ -131,7 +171,7 @@ enum class SessionRow : RowRepresentable {
override val bottomSheetType: BottomSheetType override val bottomSheetType: BottomSheetType
get() { get() {
return when (this) { return when (this) {
NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> BottomSheetType.EDIT_TEXT NET_RESULT, CASHED_OUT, INITIAL_BUY_IN, BREAK_TIME, POSITION, PLAYERS, PRIZE -> BottomSheetType.NUMERIC_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
@ -151,10 +191,15 @@ enum class SessionRow : RowRepresentable {
val sb: String? by map val sb: String? by map
val bb: String? by map val bb: String? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(sb, R.string.smallblind, InputType.TYPE_CLASS_NUMBER RowRepresentableEditDescriptor(
or InputType.TYPE_NUMBER_FLAG_DECIMAL), sb, R.string.smallblind, InputType.TYPE_CLASS_NUMBER
RowRepresentableEditDescriptor(bb, R.string.bigblind, InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_DECIMAL)) ),
RowRepresentableEditDescriptor(
bb, R.string.bigblind, InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL
)
)
} }
BUY_IN -> { BUY_IN -> {
val bb: Double? by map val bb: Double? by map
@ -162,11 +207,11 @@ enum class SessionRow : RowRepresentable {
val ratedBuyin: Double? by map val ratedBuyin: Double? by map
val data = arrayListOf<RowRepresentableEditDescriptor>() val data = arrayListOf<RowRepresentableEditDescriptor>()
if (bb != null) { if (bb != null) {
data.add(RowRepresentableEditDescriptor(100.0 * (bb?: 0.0))) data.add(RowRepresentableEditDescriptor(100.0 * (bb ?: 0.0)))
data.add(RowRepresentableEditDescriptor(200.0 * (bb?: 0.0))) data.add(RowRepresentableEditDescriptor(200.0 * (bb ?: 0.0)))
} else if (fee != null) { } else if (fee != null) {
data.add(RowRepresentableEditDescriptor((fee?: 0.0) * 1.0)) data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 1.0))
data.add(RowRepresentableEditDescriptor((fee?: 0.0) * 2.0)) data.add(RowRepresentableEditDescriptor((fee ?: 0.0) * 2.0))
} else { } else {
data.add(RowRepresentableEditDescriptor(0)) data.add(RowRepresentableEditDescriptor(0))
data.add(RowRepresentableEditDescriptor(0)) data.add(RowRepresentableEditDescriptor(0))
@ -186,17 +231,18 @@ enum class SessionRow : RowRepresentable {
data data
} }
CASHED_OUT, PRIZE, NET_RESULT -> { CASHED_OUT, PRIZE, NET_RESULT -> {
val defaultValue: String? by map val defaultValue: Double? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor( RowRepresentableEditDescriptor(
defaultValue, defaultValue,
inputType = InputType.TYPE_CLASS_NUMBER inputType = InputType.TYPE_CLASS_NUMBER
or InputType.TYPE_NUMBER_FLAG_DECIMAL or InputType.TYPE_NUMBER_FLAG_DECIMAL
or InputType.TYPE_NUMBER_FLAG_SIGNED or InputType.TYPE_NUMBER_FLAG_SIGNED
)) )
)
} }
COMMENT -> { COMMENT -> {
val defaultValue : String? by map val defaultValue: String? by map
arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.comment)) arrayListOf(RowRepresentableEditDescriptor(defaultValue, R.string.comment))
} }
BREAK_TIME -> { BREAK_TIME -> {
@ -207,22 +253,23 @@ enum class SessionRow : RowRepresentable {
) )
} }
GAME -> { GAME -> {
val limit : Int? by map val limit: Int? by map
val defaultValue : Any? by map val defaultValue: Any? by map
val data : RealmResults<*>? by map val data: RealmResults<*>? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(limit), RowRepresentableEditDescriptor(limit),
RowRepresentableEditDescriptor(defaultValue, data = data)) RowRepresentableEditDescriptor(defaultValue, data = data)
)
} }
INITIAL_BUY_IN -> { INITIAL_BUY_IN -> {
val defaultValue : Double? by map val defaultValue: Double? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(defaultValue?.round(), inputType = InputType.TYPE_CLASS_NUMBER) RowRepresentableEditDescriptor(defaultValue?.round(), inputType = InputType.TYPE_CLASS_NUMBER)
) )
} }
BANKROLL, LOCATION, TOURNAMENT_FEATURE, TOURNAMENT_NAME -> { BANKROLL, LOCATION, TOURNAMENT_FEATURE, TOURNAMENT_NAME -> {
val defaultValue : Any? by map val defaultValue: Any? by map
val data : RealmResults<*>? by map val data: RealmResults<*>? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(defaultValue, data = data) RowRepresentableEditDescriptor(defaultValue, data = data)
) )
@ -237,7 +284,7 @@ enum class SessionRow : RowRepresentable {
) )
} }
POSITION -> { POSITION -> {
val defaultValue : Int? by map val defaultValue: Int? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor( RowRepresentableEditDescriptor(
defaultValue, defaultValue,
@ -246,7 +293,7 @@ enum class SessionRow : RowRepresentable {
) )
} }
TABLE_SIZE -> { TABLE_SIZE -> {
val defaultValue : Int? by map val defaultValue: Int? by map
arrayListOf(RowRepresentableEditDescriptor(defaultValue)) arrayListOf(RowRepresentableEditDescriptor(defaultValue))
} }
TIPS -> { TIPS -> {
@ -256,19 +303,20 @@ enum class SessionRow : RowRepresentable {
// Disable the buttons with value = 0, add current value & set the 2 edit texts // Disable the buttons with value = 0, add current value & set the 2 edit texts
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(sb?: 0.0), RowRepresentableEditDescriptor(sb ?: 0.0),
RowRepresentableEditDescriptor(bb?: 0.0), RowRepresentableEditDescriptor(bb ?: 0.0),
RowRepresentableEditDescriptor(tips?: 0.0), RowRepresentableEditDescriptor(tips ?: 0.0),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER), RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER),
RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER) RowRepresentableEditDescriptor("", inputType = InputType.TYPE_CLASS_NUMBER)
) )
} }
TOURNAMENT_TYPE -> { TOURNAMENT_TYPE -> {
val defaultValue : Any? by map val defaultValue: Any? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(defaultValue, staticData = TournamentType.values().map { RowRepresentableEditDescriptor(defaultValue, staticData = TournamentType.values().map {
it it
})) })
)
} }
else -> null else -> null
} }

Loading…
Cancel
Save