diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt index c08a7865..a8e27276 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/bottombar/MenuBottomBarFragment.kt @@ -61,6 +61,9 @@ class MenuBottomBarFragment : MainActivityFragment() { super.onConfigurationChanged(newConfig) _view?.updateAllButtonVisibility() + + // collapse the more menu + _view?.onBackPressed() } @SuppressLint("ViewConstructor") 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 c8144e3b..f443b6ce 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 @@ -7,6 +7,7 @@ import android.widget.LinearLayout import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.futo.platformplayer.R import com.futo.platformplayer.Settings import com.futo.platformplayer.UIDialogs @@ -46,7 +47,7 @@ abstract class ContentFeedView : FeedView, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { } @@ -54,18 +55,34 @@ abstract class ContentFeedView : FeedView): InsertedViewAdapterWithLoader { + override fun createAdapter( + recyclerResults: RecyclerView, + context: Context, + dataset: ArrayList + ): InsertedViewAdapterWithLoader { val player = StatePlayer.instance.getThumbnailPlayerOrCreate(context); player.modifyState("ThumbnailPlayer", { state -> state.muted = true }); _exoPlayer = player; val v = LinearLayout(context).apply { - layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ); orientation = LinearLayout.VERTICAL; }; headerView = v; - return PreviewContentListAdapter(context, feedStyle, dataset, player, _previewsEnabled, arrayListOf(v), arrayListOf(), shouldShowTimeBar).apply { + return PreviewContentListAdapter( + context, + feedStyle, + dataset, + player, + _previewsEnabled, + arrayListOf(v), + arrayListOf(), + shouldShowTimeBar + ).apply { attachAdapterEvents(this); } } @@ -152,10 +169,13 @@ abstract class ContentFeedView : FeedView, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { + override fun onRestoreCachedData(cachedData: RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { super.onRestoreCachedData(cachedData) val v = LinearLayout(context).apply { - layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ); orientation = LinearLayout.VERTICAL; }; headerView = v; @@ -166,13 +186,12 @@ abstract class ContentFeedView : FeedView= resources.getDimension(R.dimen.landscape_threshold)) 2 else 1 + StaggeredGridLayoutManager( + if (resources.configuration.screenWidthDp >= resources.getDimension(R.dimen.landscape_threshold)) 2 else 1, + StaggeredGridLayoutManager.VERTICAL ); - glmResults.orientation = GridLayoutManager.VERTICAL; return glmResults; } @@ -219,8 +238,8 @@ abstract class ContentFeedView : FeedView : FeedView : L private var _activeTags: List? = null; private var _nextPageHandler: TaskHandler>; - val recyclerData: RecyclerData, GridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>; + val recyclerData: RecyclerData, StaggeredGridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>; val fragment: TFragment; private val _scrollListener: RecyclerView.OnScrollListener; private var _automaticNextPageCounter = 0; - constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>? = null) : super(inflater.context) { + constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, StaggeredGridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>? = null) : super(inflater.context) { this.fragment = fragment; inflater.inflate(R.layout.fragment_feed, this); @@ -160,7 +161,7 @@ abstract class FeedView : L super.onScrolled(recyclerView, dx, dy); val visibleItemCount = _recyclerResults.childCount; - val firstVisibleItem = recyclerData.layoutManager.findFirstVisibleItemPosition(); + val firstVisibleItem = recyclerData.layoutManager.findFirstVisibleItemPositions(IntArray(recyclerData.layoutManager.spanCount))[0] //Logger.i(TAG, "onScrolled loadNextPage visibleItemCount=$visibleItemCount firstVisibleItem=$visibleItemCount") if (!_loading && firstVisibleItem + visibleItemCount + visibleThreshold >= recyclerData.results.size && firstVisibleItem > 0) { @@ -176,7 +177,7 @@ abstract class FeedView : L private fun ensureEnoughContentVisible(filteredResults: List) { val canScroll = if (recyclerData.results.isEmpty()) false else { val layoutManager = recyclerData.layoutManager - val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition() + val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPositions(IntArray(recyclerData.layoutManager.spanCount))[0] if (firstVisibleItemPosition != RecyclerView.NO_POSITION) { val firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition) @@ -296,8 +297,8 @@ abstract class FeedView : L } } protected abstract fun createAdapter(recyclerResults: RecyclerView, context: Context, dataset: ArrayList): InsertedViewAdapterWithLoader; - protected abstract fun createLayoutManager(recyclerResults: RecyclerView, context: Context): GridLayoutManager; - protected open fun onRestoreCachedData(cachedData: RecyclerData, GridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>) {} + protected abstract fun createLayoutManager(recyclerResults: RecyclerView, context: Context): StaggeredGridLayoutManager; + protected open fun onRestoreCachedData(cachedData: RecyclerData, StaggeredGridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>) {} protected fun setProgress(fin: Int, total: Int) { val progress = (fin.toFloat() / total); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt index b7138aff..a09d1b46 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/HomeFragment.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.futo.platformplayer.* import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.api.media.models.contents.IPlatformContent @@ -45,7 +46,7 @@ class HomeFragment : MainFragment() { override val hasBottomBar: Boolean get() = true; private var _view: HomeView? = null; - private var _cachedRecyclerData: FeedView.RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; + private var _cachedRecyclerData: FeedView.RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack); @@ -99,7 +100,7 @@ class HomeFragment : MainFragment() { private val _taskGetPager: TaskHandler>; override val shouldShowTimeBar: Boolean get() = Settings.instance.home.progressBar - constructor(fragment: HomeFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: HomeFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { _announcementsView = AnnouncementView(context, null).apply { headerView.addView(this); }; diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt index 33bc3740..40782c4a 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionsFeedFragment.kt @@ -9,6 +9,7 @@ import android.widget.LinearLayout import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.futo.platformplayer.* import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.api.media.IPlatformClient @@ -58,7 +59,7 @@ class SubscriptionsFeedFragment : MainFragment() { private var _view: SubscriptionsFeedView? = null; private var _group: SubscriptionGroup? = null; - private var _cachedRecyclerData: FeedView.RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; + private var _cachedRecyclerData: FeedView.RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack); @@ -111,7 +112,7 @@ class SubscriptionsFeedFragment : MainFragment() { var subGroup: SubscriptionGroup? = null; - constructor(fragment: SubscriptionsFeedFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: SubscriptionsFeedFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { Logger.i(TAG, "SubscriptionsFeedFragment constructor()"); StateSubscriptions.instance.global.onUpdateProgress.subscribe(this) { progress, total -> }; @@ -396,7 +397,7 @@ class SubscriptionsFeedFragment : MainFragment() { _taskGetPager.run(withRefetch); } - override fun onRestoreCachedData(cachedData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { + override fun onRestoreCachedData(cachedData: RecyclerData, StaggeredGridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { super.onRestoreCachedData(cachedData); setEmptyPager(cachedData.results.isEmpty()); }