diff --git a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt index ea8ee4fa..bf584b12 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt @@ -1,12 +1,13 @@ package com.futo.platformplayer.fragment.channel.tab +import android.content.res.Configuration import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.R import com.futo.platformplayer.Settings @@ -15,7 +16,6 @@ import com.futo.platformplayer.api.media.models.PlatformAuthorLink import com.futo.platformplayer.api.media.models.channels.IPlatformChannel import com.futo.platformplayer.api.media.models.contents.ContentType import com.futo.platformplayer.api.media.models.contents.IPlatformContent -import com.futo.platformplayer.api.media.models.video.IPlatformVideo import com.futo.platformplayer.api.media.platforms.js.models.JSPager import com.futo.platformplayer.api.media.structures.IAsyncPager import com.futo.platformplayer.api.media.structures.IPager @@ -41,10 +41,11 @@ import com.futo.platformplayer.views.adapters.InsertedViewAdapterWithLoader import com.futo.platformplayer.views.adapters.feedtypes.PreviewContentListAdapter import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlin.math.max class ChannelContentsFragment : Fragment(), IChannelTabFragment { private var _recyclerResults: RecyclerView? = null; - private var _llmVideo: LinearLayoutManager? = null; + private var _glmVideo: GridLayoutManager? = null; private var _loading = false; private var _pager_parent: IPager? = null; private var _pager: IPager? = null; @@ -118,7 +119,7 @@ class ChannelContentsFragment : Fragment(), IChannelTabFragment { super.onScrolled(recyclerView, dx, dy); val recyclerResults = _recyclerResults ?: return; - val llmVideo = _llmVideo ?: return; + val llmVideo = _glmVideo ?: return; val visibleItemCount = recyclerResults.childCount; val firstVisibleItem = llmVideo.findFirstVisibleItemPosition(); @@ -163,9 +164,10 @@ class ChannelContentsFragment : Fragment(), IChannelTabFragment { this.onLongPress.subscribe(this@ChannelContentsFragment.onLongPress::emit); } - _llmVideo = LinearLayoutManager(view.context); + val numColumns = max((resources.configuration.screenWidthDp.toDouble() / resources.getInteger(R.integer.column_width_dp)).toInt(), 1) + _glmVideo = GridLayoutManager(view.context, numColumns); _recyclerResults?.adapter = _adapterResults; - _recyclerResults?.layoutManager = _llmVideo; + _recyclerResults?.layoutManager = _glmVideo; _recyclerResults?.addOnScrollListener(_scrollListener); return view; @@ -181,6 +183,13 @@ class ChannelContentsFragment : Fragment(), IChannelTabFragment { _nextPageHandler.cancel(); } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + _glmVideo?.spanCount = + max((resources.configuration.screenWidthDp.toDouble() / resources.getInteger(R.integer.column_width_dp)).toInt(), 1) + } + /* private fun setPager(pager: IPager, cache: FeedFragment.ItemCache? = null) { if (_pager_parent != null && _pager_parent is IRefreshPager<*>) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelPlaylistsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelPlaylistsFragment.kt index dbb58b68..cd88e610 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelPlaylistsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelPlaylistsFragment.kt @@ -1,12 +1,13 @@ package com.futo.platformplayer.fragment.channel.tab +import android.content.res.Configuration import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.R import com.futo.platformplayer.Settings @@ -36,10 +37,11 @@ import com.futo.platformplayer.views.adapters.InsertedViewAdapterWithLoader import com.futo.platformplayer.views.adapters.feedtypes.PreviewContentListAdapter import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlin.math.max class ChannelPlaylistsFragment : Fragment(), IChannelTabFragment { private var _recyclerResults: RecyclerView? = null - private var _llmPlaylist: LinearLayoutManager? = null + private var _glmPlaylist: GridLayoutManager? = null private var _loading = false private var _pagerParent: IPager? = null private var _pager: IPager? = null @@ -109,7 +111,7 @@ class ChannelPlaylistsFragment : Fragment(), IChannelTabFragment { super.onScrolled(recyclerView, dx, dy) val recyclerResults = _recyclerResults ?: return - val llmPlaylist = _llmPlaylist ?: return + val llmPlaylist = _glmPlaylist ?: return val visibleItemCount = recyclerResults.childCount val firstVisibleItem = llmPlaylist.findFirstVisibleItemPosition() @@ -158,9 +160,10 @@ class ChannelPlaylistsFragment : Fragment(), IChannelTabFragment { this.onLongPress.subscribe(this@ChannelPlaylistsFragment.onLongPress::emit) } - _llmPlaylist = LinearLayoutManager(view.context) + val numColumns = max((resources.configuration.screenWidthDp.toDouble() / resources.getInteger(R.integer.column_width_dp)).toInt(), 1) + _glmPlaylist = GridLayoutManager(view.context, numColumns) _recyclerResults?.adapter = _adapterResults - _recyclerResults?.layoutManager = _llmPlaylist + _recyclerResults?.layoutManager = _glmPlaylist _recyclerResults?.addOnScrollListener(_scrollListener) return view @@ -176,6 +179,13 @@ class ChannelPlaylistsFragment : Fragment(), IChannelTabFragment { _nextPageHandler.cancel() } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + _glmPlaylist?.spanCount = + max((resources.configuration.screenWidthDp.toDouble() / resources.getInteger(R.integer.column_width_dp)).toInt(), 1) + } + private fun setPager( pager: IPager ) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt index 6dccdde8..04a51189 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ContentFeedView.kt @@ -33,6 +33,7 @@ import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuItem import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuOverlay import com.futo.platformplayer.withTimestamp import kotlin.math.floor +import kotlin.math.max abstract class ContentFeedView : FeedView, ContentPreviewViewHolder> where TFragment : MainFragment { private var _exoPlayer: PlayerManager? = null; @@ -168,7 +169,7 @@ abstract class ContentFeedView : FeedView : LinearLayout where TPager : IPager, TViewHolder : RecyclerView.ViewHolder, TFragment : MainFragment { protected val _recyclerResults: RecyclerView; @@ -234,7 +235,8 @@ abstract class FeedView : L } open fun updateSpanCount() { - recyclerData.layoutManager.spanCount = (resources.configuration.screenWidthDp / resources.getDimension(R.dimen.landscape_threshold)).toInt() + 1 + recyclerData.layoutManager.spanCount = + max((resources.configuration.screenWidthDp.toDouble() / resources.getInteger(R.integer.column_width_dp)).toInt(), 1) } override fun onConfigurationChanged(newConfig: Configuration?) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt index ea7bf5f1..52463a7d 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt @@ -91,7 +91,7 @@ class VideoDetailFragment : MainFragment { return min( resources.configuration.screenWidthDp, resources.configuration.screenHeightDp - ) < resources.getDimension(R.dimen.landscape_threshold) + ) < resources.getInteger(R.integer.column_width_dp) * 2 } override fun onConfigurationChanged(newConfig: Configuration) { diff --git a/app/src/main/res/values/dimensions.xml b/app/src/main/res/values/dimensions.xml index 5e75240b..2e4468b5 100644 --- a/app/src/main/res/values/dimensions.xml +++ b/app/src/main/res/values/dimensions.xml @@ -2,5 +2,5 @@ 500dp 200dp - 300dp + 400