Improve Filters

feature/top10
Aurelien Hubert 7 years ago
parent 4b39cc7884
commit a3a0f992ea
  1. 66
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  2. 104
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt

@ -73,7 +73,7 @@ enum class RowViewType(private var layoutRes: Int) {
return when (this) { return when (this) {
// Customizable Row View Holder // Customizable Row View Holder
HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE, INFO -> CustomizableRowViewHolder(layout) HEADER_TITLE, HEADER_TITLE_VALUE, HEADER_TITLE_AMOUNT, HEADER_TITLE_AMOUNT_BIG, LOCATION_TITLE, INFO -> RowViewHolder(layout)
// Row View Holder // Row View Holder
CLASSIC_HEADER_TITLE, TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder( CLASSIC_HEADER_TITLE, TITLE, TITLE_ARROW, TITLE_VALUE, TITLE_VALUE_ARROW, TITLE_GRID, TITLE_SWITCH, TITLE_CHECK, DATA, BOTTOM_SHEET_DATA, LOADER -> RowViewHolder(
@ -102,15 +102,17 @@ enum class RowViewType(private var layoutRes: Int) {
} }
} }
/** /**
* Display a header * Display a generic row (title, value, container)
*/ */
inner class CustomizableRowViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { inner class RowViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
if (row is CustomizableRowRepresentable) { if (row is CustomizableRowRepresentable) {
// Customizable Row
// Title // Title
itemView.findViewById<AppCompatTextView>(R.id.title)?.let { itemView.findViewById<AppCompatTextView>(R.id.title)?.let {
it.text = row.localizedTitle(itemView.context) it.text = row.localizedTitle(itemView.context)
@ -138,28 +140,37 @@ enum class RowViewType(private var layoutRes: Int) {
} }
} }
} }
}
}
}
/** } else {
* Display a generic row (title, value, container)
*/
inner class RowViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder {
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) {
// Title // Classic row
itemView.findViewById<AppCompatTextView?>(R.id.title)?.let {
if (row.resId != null) { // Title
it.text = row.localizedTitle(itemView.context) itemView.findViewById<AppCompatTextView?>(R.id.title)?.let {
} else { if (row.resId != null) {
it.text = row.getDisplayName() it.text = row.localizedTitle(itemView.context)
} else {
it.text = row.getDisplayName()
}
} }
}
// Value // Value
itemView.findViewById<AppCompatTextView?>(R.id.value)?.let { itemView.findViewById<AppCompatTextView?>(R.id.value)?.let {
it.text = adapter.dataSource.stringForRow(row, itemView.context) it.text = adapter.dataSource.stringForRow(row, itemView.context)
}
// Listener
val listener = View.OnClickListener {
itemView.findViewById<SwitchCompat?>(R.id.switchView)?.let {
it.isChecked = !it.isChecked
} ?: run {
adapter.delegate?.onRowSelected(position, row)
}
}
itemView.findViewById<View?>(R.id.container)?.let {
it.setOnClickListener(listener)
}
} }
// Switch // Switch
@ -175,18 +186,7 @@ enum class RowViewType(private var layoutRes: Int) {
it.isSelected = adapter.dataSource.isSelected(row) it.isSelected = adapter.dataSource.isSelected(row)
} }
// Listener
val listener = View.OnClickListener {
itemView.findViewById<SwitchCompat?>(R.id.switchView)?.let {
it.isChecked = !it.isChecked
} ?: run {
adapter.delegate?.onRowSelected(position, row)
}
}
itemView.findViewById<View?>(R.id.container)?.let {
it.setOnClickListener(listener)
}
} }
} }

@ -2,8 +2,8 @@ package net.pokeranalytics.android.ui.view.rowrepresentable
import io.realm.Realm import io.realm.Realm
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort
import io.realm.kotlin.where import io.realm.kotlin.where
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.TableSize
@ -11,6 +11,10 @@ import net.pokeranalytics.android.model.realm.Game
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
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 java.text.DateFormatSymbols
import java.util.*
import kotlin.collections.ArrayList
enum class FilterSubcategoryRow : RowRepresentable { enum class FilterSubcategoryRow : RowRepresentable {
@ -76,43 +80,43 @@ enum class FilterSubcategoryRow : RowRepresentable {
override val resId: Int? override val resId: Int?
get() { get() {
return when (this) { return when (this) {
CASH_TOURNAMENT -> R.string.cash_or_tournament CASH_TOURNAMENT -> net.pokeranalytics.android.R.string.cash_or_tournament
LIVE_ONLINE -> R.string.live_or_online LIVE_ONLINE -> net.pokeranalytics.android.R.string.live_or_online
GAME -> R.string.game GAME -> net.pokeranalytics.android.R.string.game
LIMIT_TYPE -> R.string.type_de_limite LIMIT_TYPE -> net.pokeranalytics.android.R.string.type_de_limite
TABLE_SIZE -> R.string.table_size TABLE_SIZE -> net.pokeranalytics.android.R.string.table_size
DYNAMIC_DATE -> R.string.dynamic_date DYNAMIC_DATE -> net.pokeranalytics.android.R.string.dynamic_date
FIXED_DATE -> R.string.fixed_date FIXED_DATE -> net.pokeranalytics.android.R.string.fixed_date
DURATION -> R.string.duration DURATION -> net.pokeranalytics.android.R.string.duration
YEAR -> R.string.year YEAR -> net.pokeranalytics.android.R.string.year
WEEKDAYS_OR_WEEKEND -> R.string.weekdays_or_weekend WEEKDAYS_OR_WEEKEND -> net.pokeranalytics.android.R.string.weekdays_or_weekend
DAY_OF_WEEK -> R.string.day_of_the_week DAY_OF_WEEK -> net.pokeranalytics.android.R.string.day_of_the_week
MONTH_OF_YEAR -> R.string.month_of_the_year MONTH_OF_YEAR -> net.pokeranalytics.android.R.string.month_of_the_year
SESSION_DURATION -> R.string.session_duration SESSION_DURATION -> net.pokeranalytics.android.R.string.session_duration
RANGE -> R.string.hour_slot RANGE -> net.pokeranalytics.android.R.string.hour_slot
BLINDS -> R.string.blinds BLINDS -> net.pokeranalytics.android.R.string.blinds
CASH_RE_BUY_COUNT -> R.string.rebuy_count CASH_RE_BUY_COUNT -> net.pokeranalytics.android.R.string.rebuy_count
TOURNAMENT_TYPE -> R.string.tournament_type TOURNAMENT_TYPE -> net.pokeranalytics.android.R.string.tournament_type
COMPLETION_PERCENTAGE -> R.string.tournament_completion_percentage_interval COMPLETION_PERCENTAGE -> net.pokeranalytics.android.R.string.tournament_completion_percentage_interval
PLACE -> R.string.place PLACE -> net.pokeranalytics.android.R.string.place
PLAYERS_COUNT -> R.string.players_count PLAYERS_COUNT -> net.pokeranalytics.android.R.string.players_count
TOURNAMENT_RE_BUY_COUNT -> R.string.rebuy_count TOURNAMENT_RE_BUY_COUNT -> net.pokeranalytics.android.R.string.rebuy_count
BUY_IN -> R.string.buyin BUY_IN -> net.pokeranalytics.android.R.string.buyin
MULTI_TABLING -> R.string.multi_tabling MULTI_TABLING -> net.pokeranalytics.android.R.string.multi_tabling
VALUE -> R.string.value VALUE -> net.pokeranalytics.android.R.string.value
LOCATION -> R.string.location LOCATION -> net.pokeranalytics.android.R.string.location
BANKROLL -> R.string.bankroll BANKROLL -> net.pokeranalytics.android.R.string.bankroll
NUMBER_OF_PLAYERS -> R.string.number_of_players NUMBER_OF_PLAYERS -> net.pokeranalytics.android.R.string.number_of_players
MULTI_PLAYER -> R.string.multiplayer MULTI_PLAYER -> net.pokeranalytics.android.R.string.multiplayer
} }
} }
@ -162,10 +166,46 @@ enum class FilterSubcategoryRow : RowRepresentable {
) )
FIXED_DATE -> rows.addAll(arrayListOf(FilterRow.FROM, FilterRow.TO)) FIXED_DATE -> rows.addAll(arrayListOf(FilterRow.FROM, FilterRow.TO))
DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS)) DURATION -> rows.addAll(arrayListOf(FilterRow.PAST_DAYS))
YEAR -> rows.addAll(arrayListOf()) //TODO YEAR -> {
//TODO: Maybe move this code
val calendar = Calendar.getInstance()
val sessions = realm.where<Session>().sort("endDate", Sort.DESCENDING).findAll()
val years = ArrayList<Int>()
for (session in sessions) {
session.endDate?.let {
calendar.time = it
val year = calendar.get(Calendar.YEAR)
if (!years.contains(year)) {
years.add(year)
}
}
}
for (year in years) {
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_CHECK, title = year.toString(), isSelectable = true))
}
}
WEEKDAYS_OR_WEEKEND -> rows.addAll(arrayListOf(FilterRow.WEEKDAYS, FilterRow.WEEKEND)) WEEKDAYS_OR_WEEKEND -> rows.addAll(arrayListOf(FilterRow.WEEKDAYS, FilterRow.WEEKEND))
DAY_OF_WEEK -> rows.addAll(arrayListOf()) //TODO DAY_OF_WEEK -> {
MONTH_OF_YEAR -> rows.addAll(arrayListOf()) //TODO val dfs = DateFormatSymbols.getInstance(Locale.getDefault())
for (day in dfs.weekdays) {
if (day.isNotEmpty()) {
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_CHECK, title = day, isSelectable = true))
}
}
}
MONTH_OF_YEAR -> {
val dfs = DateFormatSymbols.getInstance(Locale.getDefault())
for (month in dfs.months) {
if (month.isNotEmpty()) {
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.TITLE_CHECK, title = month, isSelectable = true))
}
}
}
else -> rows.addAll(arrayListOf()) else -> rows.addAll(arrayListOf())

Loading…
Cancel
Save