wip stake & currency management refactoring

feature/top10
Razmig Sarkissian 7 years ago
parent b0babe5766
commit 3eba82c813
  1. 46
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/BankrollInstrumentedUnitTest.kt
  2. 1
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt
  3. 40
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt
  4. 20
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt
  5. 10
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  6. 15
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  7. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  8. 21
      app/src/main/java/net/pokeranalytics/android/model/utils/Seed.kt
  9. 13
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt
  10. 14
      app/src/main/java/net/pokeranalytics/android/util/Preferences.kt

@ -28,53 +28,7 @@ class BankrollInstrumentedUnitTest : RealmInstrumentedUnitTest() {
@Test @Test
fun testSessionStats() { fun testSessionStats() {
val realm = this.mockRealm
realm.beginTransaction()
val s1 = newSessionInstance(realm)
val s2 = newSessionInstance(realm)
val br1 = realm.createObject(Bankroll::class.java, "1")
val br2 = realm.createObject(Bankroll::class.java, "2")
val c1 = realm.createObject(Currency::class.java, "1")
val c2 = realm.createObject(Currency::class.java, "2")
c1.rate = 0.1
c2.rate = 2.0
br1.currency = c1
br2.currency = c2
s1.bankroll = br1
s2.bankroll = br2
s1.result?.netResult = 100.0
s2.result?.netResult = 200.0
realm.commitTransaction()
val computableResults = realm.where(ComputableResult::class.java).findAll()
val sets = realm.where(SessionSet::class.java).findAll()
val stats: List<Stat> = listOf(Stat.NETRESULT, Stat.AVERAGE)
val group = ComputableGroup("test", computableResults, sets, stats)
val options = Calculator.Options()
val results: ComputedResults = Calculator.compute(group, options)
val delta = 0.01
val sum = results.computedStat(Stat.NETRESULT)
if (sum != null) {
Assert.assertEquals(410.0, sum.value, delta)
} else {
Assert.fail("No Net result stat")
}
val average = results.computedStat(Stat.AVERAGE)
if (average != null) {
Assert.assertEquals(205.0, average.value, delta)
} else {
Assert.fail("No AVERAGE stat")
}
} }

@ -117,6 +117,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() {
b2.currency = currency b2.currency = currency
val s1 = Session.testInstance(100.0, false, Date(), 1, b1) val s1 = Session.testInstance(100.0, false, Date(), 1, b1)
s1.cgBigBlind = 1.0 s1.cgBigBlind = 1.0
s1.cgSmallBlind = 0.5 s1.cgSmallBlind = 0.5

@ -35,14 +35,14 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filterElementRow = FilterElementRow.Day(cal.get(Calendar.DAY_OF_WEEK)) val filterElementRow = FilterElementRow.Day(cal.get(Calendar.DAY_OF_WEEK))
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(filterElementRow) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -64,14 +64,14 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filterElementRow = FilterElementRow.Month(cal.get(Calendar.MONTH)) val filterElementRow = FilterElementRow.Month(cal.get(Calendar.MONTH))
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(filterElementRow) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -92,14 +92,14 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
cal.time = s1.startDate cal.time = s1.startDate
val filterElementRow = FilterElementRow.Year(cal.get(Calendar.YEAR)) val filterElementRow = FilterElementRow.Year(cal.get(Calendar.YEAR))
filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE
val filterElement = FilterCondition(filterElementRow) val filterElement = FilterCondition(arrayListOf(filterElementRow))
filter.updateValueMap(filterElement) filter.updateValueMap(filterElement)
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -122,7 +122,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -147,7 +147,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -384,15 +384,15 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.STARTED_FROM_DATE val filter = QueryCondition.STARTED_FROM_DATE
val filterElementRow = FilterElementRow.From(s2.startDate!!) val filterElementRow = FilterElementRow.From.apply { dateValue = s2.startDate!!}
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s2.id, (this as Session).id) Assert.assertEquals(s2.id, (this).id)
} }
} }
@ -412,15 +412,15 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.STARTED_TO_DATE val filter = QueryCondition.STARTED_TO_DATE
val filterElementRow = FilterElementRow.From(s1.startDate!!) val filterElementRow = FilterElementRow.From.apply { dateValue = s1.startDate!! }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
@ -441,15 +441,15 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.ENDED_FROM_DATE val filter = QueryCondition.ENDED_FROM_DATE
val filterElementRow = FilterElementRow.From(s2.endDate()) val filterElementRow = FilterElementRow.From.apply { dateValue = s2.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s2.id, (this as Session).id) Assert.assertEquals(s2.id, (this).id)
} }
} }
@ -470,15 +470,15 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filter = QueryCondition.ENDED_TO_DATE val filter = QueryCondition.ENDED_TO_DATE
val filterElementRow = FilterElementRow.From(s1.endDate()) val filterElementRow = FilterElementRow.From.apply { dateValue = s1.endDate() }
filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(s1.id, (this as Session).id) Assert.assertEquals(s1.id, (this).id)
} }
} }
} }

@ -30,7 +30,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(Session.Type.CASH_GAME.ordinal, (this as Session).type) Assert.assertEquals(Session.Type.CASH_GAME.ordinal, (this).type)
} }
} }
@ -48,7 +48,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Assert.assertEquals(1, sessions.size) Assert.assertEquals(1, sessions.size)
sessions[0]?.run { sessions[0]?.run {
Assert.assertEquals(Session.Type.TOURNAMENT.ordinal, (this as Session).type) Assert.assertEquals(Session.Type.TOURNAMENT.ordinal, (this).type)
} }
} }
@ -480,9 +480,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.MORE_THAN_NET_RESULT val filter = QueryCondition.MORE_THAN_NET_RESULT
val filterElementRow = FilterElementRow.ResultMoreThan(204.0) val filterElementRow = FilterElementRow.ResultMoreThan.apply { this.amount = 204.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
@ -505,9 +505,9 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.LESS_THAN_NET_RESULT val filter = QueryCondition.LESS_THAN_NET_RESULT
val filterElementRow = FilterElementRow.ResultLessThan(540.0) val filterElementRow = FilterElementRow.ResultMoreThan.apply { this.amount = 540.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(filterElementRow)) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filter))
@ -530,14 +530,14 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction() realm.commitTransaction()
val filterMore = QueryCondition.MORE_THAN_NET_RESULT val filterMore = QueryCondition.MORE_THAN_NET_RESULT
val filterElementRow = FilterElementRow.ResultMoreThan(200.0) val filterElementRow = FilterElementRow.ResultMoreThan.apply { this.amount = 200.0 }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filterMore.updateValueMap(FilterCondition(filterElementRow)) filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val filterLess = QueryCondition.LESS_THAN_NET_RESULT val filterLess = QueryCondition.LESS_THAN_NET_RESULT
val filterElementRow2 = FilterElementRow.ResultLessThan(400.0) val filterElementRow2 = FilterElementRow.ResultMoreThan.apply { this.amount = 400.0 }
filterElementRow2.filterSectionRow = FilterSectionRow.VALUE filterElementRow2.filterSectionRow = FilterSectionRow.VALUE
filterLess.updateValueMap(FilterCondition(filterElementRow2)) filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2)))
val sessions = Filter.queryOn<Session>(realm, arrayListOf(filterMore, filterLess)) val sessions = Filter.queryOn<Session>(realm, arrayListOf(filterMore, filterLess))

@ -169,18 +169,14 @@ enum class QueryCondition(var operator: Operator? = null) {
if (isUsingDefaultCurrency) { if (isUsingDefaultCurrency) {
realmQuery.endsWith(fieldName, s) realmQuery.endsWith(fieldName, s)
.and() .and()
.beginGroup()
.isNull("bankroll")
.or()
.isNull("bankroll.currency")
.or()
.isNull("bankroll.currency.code") .isNull("bankroll.currency.code")
.endGroup()
} else { } else {
realmQuery.equalTo(fieldName, s) realmQuery.equalTo(fieldName, s)
} }
.endGroup() .endGroup()
.or() if (index < stakes.size - 1) {
realmQuery.or()
}
} }
realmQuery realmQuery
} }

@ -10,17 +10,6 @@ import java.util.*
open class Currency : RealmObject() { 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 @Ignore
val DEFAULTRATE: Double = 1.0 val DEFAULTRATE: Double = 1.0
@ -36,7 +25,9 @@ open class Currency : RealmObject() {
var code: String? = null var code: String? = null
set(value) { set(value) {
field = value field = value
bankrolls?.first()?.currencyCodeHasBeenUpdated() bankrolls?.forEach {
it.currencyCodeHasBeenUpdated()
}
} }
/** /**

@ -496,13 +496,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
* Return the formatted blinds * Return the formatted blinds
*/ */
fun getCurrencyFormattedStake(context:Context) : String { fun getCurrencyFormattedStake(context:Context) : String {
val currency : Currency = Preferences.getCurrencyLocale(context)?.let { val currencySymbol = currencySymbol ?: Preferences.getDefaultCurrency(context).symbol
Currency.getInstance(it)
} ?: run {
net.pokeranalytics.android.model.realm.Currency.localeCurrency
}
val currencySymbol = currencySymbol ?: currency.symbol
return "$currencySymbol $stake" return "$currencySymbol $stake"
} }

@ -5,14 +5,10 @@ import io.realm.Realm
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.model.realm.Currency import net.pokeranalytics.android.model.realm.Currency
<<<<<<< HEAD
=======
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.TournamentFeature import net.pokeranalytics.android.model.realm.TournamentFeature
import net.pokeranalytics.android.util.CurrencyUtils
>>>>>>> 7fce9661594eb0faba91337d78c6cc1e880e49a1
import java.util.* import java.util.*
import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.util.CurrencyUtils
class Seed(var context:Context) : Realm.Transaction { class Seed(var context:Context) : Realm.Transaction {
@ -32,23 +28,10 @@ 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) { private fun createDefaultCurrencyAndBankroll(realm: Realm) {
// Currency // Currency
<<<<<<< HEAD
val localeCurrency = localeCurrency
=======
val localeCurrency = CurrencyUtils.getLocaleCurrency() val localeCurrency = CurrencyUtils.getLocaleCurrency()
>>>>>>> 7fce9661594eb0faba91337d78c6cc1e880e49a1
val defaultCurrency = Currency() val defaultCurrency = Currency()
defaultCurrency.code = localeCurrency.currencyCode defaultCurrency.code = localeCurrency.currencyCode
realm.insertOrUpdate(defaultCurrency) realm.insertOrUpdate(defaultCurrency)

@ -12,12 +12,9 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.util.CurrencyUtils 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.formatted
import net.pokeranalytics.android.util.extensions.round
import java.text.DateFormatSymbols import java.text.DateFormatSymbols
import java.util.* import java.util.*
import java.util.prefs.Preferences
sealed class FilterElementRow : RowRepresentable { sealed class FilterElementRow : RowRepresentable {
@ -312,13 +309,7 @@ sealed class FilterElementRow : RowRepresentable {
currencySymbol?.let { currencySymbol?.let {
"$it $stake" "$it $stake"
} }
val currencySymbol = currencySymbol ?: Preferences.getDefaultCurrency(context).symbol
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" "$currencySymbol $stake"
} }
is StaticDataFilterElementRow -> this.getDataLocalizedTitle(context) is StaticDataFilterElementRow -> this.getDataLocalizedTitle(context)

@ -16,7 +16,7 @@ class Preferences {
companion object { companion object {
var currencyLocale : Locale? = null private var currencyLocale : Locale? = null
fun setString(key: Keys, value: String, context: Context) { fun setString(key: Keys, value: String, context: Context) {
val preferences = PreferenceManager.getDefaultSharedPreferences(context) val preferences = PreferenceManager.getDefaultSharedPreferences(context)
@ -52,7 +52,6 @@ class Preferences {
} }
fun getCurrencyLocale(context : Context) : Locale? { fun getCurrencyLocale(context : Context) : Locale? {
currencyLocale?. let { currencyLocale?. let {
return it return it
} }
@ -69,8 +68,15 @@ class Preferences {
return it return it
} }
} }
currencyLocale = Locale.getDefault() return null
return currencyLocale!! }
fun getDefaultCurrency(context: Context) : Currency {
return Preferences.getCurrencyLocale(context)?.let {
Currency.getInstance(it)
} ?: run {
CurrencyUtils.getLocaleCurrency()
}
} }
fun setStopShowingDisclaimer(context: Context) { fun setStopShowingDisclaimer(context: Context) {

Loading…
Cancel
Save