diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index b83e6bc33..7afa7804e 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -29,7 +29,8 @@ object PreferenceKeys { const val THEME_MODE = "theme_toggle" const val PURE_THEME = "pure_theme" const val ACCENT_COLOR = "accent_color" - const val GRID_COLUMNS = "grid" + const val GRID_COLUMNS_PORTRAIT = "grid" + const val GRID_COLUMNS_LANDSCAPE = "grid_landscape" const val LABEL_VISIBILITY = "label_visibility" const val APP_ICON = "icon_change" const val LEGACY_SUBSCRIPTIONS = "legacy_subscriptions" diff --git a/app/src/main/java/com/github/libretube/extensions/Int.kt b/app/src/main/java/com/github/libretube/extensions/Int.kt new file mode 100644 index 000000000..3e6af313f --- /dev/null +++ b/app/src/main/java/com/github/libretube/extensions/Int.kt @@ -0,0 +1,5 @@ +package com.github.libretube.extensions + +import kotlin.math.ceil + +fun Int.ceilHalf() = ceil((toDouble() / 2)).toInt() \ No newline at end of file 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 ca77c9bde..6d8cf2a72 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 @@ -9,7 +9,6 @@ import androidx.core.os.bundleOf import androidx.core.view.isGone import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.LayoutManager import com.github.libretube.R @@ -19,6 +18,7 @@ import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.AllCaughtUpRowBinding import com.github.libretube.databinding.TrendingRowBinding import com.github.libretube.databinding.VideoRowBinding +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.toID @@ -219,21 +219,15 @@ class VideosAdapter( RELATED_COLUMN } - fun getLayout(context: Context): LayoutManager { + fun getLayout(context: Context, gridItems: Int): LayoutManager { return if (PreferenceHelper.getBoolean( PreferenceKeys.ALTERNATIVE_VIDEOS_LAYOUT, false ) ) { - LinearLayoutManager(context) + GridLayoutManager(context, gridItems.ceilHalf()) } else { - GridLayoutManager( - context, - PreferenceHelper.getString( - PreferenceKeys.GRID_COLUMNS, - context.resources.getInteger(R.integer.grid_items).toString() - ).toInt() - ) + GridLayoutManager(context, gridItems) } } diff --git a/app/src/main/java/com/github/libretube/ui/base/DynamicLayoutManagerFragment.kt b/app/src/main/java/com/github/libretube/ui/base/DynamicLayoutManagerFragment.kt new file mode 100644 index 000000000..6b599b248 --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/base/DynamicLayoutManagerFragment.kt @@ -0,0 +1,36 @@ +package com.github.libretube.ui.base + +import android.content.res.Configuration +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import com.github.libretube.R +import com.github.libretube.constants.PreferenceKeys +import com.github.libretube.helpers.PreferenceHelper +import kotlin.math.min + +abstract class DynamicLayoutManagerFragment: Fragment() { + abstract fun setLayoutManagers(gridItems: Int) + + private fun getGridItemsCount(orientation: Int): Int { + val (prefKey, defaultValueRes) = when (orientation) { + Configuration.ORIENTATION_PORTRAIT -> PreferenceKeys.GRID_COLUMNS_PORTRAIT to R.integer.grid_items + else -> PreferenceKeys.GRID_COLUMNS_LANDSCAPE to R.integer.grid_items_landscape + } + + val defaultValue = resources.getInteger(defaultValueRes).toString() + return PreferenceHelper.getString(prefKey, defaultValue).toInt() + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + setLayoutManagers(getGridItemsCount(newConfig.orientation)) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + setLayoutManagers(getGridItemsCount(resources.configuration.orientation)) + } +} 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 d4fd73fc8..6a422fa86 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 @@ -9,9 +9,8 @@ import androidx.core.os.bundleOf import androidx.core.view.children import androidx.core.view.isGone import androidx.core.view.isVisible -import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.GridLayoutManager import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.SubscriptionHelper @@ -28,6 +27,7 @@ import com.github.libretube.obj.ChannelTabs import com.github.libretube.obj.ShareData import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.adapters.VideosAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.sheets.AddChannelToGroupSheet @@ -37,8 +37,9 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import retrofit2.HttpException import java.io.IOException +import kotlin.math.ceil -class ChannelFragment : Fragment() { +class ChannelFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentChannelBinding? = null private val binding get() = _binding!! @@ -77,11 +78,15 @@ class ChannelFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.channelRecView?.layoutManager = GridLayoutManager(context, + ceil((gridItems.toDouble() / 2)).toInt() + ) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.channelRecView.layoutManager = LinearLayoutManager(context) - binding.channelRefresh.setOnRefreshListener { fetchChannel() } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt index cf84b2f76..57010b820 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt @@ -11,21 +11,22 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.isGone import androidx.core.view.isVisible -import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.databinding.FragmentDownloadsBinding import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.obj.DownloadWithItems +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.formatAsFileSize import com.github.libretube.helpers.DownloadHelper import com.github.libretube.obj.DownloadStatus import com.github.libretube.receivers.DownloadReceiver import com.github.libretube.services.DownloadService import com.github.libretube.ui.adapters.DownloadsAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.viewholders.DownloadsViewHolder import kotlin.io.path.fileSize import kotlinx.coroutines.Dispatchers @@ -34,7 +35,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -class DownloadsFragment : Fragment() { +class DownloadsFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentDownloadsBinding? = null private val binding get() = _binding!! @@ -72,6 +73,10 @@ class DownloadsFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.downloads?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -85,8 +90,6 @@ class DownloadsFragment : Fragment() { binding.downloadsEmpty.isGone = true binding.downloads.isVisible = true - binding.downloads.layoutManager = LinearLayoutManager(context) - val adapter = DownloadsAdapter(requireContext(), downloads) { var isDownloading = false val ids = it.downloadItems diff --git a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt index d7ebcb6aa..80bfe2be8 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt @@ -10,13 +10,12 @@ import android.widget.Toast import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.fragment.findNavController -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.api.PlaylistsHelper @@ -26,11 +25,13 @@ import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.FragmentLibraryBinding import com.github.libretube.db.DatabaseHolder import com.github.libretube.extensions.TAG +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.dpToPx import com.github.libretube.helpers.NavBarHelper import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.dialogs.CreatePlaylistDialog import com.github.libretube.ui.dialogs.CreatePlaylistDialog.Companion.CREATE_PLAYLIST_DIALOG_REQUEST_KEY import com.github.libretube.ui.models.PlayerViewModel @@ -39,7 +40,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class LibraryFragment : Fragment() { +class LibraryFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentLibraryBinding? = null private val binding get() = _binding!! @@ -54,13 +55,14 @@ class LibraryFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.bookmarksRecView?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + _binding?.playlistRecView?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - // initialize the layout managers - binding.bookmarksRecView.layoutManager = LinearLayoutManager(context) - binding.playlistRecView.layoutManager = LinearLayoutManager(context) - // listen for the mini player state changing playerViewModel.isMiniPlayerVisible.observe(viewLifecycleOwner) { updateFABMargin(it) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index aec529949..472364d70 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -11,11 +11,10 @@ import androidx.core.text.parseAsHtml import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updatePadding -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.api.PlaylistsHelper @@ -28,6 +27,7 @@ import com.github.libretube.databinding.FragmentPlaylistBinding import com.github.libretube.db.DatabaseHolder import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.TAG +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.serializable import com.github.libretube.extensions.toID @@ -38,6 +38,7 @@ import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.base.BaseActivity +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet @@ -47,7 +48,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext -class PlaylistFragment : Fragment() { +class PlaylistFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentPlaylistBinding? = null private val binding get() = _binding!! @@ -89,10 +90,13 @@ class PlaylistFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.playlistRecView?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.playlistRecView.layoutManager = LinearLayoutManager(context) binding.playlistProgress.isVisible = true isBookmarked = runBlocking(Dispatchers.IO) { diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt index 9c748cfa0..45aaa33f5 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt @@ -7,9 +7,8 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.isGone import androidx.core.view.isVisible -import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.GridLayoutManager import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.constants.IntentData @@ -18,11 +17,13 @@ import com.github.libretube.databinding.FragmentSearchResultBinding import com.github.libretube.db.DatabaseHelper import com.github.libretube.db.obj.SearchHistoryItem import com.github.libretube.extensions.TAG +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.hideKeyboard import com.github.libretube.extensions.toastFromMainDispatcher import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.adapters.SearchAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.util.TextUtils import com.github.libretube.util.TextUtils.toTimeInSeconds @@ -31,8 +32,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import kotlin.math.ceil -class SearchResultFragment : Fragment() { +class SearchResultFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentSearchResultBinding? = null private val binding get() = _binding!! @@ -56,6 +58,10 @@ class SearchResultFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.searchRecycler?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -63,8 +69,6 @@ class SearchResultFragment : Fragment() { // different queries in a row and navigating to the previous ones through back presses (context as MainActivity).setQuerySilent(query) - binding.searchRecycler.layoutManager = LinearLayoutManager(requireContext()) - // add the query to the history addToHistory(query) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SearchFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt similarity index 93% rename from app/src/main/java/com/github/libretube/ui/fragments/SearchFragment.kt rename to app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt index 4a760ca9c..8053fb05d 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SearchFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt @@ -14,7 +14,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.github.libretube.api.RetrofitInstance import com.github.libretube.constants.IntentData import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.databinding.FragmentSearchBinding +import com.github.libretube.databinding.FragmentSearchSuggestionsBinding import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.extensions.TAG import com.github.libretube.helpers.PreferenceHelper @@ -26,8 +26,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class SearchFragment : Fragment() { - private var _binding: FragmentSearchBinding? = null +class SearchSuggestionsFragment : Fragment() { + private var _binding: FragmentSearchSuggestionsBinding? = null private val binding get() = _binding!! private val viewModel: SearchViewModel by activityViewModels() @@ -41,7 +41,7 @@ class SearchFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View { - _binding = FragmentSearchBinding.inflate(inflater) + _binding = FragmentSearchSuggestionsBinding.inflate(inflater) return binding.root } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt index cc99835d9..3b51e92ce 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt @@ -10,7 +10,6 @@ import androidx.core.view.children import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager @@ -29,6 +28,7 @@ import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.LegacySubscriptionAdapter import com.github.libretube.ui.adapters.SubscriptionChannelAdapter import com.github.libretube.ui.adapters.VideosAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.models.EditChannelGroupsModel import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.SubscriptionsViewModel @@ -40,7 +40,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -class SubscriptionsFragment : Fragment() { +class SubscriptionsFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentSubscriptionsBinding? = null private val binding get() = _binding!! @@ -72,6 +72,10 @@ class SubscriptionsFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.subFeed?.layoutManager = VideosAdapter.getLayout(requireContext(), gridItems) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -87,8 +91,6 @@ class SubscriptionsFragment : Fragment() { binding.subRefresh.isEnabled = true binding.subProgress.isVisible = true - binding.subFeed.layoutManager = VideosAdapter.getLayout(requireContext()) - if (!isCurrentTabSubChannels && (viewModel.videoFeed.value == null || !loadFeedInBackground)) { viewModel.videoFeed.value = null viewModel.fetchFeed(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 index 88300fb2c..1651e63b2 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt @@ -8,7 +8,6 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.core.view.isGone -import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import com.github.libretube.R import com.github.libretube.api.RetrofitInstance @@ -17,6 +16,7 @@ import com.github.libretube.extensions.TAG import com.github.libretube.helpers.LocaleHelper import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.ui.adapters.VideosAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.util.deArrow import com.google.android.material.snackbar.Snackbar import java.io.IOException @@ -25,7 +25,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import retrofit2.HttpException -class TrendsFragment : Fragment() { +class TrendsFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentTrendsBinding? = null private val binding get() = _binding!! @@ -38,6 +38,10 @@ class TrendsFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.recview?.layoutManager = VideosAdapter.getLayout(requireContext(), gridItems) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -87,7 +91,6 @@ class TrendsFragment : Fragment() { } binding.recview.adapter = VideosAdapter(response.toMutableList()) - binding.recview.layoutManager = VideosAdapter.getLayout(requireContext()) } } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt index cba3fd72e..e200fe4db 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt @@ -10,11 +10,10 @@ import androidx.core.os.postDelayed import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updatePadding -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.api.obj.StreamItem @@ -23,11 +22,13 @@ import com.github.libretube.databinding.FragmentWatchHistoryBinding import com.github.libretube.db.DatabaseHelper import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.obj.WatchHistoryItem +import com.github.libretube.extensions.ceilHalf import com.github.libretube.extensions.dpToPx import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ProxyHelper import com.github.libretube.ui.adapters.WatchHistoryAdapter +import com.github.libretube.ui.base.DynamicLayoutManagerFragment import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.util.PlayingQueue @@ -36,7 +37,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -class WatchHistoryFragment : Fragment() { +class WatchHistoryFragment : DynamicLayoutManagerFragment() { private var _binding: FragmentWatchHistoryBinding? = null private val binding get() = _binding!! @@ -70,6 +71,10 @@ class WatchHistoryFragment : Fragment() { return binding.root } + override fun setLayoutManagers(gridItems: Int) { + _binding?.watchHistoryRecView?.layoutManager = GridLayoutManager(context, gridItems.ceilHalf()) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -163,7 +168,6 @@ class WatchHistoryFragment : Fragment() { ) } - binding.watchHistoryRecView.layoutManager = LinearLayoutManager(context) binding.watchHistoryRecView.adapter = watchHistoryAdapter binding.historyEmpty.isGone = true binding.historyScrollView.isVisible = true diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search_suggestions.xml similarity index 94% rename from app/src/main/res/layout/fragment_search.xml rename to app/src/main/res/layout/fragment_search_suggestions.xml index 60471f613..2110aa7f0 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search_suggestions.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragments.SearchFragment"> + tools:context=".ui.fragments.SearchSuggestionsFragment"> + tools:layout="@layout/fragment_search_suggestions" /> 2 + 4 \ No newline at end of file diff --git a/app/src/main/res/values-xlarge/integers.xml b/app/src/main/res/values-xlarge/integers.xml index 15fe03fa4..fe5baa395 100644 --- a/app/src/main/res/values-xlarge/integers.xml +++ b/app/src/main/res/values-xlarge/integers.xml @@ -1,4 +1,5 @@ - 4 + 3 + 6 \ No newline at end of file diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 999aec435..aa7ba3ac4 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -205,6 +205,7 @@ 3 4 5 + 6 diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 194e40225..f3bf88c9d 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,4 +1,5 @@ 1 + 2 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b9cf3457..b7fd1fd5a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,7 +39,8 @@ You have to enter a username and password. This is for a Piped account. Video resolution - Grid columns + Grid columns (portrait) + Grid columns (landscape) Nothing here. Delete playlist Delete the playlist? diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml index 69e0ed9e3..9edc93256 100644 --- a/app/src/main/res/xml/appearance_settings.xml +++ b/app/src/main/res/xml/appearance_settings.xml @@ -94,6 +94,15 @@ app:title="@string/grid" app:useSimpleSummaryProvider="true" /> + + \ No newline at end of file