From fb0c5f79334354f8b4f7c689145b3e9172981110 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 25 Sep 2020 12:29:13 +0200 Subject: [PATCH] More fixes --- .../android/model/filter/QueryCondition.kt | 3 -- .../modules/filter/FilterDetailsFragment.kt | 7 +++-- .../modules/filter/FilterDetailsViewModel.kt | 29 ++++++++++++------- .../view/rowrepresentable/FilterElementRow.kt | 28 ++++++++++++++++-- 4 files changed, 48 insertions(+), 19 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 f513f38d..308b8695 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 @@ -22,12 +22,9 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.* import net.pokeranalytics.android.util.NULL_TEXT import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.extensions.* -import java.lang.Exception import java.text.DateFormatSymbols import java.text.NumberFormat import java.util.* -import kotlin.collections.ArrayList -import kotlin.reflect.full.primaryConstructor /** * Enum describing the way a query should be handled diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt index 4d6ef051..a7b9b90e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt @@ -130,8 +130,8 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate { is IntFilterItemRow -> { when (val condition = row.rawCondition) { is QueryCondition.Duration -> { - val hours: String? = (condition.minutes / 60).toString() - val minutes: String? = (condition.minutes % 60).toString() + val hours = (condition.minutes / 60).toString() + val minutes = (condition.minutes % 60).toString() val data = row.editingDescriptors(mapOf("hours" to hours, "minutes" to minutes)) showBottomSheet(row, this, data, true) } @@ -195,7 +195,7 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate { when (row) { is DateFilterItemRow -> { - row.value = value as Date + row.value = value as? Date } is IntFilterItemRow -> { when (value) { @@ -221,6 +221,7 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate { row.value = minutes } } + else -> { row.value = null } } } is DoubleValueListFilterItemRow -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt index ba9885b0..b9c98cec 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsViewModel.kt @@ -3,18 +3,15 @@ package net.pokeranalytics.android.ui.modules.filter import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import net.pokeranalytics.android.model.filter.QueryCondition import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable 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.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 timber.log.Timber 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 { - val filterItemRow = row as? BaseFilterItemRow - filterItemRow?.let { - return when (val condition = it.rawCondition) { - is QueryCondition.ListOfValues<*> -> condition.firstValue(context) ?: NULL_TEXT - else -> super.charSequenceForRow(row, context, 0) + return when (row) { + is FilterValueHolder -> { + row.valueFormatted(context) } - } - return NULL_TEXT + else -> super.charSequenceForRow(row, context, 0) + } ?: 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) { // is BaseFilterItemRow -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt index dc6cc88d..cdf99d06 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterElementRow.kt @@ -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.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor +import net.pokeranalytics.android.util.NULL_TEXT import java.util.* 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 { var rawCondition: QueryCondition = queryCondition @@ -79,6 +84,9 @@ open class BaseFilterItemRow(queryCondition: QueryCondition, override var filter return this.rawCondition.getDisplayName(context) } + override val resId: Int? + get() { return this.rawCondition.resId } + override val viewType: Int get() { return this.rawCondition.viewType } @@ -88,7 +96,7 @@ open class BaseFilterItemRow(queryCondition: QueryCondition, override var filter } -abstract class ValueFilterItemRow>(queryCondition: QueryCondition.SingleValue, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow) { +abstract class ValueFilterItemRow>(queryCondition: QueryCondition.SingleValue, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow), FilterValueHolder { private var valueCondition: QueryCondition.SingleValue = queryCondition @@ -103,6 +111,13 @@ abstract class ValueFilterItemRow>(queryCondition: QueryConditi 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) { // TODO @@ -113,7 +128,7 @@ abstract class ValueFilterItemRow>(queryCondition: QueryConditi } -abstract class ValueListFilterItemRow>(queryCondition: QueryCondition.ListOfValues, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow) { +abstract class ValueListFilterItemRow>(queryCondition: QueryCondition.ListOfValues, filterSectionRow: FilterSectionRow): BaseFilterItemRow(queryCondition, filterSectionRow), FilterValueHolder { private var listCondition: QueryCondition.ListOfValues = queryCondition @@ -134,6 +149,15 @@ abstract class ValueListFilterItemRow>(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 { // return this.listCondition.getDisplayName(context, this.list) // }