diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index f4849930d..a3c6f7cf1 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -314,6 +314,8 @@ class MainActivity : BaseActivity() { when (intent?.getStringExtra("fragmentToOpen")) { "home" -> navController.navigate(R.id.homeFragment) + "trends" -> + navController.navigate(R.id.trendsFragment) "subscriptions" -> navController.navigate(R.id.subscriptionsFragment) "library" -> 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 648bb4285..a4d28b29a 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,30 +1,14 @@ package com.github.libretube.ui.fragments -import android.content.Intent import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast -import androidx.lifecycle.lifecycleScope -import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance -import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.FragmentHomeBinding -import com.github.libretube.extensions.TAG -import com.github.libretube.ui.activities.SettingsActivity -import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment -import com.github.libretube.util.LocaleHelper -import com.github.libretube.util.PreferenceHelper -import com.google.android.material.snackbar.Snackbar -import retrofit2.HttpException -import java.io.IOException class HomeFragment : BaseFragment() { private lateinit var binding: FragmentHomeBinding - private lateinit var region: String override fun onCreateView( inflater: LayoutInflater, @@ -34,74 +18,4 @@ class HomeFragment : BaseFragment() { binding = FragmentHomeBinding.inflate(layoutInflater, container, false) return binding.root } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val regionPref = PreferenceHelper.getString(PreferenceKeys.REGION, "sys") - - // get the system default country if auto region selected - region = if (regionPref == "sys") { - LocaleHelper - .getDetectedCountry(requireContext(), "UK") - .uppercase() - } else { - regionPref - } - - fetchTrending() - binding.homeRefresh.isEnabled = true - binding.homeRefresh.setOnRefreshListener { - fetchTrending() - } - } - - private fun fetchTrending() { - lifecycleScope.launchWhenCreated { - val response = try { - RetrofitInstance.api.getTrending(region) - } catch (e: IOException) { - println(e) - Log.e(TAG(), "IOException, you might not have internet connection") - Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() - return@launchWhenCreated - } catch (e: HttpException) { - Log.e(TAG(), "HttpException, unexpected response") - Toast.makeText(context, R.string.server_error, Toast.LENGTH_SHORT).show() - return@launchWhenCreated - } finally { - binding.homeRefresh.isRefreshing = false - } - runOnUiThread { - binding.progressBar.visibility = View.GONE - - // show a [SnackBar] if there are no trending videos available - if (response.isEmpty()) { - Snackbar.make( - binding.root, - R.string.change_region, - Snackbar.LENGTH_LONG - ) - .setAction( - R.string.settings - ) { - startActivity( - Intent( - context, - SettingsActivity::class.java - ) - ) - } - .show() - return@runOnUiThread - } - - binding.recview.adapter = VideosAdapter( - response.toMutableList(), - childFragmentManager - ) - - binding.recview.layoutManager = VideosAdapter.getLayout(requireContext()) - } - } - } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt new file mode 100644 index 000000000..2f429481e --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt @@ -0,0 +1,107 @@ +package com.github.libretube.ui.fragments + +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.lifecycle.lifecycleScope +import com.github.libretube.R +import com.github.libretube.api.RetrofitInstance +import com.github.libretube.constants.PreferenceKeys +import com.github.libretube.databinding.FragmentTrendsBinding +import com.github.libretube.extensions.TAG +import com.github.libretube.ui.activities.SettingsActivity +import com.github.libretube.ui.adapters.VideosAdapter +import com.github.libretube.ui.base.BaseFragment +import com.github.libretube.util.LocaleHelper +import com.github.libretube.util.PreferenceHelper +import com.google.android.material.snackbar.Snackbar +import retrofit2.HttpException +import java.io.IOException + +class TrendsFragment : BaseFragment() { + private lateinit var binding: FragmentTrendsBinding + private lateinit var region: String + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentTrendsBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val regionPref = PreferenceHelper.getString(PreferenceKeys.REGION, "sys") + + // get the system default country if auto region selected + region = if (regionPref == "sys") { + LocaleHelper + .getDetectedCountry(requireContext(), "UK") + .uppercase() + } else { + regionPref + } + + fetchTrending() + binding.homeRefresh.isEnabled = true + binding.homeRefresh.setOnRefreshListener { + fetchTrending() + } + } + + private fun fetchTrending() { + lifecycleScope.launchWhenCreated { + val response = try { + RetrofitInstance.api.getTrending(region) + } catch (e: IOException) { + println(e) + Log.e(TAG(), "IOException, you might not have internet connection") + Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() + return@launchWhenCreated + } catch (e: HttpException) { + Log.e(TAG(), "HttpException, unexpected response") + Toast.makeText(context, R.string.server_error, Toast.LENGTH_SHORT).show() + return@launchWhenCreated + } finally { + binding.homeRefresh.isRefreshing = false + } + runOnUiThread { + binding.progressBar.visibility = View.GONE + + // show a [SnackBar] if there are no trending videos available + if (response.isEmpty()) { + Snackbar.make( + binding.root, + R.string.change_region, + Snackbar.LENGTH_LONG + ) + .setAction( + R.string.settings + ) { + startActivity( + Intent( + context, + SettingsActivity::class.java + ) + ) + } + .show() + return@runOnUiThread + } + + binding.recview.adapter = VideosAdapter( + response.toMutableList(), + childFragmentManager + ) + + binding.recview.layoutManager = VideosAdapter.getLayout(requireContext()) + } + } + } +} diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 31af0267b..77d9ef65f 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,35 +1,6 @@ - - - - - - - - + android:layout_height="match_parent"> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_trends.xml b/app/src/main/res/layout/fragment_trends.xml new file mode 100644 index 000000000..039e85007 --- /dev/null +++ b/app/src/main/res/layout/fragment_trends.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_menu.xml b/app/src/main/res/menu/bottom_menu.xml index e41131592..c24a7cc01 100644 --- a/app/src/main/res/menu/bottom_menu.xml +++ b/app/src/main/res/menu/bottom_menu.xml @@ -6,6 +6,12 @@ android:icon="@drawable/ic_home" android:title="@string/startpage" /> + + - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav.xml b/app/src/main/res/navigation/nav.xml index 1b311537d..d076b0d5a 100644 --- a/app/src/main/res/navigation/nav.xml +++ b/app/src/main/res/navigation/nav.xml @@ -4,12 +4,16 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav" app:startDestination="@id/homeFragment"> - + Auto Limit to runtime Open queue from notification + Trends Download Service diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index 8df6da32b..d18406579 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -12,6 +12,16 @@ android:targetPackage="com.github.libretube" android:targetClass="com.github.libretube.ui.activities.MainActivity" /> + + +