0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 04:12:14 +02:00

Reflect length filter values from viewmodel back to ui

This commit is contained in:
Christine Coenen 2021-11-07 15:23:19 +01:00
parent b8c0c991f6
commit 7c33ac59b6
3 changed files with 37 additions and 10 deletions

View File

@ -79,16 +79,7 @@ class MediathekListFragment : Fragment(), ListItemListener, OnRefreshListener {
binding.refreshLayout.setOnRefreshListener(this)
binding.refreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary)
val showLengthLabelFormatter =
ShowLengthLabelFormatter(binding.filter.showLengthSlider.valueTo)
binding.filter.showLengthSlider.setLabelFormatter(showLengthLabelFormatter)
binding.filter.showLengthSlider.addOnChangeListener { rangeSlider, _, _ ->
val min = rangeSlider.values[0] * 60
val max =
if (rangeSlider.values[1] == rangeSlider.valueTo) null else rangeSlider.values[1] * 60
viewmodel.setLengthFilter(min, max)
}
setUpLengthFilter()
createChannelFilterView(inflater)
// only consume backPressedCallback when bottom sheet is not collapsed
@ -255,6 +246,31 @@ class MediathekListFragment : Fragment(), ListItemListener, OnRefreshListener {
binding.noShows.isVisible = isAdapterEmpty
}
private fun setUpLengthFilter() {
val showLengthLabelFormatter =
ShowLengthLabelFormatter(binding.filter.showLengthSlider.valueTo)
binding.filter.showLengthSlider.setLabelFormatter(showLengthLabelFormatter)
// from ui to viewmodel
binding.filter.showLengthSlider.addOnChangeListener { rangeSlider, _, fromUser ->
if (!fromUser) {
return@addOnChangeListener
}
val min = rangeSlider.values[0] * 60
val max =
if (rangeSlider.values[1] == rangeSlider.valueTo) null else rangeSlider.values[1] * 60
viewmodel.setLengthFilter(min, max)
}
// from viewmodel to ui
viewmodel.lengthFilter.observe(viewLifecycleOwner) { lengthFilter ->
val min = lengthFilter.minDurationMinutes
val max = lengthFilter.maxDurationMinutes ?: binding.filter.showLengthSlider.valueTo
binding.filter.showLengthSlider.setValues(min, max)
}
}
private fun createChannelFilterView(inflater: LayoutInflater) {
val chipMap = mutableMapOf<MediathekChannel, Chip>()

View File

@ -31,7 +31,9 @@ class MediathekListFragmentViewModel(
}
private val _searchQuery = MutableStateFlow<String?>(null)
private val _lengthFilter = MutableStateFlow(LengthFilter())
val lengthFilter = _lengthFilter.asLiveData()
private val _channelFilter = MutableStateFlow(ChannelFilter())
val channelFilter = _channelFilter.asLiveData()

View File

@ -6,4 +6,13 @@ data class LengthFilter(
) {
val isApplied: Boolean
get() = minDurationSeconds != 0 || maxDurationSeconds != null
val minDurationMinutes: Float
get() = minDurationSeconds / 60f
val maxDurationMinutes: Float?
get() {
val maxDuration = maxDurationSeconds
return if (maxDuration == null) null else maxDuration / 60f
}
}