From ff3e4608d38692003295c2c251c187ef35734385 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 09:55:27 +0200 Subject: [PATCH 1/2] fix issue with filter display --- .../net/pokeranalytics/android/model/Criteria.kt | 2 +- .../android/model/filter/QueryCondition.kt | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) 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 9175d734..2fdbdd6b 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -120,7 +120,7 @@ sealed class Criteria { val objects = arrayListOf() values.forEach { objects.add((S::class.java.newInstance()).apply { - intValues.add(it) + intValues = arrayListOf(it) }) } return objects 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 3c78df9a..0ea2b90e 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 @@ -45,12 +45,16 @@ inline fun List.queryWith(query: RealmQ sealed class QueryCondition : FilterElementRow { + interface Valuable > { + var values: ArrayList? + } + interface asListOfDouble { var doubleValues : ArrayList } interface asListOfBoolean { var booleanValues : ArrayList } interface asListOfString { var stringValues : ArrayList } interface asDateValue { var dateValue: Date - var showTime: Boolean + val showTime: Boolean } interface asListOfInt : asListOfDouble { @@ -61,13 +65,13 @@ sealed class QueryCondition : FilterElementRow { interface asIntValue : asListOfInt { var intValue: Int - get() { return intValues.first() } + get() { return intValues.firstOrNull() ?: 0 } set(value) { intValues = arrayListOf(value) } } interface asDoubleValue : asListOfDouble { var doubleValue : Double - get() { return doubleValues.first() } + get() { return doubleValues.firstOrNull() ?: 0.0 } set(value) { doubleValues = arrayListOf(value) } } @@ -183,7 +187,7 @@ sealed class QueryCondition : FilterElementRow { get() { if (intValues.size > 1) { return "multiple" - } else { + } else if (intValues.size > 0) { return Limit.values()[intValues.first()].longName } return "todo" @@ -255,11 +259,11 @@ sealed class QueryCondition : FilterElementRow { // Dates open class DateQuery: QueryCondition(), asDateValue { override var dateValue: Date = Date() - override var showTime: Boolean = false + override val showTime: Boolean = false } open class TimeQuery: DateQuery() { - override var showTime: Boolean = true + override val showTime: Boolean = true } class STARTED_FROM_DATE: DateQuery() From 3dc8384e4c7201434b78bd20a3b1fbe7b9401ac8 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 19 Apr 2019 11:18:51 +0200 Subject: [PATCH 2/2] fix issue with filter selection --- .../android/model/filter/QueryCondition.kt | 10 +++++- .../android/model/realm/Filter.kt | 35 ++++++++++--------- .../android/model/realm/FilterCondition.kt | 2 +- .../ui/fragment/FilterDetailsFragment.kt | 2 ++ .../view/rowrepresentable/FilterSectionRow.kt | 14 ++++---- 5 files changed, 38 insertions(+), 25 deletions(-) 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 0ea2b90e..045b55cf 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 @@ -97,7 +97,15 @@ sealed class QueryCondition : FilterElementRow { interface BetweenLeftExclusive : Between interface BetweenRightExclusive : Between - val id: String get() { return this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName } + val baseId = this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName + + val id: List get() { + return when (this) { + is QueryDataCondition<*> -> this.stringValues.map { "$baseId+$it" } + is StaticDataQueryCondition -> this.intValues.map { "$baseId+$it" } + else -> listOf(baseId) + } + } override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT 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 e470a1b4..f0638976 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 @@ -66,22 +66,26 @@ open class Filter : RealmObject() { private set fun createOrUpdateFilterConditions(filterConditionRows: ArrayList) { - val casted = arrayListOf() + println("list of querys saving: ${filterConditionRows.map { it.id }}") + println("list of querys previous: ${this.filterConditions.map { it.queryCondition.id }}") filterConditionRows .map { - it.id + it.filterSectionRow } .distinct() .forEach { filterName-> filterConditionRows .filter { - it.id == filterName + it.filterSectionRow == filterName } .apply { + + println("list of querys: ${this.map { it.id }}") + val casted = arrayListOf() casted.addAll(this) val newFilterCondition = FilterCondition(casted) val previousCondition = filterConditions.filter { - it.sectionName == newFilterCondition.filterName + it.filterName == newFilterCondition.filterName } filterConditions.removeAll(previousCondition) filterConditions.add(newFilterCondition) @@ -90,20 +94,19 @@ open class Filter : RealmObject() { } fun countBy(filterCategoryRow: FilterCategoryRow): Int { - val sections = filterCategoryRow.filterSectionRows - return filterConditions.count { - sections.contains(FilterSectionRow.valueOf(it.sectionName ?: throw PokerAnalyticsException.FilterElementUnknownSectionName)) - } + val sections = filterCategoryRow.filterSectionRows.map { it.name } + println("list of sections $sections") + val savedSections = filterConditions.filter { sections.contains(it.sectionName) }.flatMap { it.queryCondition.id } + println("list of savedSections $savedSections") + return savedSections.size } fun contains(filterElementRow: QueryCondition): Boolean { - val filtered = filterConditions.filter { - it.filterName == filterElementRow.id - } - if (filtered.isEmpty()) { - return false - } - return filterElementRow.contains(filtered) + println("list of saved queries ${filterConditions.map { it.queryCondition.id }}") + println("list of contains ${filterElementRow.id}") + val contained = filterConditions.flatMap{ it.queryCondition.id }.contains(filterElementRow.id.first()) + println("list of : $contained") + return contained } /** @@ -111,7 +114,7 @@ open class Filter : RealmObject() { */ fun loadValueForElement(filterElementRow: QueryCondition) { val filtered = filterConditions.filter { - it.filterName == filterElementRow.id + it.queryCondition == filterElementRow.id } if (filtered.isNotEmpty()) { return filterElementRow.updateValueMap(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 dd8c7e0c..7fd481ed 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 @@ -13,7 +13,7 @@ open class FilterCondition() : RealmObject() { this.sectionName = sectionName } - constructor(filterElementRows: ArrayList) : this(filterElementRows.first().id, filterElementRows.first().filterSectionRow.name) { + constructor(filterElementRows: ArrayList) : this(filterElementRows.first().baseId, filterElementRows.first().filterSectionRow.name) { val row = filterElementRows.first() this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt index c3615d7a..7dbc53a1 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt @@ -220,6 +220,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent } } + println("list of selected rows : $selectedRows") + // Update UI rowRepresentableAdapter.refreshRow(row) } 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 bd4b92a4..deba6d92 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 @@ -68,8 +68,8 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { when (this@FilterSectionRow) { // General - CASH_TOURNAMENT -> arrayListOf(QueryCondition.CASH, QueryCondition.TOURNAMENT) - LIVE_ONLINE -> arrayListOf(QueryCondition.LIVE, QueryCondition.ONLINE) + CASH_TOURNAMENT -> Criteria.SessionType.queryConditions + LIVE_ONLINE -> Criteria.BankrollType.queryConditions GAME -> Criteria.Games.queryConditions LIMIT_TYPE -> Criteria.Limits.queryConditions TABLE_SIZE -> Criteria.TableSizes.queryConditions @@ -151,7 +151,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { ) // Tournament - TOURNAMENT_TYPE -> arrayListOf() + TOURNAMENT_TYPE -> Criteria.TournamentTypes.queryConditions COMPLETION_PERCENTAGE -> arrayListOf() PLACE -> arrayListOf() PLAYERS_COUNT -> arrayListOf() @@ -159,10 +159,10 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { BUY_IN -> arrayListOf() - TOURNAMENT_NAME -> arrayListOf() - TOURNAMENT_FEATURE -> arrayListOf() - LOCATION -> arrayListOf() - BANKROLL -> arrayListOf() + TOURNAMENT_NAME -> Criteria.TournamentNames.queryConditions + TOURNAMENT_FEATURE -> Criteria.TournamentFeatures.queryConditions + LOCATION -> Criteria.Locations.queryConditions + BANKROLL -> Criteria.Bankrolls.queryConditions MULTI_TABLING -> arrayListOf() NUMBER_OF_PLAYERS -> arrayListOf() MULTI_PLAYER -> arrayListOf()