diff --git a/app/build.gradle b/app/build.gradle index 438ad48d..758e8fb3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,7 @@ android { applicationId "net.pokeranalytics.android" minSdkVersion 23 targetSdkVersion 28 - versionCode 21 + versionCode 19 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt index 94ff6f5f..93cbaac2 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/BlindFilterInstrumentedTest.kt @@ -49,7 +49,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { blind.filterSectionRow = FilterSectionRow.BLIND val filterElement = FilterCondition(filterElementRows = arrayListOf(blind)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -100,7 +100,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { blind2.filterSectionRow = FilterSectionRow.BLIND val filterElements = FilterCondition(filterElementRows = arrayListOf(blind1, blind2)) - filter.updateValueMap(filterElements) + filter.updateValueBy(filterElements) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -148,7 +148,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { blind.filterSectionRow = FilterSectionRow.BLIND val filterElement = FilterCondition(filterElementRows = arrayListOf(blind)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) println("<<<< ${filter.listOfValues}") val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -200,7 +200,7 @@ class BlindFilterInstrumentedTest : BaseFilterInstrumentedUnitTest() { blind2.filterSectionRow = FilterSectionRow.BLIND val filterElement = FilterCondition(filterElementRows = arrayListOf(blind1, blind2)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) val sessions = Filter.queryOn(realm, arrayListOf(filter)) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt index 6f273150..79ab6ab6 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/DateFilterInstrumentedUnitTest.kt @@ -35,7 +35,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterElementRow = QueryCondition.AnyDayOfWeek().apply { listOfValues = arrayListOf(cal.get(Calendar.DAY_OF_WEEK)) } filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE val filterElement = FilterCondition(arrayListOf(filterElementRow)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -64,7 +64,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE val filterElement = FilterCondition(arrayListOf(filterElementRow)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -92,7 +92,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterElementRow = QueryCondition.AnyYear().apply { listOfValues = arrayListOf(cal.get(Calendar.YEAR)) } filterElementRow.filterSectionRow = FilterSectionRow.DYNAMIC_DATE val filterElement = FilterCondition(arrayListOf(filterElementRow)) - filter.updateValueMap(filterElement) + filter.updateValueBy(filterElement) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -385,7 +385,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.StartedFromDate() val filterElementRow = QueryCondition.StartedFromDate().apply { singleValue = s2.startDate!!} filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -413,7 +413,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.StartedToDate() val filterElementRow = QueryCondition.StartedToDate().apply { singleValue = s1.startDate!! } filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -442,7 +442,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.EndedFromDate() val filterElementRow = QueryCondition.EndedFromDate().apply { singleValue = s2.endDate() } filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -471,7 +471,7 @@ class DateFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.EndedToDate() val filterElementRow = QueryCondition.EndedToDate().apply { singleValue = s1.endDate() } filterElementRow.filterSectionRow = FilterSectionRow.FIXED_DATE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) diff --git a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt index 8a477114..96a74496 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt @@ -110,7 +110,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.AnyBankroll() val filterElementRow = QueryCondition.AnyBankroll().apply { setObject(b1) } filterElementRow.filterSectionRow = FilterSectionRow.BANKROLL - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -144,7 +144,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterElementRow2 = QueryCondition.AnyBankroll().apply { setObject(b2) } filterElementRow2.filterSectionRow = FilterSectionRow.BANKROLL - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -225,7 +225,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.AnyLocation() val filterElementRow = QueryCondition.AnyLocation().apply { setObject(l1) } filterElementRow.filterSectionRow = FilterSectionRow.LOCATION - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -260,7 +260,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterElementRow2 = QueryCondition.AnyLocation().apply { setObject(l3) } filterElementRow2.filterSectionRow = FilterSectionRow.LOCATION - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -287,7 +287,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterElementRow = QueryCondition.AnyTournamentName().apply { setObject(t1) } filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -320,7 +320,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME val filterElementRow2 = QueryCondition.AnyTournamentName().apply { setObject(t2) } filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_NAME - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -358,7 +358,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { filterElementRow2.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE val filterElementRow3 = QueryCondition.AllTournamentFeature().apply { setObject(t4) } filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -395,7 +395,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { filterElementRow3.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE val filterElementRow4 = QueryCondition.AnyTournamentFeature().apply { setObject(t4) } filterElementRow4.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3, filterElementRow4))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2, filterElementRow3, filterElementRow4))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -423,7 +423,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.AnyTournamentFeature() val filterElementRow = QueryCondition.AnyTournamentFeature().apply { setObject(t2) } filterElementRow.filterSectionRow = FilterSectionRow.TOURNAMENT_FEATURE - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -450,7 +450,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE val filterElementRow2 = QueryCondition.AnyTableSize().apply { listOfValues = arrayListOf(4) } filterElementRow.filterSectionRow = FilterSectionRow.TABLE_SIZE - filter.updateValueMap(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) + filter.updateValueBy(FilterCondition(filterElementRows = arrayListOf(filterElementRow, filterElementRow2))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -475,7 +475,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.NetAmountWon() val filterElementRow = QueryCondition.more().apply { listOfValues = arrayListOf(204.0) } filterElementRow.filterSectionRow = FilterSectionRow.VALUE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filterElementRow)) @@ -500,7 +500,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filter = QueryCondition.NetAmountWon() val filterElementRow = QueryCondition.less().apply { listOfValues = arrayListOf(540.0) } filterElementRow.filterSectionRow = FilterSectionRow.VALUE - filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val sessions = Filter.queryOn(realm, arrayListOf(filter)) @@ -525,12 +525,12 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterMore = QueryCondition.NetAmountWon() val filterElementRow = QueryCondition.more().apply { listOfValues = arrayListOf(200.0) } filterElementRow.filterSectionRow = FilterSectionRow.VALUE - filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) + filterMore.updateValueBy(FilterCondition(arrayListOf(filterElementRow))) val filterLess = QueryCondition.NetAmountWon() val filterElementRow2 = QueryCondition.less().apply { listOfValues = arrayListOf(400.0) } filterElementRow2.filterSectionRow = FilterSectionRow.VALUE - filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2))) + filterLess.updateValueBy(FilterCondition(arrayListOf(filterElementRow2))) val sessions = Filter.queryOn(realm, arrayListOf(filterMore, filterLess)) @@ -541,4 +541,76 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { Assert.assertTrue(result.contains((it as Session).id)) } } + + @Test + fun testNumberOfRebuys() { + val realm = this.mockRealm + realm.beginTransaction() + val s1 = Session.testInstance(netResult = 200.0, isTournament = true) + s1.result!!.buyin = 50.0 + s1.tournamentEntryFee = 10.0 + val s2 = Session.testInstance(netResult = 50.0, isTournament = true) + s2.result!!.buyin = 10.0 + s2.tournamentEntryFee = 10.0 + + + val s3 = Session.testInstance(netResult = 500.0) + s3.cgBigBlind = 2.0 + s3.result!!.buyin = 1000.0 + + val s4 = Session.testInstance(netResult = 570.0) + s4.cgBigBlind = 5.0 + s4.result!!.buyin = 200.0 + realm.commitTransaction() + + val filterMore = QueryCondition.NumberOfRebuy(QueryCondition.Operator.MORE, 5.0) + val sessions = Filter.queryOn(realm, arrayListOf(filterMore)) + + Assert.assertEquals(2, sessions.size) + + val result = arrayListOf(s1.id, s3.id) + sessions.forEach { + Assert.assertTrue(result.contains((it as Session).id)) + } + } + + @Test + fun testTournamentFinalPosition() { + val realm = this.mockRealm + realm.beginTransaction() + val s1 = Session.testInstance(netResult = 200.0, isTournament = true) + s1.result!!.tournamentFinalPosition = 5 + + val s2 = Session.testInstance(netResult = 50.0, isTournament = true) + s2.result!!.tournamentFinalPosition = 15 + + val s3 = Session.testInstance(netResult = 500.0, isTournament = true) + s3.result!!.tournamentFinalPosition = 2 + + val s4 = Session.testInstance(netResult = 570.0, isTournament = true) + s4.result!!.tournamentFinalPosition = 1 + realm.commitTransaction() + + val filterLess = QueryCondition.TournamentFinalPosition(QueryCondition.Operator.LESS, finalPosition = 1) + var sessions = Filter.queryOn(realm, arrayListOf(filterLess)) + + Assert.assertEquals(1, sessions.size) + + var result = arrayListOf(s4.id) + sessions.forEach { + Assert.assertTrue(result.contains((it as Session).id)) + } + + + val filterMore = QueryCondition.TournamentFinalPosition(QueryCondition.Operator.MORE, finalPosition = 10) + sessions = Filter.queryOn(realm, arrayListOf(filterMore)) + + Assert.assertEquals(1, sessions.size) + + result = arrayListOf(s2.id) + sessions.forEach { + Assert.assertTrue(result.contains((it as Session).id)) + } + + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0f90a6f6..8c2989ed 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,114 +1,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + package="net.pokeranalytics.android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 5a97d9b0..17166326 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -30,7 +30,7 @@ class PokerAnalyticsApplication : Application() { Realm.init(this) val realmConfiguration = RealmConfiguration.Builder() .name(Realm.DEFAULT_REALM_NAME) - .schemaVersion(3) + .schemaVersion(4) .migration(PokerAnalyticsMigration()) .initialData(Seed(this)) .build() @@ -69,7 +69,7 @@ class PokerAnalyticsApplication : Application() { if (sessionsCount < 10) { GlobalScope.launch { - FakeDataManager.createFakeSessions(1) + FakeDataManager.createFakeSessions(200) } } diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 1bd946d7..0bb9db94 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -6,7 +6,6 @@ import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.extensions.hourlyDuration import net.pokeranalytics.android.model.filter.Query -import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.filter import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.model.realm.SessionSet diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt index d3ce7f52..1b67154a 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Report.kt @@ -401,7 +401,7 @@ class ComputedResults(group: ComputableGroup, shouldManageMultiGroupProgressValu return DataSetFactory.lineDataSetInstance(entries, stat.name, context) } - fun barEntries(stat: Stat, context: Context): BarDataSet { + private fun barEntries(stat: Stat, context: Context): BarDataSet { val entries = mutableListOf() this._evolutionValues[stat]?.let { points -> @@ -412,7 +412,7 @@ class ComputedResults(group: ComputableGroup, shouldManageMultiGroupProgressValu return DataSetFactory.barDataSetInstance(entries, stat.name, context) } - fun distributionEntries(stat: Stat, context: Context): BarDataSet { + private fun distributionEntries(stat: Stat, context: Context): BarDataSet { val colors = mutableListOf() val entries = mutableListOf() diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 68b8faed..9b9ec76b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -129,8 +129,8 @@ sealed class QueryCondition : FilterElementRow { open var sign: Int = 1 override var listOfValues = arrayListOf(0.0) - override fun updateValueMap(filterCondition: FilterCondition) { - super.updateValueMap(filterCondition) + override fun updateValueBy(filterCondition: FilterCondition) { + super.updateValueBy(filterCondition) listOfValues = filterCondition.getValues() } override fun labelForValue(value: Double): String { @@ -140,9 +140,8 @@ sealed class QueryCondition : FilterElementRow { abstract class ListOfInt: ListOfValues() { override var listOfValues = arrayListOf(0) - override fun updateValueMap(filterCondition: FilterCondition) { - super.updateValueMap(filterCondition) - println("<<<< updateValueMap ${filterCondition.intValues}") + override fun updateValueBy(filterCondition: FilterCondition) { + super.updateValueBy(filterCondition) listOfValues = filterCondition.getValues() } override fun labelForValue(value: Int): String { @@ -153,8 +152,8 @@ sealed class QueryCondition : FilterElementRow { abstract class ListOfString: ListOfValues() { override var listOfValues = ArrayList() override fun labelForValue(value: String): String { return value } - override fun updateValueMap(filterCondition: FilterCondition) { - super.updateValueMap(filterCondition) + override fun updateValueBy(filterCondition: FilterCondition) { + super.updateValueBy(filterCondition) listOfValues = filterCondition.getValues() } } @@ -168,8 +167,8 @@ sealed class QueryCondition : FilterElementRow { get() { return listOfValues.firstOrNull() ?: Date() } set(value) { listOfValues.add(value) } - override fun updateValueMap(filterCondition: FilterCondition) { - super.updateValueMap(filterCondition) + override fun updateValueBy(filterCondition: FilterCondition) { + super.updateValueBy(filterCondition) singleValue = filterCondition.getValue() } } @@ -182,8 +181,8 @@ sealed class QueryCondition : FilterElementRow { get() { return listOfValues.firstOrNull() ?: 0 } set(value) { listOfValues.add(value) } - override fun updateValueMap(filterCondition: FilterCondition) { - super.updateValueMap(filterCondition) + override fun updateValueBy(filterCondition: FilterCondition) { + super.updateValueBy(filterCondition) singleValue = filterCondition.getValue() } } @@ -316,10 +315,25 @@ sealed class QueryCondition : FilterElementRow { class NumberOfTable: ListOfInt() - open class NetAmountWon: ListOfDouble() - class NetAmountLost: NetAmountWon() { override var sign: Int = -1 } + class NumberOfRebuy(): ListOfDouble() { + constructor(operator: Operator, numberOfRebuy: Double) : this() { + this.operator = operator + this.listOfValues = arrayListOf(numberOfRebuy) + } + } + + open class TournamentFinalPosition(): ListOfInt() { + constructor(operator: Operator, finalPosition: Int) : this() { + this.operator = operator + this.listOfValues = arrayListOf(finalPosition) + } + } + + open class NetAmount: ListOfDouble() + class NetAmountWon: NetAmount() + class NetAmountLost: NetAmount() { override var sign: Int = -1 } - class NumberOfPlayer: ListOfInt() + class TournamentNumberOfPlayer: ListOfInt() class StartedFromDate: DateQuery() { override var operator = Operator.MORE } class StartedToDate: DateQuery() { override var operator = Operator.LESS } @@ -514,7 +528,7 @@ sealed class QueryCondition : FilterElementRow { } } - open fun updateValueMap(filterCondition: FilterCondition) { + open fun updateValueBy(filterCondition: FilterCondition) { filterCondition.operator?.let { this.operator = Operator.values()[it] } diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt index 03fa29bf..7ebd0bce 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt @@ -4,6 +4,7 @@ import io.realm.Realm import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.Filter +import net.pokeranalytics.android.model.realm.Result import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.SessionSet @@ -15,7 +16,8 @@ class Patcher { val realm = Realm.getDefaultInstance() val sets = realm.where(SessionSet::class.java).findAll() - val sessions = Filter.queryOn(realm, Query(QueryCondition.IsCash)) + val sessions = Filter.queryOn(realm, Query(QueryCondition.IsCash)) + val results = realm.where(Result::class.java).findAll() realm.executeTransaction { sets.forEach { @@ -23,6 +25,9 @@ class Patcher { } sessions.forEach { it.formatBlinds() + } + results.forEach { + it.computeNumberOfRebuy() } } realm.close() diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 81fb9afe..44755ecc 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -60,7 +60,9 @@ class PokerAnalyticsMigration : RealmMigration { } schema.get("Session")?.let { - it.addField("blinds", String::class.java) + it.addField("blinds", String::class.java).transform { + + } } schema.get("FilterCondition")?.let { @@ -89,6 +91,15 @@ class PokerAnalyticsMigration : RealmMigration { currentVersion++ } + // Migrate to version 3 + if (currentVersion == 3) { + Timber.d("*** Running migration ${currentVersion + 1}") + + schema.get("Result")?.let { + it.addField("numberOfRebuy", Double::class.java).setNullable("numberOfRebuy", true) + } + currentVersion++ + } } override fun equals(other: Any?): Boolean { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt index e485ca01..d83b2e1e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt @@ -114,7 +114,7 @@ open class Filter : RealmObject() { it.queryCondition.id == filterElementRow.id } if (filtered.isNotEmpty()) { - return filterElementRow.updateValueMap(filtered.first()) + return filterElementRow.updateValueBy(filtered.first()) } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt index 4340ed63..d0ca264d 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt @@ -33,7 +33,7 @@ open class FilterCondition() : RealmObject() { val queryCondition : QueryCondition get() = QueryCondition.valueOf(this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName) .apply { - this.updateValueMap(this@FilterCondition) + this.updateValueBy(this@FilterCondition) } var doubleValues: RealmList? = null diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt index df768729..3f0bc919 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt @@ -87,7 +87,7 @@ open class Result : RealmObject(), Filterable { var tournamentFinalPosition: Int? = null // Number of rebuys - //var numberOfRebuy: Double? = null + var numberOfRebuy: Double? = null @LinkingObjects("result") private val sessions: RealmResults? = null @@ -122,7 +122,26 @@ open class Result : RealmObject(), Filterable { } // Computes the number of rebuy - private fun computeNumberOfRebuy() { + fun computeNumberOfRebuy() { + this.session?.let { + if (it.isCashGame()) { + it.cgBigBlind?.let { bb -> + if (bb > 0.0) { + this.numberOfRebuy = (this.buyin ?: 0.0) / (bb * 100.0) + } else { + this.numberOfRebuy = null + } + } + } else { + it.tournamentEntryFee?.let { entryFee -> + if (entryFee > 0.0) { + this.numberOfRebuy = (this.buyin ?: 0.0) / entryFee + } else { + this.numberOfRebuy = null + } + } + } + } } // @todo tips? 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 985c9128..7aa0c342 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 @@ -77,8 +77,10 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat AnyTournamentType::class.java -> "tournamentType" AnyBlind::class.java -> "blinds" NumberOfTable::class.java -> "numberOfTable" - NetAmountWon::class.java -> "computableResults.ratedNet" - NumberOfPlayer::class.java -> "tournamentNumberOfPlayers" + NetAmount::class.java -> "computableResults.ratedNet" + NumberOfRebuy::class.java -> "result.numberOfRebuy" + TournamentNumberOfPlayer::class.java -> "result.tournamentNumberOfPlayers" + TournamentFinalPosition::class.java -> "result.tournamentFinalPosition" TournamentFee::class.java -> "tournamentEntryFee" StartedFromDate::class.java, StartedToDate::class.java -> "startDate" EndedFromDate::class.java, EndedToDate::class.java -> "endDate" @@ -222,6 +224,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat field = value this.computeStats() formatBlinds() + this.result?.computeNumberOfRebuy() } var blinds: String? = null @@ -231,6 +234,10 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat // The entry fee of the tournament var tournamentEntryFee: Double? = null + set(value) { + field = value + this.result?.computeNumberOfRebuy() + } // The total number of players who participated in the tournament var tournamentNumberOfPlayers: Int? = null diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 39c13021..7f15c747 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt @@ -169,7 +169,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS rows.clear() rows.add(SimpleRow.NAME) rows.add(BankrollRow.LIVE) -// rows.add(BankrollRow.INITIAL_VALUE) + rows.add(BankrollRow.INITIAL_VALUE) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(BankrollRow.CURRENCY) if (this.shouldShowCurrencyRate) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index 1342f2f1..e5f22039 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -122,7 +122,8 @@ class ReportsFragment : PokerAnalyticsFragment(), StaticRowRepresentableDataSour val requiredStats: List = listOf(Stat.NET_RESULT) val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats) - val report = Calculator.computeStatsWithCriterias(realm, criterias = criteria, options = options) + val report = Calculator.computeStatsWithCriterias(realm, criteria, options = options) +// val report = Calculator.computeStatsWithComparators(realm, criteria = criteria, options = options) Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms") diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt index 0b26c7c1..e142d75b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt @@ -129,6 +129,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() { when (aggregationType) { AggregationType.MONTH, AggregationType.YEAR -> { + if (aggregationType.criterias.combined().size < 2) { Toast.makeText(context, R.string.less_then_2_values_for_display, Toast.LENGTH_LONG).show() return diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt index 5bc99a77..066d7410 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt @@ -14,10 +14,10 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In TOURNAMENT(R.string.tournament), ONLINE(R.string.online), RESULT(R.string.result), - TRANSACTION_TYPES(R.string.operation_types), + //TRANSACTION_TYPES(R.string.operation_types), LOCATIONS(R.string.locations), BANKROLLS(R.string.bankrolls), - PLAYERS(R.string.players), + //PLAYERS(R.string.players), ; val filterElements: List @@ -61,8 +61,9 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In TOURNAMENT_TYPE, TOURNAMENT_NAME, TOURNAMENT_FEATURE, - ENTRY_FEE, - NUMBER_OF_PLAYERS + TOURNAMENT_ENTRY_FEE, + TOURNAMENT_NUMBER_OF_PLAYER, + TOURNAMENT_FINAL_POSITION ) ONLINE -> arrayListOf( MULTI_TABLING @@ -70,14 +71,13 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In LOCATIONS -> arrayListOf( LOCATION ) - PLAYERS -> arrayListOf( - MULTI_PLAYER - ) + //PLAYERS -> arrayListOf(MULTI_PLAYER) RESULT -> arrayListOf( - VALUE + VALUE, + NUMBER_OF_REBUY ) - TRANSACTION_TYPES -> arrayListOf() + //TRANSACTION_TYPES -> arrayListOf() } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt index a68879e5..f5ada853 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt @@ -29,16 +29,17 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { TOURNAMENT_NAME(R.string.tournament_name), TOURNAMENT_FEATURE(R.string.tournament_feature), COMPLETION_PERCENTAGE(R.string.tournament_completion_percentage_interval), - PLACE(R.string.final_position), - PLAYERS_COUNT(R.string.players_count), + TOURNAMENT_FINAL_POSITION(R.string.final_position), + TOURNAMENT_NUMBER_OF_PLAYER(R.string.players_count), TOURNAMENT_RE_BUY_COUNT(R.string.rebuy_count), - ENTRY_FEE(R.string.buyin), - MULTI_TABLING(R.string.multi_tabling), + TOURNAMENT_ENTRY_FEE(R.string.buyin), + MULTI_TABLING(R.string.number_of_tables), VALUE(R.string.value), LOCATION(R.string.locations), BANKROLL(R.string.bankrolls), NUMBER_OF_PLAYERS(R.string.number_of_players), MULTI_PLAYER(R.string.multiplayer), + NUMBER_OF_REBUY(R.string.number_of_buyins) ; private enum class SelectionType { @@ -94,17 +95,17 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { // Tournament TOURNAMENT_TYPE -> Criteria.TournamentTypes.queryConditions.mapFirstCondition() // COMPLETION_PERCENTAGE -> arrayListOf() -// PLACE -> QueryCondition.moreOrLess() - PLAYERS_COUNT -> QueryCondition.moreOrLess() -// TOURNAMENT_RE_BUY_COUNT -> QueryCondition.moreOrLess() - ENTRY_FEE -> Criteria.TournamentFees.queryConditions.mapFirstCondition() + TOURNAMENT_FINAL_POSITION -> QueryCondition.moreOrLess() + TOURNAMENT_NUMBER_OF_PLAYER -> QueryCondition.moreOrLess() + TOURNAMENT_ENTRY_FEE -> Criteria.TournamentFees.queryConditions.mapFirstCondition() TOURNAMENT_NAME -> Criteria.TournamentNames.queryConditions.mapFirstCondition() TOURNAMENT_FEATURE -> Criteria.TournamentFeatures.queryConditions.mapFirstCondition() LOCATION -> Criteria.Locations.queryConditions.mapFirstCondition() BANKROLL -> Criteria.Bankrolls.queryConditions.mapFirstCondition() MULTI_TABLING -> QueryCondition.moreOrLess() -// NUMBER_OF_PLAYERS -> QueryCondition.moreOrLess() + //NUMBER_OF_PLAYERS -> QueryCondition.moreOrLess() + NUMBER_OF_REBUY -> QueryCondition.moreOrLess() // MULTI_PLAYER -> arrayListOf() VALUE -> arrayListOf().apply { diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png old mode 100755 new mode 100644 index fa00866f..b0c0a7ab Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png old mode 100755 new mode 100644 index baa8b20a..20d431ec Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png old mode 100755 new mode 100644 index a921ccc1..ea49498c Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png old mode 100755 new mode 100644 index 493dbd99..97e02126 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png old mode 100755 new mode 100644 index cdf01efa..bc88adb7 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ