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 395f4f26..3d782746 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 @@ -458,7 +458,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() val filter = QueryCondition.NetAmountWon() - val filterElementRow = QueryCondition.more().apply { listOfValues = arrayListOf(204.0) } + val filterElementRow = QueryCondition.moreOrEqual().apply { listOfValues = arrayListOf(204.0) } filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value)) val sessions = Filter.queryOn(realm, Query(filterElementRow)) @@ -482,7 +482,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() val filter = QueryCondition.NetAmountWon() - val filterElementRow = QueryCondition.less().apply { listOfValues = arrayListOf(540.0) } + val filterElementRow = QueryCondition.lessOrEqual().apply { listOfValues = arrayListOf(540.0) } filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value)) val sessions = Filter.queryOn(realm, Query(filter)) @@ -506,11 +506,11 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.commitTransaction() val filterMore = QueryCondition.NetAmountWon() - val filterElementRow = QueryCondition.more().apply { listOfValues = arrayListOf(199.0) } + val filterElementRow = QueryCondition.moreOrEqual().apply { listOfValues = arrayListOf(199.0) } filterMore.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value)) val filterLess = QueryCondition.NetAmountWon() - val filterElementRow2 = QueryCondition.less().apply { listOfValues = arrayListOf(400.0) } + val filterElementRow2 = QueryCondition.lessOrEqual().apply { listOfValues = arrayListOf(400.0) } filterLess.updateValueBy(FilterCondition(arrayListOf(filterElementRow2), FilterSectionRow.Value)) val sessions = Filter.queryOn(realm, Query(filterMore, filterLess)) @@ -584,7 +584,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { val filterMore = QueryCondition.TournamentFinalPosition(QueryCondition.Operator.MORE, finalPosition = 10) - sessions = Filter.queryOn(realm, Query(filterMore)) + sessions = Filter.queryOn(realm, Query(filterMore)) Assert.assertEquals(1, sessions.size) diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index ff34c848..964a9b26 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -250,13 +250,19 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row queries } is Duration -> { - (0..12).map { i -> + val hourlyQueries = (0..12).map { i -> val more = QueryCondition.Duration(i * 60) - more.operator = QueryCondition.Operator.MORE + more.operator = QueryCondition.Operator.MORE_OR_EQUAL val less = QueryCondition.Duration((i + 1) * 60) less.operator = QueryCondition.Operator.LESS Query(more, less) - } + }.toMutableList() + + val moreThan12Hours = QueryCondition.Duration(12 * 60) + moreThan12Hours.operator = QueryCondition.Operator.MORE_OR_EQUAL + hourlyQueries.add(Query(moreThan12Hours)) + + hourlyQueries } else -> throw PokerAnalyticsException.ComparisonCriteriaUnhandled(this) } 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 d07b804c..73364c13 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 @@ -55,16 +55,24 @@ sealed class QueryCondition : RowRepresentable { } } - inline fun more(): T { - return newInstance(T::class).apply { this.operator = Operator.MORE } +// inline fun more(): T { +// return newInstance(T::class).apply { this.operator = Operator.MORE } +// } +// +// inline fun less(): T { +// return newInstance(T::class).apply { this.operator = Operator.LESS } +// } + + inline fun moreOrEqual(): T { + return newInstance(T::class).apply { this.operator = Operator.MORE_OR_EQUAL } } - inline fun less(): T { - return newInstance(T::class).apply { this.operator = Operator.LESS } + inline fun lessOrEqual(): T { + return newInstance(T::class).apply { this.operator = Operator.LESS_OR_EQUAL } } - inline fun moreOrLess(): ArrayList { - return arrayListOf(more(), less()) + inline fun moreEqualOrLessEqual(): ArrayList { + return arrayListOf(moreOrEqual(), lessOrEqual()) } fun valueOf(name: String): T { @@ -104,7 +112,9 @@ sealed class QueryCondition : RowRepresentable { ANY, ALL, MORE, + MORE_OR_EQUAL, LESS, + LESS_OR_EQUAL, EQUALS, TRUE, NOTNULL @@ -116,7 +126,7 @@ sealed class QueryCondition : RowRepresentable { val groupId: String get() { return when (this.operator) { - Operator.MORE, Operator.LESS -> return "${this.operator.name.toLowerCase().capitalize()}$baseId" + Operator.MORE, Operator.LESS, Operator.MORE_OR_EQUAL, Operator.LESS_OR_EQUAL -> return "${this.operator.name.toLowerCase().capitalize()}$baseId" else -> this.baseId } } @@ -124,7 +134,7 @@ sealed class QueryCondition : RowRepresentable { val id: List get() { when (this.operator) { - Operator.MORE, Operator.LESS -> return listOf("$baseId+${this.operator.name}") + Operator.MORE, Operator.LESS, Operator.MORE_OR_EQUAL, Operator.LESS_OR_EQUAL -> return listOf("$baseId+${this.operator.name}") else -> {} } @@ -542,19 +552,19 @@ sealed class QueryCondition : RowRepresentable { } class StartedFromDate(date: Date) : DateQuery(date) { - override var operator = Operator.MORE + override var operator = Operator.MORE_OR_EQUAL } class StartedToDate(date: Date) : DateQuery(date) { - override var operator = Operator.LESS + override var operator = Operator.LESS_OR_EQUAL } class EndedFromDate(date: Date) : DateQuery(date) { - override var operator = Operator.MORE + override var operator = Operator.MORE_OR_EQUAL } class EndedToDate(date: Date) : DateQuery(date) { - override var operator = Operator.LESS + override var operator = Operator.LESS_OR_EQUAL } class AnyDayOfWeek : ListOfInt() { @@ -636,11 +646,11 @@ sealed class QueryCondition : RowRepresentable { object BiggestBetNotNull : NotNullQueryCondition() class StartedFromTime(date: Date) : TimeQuery(date) { - override var operator = Operator.MORE + override var operator = Operator.MORE_OR_EQUAL } class EndedToTime(date: Date) : TimeQuery(date) { - override var operator = Operator.LESS + override var operator = Operator.LESS_OR_EQUAL } interface CustomFieldRelated { @@ -857,12 +867,22 @@ sealed class QueryCondition : RowRepresentable { else -> realmQuery } } - Operator.MORE -> { + Operator.MORE_OR_EQUAL -> { when (this) { is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue.startOfDay()) - is Duration -> realmQuery.greaterThan(fieldName, netDuration) is TournamentFinalPosition -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) is TournamentNumberOfPlayer -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) + is Duration -> realmQuery.greaterThanOrEqualTo(fieldName, netDuration) + is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue) + is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) + is NetAmountLost -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * -1) + is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * sign) + else -> realmQuery + } + } + Operator.MORE -> { + when (this) { + is Duration -> realmQuery.greaterThan(fieldName, netDuration) is SingleInt -> realmQuery.greaterThan(fieldName, singleValue) is ListOfInt -> realmQuery.greaterThan(fieldName, listOfValues.first()) is NetAmountLost -> realmQuery.lessThan(fieldName, listOfValues.first() * -1) @@ -870,12 +890,30 @@ sealed class QueryCondition : RowRepresentable { else -> realmQuery } } - Operator.LESS -> { + Operator.LESS_OR_EQUAL -> { when (this) { is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue.endOfDay()) - is Duration -> realmQuery.lessThan(fieldName, netDuration) is TournamentFinalPosition -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) is TournamentNumberOfPlayer -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) + is Duration -> realmQuery.lessThanOrEqualTo(fieldName, netDuration) + is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue) + is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) + is NetAmountLost -> { + realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * -1) + realmQuery.lessThan(fieldName, 0.0) + } + is NetAmountWon -> { + realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) + realmQuery.greaterThan(fieldName, 0.0) + } + is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first() * sign) + + else -> realmQuery + } + } + Operator.LESS -> { + when (this) { + is Duration -> realmQuery.lessThan(fieldName, netDuration) is SingleInt -> realmQuery.lessThan(fieldName, singleValue) is ListOfInt -> realmQuery.lessThan(fieldName, listOfValues.first()) is NetAmountLost -> { @@ -932,8 +970,8 @@ sealed class QueryCondition : RowRepresentable { is PastDay -> RowViewType.TITLE_VALUE_CHECK.ordinal else -> { when (this.operator) { - Operator.MORE -> RowViewType.TITLE_VALUE_CHECK.ordinal - Operator.LESS -> RowViewType.TITLE_VALUE_CHECK.ordinal + Operator.MORE, Operator.MORE_OR_EQUAL -> RowViewType.TITLE_VALUE_CHECK.ordinal + Operator.LESS, Operator.LESS_OR_EQUAL -> RowViewType.TITLE_VALUE_CHECK.ordinal else -> RowViewType.TITLE_CHECK.ordinal } } @@ -946,8 +984,8 @@ sealed class QueryCondition : RowRepresentable { is PastDay -> BottomSheetType.EDIT_TEXT else -> { when (this.operator) { - Operator.MORE -> BottomSheetType.EDIT_TEXT - Operator.LESS -> BottomSheetType.EDIT_TEXT + Operator.MORE, Operator.MORE_OR_EQUAL -> BottomSheetType.EDIT_TEXT + Operator.LESS, Operator.LESS_OR_EQUAL -> BottomSheetType.EDIT_TEXT else -> BottomSheetType.NONE } } @@ -974,27 +1012,27 @@ sealed class QueryCondition : RowRepresentable { is IsWeekDay -> R.string.week_days is IsWeekEnd -> R.string.weekend is PastDay -> R.string.period_in_days - is TournamentNumberOfPlayer -> { - when (this.operator) { - Operator.MORE -> R.string.minimum - Operator.LESS -> R.string.maximum - else -> null - } - } - is NetAmountWon -> { - when (this.operator) { - Operator.MORE -> R.string.won_amount_more_than - Operator.LESS -> R.string.won_amount_less_than - else -> null - } - } - is NetAmountLost -> { - when (this.operator) { - Operator.MORE -> R.string.lost_amount_more_than - Operator.LESS -> R.string.lost_amount_less_than - else -> null - } - } +// is TournamentNumberOfPlayer -> { +// when (this.operator) { +// Operator.MORE -> R.string.minimum +// Operator.LESS -> R.string.maximum +// else -> null +// } +// } +// is NetAmountWon -> { +// when (this.operator) { +// Operator.MORE -> R.string.won_amount_more_than +// Operator.LESS -> R.string.won_amount_less_than +// else -> null +// } +// } +// is NetAmountLost -> { +// when (this.operator) { +// Operator.MORE -> R.string.lost_amount_more_than +// Operator.LESS -> R.string.lost_amount_less_than +// else -> null +// } +// } is TournamentFinalPosition -> { when (this.operator) { Operator.MORE -> R.string.minimum @@ -1004,8 +1042,10 @@ sealed class QueryCondition : RowRepresentable { } else -> { when (this.operator) { - Operator.MORE -> R.string.more_than - Operator.LESS -> R.string.less_than + Operator.MORE_OR_EQUAL -> R.string.more_or_equal_sign + Operator.MORE -> R.string.more_sign + Operator.LESS_OR_EQUAL -> R.string.less_or_equal_sign + Operator.LESS -> R.string.less_sign else -> null } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterItemRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterItemRow.kt index 82d5317d..7555d963 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterItemRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterItemRow.kt @@ -75,7 +75,8 @@ interface FilterItemRow : RowRepresentable { is QueryCondition.SingleValue<*>, is QueryCondition.ListOfValues<*> -> { val valueAsString: String? by map val hint = when (this.queryCondition?.operator) { - QueryCondition.Operator.MORE, QueryCondition.Operator.LESS -> { + QueryCondition.Operator.MORE, QueryCondition.Operator.LESS, + QueryCondition.Operator.MORE_OR_EQUAL, QueryCondition.Operator.LESS_OR_EQUAL -> { when (this.queryCondition) { is QueryCondition.CustomFieldNumberQuery -> R.string.value is QueryCondition.CustomFieldAmountQuery -> R.string.amount diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterSectionRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterSectionRow.kt index ff3d21e2..e09a04ad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterSectionRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterSectionRow.kt @@ -124,7 +124,7 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable { MonthOfYear -> Criteria.MonthsOfYear.queryConditions.mapFirstCondition() // Duration - SessionDuration -> QueryCondition.moreOrLess() + SessionDuration -> QueryCondition.moreEqualOrLessEqual() FixedDate -> arrayListOf(QueryCondition.StartedFromDate(Date()), QueryCondition.EndedToDate(Date())) // dummy constructor values Duration -> arrayListOf(QueryCondition.PastDay(0)) // dummy constructor values @@ -141,21 +141,21 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable { TournamentType -> Criteria.TournamentTypes.queryConditions.mapFirstCondition() // CompletionPercentage -> arrayListOf() - TournamentFinalPosition -> QueryCondition.moreOrLess() - TournamentNumberOfPlayer -> QueryCondition.moreOrLess() + TournamentFinalPosition -> QueryCondition.moreEqualOrLessEqual() + TournamentNumberOfPlayer -> QueryCondition.moreEqualOrLessEqual() TournamentEntryFee -> Criteria.TournamentFees.queryConditions.mapFirstCondition() TournamentName -> Criteria.TournamentNames.queryConditions.mapFirstCondition() TournamentFeature -> Criteria.TournamentFeatures.queryConditions.mapFirstCondition() Location -> Criteria.Locations.queryConditions.mapFirstCondition() Bankroll -> Criteria.Bankrolls.queryConditions.mapFirstCondition() - MultiTabling -> QueryCondition.moreOrLess() + MultiTabling -> QueryCondition.moreEqualOrLessEqual() //NumberOfPlayers -> QueryCondition.moreOrLess() - NumberOfRebuy -> QueryCondition.moreOrLess() + NumberOfRebuy -> QueryCondition.moreEqualOrLessEqual() // MultiPlayer -> arrayListOf() Value -> arrayListOf().apply { - addAll(QueryCondition.moreOrLess()) - addAll(QueryCondition.moreOrLess()) + addAll(QueryCondition.moreEqualOrLessEqual()) + addAll(QueryCondition.moreEqualOrLessEqual()) } TransactionType -> Criteria.TransactionTypes.queryConditions.mapFirstCondition() is CustomField -> { @@ -165,14 +165,14 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable { Criteria.ListCustomFields(cf.id).queryConditions.mapFirstCondition() } cf.isAmountType -> { - QueryCondition.moreOrLess().apply { + QueryCondition.moreEqualOrLessEqual().apply { this.forEach { it.customFieldId = cf.id } } } else -> { - QueryCondition.moreOrLess().apply { + QueryCondition.moreEqualOrLessEqual().apply { this.forEach { it.customFieldId = cf.id } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/StaticReport.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/StaticReport.kt index 25f7e7f0..08190a38 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rows/StaticReport.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rows/StaticReport.kt @@ -56,9 +56,9 @@ sealed class StaticReport(override var uniqueIdentifier: Int) : RowRepresentable } +// val basicReports: Set = setOf(Duration) val basicReports: Set = setOf(General, Blinds, TournamentBuyin, DayOfWeek, Location, TournamentType, Game, TableSize, Duration, OptimalDuration) - } override fun getDisplayName(context: Context): String { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a24b9107..25f4b348 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -775,5 +775,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 078a686f..50e46cd8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -779,6 +779,10 @@ La aplicación funciona con una suscripción anual para uso ilimitado, pero obti Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e368e28a..8e21f6f3 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -779,4 +779,8 @@ Vous pouvez changer le nombre de mains distribuées par heure. Cette valeur correspond au nombre total de mains distribuées à tous les joueur d\'une table en une heure. Exemple: Vous jouez 25 mains par heure sur des tables de 10 joueurs, entrez: 10 x 25 = 250. Mains par heure erreur(s) + + ]]> + + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 88c304b9..bb7c66d9 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -774,5 +774,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d43d75dd..a1102ee6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -774,5 +774,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d04f2e9e..a0570aee 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -778,5 +778,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index e21855fe..e28b9979 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -773,5 +773,9 @@ O Poker Analytics deseja acessar o Face ID para permitir que você desbloqueie o aplicativo com reconhecimento facial Poker Rumble We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ff8eafde..3edac9b4 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -775,5 +775,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 0760568d..5a5be629 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -768,5 +768,9 @@ Poker Rumble Join us on Discord! We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + + ]]> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c954238d..5fb0e656 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -826,5 +826,9 @@ Destination Optimal duration Show in-app badges + + ]]> + +