mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
Merge pull request #5359 from Bnyro/master
feat: separate landscape grid columns pref + more impacted adapters
This commit is contained in:
commit
a9b58d9b2a
@ -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"
|
||||
|
5
app/src/main/java/com/github/libretube/extensions/Int.kt
Normal file
5
app/src/main/java/com/github/libretube/extensions/Int.kt
Normal file
@ -0,0 +1,5 @@
|
||||
package com.github.libretube.extensions
|
||||
|
||||
import kotlin.math.ceil
|
||||
|
||||
fun Int.ceilHalf() = ceil((toDouble() / 2)).toInt()
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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())
|
||||
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/suggestions_recycler"
|
@ -26,9 +26,9 @@
|
||||
tools:layout="@layout/fragment_library" />
|
||||
<fragment
|
||||
android:id="@+id/searchFragment"
|
||||
android:name="com.github.libretube.ui.fragments.SearchFragment"
|
||||
android:name="com.github.libretube.ui.fragments.SearchSuggestionsFragment"
|
||||
android:label="fragment_search"
|
||||
tools:layout="@layout/fragment_search" />
|
||||
tools:layout="@layout/fragment_search_suggestions" />
|
||||
<fragment
|
||||
android:id="@+id/searchResultFragment"
|
||||
android:name="com.github.libretube.ui.fragments.SearchResultFragment"
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="grid_items">2</integer>
|
||||
<integer name="grid_items_landscape">4</integer>
|
||||
</resources>
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="grid_items">4</integer>
|
||||
<integer name="grid_items">3</integer>
|
||||
<integer name="grid_items_landscape">6</integer>
|
||||
</resources>
|
@ -205,6 +205,7 @@
|
||||
<item>3</item>
|
||||
<item>4</item>
|
||||
<item>5</item>
|
||||
<item>6</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="bufferingGoal">
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="grid_items">1</integer>
|
||||
<integer name="grid_items_landscape">2</integer>
|
||||
</resources>
|
@ -39,7 +39,8 @@
|
||||
<string name="empty">You have to enter a username and password.</string>
|
||||
<string name="notgmail">This is for a Piped account.</string>
|
||||
<string name="defres">Video resolution</string>
|
||||
<string name="grid">Grid columns</string>
|
||||
<string name="grid">Grid columns (portrait)</string>
|
||||
<string name="grid_landscape">Grid columns (landscape)</string>
|
||||
<string name="emptyList">Nothing here.</string>
|
||||
<string name="deletePlaylist">Delete playlist</string>
|
||||
<string name="areYouSure">Delete the playlist?</string>
|
||||
|
@ -94,6 +94,15 @@
|
||||
app:title="@string/grid"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ListPreference
|
||||
android:icon="@drawable/ic_grid"
|
||||
app:defaultValue="@integer/grid_items_landscape"
|
||||
app:entries="@array/grid"
|
||||
app:entryValues="@array/grid"
|
||||
app:key="grid_landscape"
|
||||
app:title="@string/grid_landscape"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
Loading…
x
Reference in New Issue
Block a user