wip blind update

feature/top10
Razmig Sarkissian 7 years ago
parent ac75f5947a
commit 5ea92f4ced
  1. 16
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt
  2. 29
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  3. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  4. 19
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  5. 56
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  6. 16
      app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt
  7. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/SessionRowView.kt
  8. 17
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt
  9. 6
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt
  10. 2
      app/src/main/java/net/pokeranalytics/android/util/Preferences.kt

@ -21,7 +21,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.beginTransaction()
val currency = realm.createObject(net.pokeranalytics.android.model.realm.Currency::class.java, "1")
currency.code = "AUD"
currency.code = "USD"
val b1 = realm.createObject(Bankroll::class.java, "1")
val b2 = realm.createObject(Bankroll::class.java, "2")
@ -43,7 +43,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.STAKE
val blind = FilterElementRow.Stake(s1.getBlinds())
val blind = FilterElementRow.Stake(s1.stake!!)
blind.filterSectionRow = FilterSectionRow.STAKE
val filterElement = FilterCondition(filterElementRows = arrayListOf(blind))
filter.updateValueMap(filterElement)
@ -87,8 +87,8 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.STAKE
val blind1 = FilterElementRow.Stake(s1.getBlinds())
val blind2 = FilterElementRow.Stake(s2.getBlinds())
val blind1 = FilterElementRow.Stake(s1.stake!!)
val blind2 = FilterElementRow.Stake(s2.stake!!)
blind1.filterSectionRow = FilterSectionRow.STAKE
blind2.filterSectionRow = FilterSectionRow.STAKE
@ -110,7 +110,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
realm.beginTransaction()
val currency = realm.createObject(net.pokeranalytics.android.model.realm.Currency::class.java, "1")
currency.code = "AUD"
currency.code = "USD"
val b1 = realm.createObject(Bankroll::class.java, "1")
val b2 = realm.createObject(Bankroll::class.java, "2")
@ -132,7 +132,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.STAKE
val blind = FilterElementRow.Stake(s3.getBlinds())
val blind = FilterElementRow.Stake(s3.stake!!, "$")
blind.filterSectionRow = FilterSectionRow.STAKE
val filterElement = FilterCondition(filterElementRows = arrayListOf(blind))
@ -175,10 +175,10 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.STAKE
val blind1 = FilterElementRow.Stake(s1.getBlinds())
val blind1 = FilterElementRow.Stake(s1.stake!!)
blind1.filterSectionRow = FilterSectionRow.STAKE
val blind2 = FilterElementRow.Stake(s2.getBlinds())
val blind2 = FilterElementRow.Stake(s2.stake!!)
blind2.filterSectionRow = FilterSectionRow.STAKE
val filterElement = FilterCondition(filterElementRows = arrayListOf(blind1, blind2))
filter.updateValueMap(filterElement)

@ -109,7 +109,7 @@ enum class QueryCondition(var operator: Operator? = null) {
return when (this) {
BANKROLL, GAME, LOCATION, ANY_TOURNAMENT_FEATURES, ALL_TOURNAMENT_FEATURES, TOURNAMENT_NAME -> arrayOf("ids")
LIMIT, TOURNAMENT_TYPE, TABLE_SIZE -> arrayOf("values")
STAKE -> arrayOf("stakes")
STAKE -> arrayOf("stakes", "hasDefaultCurrency")
STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> arrayOf("date")
DAY_OF_WEEK -> arrayOf("dayOfWeek")
MONTH -> arrayOf("month")
@ -158,7 +158,28 @@ enum class QueryCondition(var operator: Operator? = null) {
}
STAKE -> {
val stakes: Array<String> by valueMap
realmQuery.`in`(fieldName, stakes)
val hasDefaultCurrency: Array<Boolean> by valueMap
//realmQuery.`in`(fieldName, stakes)
stakes.forEachIndexed { index, s ->
val isUsingDefaultCurrency = hasDefaultCurrency[index]
realmQuery.beginGroup()
if (isUsingDefaultCurrency) {
realmQuery.endsWith(fieldName, s)
.and()
.beginGroup()
.isNull("bankroll")
.or()
.isNull("bankroll.currency")
.or()
.isNull("bankroll.currency.code")
.endGroup()
} else {
realmQuery.equalTo(fieldName, s)
}
.endGroup()
.or()
}
realmQuery
}
BANKROLL, GAME, LOCATION, TOURNAMENT_NAME -> {
val ids: Array<String> by valueMap
@ -265,7 +286,9 @@ enum class QueryCondition(var operator: Operator? = null) {
valueMap = mapOf("values" to filterCondition.values)
}
STAKE -> {
valueMap = mapOf("stakes" to filterCondition.stakes)
valueMap = mapOf(
"stakes" to filterCondition.stakes,
"hasDefaultCurrency" to filterCondition.hasDefaultCurrency)
}
STARTED_FROM_DATE, STARTED_TO_DATE, ENDED_FROM_DATE, ENDED_TO_DATE -> {
valueMap = mapOf("date" to filterCondition.date)

@ -5,10 +5,22 @@ import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.util.Preferences
import java.util.*
open class Currency : RealmObject() {
companion object {
val localeCurrency: java.util.Currency
get() {
return try {
java.util.Currency.getInstance(Locale.getDefault())
} catch (e: Exception) {
java.util.Currency.getInstance(Locale("en", "US"))
}
}
}
@Ignore
val DEFAULTRATE: Double = 1.0

@ -23,6 +23,19 @@ open class FilterCondition() : RealmObject() {
is DateFilterElementRow -> {
this.dateValue = row.dateValue
}
is Stake -> {
//TODO refactor raz
this.stringValues = RealmList<String>().apply {
this.addAll(filterElementRows.map {
(it as Stake).stake
})
}
this.booleanValues = RealmList<Boolean>().apply {
this.addAll(filterElementRows.map {
((it as Stake).currencySymbol == null)
})
}
}
is StringFilterElementRow -> {
this.stringValues = RealmList<String>().apply {
this.addAll(filterElementRows.map {
@ -52,6 +65,7 @@ open class FilterCondition() : RealmObject() {
private var numericValues: RealmList<Double>? = null
private var dateValue: Date? = null
private var stringValues: RealmList<String>? = null
private var booleanValues: RealmList<Boolean>? = null
val ids: Array<String>
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
@ -59,7 +73,10 @@ open class FilterCondition() : RealmObject() {
val stakes: Array<String>
get() = stringValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val date: Date
val hasDefaultCurrency: Array<Boolean>
get() = booleanValues?.toTypedArray() ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing
val date: Date
get() = dateValue ?: throw PokerAnalyticsException.FilterElementExpectedValueMissing

@ -37,6 +37,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SeparatorRowRepresent
import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow
import net.pokeranalytics.android.util.CurrencyUtils
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.Preferences
import net.pokeranalytics.android.util.extensions.*
import java.util.*
import java.util.Currency
@ -219,7 +220,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
var cgSmallBlind: Double? = null
set(value) {
field = value
this.stake = getBlinds()
computeStakeAsString()
}
// The big blind value
@ -227,16 +228,11 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
set(value) {
field = value
this.computeStats()
this.stake = getBlinds()
computeStakeAsString()
}
private var stake: String? = null
get() {
if (field == null) {
field = getBlinds()
}
return field
}
var stake: String? = null
private set
// Tournament
@ -256,7 +252,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
var tournamentFeatures: RealmList<TournamentFeature> = RealmList()
fun bankrollHasBeenUpdated() {
this.stake = getBlinds()
computeStakeAsString()
}
/**
@ -496,14 +492,19 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
return NULL_TEXT
}
/**
* Return the formatted blinds
*/
fun getBlinds(): String {
val currencyCode = bankroll?.currency?.code ?: Currency.getInstance(Locale.getDefault()).currencyCode
val currencySymbol = Currency.getInstance(currencyCode).symbol
return if (cgSmallBlind == null) NULL_TEXT else "$currencySymbol ${cgSmallBlind?.formatted()}/${cgBigBlind?.round()}"
}
/**
* Return the formatted blinds
*/
fun getCurrencyFormattedStake(context:Context) : String {
val currency : Currency = Preferences.getCurrencyLocale(context)?.let {
Currency.getInstance(it)
} ?: run {
net.pokeranalytics.android.model.realm.Currency.localeCurrency
}
val currencySymbol = currencySymbol ?: currency.symbol
return "$currencySymbol $stake"
}
/**
* Return the game title
@ -522,6 +523,23 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
return if (gameTitle.isNotBlank()) gameTitle else NULL_TEXT
}
val currencySymbol : String?
get() {
bankroll?.currency?.code?.let {
return Currency.getInstance(it).symbol
}
return null
}
private fun computeStakeAsString() {
stake = null
if (cgBigBlind == null) return
cgBigBlind?.let { bb ->
val sb = cgSmallBlind ?: bb / 2.0
stake = "${sb.formatted()}/${bb.round()}"
}
}
// LifeCycle
/**
@ -638,7 +656,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
override fun stringForRow(row: RowRepresentable, context: Context): String {
return when (row) {
SessionRow.BANKROLL -> bankroll?.name ?: NULL_TEXT
SessionRow.BLINDS -> getBlinds()
SessionRow.BLINDS -> getCurrencyFormattedStake(context)
SessionRow.BREAK_TIME -> if (this.breakDuration > 0.0) this.breakDuration.toMinutes() else NULL_TEXT
SessionRow.BUY_IN -> this.result?.buyin?.toCurrency(CurrencyUtils.getCurrency(bankroll)) ?: NULL_TEXT
SessionRow.CASHED_OUT, SessionRow.PRIZE, SessionRow.NET_RESULT -> this.result?.cashout?.toCurrency(CurrencyUtils.getCurrency(bankroll)) ?: NULL_TEXT

@ -6,9 +6,10 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.*
import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.util.Preferences
import java.util.*
class Seed(var context:Context) : Realm.Transaction {
override fun execute(realm: Realm) {
@ -26,16 +27,25 @@ class Seed(var context:Context) : Realm.Transaction {
}
}
val localeCurrency: java.util.Currency
get() {
return try {
java.util.Currency.getInstance(Locale.getDefault())
} catch (e: Exception) {
java.util.Currency.getInstance(Locale("en", "US"))
}
}
private fun createDefaultCurrencyAndBankroll(realm: Realm) {
// Currency
val localeCurrency = java.util.Currency.getInstance(Locale.getDefault())
val localeCurrency = localeCurrency
val defaultCurrency = Currency()
defaultCurrency.code = localeCurrency.currencyCode
realm.insertOrUpdate(defaultCurrency)
// Bankroll
val bankroll = Bankroll()
bankroll.name = context.resources.getString(R.string.live)
bankroll.name = context.resources.getString(net.pokeranalytics.android.R.string.live)
bankroll.live = true
bankroll.currency = realm.where<Currency>().equalTo("code", localeCurrency.currencyCode).findFirst()
realm.insertOrUpdate(bankroll)

@ -85,7 +85,7 @@ class SessionRowView : FrameLayout {
}
} else {
if (session.cgSmallBlind != null && session.cgBigBlind != null) {
parameters.add(session.getBlinds())
parameters.add(session.getCurrencyFormattedStake(this.context))
}
session.game?.let {
parameters.add(session.getFormattedGame())

@ -13,6 +13,7 @@ import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType
import java.text.DateFormatSymbols
import java.util.*
import java.util.prefs.Preferences
sealed class FilterElementRow : RowRepresentable {
@ -97,7 +98,7 @@ sealed class FilterElementRow : RowRepresentable {
data class Month(val month: Int) : SingleValueFilterElementRow(month)
data class Day(val day: Int) : SingleValueFilterElementRow(day)
data class Stake(val stake : String) : StringFilterElementRow(stake)
data class Stake(val stake : String, val currencySymbol:String? = null) : StringFilterElementRow(stake)
//TODO: Refactor?
data class PastDays(var lastDays: Int = 0) : SingleValueFilterElementRow(lastDays) {
@ -292,13 +293,25 @@ sealed class FilterElementRow : RowRepresentable {
}
is DataFilterElementRow -> this.name
is StaticDataFilterElementRow -> this.name
is Stake -> this.stake
else -> super.getDisplayName()
}
}
override fun localizedTitle(context: Context): String {
return when (this) {
is Stake -> {
currencySymbol?.let {
"$it $stake"
}
val currency : Currency = net.pokeranalytics.android.util.Preferences.getCurrencyLocale(context)?.let {
Currency.getInstance(it)
} ?: run {
net.pokeranalytics.android.model.realm.Currency.localeCurrency
}
val currencySymbol = currencySymbol ?: currency.symbol
"$currencySymbol $stake"
}
is StaticDataFilterElementRow -> this.getDataLocalizedTitle(context)
else -> super.localizedTitle(context)
}

@ -150,8 +150,10 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
STAKE -> {
val stakes = arrayListOf<FilterElementRow.Stake>()
val realm = Realm.getDefaultInstance()
realm.where<Session>().distinct("stake").findAll().sort("cgSmallBlind", Sort.ASCENDING).map {
stakes.add(Stake(it.getBlinds()))
realm.where<Session>().distinct("stake", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map {
it.stake?.let { stake ->
stakes.add(Stake(stake, it.currencySymbol))
}
}
realm.close()
stakes

@ -51,7 +51,7 @@ class Preferences {
return Preferences.getString(Keys.CURRENCY_CODE, context)
}
fun getCurrencyLocale(context : Context) : Locale {
fun getCurrencyLocale(context : Context) : Locale? {
currencyLocale?. let {
return it

Loading…
Cancel
Save