diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/PersonalFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/PersonalFragment.kt index af3a941e..3bdda7f3 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/PersonalFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/PersonalFragment.kt @@ -32,6 +32,19 @@ class PersonalFragment : Fragment(), MenuProvider { private lateinit var continueWatchingAdapter: MediathekShowListAdapter private lateinit var bookmarkAdapter: MediathekShowListAdapter + private val downloadsHeaderAdapter = HeaderAdapater( + R.string.activity_main_tab_downloads, + R.drawable.ic_baseline_save_alt_24, + ) { navigateToDownloads() } + private val continueWatchingHeaderAdapter = HeaderAdapater( + R.string.activity_main_tab_continue_watching, + R.drawable.ic_outline_play_circle_24 + ) { navigateToDownloads() } + private val bookmarksHeaderAdapter = HeaderAdapater( + R.string.activity_main_tab_bookmarks, + R.drawable.ic_outline_bookmarks_24 + ) { navigateToDownloads() } + private val downloadsLoadStatusAdapter = LoadStatusAdapter() private val continueWatchingLoadStatusAdapter = LoadStatusAdapter() private val bookmarkLoadStatusAdapter = LoadStatusAdapter() @@ -63,22 +76,13 @@ class PersonalFragment : Fragment(), MenuProvider { MediathekShowListAdapter(lifecycleScope, MediathekItemType.Bookmark, showClickListener) outerAdapter = ConcatAdapter( - HeaderAdapater( - R.string.activity_main_tab_downloads, - R.drawable.ic_baseline_save_alt_24 - ) { navigateToDownloads() }, + downloadsHeaderAdapter, downloadsAdapter, downloadsLoadStatusAdapter, - HeaderAdapater( - R.string.activity_main_tab_continue_watching, - R.drawable.ic_outline_play_circle_24 - ) { navigateToContinueWatching() }, + continueWatchingHeaderAdapter, continueWatchingAdapter, continueWatchingLoadStatusAdapter, - HeaderAdapater( - R.string.activity_main_tab_bookmarks, - R.drawable.ic_outline_bookmarks_24 - ) { navigateToBookmarks() }, + bookmarksHeaderAdapter, bookmarkAdapter, bookmarkLoadStatusAdapter, ) @@ -93,23 +97,26 @@ class PersonalFragment : Fragment(), MenuProvider { binding.list.adapter = outerAdapter - lifecycleScope.launch { + lifecycleScope.launchWhenCreated { viewModel.downloadsFlow.collect { downloadsAdapter.setShows(it) + downloadsHeaderAdapter.setShowMoreButton(it.isNotEmpty()) downloadsLoadStatusAdapter.onShowsLoaded(it.size) } } - lifecycleScope.launch { + lifecycleScope.launchWhenCreated { viewModel.continueWatchingFlow.collect { continueWatchingAdapter.setShows(it) + continueWatchingHeaderAdapter.setShowMoreButton(it.isNotEmpty()) continueWatchingLoadStatusAdapter.onShowsLoaded(it.size) } } - lifecycleScope.launch { + lifecycleScope.launchWhenCreated { viewModel.bookmarkFlow.collect { bookmarkAdapter.setShows(it) + bookmarksHeaderAdapter.setShowMoreButton(it.isNotEmpty()) bookmarkLoadStatusAdapter.onShowsLoaded(it.size) } } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderAdapater.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderAdapater.kt index c1ac6205..fad51818 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderAdapater.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderAdapater.kt @@ -14,6 +14,17 @@ class HeaderAdapater( private val listener: Listener?, ) : RecyclerView.Adapter() { + private var showMoreButton = false + + fun setShowMoreButton(showMoreButton: Boolean) { + if (this.showMoreButton == showMoreButton) { + return + } + + this.showMoreButton = showMoreButton + notifyItemChanged(1) + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeaderViewHolder { val layoutInflater = LayoutInflater.from(parent.context) val binding = PersonalFragmentHeaderItemBinding.inflate(layoutInflater, parent, false) @@ -30,7 +41,7 @@ class HeaderAdapater( } override fun onBindViewHolder(holder: HeaderViewHolder, position: Int) { - holder.bind(labelResId, iconResId) + holder.bind(labelResId, iconResId, showMoreButton) } override fun getItemCount() = 1 diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderViewHolder.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderViewHolder.kt index a6754513..cd3a2d32 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderViewHolder.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/personal/adapter/HeaderViewHolder.kt @@ -2,6 +2,7 @@ package de.christinecoenen.code.zapp.app.personal.adapter import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import de.christinecoenen.code.zapp.databinding.PersonalFragmentHeaderItemBinding @@ -12,9 +13,11 @@ class HeaderViewHolder( fun bind( @StringRes titleResId: Int, @DrawableRes iconResId: Int, + showMoreButton: Boolean, ) { binding.title.setText(titleResId) binding.icon.setImageResource(iconResId) + binding.more.isVisible = showMoreButton } }