From d0743a9dfde39f0cfadfe14d714b044cd1d29e63 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 15 May 2019 11:37:30 +0200 Subject: [PATCH 1/5] add transaction filtering management --- .../migrations/PokerAnalyticsMigration.kt | 5 ++- .../android/model/realm/Filter.kt | 14 +++++++- .../android/ui/fragment/FeedFragment.kt | 36 ++++++++++++++----- .../android/ui/fragment/FiltersFragment.kt | 2 +- 4 files changed, 46 insertions(+), 11 deletions(-) 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 a97162e2..a2b336ed 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 @@ -127,7 +127,10 @@ class PokerAnalyticsMigration : RealmMigration { it.addField("startDateHourMinuteComponent", Double::class.java).setNullable("startDateHourMinuteComponent", true) it.addField("endDateHourMinuteComponent", Double::class.java).setNullable("endDateHourMinuteComponent", true) } - currentVersion++ + + schema.get("Filter")?.addField("filterableTypeOrdinal", Integer::class.java) + + currentVersion++ } } 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 8baf5a00..70478fd9 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 @@ -7,6 +7,7 @@ import io.realm.kotlin.where import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition +import net.pokeranalytics.android.ui.interfaces.FilterableType import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import java.util.* @@ -21,8 +22,9 @@ open class Filter : RealmObject(), RowRepresentable { companion object { // Create a new instance - fun newInstance(realm: Realm): Filter { + fun newInstance(realm: Realm, filterableType:Int): Filter { val filter = Filter() + filter.filterableTypeOrdinal = filterableType return realm.copyToRealm(filter) } @@ -59,6 +61,16 @@ open class Filter : RealmObject(), RowRepresentable { var filterConditions: RealmList = RealmList() private set + private var filterableTypeOrdinal: Int? = null + + val filterableType: FilterableType + get() { + this.filterableTypeOrdinal?.let { + return FilterableType.values()[it] + } + return FilterableType.ALL + } + fun createOrUpdateFilterConditions(filterConditionRows: ArrayList) { println("list of querys saving: ${filterConditionRows.map { it.id }}") println("list of querys previous: ${this.filterConditions.map { it.queryCondition.id }}") diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index c216bce8..19420e68 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -18,7 +18,6 @@ import io.realm.kotlin.where import kotlinx.android.synthetic.main.fragment_feed.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.LiveData -import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.interfaces.Editable import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Session @@ -138,8 +137,14 @@ class FeedFragment : RealmFragment(), RowRepresentableDelegate, FilterHandler { tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { when (tab.position) { - 0 -> recyclerView.adapter = feedSessionAdapter - 1 -> recyclerView.adapter = feedTransactionAdapter + 0 -> { + currentFilterable = FilterableType.SESSION + recyclerView.adapter = feedSessionAdapter + } + 1 -> { + currentFilterable = FilterableType.TRANSACTION + recyclerView.adapter = feedTransactionAdapter + } } } @@ -162,27 +167,42 @@ class FeedFragment : RealmFragment(), RowRepresentableDelegate, FilterHandler { betaLimitDate = sdf.parse("17/7/2019 10:00") val filter : Filter? = this.currentFilter(this.requireContext(), getRealm()) + val sessionFilter: Filter? = filter?.let { + if (it.filterableType == FilterableType.SESSION) { + it + } else { + null + } + } + + val transactionFilter: Filter? = filter?.let { + if (it.filterableType == FilterableType.TRANSACTION) { + it + } else { + null + } + } // Sessions - this.realmSessions = filter?.results() ?: run { getRealm().where().findAll() }.sort("startDate", Sort.DESCENDING) + this.realmSessions = sessionFilter?.results() ?: run { getRealm().where().findAll() }.sort("startDate", Sort.DESCENDING) this.realmSessions.addChangeListener { _, _ -> this.feedSessionAdapter.refreshData() this.feedSessionAdapter.notifyDataSetChanged() } - val pendingSessions = filter?.let { getRealm().where().alwaysFalse().findAll() } ?: run { getRealm().where().isNull("year").isNull("month").findAll().sort("startDate", Sort.DESCENDING) } - val distinctDateSessions = filter?.results("year", "month") ?: run { getRealm().where().distinct("year", "month").findAll() }.sort("startDate", Sort.DESCENDING) + val pendingSessions = sessionFilter?.let { getRealm().where().alwaysFalse().findAll() } ?: run { getRealm().where().isNull("year").isNull("month").findAll().sort("startDate", Sort.DESCENDING) } + val distinctDateSessions = sessionFilter?.results("year", "month") ?: run { getRealm().where().distinct("year", "month").findAll() }.sort("startDate", Sort.DESCENDING) this.feedSessionAdapter = FeedSessionRowRepresentableAdapter(this, realmSessions, pendingSessions, distinctDateSessions) // Transactions - this.realmTransactions = getRealm().where().findAll().sort("date", Sort.DESCENDING) + this.realmTransactions = transactionFilter?.results() ?: run { getRealm().where().findAll()}.sort("date", Sort.DESCENDING) this.realmTransactions.addChangeListener { _, _ -> this.feedTransactionAdapter.refreshData() this.feedTransactionAdapter.notifyDataSetChanged() } - val distinctDateTransactions = getRealm().where().distinct("year", "month").findAll().sort("date", Sort.DESCENDING) + val distinctDateTransactions = transactionFilter?.results("year", "month") ?: run { getRealm().where().distinct("year", "month").findAll() }.sort("date", Sort.DESCENDING) this.feedTransactionAdapter = FeedTransactionRowRepresentableAdapter(this, realmTransactions, distinctDateTransactions) val viewManager = SmoothScrollLinearLayoutManager(requireContext()) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt index 9aeb056d..31741212 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt @@ -158,7 +158,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource, isUpdating = true } ?: run { realm.beginTransaction() - currentFilter = Filter.newInstance(realm) + currentFilter = Filter.newInstance(realm, this.filterableType.ordinal) realm.commitTransaction() } From 7c2fa52db7236f676811a69b95100f42c5c1fd97 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 15 May 2019 12:00:48 +0200 Subject: [PATCH 2/5] add transaction filtering management --- .../net/pokeranalytics/android/model/filter/Query.kt | 12 +++++++++++- .../android/model/filter/QueryCondition.kt | 7 +++++++ .../pokeranalytics/android/model/realm/Session.kt | 2 +- .../android/model/realm/Transaction.kt | 6 +++++- .../ui/view/rowrepresentable/FilterSectionRow.kt | 4 +--- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt index 2b493d0d..bbb8aec4 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt @@ -67,7 +67,17 @@ class Query { } } - return realmQuery + val queryLastGame = this.conditions.filter { + it is QueryCondition.LastGame + }.firstOrNull() + val queryLastSession = this.conditions.filter { + it is QueryCondition.LastSession + }.firstOrNull() + + queryLastGame?.let { + + } + return realmQuery } fun merge(query: Query) : Query { 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 63f246b8..b85d736e 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 @@ -473,6 +473,13 @@ sealed class QueryCondition : FilterElementRow { calendar.add(Calendar.HOUR_OF_DAY, -24) return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, calendar.time.endOfDay()) } + is PastDay -> { + val startDate = Date() + val calendar = Calendar.getInstance() + calendar.time = startDate + calendar.add(Calendar.DAY_OF_YEAR, -singleValue) + return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) + } is DuringThisWeek -> { val startDate = Date() val calendar = Calendar.getInstance() 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 56d5b759..05253c97 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 @@ -91,7 +91,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek" AnyMonthOfYear::class.java -> "month" AnyYear::class.java -> "year" - IsToday::class.java, WasYesterday::class.java, WasTodayAndYesterday::class.java, DuringThisYear::class.java, DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate" + PastDay::class.java, IsToday::class.java, WasYesterday::class.java, WasTodayAndYesterday::class.java, DuringThisYear::class.java, DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate" StartedFromTime::class.java -> "startDateHourMinuteComponent" EndedToTime::class.java -> "endDateHourMinuteComponent" Duration::class.java -> "netDuration" diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt index 0ae2ce7d..56296685 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Transaction.kt @@ -37,8 +37,12 @@ open class Transaction : RealmObject(), Manageable, StaticRowRepresentableDataSo return when (queryCondition) { QueryCondition.AnyBankroll::class.java -> "bankroll.id" - QueryCondition.AnyTransactionType::class.java -> "type" + QueryCondition.AnyTransactionType::class.java -> "type.id" QueryCondition.StartedFromDate::class.java, QueryCondition.StartedToDate::class.java -> "date" + QueryCondition.AnyDayOfWeek::class.java, QueryCondition.IsWeekEnd::class.java, QueryCondition.IsWeekDay::class.java -> "dayOfWeek" + QueryCondition.AnyMonthOfYear::class.java -> "month" + QueryCondition.AnyYear::class.java -> "year" + QueryCondition.PastDay::class.java, QueryCondition.IsToday::class.java, QueryCondition.WasYesterday::class.java, QueryCondition.WasTodayAndYesterday::class.java, QueryCondition.DuringThisYear::class.java, QueryCondition.DuringThisMonth::class.java, QueryCondition.DuringThisWeek::class.java -> "date" else -> null } } 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 831e4f8a..4895ef45 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 @@ -113,9 +113,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { addAll(QueryCondition.moreOrLess()) addAll(QueryCondition.moreOrLess()) } - TRANSACTION_TYPES -> arrayListOf().apply { - - } + TRANSACTION_TYPES -> Criteria.TransactionTypes.queryConditions.mapFirstCondition() else -> arrayListOf() }.apply { this.forEach { From 03bd21997e976c86390e8432d875a92b1963f01e Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Wed, 15 May 2019 16:25:43 +0200 Subject: [PATCH 3/5] add a localizedName method to query class requiring a context --- .../pokeranalytics/android/model/filter/Query.kt | 15 +++++---------- .../android/model/filter/QueryCondition.kt | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt index bbb8aec4..f4e0106e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt @@ -1,8 +1,7 @@ package net.pokeranalytics.android.model.filter -import android.content.Context import io.realm.RealmQuery -import net.pokeranalytics.android.R +import io.realm.kotlin.where fun List.mapFirstCondition() : List { return this.map { it.conditions.first() } @@ -67,15 +66,11 @@ class Query { } } - val queryLastGame = this.conditions.filter { - it is QueryCondition.LastGame + val queryLast = this.conditions.filter { + it is QueryCondition.Last }.firstOrNull() - val queryLastSession = this.conditions.filter { - it is QueryCondition.LastSession - }.firstOrNull() - - queryLastGame?.let { - + queryLast?.let { + return realmQuery.limit((it as QueryCondition.Last).singleValue.toLong()) } return realmQuery } 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 b85d736e..5db0d3ad 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 @@ -348,7 +348,7 @@ sealed class QueryCondition : FilterElementRow { } } - open class TournamentFinalPosition(): ListOfInt() { + class TournamentFinalPosition(): ListOfInt() { constructor(operator: Operator, finalPosition: Int) : this() { this.operator = operator this.listOfValues = arrayListOf(finalPosition) From df3ac66b1f2c62a10ca7d94eac0ca5da7844fba9 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 16 May 2019 14:41:18 +0200 Subject: [PATCH 4/5] merge conflict fix --- .../android/model/filter/Query.kt | 2 + .../android/model/filter/QueryCondition.kt | 95 +++++++++++-------- .../rowrepresentable/FilterCategoryRow.kt | 4 +- .../view/rowrepresentable/FilterSectionRow.kt | 2 +- .../util/extensions/NumbersExtension.kt | 4 +- 5 files changed, 63 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt index f4e0106e..6f5baf3c 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt @@ -1,7 +1,9 @@ package net.pokeranalytics.android.model.filter +import android.content.Context import io.realm.RealmQuery import io.realm.kotlin.where +import net.pokeranalytics.android.R fun List.mapFirstCondition() : List { return this.map { it.conditions.first() } 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 5db0d3ad..7a4e5961 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 @@ -80,9 +80,7 @@ sealed class QueryCondition : FilterElementRow { MORE, LESS, EQUALS, - BETWEEN, - BETWEEN_RIGHT_EXCLUSIVE, - BETWEEN_LEFT_EXCLUSIVE, + TRUE, ; } @@ -111,7 +109,7 @@ sealed class QueryCondition : FilterElementRow { } } - open var operator: Operator = Operator.ANY + abstract var operator: Operator abstract class ListOfValues: QueryCondition(), Comparable> where T:Comparable { @@ -138,29 +136,37 @@ sealed class QueryCondition : FilterElementRow { abstract class ListOfDouble: ListOfValues() { open var sign: Int = 1 - + override var operator: Operator = Operator.ANY override var listOfValues = arrayListOf(0.0) override fun updateValueBy(filterCondition: FilterCondition) { super.updateValueBy(filterCondition) listOfValues = filterCondition.getValues() } override fun labelForValue(value: Double, context: Context): String { - return value.toCurrency(UserDefaults.currency) + val prefix = this.resId?.let { + context.getString(it)+" " + } ?: "" + return prefix+value.toCurrency(UserDefaults.currency) } } abstract class ListOfInt: ListOfValues() { + override var operator: Operator = Operator.ANY override var listOfValues = arrayListOf(0) override fun updateValueBy(filterCondition: FilterCondition) { super.updateValueBy(filterCondition) listOfValues = filterCondition.getValues() } override fun labelForValue(value: Int, context: Context): String { - return value.toString() + val prefix = this.resId?.let { + context.getString(it)+" " + } ?: "" + return prefix+value.toString() } } abstract class ListOfString: ListOfValues() { + override var operator: Operator = Operator.ANY override var listOfValues = ArrayList() override fun labelForValue(value: String, context: Context): String { return value } override fun updateValueBy(filterCondition: FilterCondition) { @@ -171,8 +177,12 @@ sealed class QueryCondition : FilterElementRow { abstract class SingleDate: SingleValue() { override fun labelForValue(value: Date, context: Context): String { - return value.toString() + val prefix = this.resId?.let { + context.getString(it)+" " + } ?: "" + return prefix+value.toString() } + override var listOfValues = ArrayList() override var singleValue: Date @@ -190,8 +200,12 @@ sealed class QueryCondition : FilterElementRow { abstract class SingleInt: SingleValue() { override fun labelForValue(value: Int, context: Context): String { - return value.toString() + val prefix = this.resId?.let { + context.getString(it)+" " + } ?: "" + return prefix+value.toString() } + override var singleValue: Int get() { return listOfValues.firstOrNull() ?: 0 } set(value) { @@ -205,7 +219,12 @@ sealed class QueryCondition : FilterElementRow { } } - override fun getDisplayName(context: Context): String { return baseId } + override fun getDisplayName(context: Context): String { + this.resId?.let { + return context.getString(it) + } + return baseId + } override var filterSectionRow: FilterSectionRow = FilterSectionRow.CASH_TOURNAMENT @@ -250,21 +269,17 @@ sealed class QueryCondition : FilterElementRow { override val showTime: Boolean = true } - object IsLive : QueryCondition() { - override fun getDisplayName(context: Context): String { return "Live" } + abstract class TrueQueryCondition: QueryCondition() { + override var operator: Operator = Operator.TRUE } - object IsCash : QueryCondition() { - override fun getDisplayName(context: Context): String { return "Cash" } - } + object IsLive : TrueQueryCondition() - object IsOnline : QueryCondition() { - override fun getDisplayName(context: Context): String { return "Online" } - } + object IsCash : TrueQueryCondition() - object IsTournament : QueryCondition() { - override fun getDisplayName(context: Context): String { return "Tournament" } - } + object IsOnline : TrueQueryCondition() + + object IsTournament : TrueQueryCondition() class AnyBankroll(): QueryDataCondition() { override var entity: Class = Bankroll::class.java @@ -336,8 +351,12 @@ sealed class QueryCondition : FilterElementRow { class AnyBlind: ListOfString() - class LastGame: SingleInt() - class LastSession: SingleInt() + object Last: SingleInt() { + override var operator = Operator.EQUALS + override fun getDisplayName(context: Context): String { + return "${context.getString(R.string.last_i_records)} $singleValue" + } + } class NumberOfTable: ListOfInt() @@ -356,6 +375,7 @@ sealed class QueryCondition : FilterElementRow { } open class NetAmount: ListOfDouble() + class NetAmountWon: NetAmount() class NetAmountLost: NetAmount() { override var sign: Int = -1 } @@ -392,26 +412,31 @@ sealed class QueryCondition : FilterElementRow { } } - object IsWeekDay: QueryCondition() - object IsWeekEnd: QueryCondition() - object IsToday: QueryCondition() - object WasYesterday: QueryCondition() - object WasTodayAndYesterday: QueryCondition() - object DuringThisWeek: QueryCondition() - object DuringThisMonth: QueryCondition() - object DuringThisYear: QueryCondition() + object IsWeekDay: TrueQueryCondition() + object IsWeekEnd: TrueQueryCondition() + object IsToday: TrueQueryCondition() + object WasYesterday: TrueQueryCondition() + object WasTodayAndYesterday: TrueQueryCondition() + object DuringThisWeek: TrueQueryCondition() + object DuringThisMonth: TrueQueryCondition() + object DuringThisYear: TrueQueryCondition() class TournamentFee: ListOfDouble() { override fun labelForValue(value: Double, context: Context): String { - return value.toCurrency(UserDefaults.currency) + val prefix = this.resId?.let { + context.getString(it)+" " + } ?: "" + return prefix+value.toCurrency(UserDefaults.currency) } } class PastDay: SingleInt() { + override var operator = Operator.EQUALS override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal } class Duration: SingleInt() { + override var operator = Operator.EQUALS var minutes:Int get() { return singleValue } set(value) { listOfValues = arrayListOf(value) } @@ -591,8 +616,6 @@ sealed class QueryCondition : FilterElementRow { get() { return when (this) { is PastDay -> RowViewType.TITLE_VALUE_CHECK.ordinal - is LastGame -> RowViewType.TITLE_VALUE_CHECK.ordinal - is LastSession -> RowViewType.TITLE_VALUE_CHECK.ordinal else -> { when (this.operator) { Operator.MORE -> RowViewType.TITLE_VALUE_CHECK.ordinal @@ -607,8 +630,6 @@ sealed class QueryCondition : FilterElementRow { get() { return when (this) { is PastDay -> BottomSheetType.EDIT_TEXT - is LastGame -> BottomSheetType.EDIT_TEXT - is LastSession -> BottomSheetType.EDIT_TEXT else -> { when (this.operator) { Operator.MORE -> BottomSheetType.EDIT_TEXT @@ -637,8 +658,6 @@ sealed class QueryCondition : FilterElementRow { is IsWeekDay -> R.string.week_days is IsWeekEnd -> R.string.weekend is PastDay -> R.string.period_in_days - is LastGame -> R.string.last_records - is LastSession -> R.string.last_sessions is NetAmountWon -> { when (this.operator) { Operator.MORE -> R.string.won_amount_more_than 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 cca2e114..72cc0391 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 @@ -16,7 +16,7 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In GENERAL(R.string.general), DATE(R.string.date), TIME_FRAME(R.string.duration), - SESSIONS(R.string.sessions), + //SESSIONS(R.string.sessions), CASH(R.string.cash), TOURNAMENT(R.string.tournament), ONLINE(R.string.online), @@ -92,7 +92,7 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In SESSION_DURATION, TIME_FRAME_RANGE ) - SESSIONS -> arrayListOf(FilterSectionRow.SESSIONS) + //SESSIONS -> arrayListOf(FilterSectionRow.SESSIONS) BANKROLLS -> arrayListOf( BANKROLL ) 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 4895ef45..06e24bd3 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 @@ -87,7 +87,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable { TIME_FRAME_RANGE -> arrayListOf(QueryCondition.StartedFromTime(), QueryCondition.EndedToTime()) // Sessions - SESSIONS -> arrayListOf(QueryCondition.LastGame(), QueryCondition.LastSession()) + //SESSIONS -> arrayListOf(QueryCondition.LastGame(), QueryCondition.LastSession()) // Cash BLIND -> Criteria.Blinds.queryConditions.mapFirstCondition() diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/NumbersExtension.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/NumbersExtension.kt index 1313248c..39a3f043 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/NumbersExtension.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/NumbersExtension.kt @@ -38,9 +38,7 @@ fun Double.round(): String { } fun Double.roundOffDecimal(): Double { - val df = DecimalFormat("#.##") - df.roundingMode = RoundingMode.CEILING - return df.format(this).toDouble() + return this.toBigDecimal().setScale(2, RoundingMode.CEILING).toDouble() } fun Double.formatted(): String { From fd2fa40e2071a1c722598353cea86903204517b2 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 16 May 2019 16:00:24 +0200 Subject: [PATCH 5/5] fix issues with filter titles --- .../android/model/filter/QueryCondition.kt | 47 ++++++++++++++++--- .../android/model/realm/Session.kt | 2 +- 2 files changed, 41 insertions(+), 8 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 7a4e5961..650ef278 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 @@ -20,10 +20,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.UserDefaults -import net.pokeranalytics.android.util.extensions.endOfDay -import net.pokeranalytics.android.util.extensions.hourMinute -import net.pokeranalytics.android.util.extensions.startOfDay -import net.pokeranalytics.android.util.extensions.toCurrency +import net.pokeranalytics.android.util.extensions.* import java.text.DateFormatSymbols import java.util.* import kotlin.collections.ArrayList @@ -180,7 +177,7 @@ sealed class QueryCondition : FilterElementRow { val prefix = this.resId?.let { context.getString(it)+" " } ?: "" - return prefix+value.toString() + return prefix+value.shortDate() } override var listOfValues = ArrayList() @@ -354,17 +351,32 @@ sealed class QueryCondition : FilterElementRow { object Last: SingleInt() { override var operator = Operator.EQUALS override fun getDisplayName(context: Context): String { + //TODO update string "last %i" return "${context.getString(R.string.last_i_records)} $singleValue" } } - class NumberOfTable: ListOfInt() + class NumberOfTable: ListOfInt() { + override fun labelForValue(value: Int, context: Context): String { + val prefix = this.resId?.let { + context.getString(it) + " " + } ?: "" + return prefix + value.toString() + " " + context.getString(R.string.tables) + } + } class NumberOfRebuy(): ListOfDouble() { constructor(operator: Operator, numberOfRebuy: Double) : this() { this.operator = operator this.listOfValues = arrayListOf(numberOfRebuy) } + + override fun labelForValue(value: Double, context: Context): String { + val prefix = this.resId?.let { + context.getString(it) + " " + } ?: "" + return prefix + value.toString() + } } class TournamentFinalPosition(): ListOfInt() { @@ -372,6 +384,13 @@ sealed class QueryCondition : FilterElementRow { this.operator = operator this.listOfValues = arrayListOf(finalPosition) } + + override fun labelForValue(value: Int, context: Context): String { + val prefix = this.resId?.let { + context.getString(it) + " " + } ?: "" + return prefix + value.toString() + } } open class NetAmount: ListOfDouble() @@ -379,7 +398,14 @@ sealed class QueryCondition : FilterElementRow { class NetAmountWon: NetAmount() class NetAmountLost: NetAmount() { override var sign: Int = -1 } - class TournamentNumberOfPlayer: ListOfInt() + class TournamentNumberOfPlayer: ListOfInt() { + override fun labelForValue(value: Int, context: Context): String { + val prefix = this.resId?.let { + context.getString(it) + " " + } ?: "" + return prefix + value.toString() + context.getString(R.string.number_of_players) + } + } class StartedFromDate: DateQuery() { override var operator = Operator.MORE } class StartedToDate: DateQuery() { override var operator = Operator.LESS } @@ -433,6 +459,13 @@ sealed class QueryCondition : FilterElementRow { class PastDay: SingleInt() { override var operator = Operator.EQUALS override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal + + override fun labelForValue(value: Int, context: Context): String { + val suffix = this.resId?.let { + " "+context.getString(it) + } ?: "" + return value.toString() + suffix + } } class Duration: SingleInt() { 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 05253c97..33123a35 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 @@ -80,7 +80,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat AnyTableSize::class.java -> "tableSize" AnyTournamentType::class.java -> "tournamentType" AnyBlind::class.java -> "blinds" - NumberOfTable::class.java -> "numberOfTable" + NumberOfTable::class.java -> "numberOfTables" NetAmountWon::class.java, NetAmountLost::class.java -> "computableResults.ratedNet" NumberOfRebuy::class.java -> "result.numberOfRebuy" TournamentNumberOfPlayer::class.java -> "result.tournamentNumberOfPlayers"