diff --git a/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt index a1651cbdd..c55762cda 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt @@ -60,7 +60,7 @@ class VideosAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideosViewHolder { val layoutInflater = LayoutInflater.from(parent.context) return when { - forceMode in listOf(ForceMode.TRENDING, ForceMode.RELATED) -> VideosViewHolder(TrendingRowBinding.inflate(layoutInflater, parent, false)) + forceMode in listOf(ForceMode.TRENDING, ForceMode.RELATED, ForceMode.HOME) -> VideosViewHolder(TrendingRowBinding.inflate(layoutInflater, parent, false)) forceMode == ForceMode.CHANNEL -> VideosViewHolder(VideoRowBinding.inflate(layoutInflater, parent, false)) PreferenceHelper.getBoolean( PreferenceKeys.ALTERNATIVE_VIDEOS_LAYOUT, @@ -83,11 +83,14 @@ class VideosAdapter( // Trending layout holder.trendingRowBinding?.apply { - if (forceMode == ForceMode.RELATED) { - val params = root.layoutParams - params.width = (180).toDp(root.context.resources).toInt() - root.layoutParams = params + // set a fixed width for better visuals + val params = root.layoutParams + when (forceMode) { + ForceMode.RELATED -> params.width = (180).toDp(root.context.resources).toInt() + ForceMode.HOME -> params.width = (250).toDp(root.context.resources).toInt() + else -> {} } + root.layoutParams = params textViewTitle.text = video.title textViewChannel.text = @@ -168,7 +171,8 @@ class VideosAdapter( TRENDING, ROW, CHANNEL, - RELATED + RELATED, + HOME } fun getLayout(context: Context): LayoutManager { diff --git a/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt index c08b79f94..eb59bc672 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt @@ -1,6 +1,5 @@ package com.github.libretube.ui.fragments -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -51,29 +50,37 @@ class HomeFragment : BaseFragment() { findNavController().navigate(R.id.libraryFragment) } + binding.refresh.setOnRefreshListener { + binding.refresh.isRefreshing = true + lifecycleScope.launch(Dispatchers.IO) { + fetchHome(LocaleHelper.getTrendingRegion(requireContext())) + } + } + lifecycleScope.launch(Dispatchers.IO) { - fetchHome(requireContext(), LocaleHelper.getTrendingRegion(requireContext())) + fetchHome(LocaleHelper.getTrendingRegion(requireContext())) } } - private suspend fun fetchHome(context: Context, trendingRegion: String) { + private suspend fun fetchHome(trendingRegion: String) { val token = PreferenceHelper.getToken() - val appContext = context.applicationContext - runOrError(appContext) { + runOrError { val feed = SubscriptionHelper.getFeed().withMaxSize(20) + if (feed.isEmpty()) return@runOrError runOnUiThread { makeVisible(binding.featuredRV, binding.featuredTV) binding.featuredRV.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) binding.featuredRV.adapter = VideosAdapter( feed.toMutableList(), childFragmentManager, - forceMode = VideosAdapter.Companion.ForceMode.RELATED + forceMode = VideosAdapter.Companion.ForceMode.HOME ) } } - runOrError(appContext) { + runOrError { val trending = RetrofitInstance.api.getTrending(trendingRegion).withMaxSize(10) + if (trending.isEmpty()) return@runOrError runOnUiThread { makeVisible(binding.trendingRV, binding.trendingTV) binding.trendingRV.layoutManager = GridLayoutManager(context, 2) @@ -85,8 +92,9 @@ class HomeFragment : BaseFragment() { } } - runOrError(appContext) { + runOrError { val playlists = RetrofitInstance.authApi.getUserPlaylists(token).withMaxSize(20) + if (playlists.isEmpty()) return@runOrError runOnUiThread { makeVisible(binding.playlistsRV, binding.playlistsTV) binding.playlistsRV.layoutManager = LinearLayoutManager(context) @@ -105,12 +113,12 @@ class HomeFragment : BaseFragment() { } } - private fun runOrError(context: Context, action: suspend () -> Unit) { + private fun runOrError(action: suspend () -> Unit) { lifecycleScope.launch(Dispatchers.IO) { try { action.invoke() } catch (e: Exception) { - e.localizedMessage?.let { context.toastFromMainThread(it) } + e.localizedMessage?.let { context?.toastFromMainThread(it) } } } } @@ -120,5 +128,7 @@ class HomeFragment : BaseFragment() { it.visibility = View.VISIBLE } binding.progress.visibility = View.GONE + binding.scroll.visibility = View.VISIBLE + binding.refresh.isRefreshing = false } } diff --git a/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt index 6252d0d4c..71297c792 100644 --- a/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/SubscriptionsViewModel.kt @@ -3,7 +3,6 @@ package com.github.libretube.ui.models import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.Subscription diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c00a68894..20216bec7 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -9,64 +9,72 @@ android:layout_height="match_parent" android:layout_gravity="center" /> - - + android:layout_height="wrap_content"> - - - - - - - + android:orientation="vertical" + android:paddingBottom="10dp"> + + - + - + - + - + - + + + + + + + + + \ No newline at end of file