diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index b828c444..a8ec6bbc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -73,7 +73,7 @@ enum class RowViewType(private var layoutRes: Int) { return when (this) { // 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 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) { + if (row is CustomizableRowRepresentable) { + // Customizable Row + // Title itemView.findViewById(R.id.title)?.let { it.text = row.localizedTitle(itemView.context) @@ -138,28 +140,37 @@ enum class RowViewType(private var layoutRes: Int) { } } } - } - } - } - /** - * 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) { + } else { - // Title - itemView.findViewById(R.id.title)?.let { - if (row.resId != null) { - it.text = row.localizedTitle(itemView.context) - } else { - it.text = row.getDisplayName() + // Classic row + + // Title + itemView.findViewById(R.id.title)?.let { + if (row.resId != null) { + it.text = row.localizedTitle(itemView.context) + } else { + it.text = row.getDisplayName() + } } - } - // Value - itemView.findViewById(R.id.value)?.let { - it.text = adapter.dataSource.stringForRow(row, itemView.context) + // Value + itemView.findViewById(R.id.value)?.let { + it.text = adapter.dataSource.stringForRow(row, itemView.context) + } + + // Listener + val listener = View.OnClickListener { + itemView.findViewById(R.id.switchView)?.let { + it.isChecked = !it.isChecked + } ?: run { + adapter.delegate?.onRowSelected(position, row) + } + } + + itemView.findViewById(R.id.container)?.let { + it.setOnClickListener(listener) + } } // Switch @@ -175,18 +186,7 @@ enum class RowViewType(private var layoutRes: Int) { it.isSelected = adapter.dataSource.isSelected(row) } - // Listener - val listener = View.OnClickListener { - itemView.findViewById(R.id.switchView)?.let { - it.isChecked = !it.isChecked - } ?: run { - adapter.delegate?.onRowSelected(position, row) - } - } - itemView.findViewById(R.id.container)?.let { - it.setOnClickListener(listener) - } } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt index 3fec11b5..8c0da6bc 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt @@ -2,8 +2,8 @@ package net.pokeranalytics.android.ui.view.rowrepresentable import io.realm.Realm import io.realm.RealmResults +import io.realm.Sort import io.realm.kotlin.where -import net.pokeranalytics.android.R import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.LiveData 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.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType +import java.text.DateFormatSymbols +import java.util.* +import kotlin.collections.ArrayList + enum class FilterSubcategoryRow : RowRepresentable { @@ -76,43 +80,43 @@ enum class FilterSubcategoryRow : RowRepresentable { override val resId: Int? get() { return when (this) { - CASH_TOURNAMENT -> R.string.cash_or_tournament - LIVE_ONLINE -> R.string.live_or_online - GAME -> R.string.game - LIMIT_TYPE -> R.string.type_de_limite - TABLE_SIZE -> R.string.table_size + CASH_TOURNAMENT -> net.pokeranalytics.android.R.string.cash_or_tournament + LIVE_ONLINE -> net.pokeranalytics.android.R.string.live_or_online + GAME -> net.pokeranalytics.android.R.string.game + LIMIT_TYPE -> net.pokeranalytics.android.R.string.type_de_limite + TABLE_SIZE -> net.pokeranalytics.android.R.string.table_size - DYNAMIC_DATE -> R.string.dynamic_date - FIXED_DATE -> R.string.fixed_date - DURATION -> R.string.duration - YEAR -> R.string.year - WEEKDAYS_OR_WEEKEND -> R.string.weekdays_or_weekend - DAY_OF_WEEK -> R.string.day_of_the_week - MONTH_OF_YEAR -> R.string.month_of_the_year + DYNAMIC_DATE -> net.pokeranalytics.android.R.string.dynamic_date + FIXED_DATE -> net.pokeranalytics.android.R.string.fixed_date + DURATION -> net.pokeranalytics.android.R.string.duration + YEAR -> net.pokeranalytics.android.R.string.year + WEEKDAYS_OR_WEEKEND -> net.pokeranalytics.android.R.string.weekdays_or_weekend + DAY_OF_WEEK -> net.pokeranalytics.android.R.string.day_of_the_week + MONTH_OF_YEAR -> net.pokeranalytics.android.R.string.month_of_the_year - SESSION_DURATION -> R.string.session_duration - RANGE -> R.string.hour_slot + SESSION_DURATION -> net.pokeranalytics.android.R.string.session_duration + RANGE -> net.pokeranalytics.android.R.string.hour_slot - BLINDS -> R.string.blinds - CASH_RE_BUY_COUNT -> R.string.rebuy_count + BLINDS -> net.pokeranalytics.android.R.string.blinds + CASH_RE_BUY_COUNT -> net.pokeranalytics.android.R.string.rebuy_count - TOURNAMENT_TYPE -> R.string.tournament_type - COMPLETION_PERCENTAGE -> R.string.tournament_completion_percentage_interval - PLACE -> R.string.place - PLAYERS_COUNT -> R.string.players_count - TOURNAMENT_RE_BUY_COUNT -> R.string.rebuy_count - BUY_IN -> R.string.buyin + TOURNAMENT_TYPE -> net.pokeranalytics.android.R.string.tournament_type + COMPLETION_PERCENTAGE -> net.pokeranalytics.android.R.string.tournament_completion_percentage_interval + PLACE -> net.pokeranalytics.android.R.string.place + PLAYERS_COUNT -> net.pokeranalytics.android.R.string.players_count + TOURNAMENT_RE_BUY_COUNT -> net.pokeranalytics.android.R.string.rebuy_count + 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 - MULTI_PLAYER -> R.string.multiplayer + NUMBER_OF_PLAYERS -> net.pokeranalytics.android.R.string.number_of_players + 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)) 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().sort("endDate", Sort.DESCENDING).findAll() + val years = ArrayList() + + 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)) - DAY_OF_WEEK -> rows.addAll(arrayListOf()) //TODO - MONTH_OF_YEAR -> rows.addAll(arrayListOf()) //TODO + DAY_OF_WEEK -> { + 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())