@@ -3,10 +3,13 @@ package com.github.libretube.ui.sheets
33import android.annotation.SuppressLint
44import android.os.Bundle
55import android.view.View
6- import androidx.core.content.ContextCompat
76import androidx.core.view.isVisible
87import androidx.core.widget.addTextChangedListener
98import androidx.fragment.app.activityViewModels
9+ import androidx.lifecycle.Lifecycle
10+ import androidx.lifecycle.asFlow
11+ import androidx.lifecycle.lifecycleScope
12+ import androidx.lifecycle.repeatOnLifecycle
1013import com.github.libretube.R
1114import com.github.libretube.api.obj.Subscription
1215import com.github.libretube.constants.PreferenceKeys
@@ -16,7 +19,11 @@ import com.github.libretube.helpers.PreferenceHelper
1619import com.github.libretube.ui.adapters.SubscriptionChannelAdapter
1720import com.github.libretube.ui.models.EditChannelGroupsModel
1821import com.github.libretube.ui.models.SubscriptionsViewModel
19- import java.util.Locale
22+ import kotlinx.coroutines.Dispatchers
23+ import kotlinx.coroutines.flow.collectLatest
24+ import kotlinx.coroutines.flow.combine
25+ import kotlinx.coroutines.flow.flowOn
26+ import kotlinx.coroutines.launch
2027
2128class SubscriptionsBottomSheet : ExpandedBottomSheet (R .layout.sheet_subscriptions) {
2229 private var _binding : SheetSubscriptionsBinding ? = null
@@ -38,14 +45,30 @@ class SubscriptionsBottomSheet : ExpandedBottomSheet(R.layout.sheet_subscription
3845
3946 binding.channelsRecycler.adapter = adapter
4047
41- initHeaderLayout()
42-
4348 binding.subscriptionsSearchInput.addTextChangedListener { _ ->
4449 showFilteredSubscriptions()
4550 }
4651
47- viewModel.subscriptions.observe(viewLifecycleOwner) {
48- showFilteredSubscriptions()
52+ lifecycleScope.launch {
53+ repeatOnLifecycle(Lifecycle .State .STARTED ) {
54+ launch(Dispatchers .IO ) {
55+ viewModel.fetchSubscriptions(requireContext())
56+ }
57+
58+ launch {
59+ combine(
60+ viewModel.subscriptions.asFlow(),
61+ channelGroupsModel.groups.asFlow(),
62+ ) { subscriptions, groups ->
63+ subscriptions to groups
64+ }
65+ .flowOn(Dispatchers .IO )
66+ .collectLatest {
67+ initHeaderLayout()
68+ showFilteredSubscriptions()
69+ }
70+ }
71+ }
4972 }
5073 }
5174
@@ -62,38 +85,36 @@ class SubscriptionsBottomSheet : ExpandedBottomSheet(R.layout.sheet_subscription
6285 showFilteredSubscriptions()
6386 }
6487
65- channelGroupsModel.groups.observe(viewLifecycleOwner) { groups ->
66- groups?.getOrNull(selectedChannelGroup - 1 )?.let { channelGroup ->
67- @SuppressLint(" StringFormatInvalid" )
68- binding.allSubsBtn.text =
69- " %s (%d)" .format(
70- requireContext().getString(R .string.all),
71- viewModel.subscriptions.value?.size ? : 0
72- )
73-
74- binding.groupSubsBtn.isVisible = true
75- binding.groupSubsBtn.isChecked = true
76- binding.groupSubsBtn.text = " %s (%d)" .format(
77- channelGroup.name,
78- channelGroup.channels.size
88+ channelGroupsModel.groups.value?.getOrNull(selectedChannelGroup - 1 )?.let { channelGroup ->
89+ @SuppressLint(" StringFormatInvalid" )
90+ binding.allSubsBtn.text =
91+ " %s (%d)" .format(
92+ requireContext().getString(R .string.all),
93+ viewModel.subscriptions.value?.size ? : 0
7994 )
80- binding.groupSubsBtn.setOnClickListener {
81- binding.groupEditBtn.isVisible = true
82-
83- showFilteredSubscriptions()
84- }
8595
96+ binding.groupSubsBtn.isVisible = true
97+ binding.groupSubsBtn.isChecked = true
98+ binding.groupSubsBtn.text = " %s (%d)" .format(
99+ channelGroup.name,
100+ channelGroup.channels.size
101+ )
102+ binding.groupSubsBtn.setOnClickListener {
86103 binding.groupEditBtn.isVisible = true
87- binding.groupEditBtn.setOnClickListener {
88- channelGroupsModel.groupToEdit = channelGroup
89- EditChannelGroupSheet ()
90- .show(parentFragmentManager, null )
91- }
92104
93- // refresh displayed list of channels when channel groups have been edited
94- if (binding.groupSubsBtn.isChecked) {
95- showFilteredSubscriptions()
96- }
105+ showFilteredSubscriptions()
106+ }
107+
108+ binding.groupEditBtn.isVisible = true
109+ binding.groupEditBtn.setOnClickListener {
110+ channelGroupsModel.groupToEdit = channelGroup
111+ EditChannelGroupSheet ()
112+ .show(parentFragmentManager, null )
113+ }
114+
115+ // refresh displayed list of channels when channel groups have been edited
116+ if (binding.groupSubsBtn.isChecked) {
117+ showFilteredSubscriptions()
97118 }
98119 }
99120 }
0 commit comments