filter loading, section count, element pre-selected

feature/top10
Razmig Sarkissian 7 years ago
parent b94cd9cdeb
commit 1d73eef09c
  1. 73
      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. 25
      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.RealmObject
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.FilterSection
import java.util.*
//import net.pokeranalytics.android.FilterComponent
@ -25,31 +27,66 @@ open class Filter : RealmObject() {
var components: RealmList<FilterComponent> = RealmList()
fun componentsFrom(filterElements: ArrayList<FilterElement>) {
components.clear()
var sections = filterElements.mapNotNull {
filterElements
.map {
it.filterSection
}.distinct()
}
.distinct()
.forEach { section ->
filterElements
.filter {
it.filterSection == section
}
.apply {
if (this.size == 1) {
components.add(FilterComponent(this.first()))
} else {
val casted = arrayListOf<FilterElement>()
casted.addAll(this)
components.add(FilterComponent(casted))
}
}
}
}
sections.forEach { section ->
var _filterElements = filterElements.filter {
it.filterSection?.let { _section ->
_section == section
} ?: run {
false
fun numberOfElementIn(filterCategory: FilterCategory) : Int {
val sections = FilterSection.filterSectionsFor(filterCategory)
return components.count {
sections.contains(FilterSection.valueOf(it.sectionName))
}
}
if (_filterElements.size == 1) {
var component : FilterComponent = FilterComponent(_filterElements.first())
components.add(component)
} else {
var casted = arrayListOf<FilterElement>()
casted.addAll(_filterElements)
var component : FilterComponent = FilterComponent(casted)
components.add(component)
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 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) {
constructor(filterElements: ArrayList<FilterElement>) : this(filterElements.first().filterType.name, filterElements.first().filterSection.name) {
this.ids = when (FilterType.valueOf(this.filterName)) {
FilterType.GAME -> {
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) {
is From -> 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.view.*
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.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
@ -151,6 +152,16 @@ open class FilterDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresenta
this.rows.clear()
this.rowsForFilterSubcategory.clear()
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.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_filters.view.*
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.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -34,6 +35,8 @@ open class FiltersFragment : PokerAnalyticsFragment(), StaticRowRepresentableDat
private var primaryKey: String? = null
private var selectedRow: RowRepresentable? = null
private var filter: Filter? = null
var isUpdating = false
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) {
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() {
return FilterSection.filterSectionsFor(this)
}

@ -12,9 +12,8 @@ import java.lang.Exception
import java.util.*
sealed class FilterElement : RowRepresentable {
companion object {
fun filterElementsFor(filterSection: FilterSectionDataSource) : List<FilterElement> {
fun filterElementsFor(filterSection: FilterSection) : List<FilterElement> {
return when (filterSection) {
CASH_TOURNAMENT -> arrayListOf(Cash, Tournament)
LIVE_ONLINE -> arrayListOf(Live, Online)
@ -77,6 +76,10 @@ sealed class FilterElement : RowRepresentable {
VALUE -> arrayListOf()
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 CurrentMonth : FilterElement()
object CurrentYear: FilterElement()
data class From(var date: Date = Date()) : FilterElement()
data class To(var date: Date = Date()) : FilterElement()
object Weekday: 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 Month(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 TournamentFeature(val tournamentFeature: net.pokeranalytics.android.model.realm.TournamentFeature) : FilterElement()
var filterSection: FilterSectionDataSource? = null
lateinit var filterSection: FilterSection
val filterType : FilterType
get() {
@ -187,21 +191,16 @@ sealed class FilterElement : RowRepresentable {
val sectionToExclude : List < FilterSectionDataSource > ?
get() {
val excluded = arrayListOf<FilterSectionDataSource>()
this.filterSection?.let {
if (!it.allowMultiSelection) {
excluded.add(it)
if (!this.filterSection.allowMultiSelection) {
excluded.add(this.filterSection)
}
it.exclusiveWith?.let { exclusives ->
this.filterSection.exclusiveWith?.let { exclusives ->
excluded.addAll(exclusives)
}
if (excluded.size > 0) {
return excluded
}
} ?: run {
return null
}
return null
}

@ -12,8 +12,6 @@ interface FilterSectionDataSource : RowRepresentable {
val allowMultiSelection : Boolean
val exclusiveWith : List < FilterSectionDataSource > ?
val filterElementRows : List < FilterElement >
val filterElements : List < RowRepresentable >
val selectionType : SelectionType
}
@ -29,19 +27,6 @@ private interface DefaultFilterSectionDataSource : FilterSectionDataSource {
override val selectionType: FilterSectionDataSource.SelectionType
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 {
@ -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 selectionType: FilterSectionDataSource.SelectionType

Loading…
Cancel
Save