mirror of
https://github.com/mediathekview/zapp.git
synced 2024-09-20 04:12:14 +02:00
Make channel filters work on long click
This commit is contained in:
parent
608d82d683
commit
d033a34477
@ -72,21 +72,7 @@ class MediathekListFragment : Fragment(), ListItemListener, OnRefreshListener {
|
||||
binding.refreshLayout.setOnRefreshListener(this)
|
||||
binding.refreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary)
|
||||
|
||||
// TODO: move to function
|
||||
for (channel in MediathekChannel.values()) {
|
||||
val chip = inflater.inflate(
|
||||
R.layout.view_mediathek_filter_channel_chip,
|
||||
binding.filter.channels,
|
||||
false
|
||||
) as Chip
|
||||
chip.text = channel.apiId
|
||||
viewmodel.setChannelFilter(channel, chip.isChecked)
|
||||
// TODO: disable all others on long press
|
||||
chip.setOnCheckedChangeListener { _, isChecked ->
|
||||
viewmodel.setChannelFilter(channel, isChecked)
|
||||
}
|
||||
binding.filter.channels.addView(chip)
|
||||
}
|
||||
createChannelFilterView(inflater)
|
||||
|
||||
return binding.root
|
||||
}
|
||||
@ -202,4 +188,46 @@ class MediathekListFragment : Fragment(), ListItemListener, OnRefreshListener {
|
||||
val isLoading = viewmodel.isLoading.value == true
|
||||
binding.noShows.isVisible = isAdapterEmpty && !isLoading
|
||||
}
|
||||
|
||||
private fun createChannelFilterView(inflater: LayoutInflater) {
|
||||
for (channel in MediathekChannel.values()) {
|
||||
// create view
|
||||
val chip = inflater.inflate(
|
||||
R.layout.view_mediathek_filter_channel_chip,
|
||||
binding.filter.channels,
|
||||
false
|
||||
) as Chip
|
||||
|
||||
// view properties
|
||||
chip.text = channel.apiId
|
||||
|
||||
// ui listeners
|
||||
chip.setOnCheckedChangeListener { _, isChecked ->
|
||||
onChannelFilterCheckChanged(channel, isChecked)
|
||||
}
|
||||
chip.setOnLongClickListener {
|
||||
onChannelFilterLongClick(channel)
|
||||
true
|
||||
}
|
||||
|
||||
// viewmodel listener
|
||||
viewmodel.channelFilter.getValue(channel).observe(viewLifecycleOwner) { isChecked ->
|
||||
chip.isChecked = isChecked
|
||||
}
|
||||
|
||||
// add to hierarchy
|
||||
binding.filter.channels.addView(chip)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onChannelFilterCheckChanged(channel: MediathekChannel, isChecked: Boolean) {
|
||||
viewmodel.setChannelFilter(channel, isChecked)
|
||||
}
|
||||
|
||||
private fun onChannelFilterLongClick(clickedChannel: MediathekChannel) {
|
||||
for (channel in MediathekChannel.values()) {
|
||||
val isChecked = clickedChannel == channel
|
||||
viewmodel.setChannelFilter(channel, isChecked)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,12 @@ class MediathekListFragmentViewModel(
|
||||
private val _isLoading = MutableStateFlow(true)
|
||||
val isLoading = _isLoading.asLiveData()
|
||||
|
||||
private val _channelFilter = MediathekChannel.values()
|
||||
.map { it to MutableStateFlow(false) }
|
||||
.toMap()
|
||||
val channelFilter = _channelFilter
|
||||
.mapValues { it.value.asLiveData() }
|
||||
|
||||
private var getShowsJob: Job? = null
|
||||
private var queryRequest = QueryRequest().apply {
|
||||
size = ITEM_COUNT_PER_PAGE
|
||||
@ -52,8 +58,8 @@ class MediathekListFragmentViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: retain filter state when rotating device
|
||||
fun setChannelFilter(channel: MediathekChannel, isEnabled: Boolean) {
|
||||
_channelFilter.getValue(channel).tryEmit(isEnabled)
|
||||
queryRequest.setChannel(channel, isEnabled)
|
||||
_isLoading.tryEmit(true)
|
||||
_triggerLoadFlow.tryEmit(Unit)
|
||||
|
Loading…
Reference in New Issue
Block a user