0
0
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:
Christine Coenen 2021-10-25 20:37:26 +02:00
parent 608d82d683
commit d033a34477
2 changed files with 50 additions and 16 deletions

View File

@ -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)
}
}
}

View File

@ -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)