filter loading, section count, element pre-selected

feature/top10
Razmig Sarkissian 7 years ago
parent b94cd9cdeb
commit 1d73eef09c
  1. 81
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  2. 8
      app/src/main/java/net/pokeranalytics/android/model/realm/FilterComponent.kt
  3. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FilterDetailsFragment.kt
  4. 10
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategory.kt
  6. 35
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt
  7. 20
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSection.kt

@ -4,7 +4,9 @@ import io.realm.MutableRealmInteger
import io.realm.RealmList import io.realm.RealmList
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategory
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSection
import java.util.* import java.util.*
//import net.pokeranalytics.android.FilterComponent //import net.pokeranalytics.android.FilterComponent
@ -25,31 +27,66 @@ open class Filter : RealmObject() {
var components: RealmList<FilterComponent> = RealmList() var components: RealmList<FilterComponent> = RealmList()
fun componentsFrom(filterElements: ArrayList<FilterElement>) { fun componentsFrom(filterElements: ArrayList<FilterElement>) {
components.clear() components.clear()
filterElements
var sections = filterElements.mapNotNull { .map {
it.filterSection it.filterSection
}.distinct()
sections.forEach { section ->
var _filterElements = filterElements.filter {
it.filterSection?.let { _section ->
_section == section
} ?: run {
false
}
} }
.distinct()
if (_filterElements.size == 1) { .forEach { section ->
var component : FilterComponent = FilterComponent(_filterElements.first()) filterElements
components.add(component) .filter {
} else { it.filterSection == section
var casted = arrayListOf<FilterElement>() }
casted.addAll(_filterElements) .apply {
var component : FilterComponent = FilterComponent(casted) if (this.size == 1) {
components.add(component) components.add(FilterComponent(this.first()))
} else {
val casted = arrayListOf<FilterElement>()
casted.addAll(this)
components.add(FilterComponent(casted))
}
}
} }
}
fun numberOfElementIn(filterCategory: FilterCategory) : Int {
val sections = FilterSection.filterSectionsFor(filterCategory)
return components.count {
sections.contains(FilterSection.valueOf(it.sectionName))
}
}
fun isFilterElementExists(filterElement:FilterElement) : Boolean {
val filtered = components.filter {
it.filterType == filterElement.filterType
}
if (filtered.isEmpty()) {
return false
}
return when (filterElement) {
is FilterElement.Game -> filtered.filter {
it.ids?.contains(filterElement.game.id) ?: false
}.isNotEmpty()
is FilterElement.Year -> TODO()
is FilterElement.Month -> TODO()
is FilterElement.Day -> TODO()
is FilterElement.Limit -> TODO()
is FilterElement.TableSize -> TODO()
is FilterElement.Bankroll -> TODO()
is FilterElement.Location -> TODO()
is FilterElement.TournamentName -> TODO()
is FilterElement.TournamentFeature -> TODO()
is FilterElement.From -> TODO()
is FilterElement.To -> TODO()
is FilterElement.PastDays -> TODO()
else -> return true
} }
} }
} }

@ -9,11 +9,9 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElement.*
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
open class FilterComponent(filterName : String = "") : RealmObject() { open class FilterComponent(var filterName : String = "", var sectionName: String = "") : RealmObject() {
var filterName : String = filterName constructor(filterElements: ArrayList<FilterElement>) : this(filterElements.first().filterType.name, filterElements.first().filterSection.name) {
constructor(filterElements: ArrayList<FilterElement>) : this(filterElements.first().filterType.name) {
this.ids = when (FilterType.valueOf(this.filterName)) { this.ids = when (FilterType.valueOf(this.filterName)) {
FilterType.GAME -> { FilterType.GAME -> {
RealmList<String>().apply { RealmList<String>().apply {
@ -37,7 +35,7 @@ open class FilterComponent(filterName : String = "") : RealmObject() {
} }
} }
constructor(filterElement:FilterElement) : this(filterElement.filterType.name) { constructor(filterElement:FilterElement) : this(filterElement.filterType.name, filterElement.filterSection.name) {
when (filterElement) { when (filterElement) {
is From -> date = filterElement.date is From -> date = filterElement.date
is To -> date = filterElement.date is To -> date = filterElement.date

@ -10,6 +10,7 @@ import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_filter_details.* import kotlinx.android.synthetic.main.fragment_filter_details.*
import kotlinx.android.synthetic.main.fragment_filter_details.view.* import kotlinx.android.synthetic.main.fragment_filter_details.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -151,6 +152,16 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta
this.rows.clear() this.rows.clear()
this.rowsForFilterSubcategory.clear() this.rowsForFilterSubcategory.clear()
this.rows.addAll(it.filterElements) this.rows.addAll(it.filterElements)
//TODO
/*
var filter = Filter()
this.rows.forEach {element ->
if (filter.isFilterElementExists(element as FilterElement)) {
this.selectedRows.add(element)
}
}
*/
this.rowRepresentableAdapter = RowRepresentableAdapter(this, this) this.rowRepresentableAdapter = RowRepresentableAdapter(this, this)
this.recyclerView.adapter = rowRepresentableAdapter this.recyclerView.adapter = rowRepresentableAdapter
} }

@ -8,6 +8,7 @@ import io.realm.RealmObject
import kotlinx.android.synthetic.main.fragment_editable_data.* import kotlinx.android.synthetic.main.fragment_editable_data.*
import kotlinx.android.synthetic.main.fragment_filters.view.* import kotlinx.android.synthetic.main.fragment_filters.view.*
import net.pokeranalytics.android.R import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Filter
import net.pokeranalytics.android.ui.activity.FilterDetailsActivity import net.pokeranalytics.android.ui.activity.FilterDetailsActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -34,6 +35,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
private var primaryKey: String? = null private var primaryKey: String? = null
private var selectedRow: RowRepresentable? = null private var selectedRow: RowRepresentable? = null
private var filter: Filter? = null
var isUpdating = false var isUpdating = false
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -97,6 +100,13 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
} }
//TODO
/*
override fun stringForRow(row: RowRepresentable): String {
return this.filter?.numberOfElementIn(row as FilterCategory).toString()
}
*/
override fun onRowValueChanged(value: Any?, row: RowRepresentable) { override fun onRowValueChanged(value: Any?, row: RowRepresentable) {
super.onRowValueChanged(value, row) super.onRowValueChanged(value, row)
} }

@ -26,7 +26,7 @@ enum class FilterCategory(override val resId: Int?, override val viewType: Int =
} }
} }
private val filterSections : List < FilterSectionDataSource > private val filterSections : List < FilterSection >
get() { get() {
return FilterSection.filterSectionsFor(this) return FilterSection.filterSectionsFor(this)
} }

@ -12,9 +12,8 @@ import java.lang.Exception
import java.util.* import java.util.*
sealed class FilterElement : RowRepresentable { sealed class FilterElement : RowRepresentable {
companion object { companion object {
fun filterElementsFor(filterSection: FilterSectionDataSource) : List<FilterElement> { fun filterElementsFor(filterSection: FilterSection) : List<FilterElement> {
return when (filterSection) { return when (filterSection) {
CASH_TOURNAMENT -> arrayListOf(Cash, Tournament) CASH_TOURNAMENT -> arrayListOf(Cash, Tournament)
LIVE_ONLINE -> arrayListOf(Live, Online) LIVE_ONLINE -> arrayListOf(Live, Online)
@ -77,6 +76,10 @@ sealed class FilterElement : RowRepresentable {
VALUE -> arrayListOf() VALUE -> arrayListOf()
else -> throw Exception("unknown filtersection") //TODO create exception else -> throw Exception("unknown filtersection") //TODO create exception
}.apply {
this.forEach {
it.filterSection = filterSection
}
} }
} }
} }
@ -91,10 +94,11 @@ sealed class FilterElement : RowRepresentable {
object CurrentWeek : FilterElement() object CurrentWeek : FilterElement()
object CurrentMonth : FilterElement() object CurrentMonth : FilterElement()
object CurrentYear: FilterElement() object CurrentYear: FilterElement()
data class From(var date: Date = Date()) : FilterElement()
data class To(var date: Date = Date()) : FilterElement()
object Weekday: FilterElement() object Weekday: FilterElement()
object Weekend : FilterElement() object Weekend : FilterElement()
data class From(var date: Date = Date()) : FilterElement()
data class To(var date: Date = Date()) : FilterElement()
data class Year(val day: Int) : FilterElement() data class Year(val day: Int) : FilterElement()
data class Month(val day: Int) : FilterElement() data class Month(val day: Int) : FilterElement()
data class Day(val day: Int) : FilterElement() data class Day(val day: Int) : FilterElement()
@ -107,7 +111,7 @@ sealed class FilterElement : RowRepresentable {
data class TournamentName(val tournamentName: net.pokeranalytics.android.model.realm.TournamentName) : FilterElement() data class TournamentName(val tournamentName: net.pokeranalytics.android.model.realm.TournamentName) : FilterElement()
data class TournamentFeature(val tournamentFeature: net.pokeranalytics.android.model.realm.TournamentFeature) : FilterElement() data class TournamentFeature(val tournamentFeature: net.pokeranalytics.android.model.realm.TournamentFeature) : FilterElement()
var filterSection: FilterSectionDataSource? = null lateinit var filterSection: FilterSection
val filterType : FilterType val filterType : FilterType
get() { get() {
@ -187,21 +191,16 @@ sealed class FilterElement : RowRepresentable {
val sectionToExclude : List < FilterSectionDataSource > ? val sectionToExclude : List < FilterSectionDataSource > ?
get() { get() {
val excluded = arrayListOf<FilterSectionDataSource>() val excluded = arrayListOf<FilterSectionDataSource>()
this.filterSection?.let { if (!this.filterSection.allowMultiSelection) {
if (!it.allowMultiSelection) { excluded.add(this.filterSection)
excluded.add(it) }
} this.filterSection.exclusiveWith?.let { exclusives ->
it.exclusiveWith?.let { exclusives -> excluded.addAll(exclusives)
excluded.addAll(exclusives)
}
if (excluded.size > 0) {
return excluded
}
} ?: run {
return null
} }
if (excluded.size > 0) {
return excluded
}
return null return null
} }

@ -12,8 +12,6 @@ interface FilterSectionDataSource : RowRepresentable {
val allowMultiSelection : Boolean val allowMultiSelection : Boolean
val exclusiveWith : List < FilterSectionDataSource > ? val exclusiveWith : List < FilterSectionDataSource > ?
val filterElementRows : List < FilterElement >
val filterElements : List < RowRepresentable >
val selectionType : SelectionType val selectionType : SelectionType
} }
@ -29,19 +27,6 @@ private interface DefaultFilterSectionDataSource : FilterSectionDataSource {
override val selectionType: FilterSectionDataSource.SelectionType override val selectionType: FilterSectionDataSource.SelectionType
get() = FilterSectionDataSource.SelectionType.MULTIPLE get() = FilterSectionDataSource.SelectionType.MULTIPLE
override val filterElementRows: List < FilterElement >
get() = FilterElement.filterElementsFor(this)
override val filterElements : List < RowRepresentable >
get() {
val elements = arrayListOf<RowRepresentable>(this)
filterElementRows.forEach {
it.filterSection = this
elements.add(it)
}
return elements
}
} }
enum class FilterSection(override val resId: Int?): DefaultFilterSectionDataSource, RowRepresentable { enum class FilterSection(override val resId: Int?): DefaultFilterSectionDataSource, RowRepresentable {
@ -130,6 +115,11 @@ enum class FilterSection(override val resId: Int?): DefaultFilterSectionDataSour
} }
} }
val filterElements : List < RowRepresentable >
get() = arrayListOf<RowRepresentable>(this).apply {
this.addAll(FilterElement.filterElementsFor(this@FilterSection))
}
override val viewType: Int = RowViewType.HEADER_TITLE.ordinal override val viewType: Int = RowViewType.HEADER_TITLE.ordinal
override val selectionType: FilterSectionDataSource.SelectionType override val selectionType: FilterSectionDataSource.SelectionType

Loading…
Cancel
Save