clean up and fix bug on filter UI

feature/top10
Razmig Sarkissian 7 years ago
parent ee620baf9a
commit 0ce48fc39f
  1. 16
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt
  2. 2
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  3. 123
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  4. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  5. 1
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt
  6. 6
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  7. 21
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
  8. 10
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt
  9. 16
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt
  10. 45
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSectionRow.kt

@ -472,8 +472,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val s2 = Session.testInstance(netResult = 570.0) val s2 = Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.NetResult() val filter = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.NetResult(QueryCondition.Operator.MORE).apply { listOfValues = arrayListOf(204.0) } val filterElementRow = QueryCondition.more<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(204.0) }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -497,8 +497,8 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filter = QueryCondition.NetResult() val filter = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.NetResult(QueryCondition.Operator.LESS).apply { listOfValues = arrayListOf(540.0) } val filterElementRow = QueryCondition.less<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(540.0) }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filter.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
@ -522,13 +522,13 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
Session.testInstance(netResult = 570.0) Session.testInstance(netResult = 570.0)
realm.commitTransaction() realm.commitTransaction()
val filterMore = QueryCondition.NetResult() val filterMore = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.NetResult(QueryCondition.Operator.MORE).apply { listOfValues = arrayListOf(200.0) } val filterElementRow = QueryCondition.more<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(200.0) }
filterElementRow.filterSectionRow = FilterSectionRow.VALUE filterElementRow.filterSectionRow = FilterSectionRow.VALUE
filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow))) filterMore.updateValueMap(FilterCondition(arrayListOf(filterElementRow)))
val filterLess = QueryCondition.NetResult() val filterLess = QueryCondition.NetAmountWon()
val filterElementRow2 = QueryCondition.NetResult(QueryCondition.Operator.LESS).apply { listOfValues = arrayListOf(400.0) } val filterElementRow2 = QueryCondition.less<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(400.0) }
filterElementRow2.filterSectionRow = FilterSectionRow.VALUE filterElementRow2.filterSectionRow = FilterSectionRow.VALUE
filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2))) filterLess.updateValueMap(FilterCondition(arrayListOf(filterElementRow2)))

@ -52,7 +52,7 @@ class PokerAnalyticsApplication : Application() {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}")
// this.createFakeSessions() this.createFakeSessions()
} }
Patcher.patchBreaks() Patcher.patchBreaks()

@ -49,6 +49,10 @@ inline fun <reified T : Filterable> List<QueryCondition>.queryWith(query: RealmQ
sealed class QueryCondition : FilterElementRow { sealed class QueryCondition : FilterElementRow {
companion object { companion object {
inline fun < reified T:QueryCondition> more():T { return T::class.java.newInstance().apply { this.operator = Operator.MORE } }
inline fun < reified T:QueryCondition> less():T { return T::class.java.newInstance().apply { this.operator = Operator.LESS } }
inline fun < reified T:QueryCondition> moreOrLess():ArrayList<T> { return arrayListOf(more(), less()) }
fun <T:QueryCondition> valueOf(name:String) : T { fun <T:QueryCondition> valueOf(name:String) : T {
val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin
val instance = kClass.objectInstance ?: kClass.java.newInstance() val instance = kClass.objectInstance ?: kClass.java.newInstance()
@ -57,7 +61,7 @@ sealed class QueryCondition : FilterElementRow {
inline fun <reified T:Identifiable>getInstance(): QueryCondition { inline fun <reified T:Identifiable>getInstance(): QueryCondition {
return when (T::class.java) { return when (T::class.java) {
AnyBankroll::class.java -> AnyBankroll() Bankroll::class.java -> AnyBankroll()
Game::class.java -> AnyGame() Game::class.java -> AnyGame()
Location::class.java -> AnyLocation() Location::class.java -> AnyLocation()
TournamentName::class.java -> AnyTournamentName() TournamentName::class.java -> AnyTournamentName()
@ -97,7 +101,12 @@ sealed class QueryCondition : FilterElementRow {
val baseId = this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName val baseId = this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName
val id: List<String> get() { val id: List<String> get() {
when (this.operator) {
Operator.MORE, Operator.LESS -> return listOf("$baseId+${this.operator.name}")
}
return when (this) { return when (this) {
is SingleValue<*> -> listOf(baseId)
is ListOfValues<*> -> { is ListOfValues<*> -> {
if (listOfValues.isEmpty()) { return listOf(baseId) } if (listOfValues.isEmpty()) { return listOf(baseId) }
this.listOfValues.map{ "$baseId+$it" } this.listOfValues.map{ "$baseId+$it" }
@ -131,7 +140,9 @@ sealed class QueryCondition : FilterElementRow {
} }
abstract class ListOfDouble: ListOfValues<Double>() { abstract class ListOfDouble: ListOfValues<Double>() {
override var listOfValues = ArrayList<Double>() open var sign: Int = 1
override var listOfValues = arrayListOf(0.0)
override fun updateValueMap(filterCondition: FilterCondition) { override fun updateValueMap(filterCondition: FilterCondition) {
super.updateValueMap(filterCondition) super.updateValueMap(filterCondition)
listOfValues = filterCondition.getValues() listOfValues = filterCondition.getValues()
@ -142,9 +153,10 @@ sealed class QueryCondition : FilterElementRow {
} }
abstract class ListOfInt: ListOfValues<Int>() { abstract class ListOfInt: ListOfValues<Int>() {
override var listOfValues = ArrayList<Int>() override var listOfValues = arrayListOf(0)
override fun updateValueMap(filterCondition: FilterCondition) { override fun updateValueMap(filterCondition: FilterCondition) {
super.updateValueMap(filterCondition) super.updateValueMap(filterCondition)
println("<<<< updateValueMap ${filterCondition.intValues}")
listOfValues = filterCondition.getValues() listOfValues = filterCondition.getValues()
} }
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
@ -176,20 +188,6 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
abstract class SingleDouble: SingleValue<Double>() {
override fun labelForValue(value: Double): String {
return value.toCurrency(UserDefaults.currency)
}
override var singleValue: Double
get() { return listOfValues.firstOrNull() ?: 0.0 }
set(value) { listOfValues.add(value) }
override fun updateValueMap(filterCondition: FilterCondition) {
super.updateValueMap(filterCondition)
singleValue = filterCondition.getValue()
}
}
abstract class SingleInt: SingleValue<Int>() { abstract class SingleInt: SingleValue<Int>() {
override fun labelForValue(value: Int): String { override fun labelForValue(value: Int): String {
return value.toString() return value.toString()
@ -242,9 +240,10 @@ sealed class QueryCondition : FilterElementRow {
abstract class DateQuery: SingleDate(), DateTime { abstract class DateQuery: SingleDate(), DateTime {
override val showTime: Boolean = false override val showTime: Boolean = false
} }
abstract class TimeQuery: SingleDate(), DateTime { abstract class TimeQuery: DateQuery() {
override val showTime: Boolean = true override val showTime: Boolean = true
} }
@ -327,30 +326,15 @@ sealed class QueryCondition : FilterElementRow {
class AnyBlind: ListOfString() class AnyBlind: ListOfString()
class LastGame: SingleInt() class LastGame: SingleInt()
class LastSession: SingleDate() class LastSession: SingleInt()
class NumberOfTable: ListOfInt() class NumberOfTable: ListOfInt()
class NetResult(): ListOfDouble() { open class NetAmountWon: ListOfDouble()
constructor(operator:Operator): this() { class NetAmountLost: NetAmountWon() { override var sign: Int = -1 }
this.operator = operator
}
}
class BuyIn: ListOfDouble()
class CashOut: ListOfDouble()
class Tips: ListOfDouble()
class NumberOfPlayer: ListOfInt() class NumberOfPlayer: ListOfInt()
class Rebuy(): ListOfDouble() {
constructor(operator:Operator): this() {
this.operator = operator
}
}
class StartedFromDate: DateQuery() { override var operator = Operator.MORE } class StartedFromDate: DateQuery() { override var operator = Operator.MORE }
class StartedToDate: DateQuery() { override var operator = Operator.LESS } class StartedToDate: DateQuery() { override var operator = Operator.LESS }
class EndedFromDate: DateQuery() { override var operator = Operator.MORE } class EndedFromDate: DateQuery() { override var operator = Operator.MORE }
@ -389,21 +373,32 @@ sealed class QueryCondition : FilterElementRow {
} }
} }
class PastDay: SingleInt() class PastDay: SingleInt() {
class Duration(): SingleInt() { override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal
constructor(operator:Operator): this() { }
this.operator = operator
}
class Duration: SingleInt() {
var minutes:Int var minutes:Int
get() { return singleValue } get() { return singleValue }
set(value) { singleValue = value } set(value) { singleValue = value }
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT
} }
class StartedFromTime: TimeQuery() { override var operator = Operator.MORE } class StartedFromTime: TimeQuery() {
class EndedToTime: TimeQuery() { override var operator = Operator.LESS } override var operator = Operator.MORE
init {
this.singleValue = Date().startOfDay()
}
}
class HasComment: QueryCondition() class EndedToTime: TimeQuery() {
override var operator = Operator.LESS
init {
this.singleValue = Date().endOfDay()
}
}
/** /**
* main method of the enum * main method of the enum
@ -472,9 +467,8 @@ sealed class QueryCondition : FilterElementRow {
when (this) { when (this) {
is SingleDate -> realmQuery.equalTo(fieldName, singleValue) is SingleDate -> realmQuery.equalTo(fieldName, singleValue)
is SingleInt -> realmQuery.equalTo(fieldName, singleValue) is SingleInt -> realmQuery.equalTo(fieldName, singleValue)
is SingleDouble -> realmQuery.equalTo(fieldName, singleValue)
is ListOfInt -> realmQuery.equalTo(fieldName, listOfValues.first()) is ListOfInt -> realmQuery.equalTo(fieldName, listOfValues.first())
is ListOfDouble -> realmQuery.equalTo(fieldName, listOfValues.first()) is ListOfDouble -> realmQuery.equalTo(fieldName, listOfValues.first() * sign)
is ListOfString -> realmQuery.equalTo(fieldName, listOfValues.first()) is ListOfString -> realmQuery.equalTo(fieldName, listOfValues.first())
else -> realmQuery else -> realmQuery
} }
@ -483,9 +477,8 @@ sealed class QueryCondition : FilterElementRow {
when (this) { when (this) {
is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue) is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue)
is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue) is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue)
is SingleDouble -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue)
is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first())
is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first()) is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * sign)
else -> realmQuery else -> realmQuery
} }
} }
@ -493,9 +486,8 @@ sealed class QueryCondition : FilterElementRow {
when (this) { when (this) {
is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue) is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue)
is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue) is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue)
is SingleDouble -> realmQuery.lessThanOrEqualTo(fieldName, singleValue)
is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first())
is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first()) is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first() * sign)
else -> realmQuery else -> realmQuery
} }
} }
@ -506,7 +498,7 @@ sealed class QueryCondition : FilterElementRow {
realmQuery realmQuery
} }
is ListOfDouble -> { is ListOfDouble -> {
listOfValues.forEach { realmQuery.equalTo(fieldName, it) } listOfValues.forEach { realmQuery.equalTo(fieldName, it * sign) }
realmQuery realmQuery
} }
is ListOfString -> { is ListOfString -> {
@ -537,10 +529,13 @@ sealed class QueryCondition : FilterElementRow {
override val viewType: Int override val viewType: Int
get() { get() {
return when (this) { return when (this) {
is PastDay, is StartedFromDate, is EndedToDate, is StartedFromTime, is EndedToTime, is LastGame, is LastSession, is Duration -> RowViewType.TITLE_VALUE_CHECK.ordinal is PastDay -> RowViewType.TITLE_VALUE_CHECK.ordinal
is LastGame -> RowViewType.TITLE_VALUE_CHECK.ordinal
is LastSession -> RowViewType.TITLE_VALUE_CHECK.ordinal
else -> { else -> {
when (this.operator) { when (this.operator) {
Operator.MORE, Operator.LESS -> RowViewType.TITLE_VALUE_CHECK.ordinal Operator.MORE -> RowViewType.TITLE_VALUE_CHECK.ordinal
Operator.LESS -> RowViewType.TITLE_VALUE_CHECK.ordinal
else -> RowViewType.TITLE_CHECK.ordinal else -> RowViewType.TITLE_CHECK.ordinal
} }
} }
@ -550,11 +545,13 @@ sealed class QueryCondition : FilterElementRow {
override val bottomSheetType: BottomSheetType override val bottomSheetType: BottomSheetType
get() { get() {
return when (this) { return when (this) {
is PastDay, is LastGame, is LastSession -> BottomSheetType.EDIT_TEXT is PastDay -> BottomSheetType.EDIT_TEXT
is Duration -> BottomSheetType.DOUBLE_EDIT_TEXT is LastGame -> BottomSheetType.EDIT_TEXT
is LastSession -> BottomSheetType.EDIT_TEXT
else -> { else -> {
when (this.operator) { when (this.operator) {
Operator.MORE, Operator.LESS -> BottomSheetType.EDIT_TEXT Operator.MORE -> BottomSheetType.EDIT_TEXT
Operator.LESS -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE else -> BottomSheetType.NONE
} }
} }
@ -581,6 +578,20 @@ sealed class QueryCondition : FilterElementRow {
is PastDay -> R.string.period_in_days is PastDay -> R.string.period_in_days
is LastGame -> R.string.last_records is LastGame -> R.string.last_records
is LastSession -> R.string.last_sessions is LastSession -> R.string.last_sessions
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
}
}
else -> { else -> {
when (this.operator) { when (this.operator) {
Operator.MORE -> R.string.more_than Operator.MORE -> R.string.more_than

@ -110,7 +110,7 @@ open class Filter : RealmObject() {
*/ */
fun loadValueForElement(filterElementRow: QueryCondition) { fun loadValueForElement(filterElementRow: QueryCondition) {
val filtered = filterConditions.filter { val filtered = filterConditions.filter {
it.queryCondition == filterElementRow.id it.queryCondition.id == filterElementRow.id
} }
if (filtered.isNotEmpty()) { if (filtered.isNotEmpty()) {
return filterElementRow.updateValueMap(filtered.first()) return filterElementRow.updateValueMap(filtered.first())

@ -20,7 +20,6 @@ open class FilterCondition() : RealmObject() {
this.operator = row.operator.ordinal this.operator = row.operator.ordinal
when (row) { when (row) {
is QueryCondition.SingleInt -> this.setValue(row.singleValue) is QueryCondition.SingleInt -> this.setValue(row.singleValue)
is QueryCondition.SingleDouble -> this.setValue(row.singleValue)
is QueryCondition.SingleDate -> this.setValue(row.singleValue) is QueryCondition.SingleDate -> this.setValue(row.singleValue)
is QueryCondition.ListOfDouble -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfDouble).listOfValues }) is QueryCondition.ListOfDouble -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfDouble).listOfValues })
is QueryCondition.ListOfInt -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfInt).listOfValues }) is QueryCondition.ListOfInt -> this.setValues(filterElementRows.flatMap { (it as QueryCondition.ListOfInt).listOfValues })

@ -78,12 +78,8 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
AnyTableSize::class.java -> "tableSize" AnyTableSize::class.java -> "tableSize"
AnyTournamentType::class.java -> "tournamentType" AnyTournamentType::class.java -> "tournamentType"
AnyBlind::class.java -> "blinds" AnyBlind::class.java -> "blinds"
HasComment::class.java -> "comment"
NumberOfTable::class.java -> "numberOfTable" NumberOfTable::class.java -> "numberOfTable"
NetResult::class.java -> "computableResults.ratedNet" NetAmountWon::class.java -> "computableResults.ratedNet"
BuyIn::class.java -> "result.buyin"
CashOut::class.java -> "result.cashout"
Tips::class.java -> "result.tips"
NumberOfPlayer::class.java -> "tournamentNumberOfPlayers" NumberOfPlayer::class.java -> "tournamentNumberOfPlayers"
TournamentFee::class.java -> "tournamentEntryFee" TournamentFee::class.java -> "tournamentEntryFee"
StartedFromDate::class.java, StartedToDate::class.java -> "startDate" StartedFromDate::class.java, StartedToDate::class.java -> "startDate"

@ -72,20 +72,25 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
when (row) { when (row) {
is QueryCondition.DateQuery -> DateTimePickerManager.create(requireContext(), row, this, row.singleValue, onlyDate = !row.showTime, onlyTime = row.showTime) is QueryCondition.DateQuery -> DateTimePickerManager.create(requireContext(), row, this, row.singleValue, onlyDate = !row.showTime, onlyTime = row.showTime)
is QueryCondition.Duration-> { is QueryCondition.Duration -> {
val hours = if (row.minutes / 60 > 0) (row.minutes / 60).toString() else "" val hours = if (row.minutes / 60 > 0) (row.minutes / 60).toString() else ""
val minutes = if (row.minutes % 60 > 0) (row.minutes % 60).toString() else "" val minutes = if (row.minutes % 60 > 0) (row.minutes % 60).toString() else ""
val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes)) val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes))
BottomSheetFragment.create(fragmentManager, row, this, data, true) BottomSheetFragment.create(fragmentManager, row, this, data, true)
} }
is QueryCondition.SingleInt -> {
val valueAsString = if (row.singleValue > 0) row.singleValue.toString() else ""
val data = row.editingDescriptors(mapOf("valueAsString" to valueAsString))
BottomSheetFragment.create(fragmentManager, row, this, data, true)
}
is QueryCondition.ListOfDouble -> { is QueryCondition.ListOfDouble -> {
val amount = if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else "" val amount = if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else ""
val data = row.editingDescriptors(mapOf("amount" to amount)) val data = row.editingDescriptors(mapOf("amount" to amount))
BottomSheetFragment.create(fragmentManager, row, this, data, true) BottomSheetFragment.create(fragmentManager, row, this, data, true)
} }
is QueryCondition.SingleInt -> { is QueryCondition.ListOfInt -> {
val valueAsString = if (row.singleValue > 0) row.singleValue.toString() else "" val amount = if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else ""
val data = row.editingDescriptors(mapOf("valueAsString" to valueAsString)) val data = row.editingDescriptors(mapOf("amount" to amount))
BottomSheetFragment.create(fragmentManager, row, this, data, true) BottomSheetFragment.create(fragmentManager, row, this, data, true)
} }
else -> { else -> {
@ -98,8 +103,12 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
return when (row) { return when (row) {
is QueryCondition.DateQuery -> if (row.showTime) row.singleValue.shortTime() else row.singleValue.shortDate() is QueryCondition.DateQuery -> if (row.showTime) row.singleValue.shortTime() else row.singleValue.shortDate()
is QueryCondition.Duration -> row.minutes.toMinutes(requireContext()) is QueryCondition.Duration -> row.minutes.toMinutes(requireContext())
is QueryCondition.ListOfDouble -> if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else NULL_TEXT
is QueryCondition.SingleInt -> if (row.singleValue > 0) row.singleValue.toString() else NULL_TEXT is QueryCondition.SingleInt -> if (row.singleValue > 0) row.singleValue.toString() else NULL_TEXT
is QueryCondition.ListOfDouble -> if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else NULL_TEXT
is QueryCondition.ListOfInt -> {
println("<<<<< ${row.listOfValues}")
if (row.listOfValues.first() > 0) row.listOfValues.first().toString() else NULL_TEXT
}
else -> super.stringForRow(row) else -> super.stringForRow(row)
} }
} }
@ -133,6 +142,8 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresent
} }
} }
is QueryCondition.SingleInt -> row.singleValue = if (value != null && value is String) value.toInt() else 0 is QueryCondition.SingleInt -> row.singleValue = if (value != null && value is String) value.toInt() else 0
is QueryCondition.ListOfDouble-> row.listOfValues = arrayListOf(if (value != null && value is String) value.toDouble() else 0.0)
is QueryCondition.ListOfInt-> row.listOfValues = arrayListOf(if (value != null && value is String) value.toInt() else 0)
} }
// Remove the row before updating the selected rows list // Remove the row before updating the selected rows list

@ -48,20 +48,21 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In
) )
TIME_FRAME -> arrayListOf( TIME_FRAME -> arrayListOf(
SESSION_DURATION, SESSION_DURATION,
RANGE TIME_FRAME_RANGE
) )
SESSIONS -> arrayListOf(FilterSectionRow.SESSIONS) SESSIONS -> arrayListOf(FilterSectionRow.SESSIONS)
BANKROLLS -> arrayListOf( BANKROLLS -> arrayListOf(
BANKROLL BANKROLL
) )
CASH -> arrayListOf( CASH -> arrayListOf(
BLIND, BLIND
CASH_RE_BUY_COUNT
) )
TOURNAMENT -> arrayListOf( TOURNAMENT -> arrayListOf(
TOURNAMENT_TYPE, TOURNAMENT_TYPE,
TOURNAMENT_NAME, TOURNAMENT_NAME,
TOURNAMENT_FEATURE TOURNAMENT_FEATURE,
ENTRY_FEE,
NUMBER_OF_PLAYERS
) )
ONLINE -> arrayListOf( ONLINE -> arrayListOf(
MULTI_TABLING MULTI_TABLING
@ -70,7 +71,6 @@ enum class FilterCategoryRow(override val resId: Int?, override val viewType: In
LOCATION LOCATION
) )
PLAYERS -> arrayListOf( PLAYERS -> arrayListOf(
NUMBER_OF_PLAYERS,
MULTI_PLAYER MULTI_PLAYER
) )
RESULT -> arrayListOf( RESULT -> arrayListOf(

@ -12,6 +12,14 @@ import java.util.*
interface FilterElementRow : RowRepresentable { interface FilterElementRow : RowRepresentable {
override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? { override fun editingDescriptors(map: Map<String, Any?>): ArrayList<RowRepresentableEditDescriptor>? {
return when (this) { return when (this) {
is QueryCondition.Duration -> {
val hours: String? by map
val minutes: String? by map
arrayListOf(
RowRepresentableEditDescriptor(hours, R.string.hour, inputType = InputType.TYPE_CLASS_NUMBER),
RowRepresentableEditDescriptor(minutes, R.string.minute, inputType = InputType.TYPE_CLASS_NUMBER)
)
}
is QueryCondition.SingleInt -> { is QueryCondition.SingleInt -> {
val valueAsString: String? by map val valueAsString: String? by map
arrayListOf( arrayListOf(
@ -25,12 +33,10 @@ interface FilterElementRow : RowRepresentable {
RowRepresentableEditDescriptor(amount, R.string.amount, inputType = InputType.TYPE_CLASS_NUMBER) RowRepresentableEditDescriptor(amount, R.string.amount, inputType = InputType.TYPE_CLASS_NUMBER)
) )
} }
is QueryCondition.Duration -> { is QueryCondition.ListOfInt -> {
val hours: String? by map val amount: String? by map
val minutes: String? by map
arrayListOf( arrayListOf(
RowRepresentableEditDescriptor(hours, R.string.hour, inputType = InputType.TYPE_CLASS_NUMBER), RowRepresentableEditDescriptor(amount, R.string.amount, inputType = InputType.TYPE_CLASS_NUMBER)
RowRepresentableEditDescriptor(minutes, R.string.minute, inputType = InputType.TYPE_CLASS_NUMBER)
) )
} }
else -> super.editingDescriptors(map) else -> super.editingDescriptors(map)

@ -3,6 +3,7 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.filter.QueryCondition.NumberOfTable.*
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.ui.view.RowViewType
@ -20,7 +21,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
DAY_OF_WEEK(R.string.day_of_the_week), DAY_OF_WEEK(R.string.day_of_the_week),
MONTH_OF_YEAR(R.string.month_of_the_year), MONTH_OF_YEAR(R.string.month_of_the_year),
SESSION_DURATION(R.string.session_duration), SESSION_DURATION(R.string.session_duration),
RANGE(R.string.hour_slot), TIME_FRAME_RANGE(R.string.hour_slot),
SESSIONS(R.string.sessions), SESSIONS(R.string.sessions),
BLIND(R.string.blinds), BLIND(R.string.blinds),
CASH_RE_BUY_COUNT(R.string.rebuy_count), CASH_RE_BUY_COUNT(R.string.rebuy_count),
@ -31,7 +32,7 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
PLACE(R.string.final_position), PLACE(R.string.final_position),
PLAYERS_COUNT(R.string.players_count), PLAYERS_COUNT(R.string.players_count),
TOURNAMENT_RE_BUY_COUNT(R.string.rebuy_count), TOURNAMENT_RE_BUY_COUNT(R.string.rebuy_count),
BUY_IN(R.string.buyin), ENTRY_FEE(R.string.buyin),
MULTI_TABLING(R.string.multi_tabling), MULTI_TABLING(R.string.multi_tabling),
VALUE(R.string.value), VALUE(R.string.value),
LOCATION(R.string.locations), LOCATION(R.string.locations),
@ -80,44 +81,36 @@ enum class FilterSectionRow(override val resId: Int?) : RowRepresentable {
MONTH_OF_YEAR -> Criteria.MonthsOfYear.queryConditions MONTH_OF_YEAR -> Criteria.MonthsOfYear.queryConditions
// Duration // Duration
SESSION_DURATION -> arrayListOf(QueryCondition.Duration(QueryCondition.Operator.MORE), QueryCondition.Duration(QueryCondition.Operator.LESS)) SESSION_DURATION -> QueryCondition.moreOrLess<QueryCondition.Duration>()
/* TIME_FRAME_RANGE -> arrayListOf(QueryCondition.StartedFromTime(), QueryCondition.EndedToTime())
RANGE -> {
val fromTime = FromTime
fromTime.dateValue = Date().startOfDay()
val toTime = ToTime
toTime.dateValue = Date().endOfDay()
arrayListOf(fromTime, toTime)
}*/
// Sessions // Sessions
SESSIONS -> arrayListOf(QueryCondition.LastGame(), QueryCondition.LastSession()) SESSIONS -> arrayListOf(QueryCondition.LastGame(), QueryCondition.LastSession())
// Cash // Cash
BLIND -> Criteria.Blinds.queryConditions BLIND -> Criteria.Blinds.queryConditions
CASH_RE_BUY_COUNT -> arrayListOf( // CASH_RE_BUY_COUNT -> QueryCondition.moreOrLess<QueryCondition.Rebuy>()
QueryCondition.Rebuy(QueryCondition.Operator.MORE),
QueryCondition.Rebuy(QueryCondition.Operator.LESS)
)
// Tournament // Tournament
TOURNAMENT_TYPE -> Criteria.TournamentTypes.queryConditions TOURNAMENT_TYPE -> Criteria.TournamentTypes.queryConditions
COMPLETION_PERCENTAGE -> arrayListOf() // COMPLETION_PERCENTAGE -> arrayListOf()
PLACE -> arrayListOf() // PLACE -> QueryCondition.moreOrLess<QueryCondition.NumberOfPlayer>()
PLAYERS_COUNT -> arrayListOf() PLAYERS_COUNT -> QueryCondition.moreOrLess<QueryCondition.NumberOfPlayer>()
TOURNAMENT_RE_BUY_COUNT -> arrayListOf() // TOURNAMENT_RE_BUY_COUNT -> QueryCondition.moreOrLess<QueryCondition.BuyIn>()
BUY_IN -> arrayListOf() ENTRY_FEE -> Criteria.TournamentFees.queryConditions
TOURNAMENT_NAME -> Criteria.TournamentNames.queryConditions TOURNAMENT_NAME -> Criteria.TournamentNames.queryConditions
TOURNAMENT_FEATURE -> Criteria.TournamentFeatures.queryConditions TOURNAMENT_FEATURE -> Criteria.TournamentFeatures.queryConditions
LOCATION -> Criteria.Locations.queryConditions LOCATION -> Criteria.Locations.queryConditions
BANKROLL -> Criteria.Bankrolls.queryConditions BANKROLL -> Criteria.Bankrolls.queryConditions
MULTI_TABLING -> arrayListOf() MULTI_TABLING -> QueryCondition.moreOrLess<QueryCondition.NumberOfTable>()
NUMBER_OF_PLAYERS -> arrayListOf() // NUMBER_OF_PLAYERS -> QueryCondition.moreOrLess<QueryCondition.NumberOfPlayer>()
MULTI_PLAYER -> arrayListOf() // MULTI_PLAYER -> arrayListOf()
VALUE -> arrayListOf() VALUE -> arrayListOf<QueryCondition>().apply {
addAll(QueryCondition.moreOrLess<QueryCondition.NetAmountWon>())
addAll(QueryCondition.moreOrLess<QueryCondition.NetAmountLost>())
}
else -> arrayListOf() else -> arrayListOf()
}.apply { }.apply {
this.forEach { this.forEach {

Loading…
Cancel
Save