From 9795f9846fb83505e2268691ec4a931f57789865 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 5 Nov 2022 19:08:02 +0100 Subject: [PATCH 1/4] cleanup --- .../libretube/ui/fragments/ChannelFragment.kt | 99 +++++++++++-------- app/src/main/res/layout/fragment_channel.xml | 9 +- app/src/main/res/values/style.xml | 2 +- 3 files changed, 64 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt index 59f40f2ec..fc28b49fb 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt @@ -6,7 +6,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView -import androidx.core.view.children import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.github.libretube.R @@ -25,7 +24,6 @@ import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.util.ImageHelper -import com.google.android.material.chip.Chip import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -74,7 +72,9 @@ class ChannelFragment : BaseFragment() { binding.channelRefresh.isRefreshing = true fetchChannel() } + refreshChannel() + binding.channelRefresh.setOnRefreshListener { refreshChannel() } @@ -192,62 +192,77 @@ class ChannelFragment : BaseFragment() { binding.channelRecView.adapter = channelAdapter } - binding.videos.setOnClickListener { + setupTabs(response.tabs) + } + } + + private fun setupTabs(tabs: List?) { + tabs?.firstOrNull { it.name == "Playlists" }?.let { + binding.playlists.visibility = View.VISIBLE + } + + tabs?.firstOrNull { it.name == "Channels" }?.let { + binding.playlists.visibility = View.VISIBLE + } + + tabs?.firstOrNull { it.name == "Livestreams" }?.let { + binding.playlists.visibility = View.VISIBLE + } + + tabs?.firstOrNull { it.name == "Shorts" }?.let { + binding.playlists.visibility = View.VISIBLE + } + + binding.tabChips.setOnCheckedStateChangeListener { _, _ -> + reactToTabChange(tabs) + } + } + + private fun reactToTabChange(tabs: List?) { + when (binding.tabChips.checkedChipId) { + binding.videos.id -> { binding.channelRecView.adapter = channelAdapter onScrollEnd = { fetchChannelNextPage() } - binding.tabChips.children.forEach { child -> - if (child != it) (child as Chip).isChecked = false - } } - - response.tabs?.firstOrNull { it.name == "Playlists" }?.let { - setupTab(binding.playlists, it) + binding.channels.id -> { + tabs?.first { it.name == "Channels" }?.let { loadTab(it) } } - - response.tabs?.firstOrNull { it.name == "Channels" }?.let { - setupTab(binding.channels, it) + binding.playlists.id -> { + tabs?.first { it.name == "Playlists" }?.let { loadTab(it) } } - - response.tabs?.firstOrNull { it.name == "Livestreams" }?.let { - setupTab(binding.livestreams, it) + binding.livestreams.id -> { + tabs?.first { it.name == "Livestreams" }?.let { loadTab(it) } } - - response.tabs?.firstOrNull { it.name == "Shorts" }?.let { - setupTab(binding.shorts, it) + binding.shorts.id -> { + tabs?.first { it.name == "Shorts" }?.let { loadTab(it) } } } } - private fun setupTab(chip: Chip, tab: ChannelTab) { - chip.visibility = View.VISIBLE - chip.setOnClickListener { - binding.tabChips.children.forEach { - if (it != chip) (it as Chip).isChecked = false + private fun loadTab(tab: ChannelTab) { + scope.launch { + val response = try { + RetrofitInstance.api.getChannelTab(tab.data!!) + } catch (e: Exception) { + return@launch } - scope.launch { - val response = try { - RetrofitInstance.api.getChannelTab(tab.data!!) - } catch (e: Exception) { - return@launch - } - val adapter = SearchAdapter( - response.content.toMutableList(), - childFragmentManager - ) + val adapter = SearchAdapter( + response.content.toMutableList(), + childFragmentManager + ) - runOnUiThread { - binding.channelRecView.adapter = adapter - } + runOnUiThread { + binding.channelRecView.adapter = adapter + } - var tabNextPage = response.nextpage - onScrollEnd = { - tabNextPage?.let { - fetchTabNextPage(it, tab, adapter) { nextPage -> - tabNextPage = nextPage - } + var tabNextPage = response.nextpage + onScrollEnd = { + tabNextPage?.let { + fetchTabNextPage(it, tab, adapter) { nextPage -> + tabNextPage = nextPage } } } diff --git a/app/src/main/res/layout/fragment_channel.xml b/app/src/main/res/layout/fragment_channel.xml index ab26d98aa..f3197e338 100644 --- a/app/src/main/res/layout/fragment_channel.xml +++ b/app/src/main/res/layout/fragment_channel.xml @@ -124,12 +124,15 @@ + android:layout_height="wrap_content" + app:checkedChip="@+id/videos" + app:selectionRequired="true" + app:singleLine="true" + app:singleSelection="true"> diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index a46541859..fbae8030c 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -186,7 +186,7 @@ slide -