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:
parent
b8c0c991f6
commit
7c33ac59b6
@ -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>()
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user