filterfix
Laurent 5 years ago
parent 7924e19fe3
commit fb0c5f7933
  1. 3
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  2. 7
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
  3. 29
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt
  4. 28
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt

@ -22,12 +22,9 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.*
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.UserDefaults
import net.pokeranalytics.android.util.extensions.* import net.pokeranalytics.android.util.extensions.*
import java.lang.Exception
import java.text.DateFormatSymbols import java.text.DateFormatSymbols
import java.text.NumberFormat import java.text.NumberFormat
import java.util.* import java.util.*
import kotlin.collections.ArrayList
import kotlin.reflect.full.primaryConstructor
/** /**
* Enum describing the way a query should be handled * Enum describing the way a query should be handled

@ -130,8 +130,8 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
is IntFilterItemRow -> { is IntFilterItemRow -> {
when (val condition = row.rawCondition) { when (val condition = row.rawCondition) {
is QueryCondition.Duration -> { is QueryCondition.Duration -> {
val hours: String? = (condition.minutes / 60).toString() val hours = (condition.minutes / 60).toString()
val minutes: String? = (condition.minutes % 60).toString() val minutes = (condition.minutes % 60).toString()
val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes)) val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes))
showBottomSheet(row, this, data, true) showBottomSheet(row, this, data, true)
} }
@ -195,7 +195,7 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
when (row) { when (row) {
is DateFilterItemRow -> { is DateFilterItemRow -> {
row.value = value as Date row.value = value as? Date
} }
is IntFilterItemRow -> { is IntFilterItemRow -> {
when (value) { when (value) {
@ -221,6 +221,7 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
row.value = minutes row.value = minutes
} }
} }
else -> { row.value = null }
} }
} }
is DoubleValueListFilterItemRow -> { is DoubleValueListFilterItemRow -> {

@ -3,18 +3,15 @@ package net.pokeranalytics.android.ui.modules.filter
import android.content.Context import android.content.Context
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
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
import net.pokeranalytics.android.ui.view.rowrepresentable.BaseFilterItemRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterItemRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterItemRow
import net.pokeranalytics.android.ui.view.rowrepresentable.ValueListFilterItemRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterValueHolder
import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.NULL_TEXT
import timber.log.Timber
class FilterDetailsViewModelFactory(var filter: Filter, var categoryRow: FilterCategoryRow): ViewModelProvider.Factory { class FilterDetailsViewModelFactory(var filter: Filter, var categoryRow: FilterCategoryRow): ViewModelProvider.Factory {
@ -43,14 +40,24 @@ class FilterDetailsViewModel(categoryRow: FilterCategoryRow, var filter: Filter)
override fun charSequenceForRow(row: RowRepresentable, context: Context): CharSequence { override fun charSequenceForRow(row: RowRepresentable, context: Context): CharSequence {
val filterItemRow = row as? BaseFilterItemRow return when (row) {
filterItemRow?.let { is FilterValueHolder -> {
return when (val condition = it.rawCondition) { row.valueFormatted(context)
is QueryCondition.ListOfValues<*> -> condition.firstValue(context) ?: NULL_TEXT
else -> super.charSequenceForRow(row, context, 0)
} }
} else -> super.charSequenceForRow(row, context, 0)
return NULL_TEXT } ?: NULL_TEXT
// val filterItemRow = row as? BaseFilterItemRow
// filterItemRow?.let {
// return when (val condition = it.rawCondition) {
//// is QueryCondition.SingleValue<*> -> filter
// is QueryCondition.ListOfValues<*> -> {
// condition.firstValue(context) ?: NULL_TEXT
// }
// else -> super.charSequenceForRow(row, context, 0)
// }
// }
// return NULL_TEXT
// return when (row) { // return when (row) {
// is BaseFilterItemRow -> { // is BaseFilterItemRow -> {

@ -8,6 +8,7 @@ import net.pokeranalytics.android.model.realm.FilterCondition
import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType import net.pokeranalytics.android.ui.fragment.components.bottomsheet.BottomSheetType
import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor
import net.pokeranalytics.android.util.NULL_TEXT
import java.util.* import java.util.*
interface FilterItemRow : RowRepresentable { interface FilterItemRow : RowRepresentable {
@ -65,6 +66,10 @@ interface FilterItemRow : RowRepresentable {
} }
} }
interface FilterValueHolder {
fun valueFormatted(context: Context): CharSequence?
}
open class BaseFilterItemRow(queryCondition: QueryCondition, override var filterSectionRow: FilterSectionRow) : FilterItemRow { open class BaseFilterItemRow(queryCondition: QueryCondition, override var filterSectionRow: FilterSectionRow) : FilterItemRow {
var rawCondition: QueryCondition = queryCondition var rawCondition: QueryCondition = queryCondition
@ -79,6 +84,9 @@ open class BaseFilterItemRow(queryCondition: QueryCondition, override var filter
return this.rawCondition.getDisplayName(context) return this.rawCondition.getDisplayName(context)
} }
override val resId: Int?
get() { return this.rawCondition.resId }
override val viewType: Int override val viewType: Int
get() { return this.rawCondition.viewType } get() { return this.rawCondition.viewType }
@ -88,7 +96,7 @@ open class BaseFilterItemRow(queryCondition: QueryCondition, override var filter
} }
abstract class ValueFilterItemRow<T: Comparable<T>>(queryCondition: QueryCondition.SingleValue<T>, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow) { abstract class ValueFilterItemRow<T: Comparable<T>>(queryCondition: QueryCondition.SingleValue<T>, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow), FilterValueHolder {
private var valueCondition: QueryCondition.SingleValue<T> = queryCondition private var valueCondition: QueryCondition.SingleValue<T> = queryCondition
@ -103,6 +111,13 @@ abstract class ValueFilterItemRow<T: Comparable<T>>(queryCondition: QueryConditi
return null return null
} }
override fun valueFormatted(context: Context): CharSequence? {
this.value?.let {
return this.valueCondition.labelForValue(it, context)
}
return NULL_TEXT
}
override fun updateValue(fc: FilterCondition) { override fun updateValue(fc: FilterCondition) {
// TODO // TODO
@ -113,7 +128,7 @@ abstract class ValueFilterItemRow<T: Comparable<T>>(queryCondition: QueryConditi
} }
abstract class ValueListFilterItemRow<T: Comparable<T>>(queryCondition: QueryCondition.ListOfValues<T>, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow) { abstract class ValueListFilterItemRow<T: Comparable<T>>(queryCondition: QueryCondition.ListOfValues<T>, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow), FilterValueHolder {
private var listCondition: QueryCondition.ListOfValues<T> = queryCondition private var listCondition: QueryCondition.ListOfValues<T> = queryCondition
@ -134,6 +149,15 @@ abstract class ValueListFilterItemRow<T: Comparable<T>>(queryCondition: QueryCon
} }
} }
override fun valueFormatted(context: Context): CharSequence? {
this.list.firstOrNull()?.let {
return this.listCondition.labelForValue(it, context)
}
return NULL_TEXT
}
// override fun getDisplayName(context: Context): String { // override fun getDisplayName(context: Context): String {
// return this.listCondition.getDisplayName(context, this.list) // return this.listCondition.getDisplayName(context, this.list)
// } // }

Loading…
Cancel
Save