From 70cf24924d3d10f133f9c913afea25e42e5244ac Mon Sep 17 00:00:00 2001 From: Kai Date: Wed, 21 Aug 2024 14:33:26 -0500 Subject: [PATCH 1/5] initial gridlayout --- app/src/main/AndroidManifest.xml | 19 +------------------ .../mainactivity/main/ContentFeedView.kt | 16 ++++++++++++---- .../mainactivity/main/CreatorFeedView.kt | 4 ++-- .../fragment/mainactivity/main/FeedView.kt | 3 ++- app/src/main/res/values/dimensions.xml | 3 ++- app/src/unstable/AndroidManifest.xml | 3 ++- 6 files changed, 21 insertions(+), 27 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05675554..a876523a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,7 +51,6 @@ android:name=".activities.MainActivity" android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout" android:exported="true" - android:screenOrientation="sensorPortrait" android:theme="@style/Theme.FutoVideo.NoActionBar" android:launchMode="singleTask" android:resizeableActivity="true" @@ -153,27 +152,21 @@ @@ -187,44 +180,34 @@ - \ No newline at end of file + 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 fcabcb5b..35c4f32e 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 @@ -4,6 +4,7 @@ import android.content.Context import android.util.Log import android.view.LayoutInflater import android.widget.LinearLayout +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.R @@ -162,10 +163,17 @@ abstract class ContentFeedView : FeedView= resources.getDimension(R.dimen.landscape_threshold)) 2 else 1 + ); + glmResults.orientation = GridLayoutManager.VERTICAL; + return glmResults; } override fun onScrollStateChanged(newState: Int) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorFeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorFeedView.kt index 78f90fb1..95b92f29 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorFeedView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorFeedView.kt @@ -34,9 +34,9 @@ abstract class CreatorFeedView : FeedView : L } } protected abstract fun createAdapter(recyclerResults: RecyclerView, context: Context, dataset: ArrayList): InsertedViewAdapterWithLoader; - protected abstract fun createLayoutManager(recyclerResults: RecyclerView, context: Context): LinearLayoutManager; + protected abstract fun createLayoutManager(recyclerResults: RecyclerView, context: Context): GridLayoutManager; protected open fun onRestoreCachedData(cachedData: RecyclerData, LinearLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>) {} protected fun setProgress(fin: Int, total: Int) { diff --git a/app/src/main/res/values/dimensions.xml b/app/src/main/res/values/dimensions.xml index d3c299e7..320998e2 100644 --- a/app/src/main/res/values/dimensions.xml +++ b/app/src/main/res/values/dimensions.xml @@ -2,4 +2,5 @@ 200dp - \ No newline at end of file + 300dp + diff --git a/app/src/unstable/AndroidManifest.xml b/app/src/unstable/AndroidManifest.xml index a5fdd260..9affd8ab 100644 --- a/app/src/unstable/AndroidManifest.xml +++ b/app/src/unstable/AndroidManifest.xml @@ -7,7 +7,8 @@ - + From 95207341db0b85db05d6bd64daa3718f8a6e0620 Mon Sep 17 00:00:00 2001 From: Kai Date: Wed, 21 Aug 2024 15:50:22 -0500 Subject: [PATCH 2/5] bottom bar and tutorial fixes --- .../bottombar/MenuBottomBarFragment.kt | 15 +++++++++++- .../mainactivity/main/ContentFeedView.kt | 4 ++-- .../fragment/mainactivity/main/FeedView.kt | 24 ++++++++++++++++--- .../mainactivity/main/HomeFragment.kt | 5 ++-- .../main/SubscriptionsFeedFragment.kt | 7 +++--- .../mainactivity/main/TutorialFragment.kt | 11 ++++++++- .../mainactivity/main/VideoDetailFragment.kt | 10 +++----- 7 files changed, 57 insertions(+), 19 deletions(-) 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 8855a89e..c08a7865 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 @@ -7,6 +7,7 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -56,6 +57,12 @@ class MenuBottomBarFragment : MainActivityFragment() { return _view?.onBackPressed() ?: false; } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + + _view?.updateAllButtonVisibility() + } + @SuppressLint("ViewConstructor") class MenuBottomBarView : LinearLayout { private val _fragment: MenuBottomBarFragment; @@ -251,9 +258,15 @@ class MenuBottomBarFragment : MainActivityFragment() { button.updateActive(_fragment); } + override fun onConfigurationChanged(newConfig: Configuration?) { + super.onConfigurationChanged(newConfig) + + updateAllButtonVisibility() + } + fun updateAllButtonVisibility() { val defs = currentButtonDefinitions?.toMutableList() ?: return - val metrics = StateApp.instance.displayMetrics ?: resources.displayMetrics; + val metrics = resources.displayMetrics; _buttonsVisible = floor(metrics.widthPixels.toDouble() / 65.dp(resources).toDouble()).roundToInt(); if (_buttonsVisible >= defs.size) { updateBottomMenuButtons(defs.toMutableList(), false); 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 35c4f32e..c8144e3b 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 @@ -46,7 +46,7 @@ abstract class ContentFeedView : FeedView, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { } @@ -152,7 +152,7 @@ abstract class ContentFeedView : FeedView, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { + override fun onRestoreCachedData(cachedData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { super.onRestoreCachedData(cachedData) val v = LinearLayout(context).apply { layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt index ee0b7a2b..4f4e17cd 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt @@ -1,6 +1,7 @@ package com.futo.platformplayer.fragment.mainactivity.main import android.content.Context +import android.content.res.Configuration import android.graphics.Color import android.view.LayoutInflater import android.view.View @@ -59,14 +60,14 @@ abstract class FeedView : L private var _activeTags: List? = null; private var _nextPageHandler: TaskHandler>; - val recyclerData: RecyclerData, LinearLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>; + val recyclerData: RecyclerData, GridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>; val fragment: TFragment; private val _scrollListener: RecyclerView.OnScrollListener; private var _automaticNextPageCounter = 0; - constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, LinearLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>? = null) : super(inflater.context) { + constructor(fragment: TFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>? = null) : super(inflater.context) { this.fragment = fragment; inflater.inflate(R.layout.fragment_feed, this); @@ -227,7 +228,24 @@ abstract class FeedView : L } } + override fun onConfigurationChanged(newConfig: Configuration?) { + super.onConfigurationChanged(newConfig) + + if (resources.configuration.screenWidthDp >= resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 2){ + recyclerData.layoutManager.spanCount = 2 + } else if (resources.configuration.screenWidthDp < resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 1){ + recyclerData.layoutManager.spanCount = 1 + } + } + fun onResume() { + //update the number of columns + if (resources.configuration.screenWidthDp >= resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 2){ + recyclerData.layoutManager.spanCount = 2 + } else if (resources.configuration.screenWidthDp < resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 1){ + recyclerData.layoutManager.spanCount = 1 + } + //Reload the pager if the plugin was killed val pager = recyclerData.pager; if((pager is MultiPager<*> && pager.findPager { it is JSPager<*> && !it.isAvailable } != null) || @@ -279,7 +297,7 @@ 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, LinearLayoutManager, TPager, TResult, TConverted, InsertedViewHolder>) {} + protected open fun onRestoreCachedData(cachedData: RecyclerData, GridLayoutManager, 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 d0994783..b7138aff 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 @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.futo.platformplayer.* import com.futo.platformplayer.activities.MainActivity @@ -44,7 +45,7 @@ class HomeFragment : MainFragment() { override val hasBottomBar: Boolean get() = true; private var _view: HomeView? = null; - private var _cachedRecyclerData: FeedView.RecyclerData, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; + private var _cachedRecyclerData: FeedView.RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack); @@ -98,7 +99,7 @@ class HomeFragment : MainFragment() { private val _taskGetPager: TaskHandler>; override val shouldShowTimeBar: Boolean get() = Settings.instance.home.progressBar - constructor(fragment: HomeFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: HomeFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, 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 03d9a626..33bc3740 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 @@ -7,6 +7,7 @@ import android.view.View import android.view.ViewGroup import android.widget.LinearLayout import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.futo.platformplayer.* import com.futo.platformplayer.activities.MainActivity @@ -57,7 +58,7 @@ class SubscriptionsFeedFragment : MainFragment() { private var _view: SubscriptionsFeedView? = null; private var _group: SubscriptionGroup? = null; - private var _cachedRecyclerData: FeedView.RecyclerData, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; + private var _cachedRecyclerData: FeedView.RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null; override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack); @@ -110,7 +111,7 @@ class SubscriptionsFeedFragment : MainFragment() { var subGroup: SubscriptionGroup? = null; - constructor(fragment: SubscriptionsFeedFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { + constructor(fragment: SubscriptionsFeedFragment, inflater: LayoutInflater, cachedRecyclerData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>? = null) : super(fragment, inflater, cachedRecyclerData) { Logger.i(TAG, "SubscriptionsFeedFragment constructor()"); StateSubscriptions.instance.global.onUpdateProgress.subscribe(this) { progress, total -> }; @@ -395,7 +396,7 @@ class SubscriptionsFeedFragment : MainFragment() { _taskGetPager.run(withRefetch); } - override fun onRestoreCachedData(cachedData: RecyclerData, LinearLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { + override fun onRestoreCachedData(cachedData: RecyclerData, GridLayoutManager, IPager, IPlatformContent, IPlatformContent, InsertedViewHolder>) { super.onRestoreCachedData(cachedData); setEmptyPager(cachedData.results.isEmpty()); } diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/TutorialFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/TutorialFragment.kt index 5139c0f8..8e223e53 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/TutorialFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/TutorialFragment.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.ScrollView import android.widget.TextView import com.futo.platformplayer.* import com.futo.platformplayer.api.media.IPlatformClient @@ -58,7 +59,15 @@ class TutorialFragment : MainFragment() { } @SuppressLint("ViewConstructor") - class TutorialView : LinearLayout { + class TutorialView(fragment: TutorialFragment, inflater: LayoutInflater) : + ScrollView(inflater.context) { + init { + addView(TutorialContainer(fragment, inflater)) + } + } + + @SuppressLint("ViewConstructor") + class TutorialContainer : LinearLayout { val fragment: TutorialFragment constructor(fragment: TutorialFragment, inflater: LayoutInflater) : super(inflater.context) { 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 e1f311fb..d5c415a9 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 @@ -96,14 +96,10 @@ class VideoDetailFragment : MainFragment { val currentOrientation = _currentOrientation val isFs = isFullscreen - if (isFs && isMaximized) { - if (isFullScreenPortraitAllowed) { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR - } else { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE - } + if (isFs && isMaximized && !isFullScreenPortraitAllowed) { + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE } else { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR } Log.i(TAG, "updateOrientation (isFs = ${isFs}, currentOrientation = ${currentOrientation}, isMaximized = ${isMaximized}, isFullScreenPortraitAllowed = ${isFullScreenPortraitAllowed}) resulted in requested orientation ${activity?.requestedOrientation}"); From 3c778c07c29ae91bee9d7163e9c680908ab1ab42 Mon Sep 17 00:00:00 2001 From: Kai DeLorenzo Date: Wed, 21 Aug 2024 18:20:24 -0500 Subject: [PATCH 3/5] removed gap at the top where the notifications show --- .../bottombar/MenuBottomBarFragment.kt | 3 ++ .../mainactivity/main/ContentFeedView.kt | 45 +++++++++++++------ .../mainactivity/main/CreatorFeedView.kt | 6 +-- .../fragment/mainactivity/main/FeedView.kt | 13 +++--- .../mainactivity/main/HomeFragment.kt | 5 ++- .../main/SubscriptionsFeedFragment.kt | 7 +-- 6 files changed, 52 insertions(+), 27 deletions(-) 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()); } From ce7d54c151f5738c8d7d0412869507391e334023 Mon Sep 17 00:00:00 2001 From: Kai DeLorenzo Date: Thu, 22 Aug 2024 12:43:39 -0500 Subject: [PATCH 4/5] fixed rotation issues --- .../bottombar/MenuBottomBarFragment.kt | 7 +++-- .../fragment/mainactivity/main/FeedView.kt | 17 +++++------ .../mainactivity/main/VideoDetailFragment.kt | 30 ++++++++++++++----- 3 files changed, 34 insertions(+), 20 deletions(-) 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 a8e27276..8d8dfe66 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,9 +61,6 @@ class MenuBottomBarFragment : MainActivityFragment() { super.onConfigurationChanged(newConfig) _view?.updateAllButtonVisibility() - - // collapse the more menu - _view?.onBackPressed() } @SuppressLint("ViewConstructor") @@ -268,6 +265,10 @@ class MenuBottomBarFragment : MainActivityFragment() { } fun updateAllButtonVisibility() { + if(_moreVisible) { + setMoreVisible(false); + } + val defs = currentButtonDefinitions?.toMutableList() ?: return val metrics = resources.displayMetrics; _buttonsVisible = floor(metrics.widthPixels.toDouble() / 65.dp(resources).toDouble()).roundToInt(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt index 5e4c6048..53bbaa68 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/FeedView.kt @@ -229,9 +229,7 @@ abstract class FeedView : L } } - override fun onConfigurationChanged(newConfig: Configuration?) { - super.onConfigurationChanged(newConfig) - + private fun updateSpanCount(){ if (resources.configuration.screenWidthDp >= resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 2){ recyclerData.layoutManager.spanCount = 2 } else if (resources.configuration.screenWidthDp < resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 1){ @@ -239,13 +237,14 @@ abstract class FeedView : L } } + override fun onConfigurationChanged(newConfig: Configuration?) { + super.onConfigurationChanged(newConfig) + + updateSpanCount() + } + fun onResume() { - //update the number of columns - if (resources.configuration.screenWidthDp >= resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 2){ - recyclerData.layoutManager.spanCount = 2 - } else if (resources.configuration.screenWidthDp < resources.getDimension(R.dimen.landscape_threshold) && recyclerData.layoutManager.spanCount != 1){ - recyclerData.layoutManager.spanCount = 1 - } + updateSpanCount() //Reload the pager if the plugin was killed val pager = recyclerData.pager; 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 d5c415a9..1850947f 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 @@ -29,6 +29,7 @@ import com.futo.platformplayer.models.PlatformVideoWithTime import com.futo.platformplayer.models.UrlVideoWithTime import com.futo.platformplayer.states.StatePlayer import com.futo.platformplayer.views.containers.SingleViewTouchableMotionLayout +import kotlin.math.min class VideoDetailFragment : MainFragment { @@ -96,13 +97,18 @@ class VideoDetailFragment : MainFragment { val currentOrientation = _currentOrientation val isFs = isFullscreen - if (isFs && isMaximized && !isFullScreenPortraitAllowed) { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + if (StatePlayer.instance.rotationLock && isMaximized) { + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED + } else if (isFullscreen && !isFullScreenPortraitAllowed) { + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE } else { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED } - Log.i(TAG, "updateOrientation (isFs = ${isFs}, currentOrientation = ${currentOrientation}, isMaximized = ${isMaximized}, isFullScreenPortraitAllowed = ${isFullScreenPortraitAllowed}) resulted in requested orientation ${activity?.requestedOrientation}"); + Log.i( + TAG, + "updateOrientation (isFs = ${isFs}, currentOrientation = ${currentOrientation}, isMaximized = ${isMaximized}, isFullScreenPortraitAllowed = ${isFullScreenPortraitAllowed}) resulted in requested orientation ${activity?.requestedOrientation}" + ); } override fun onShownWithView(parameter: Any?, isBack: Boolean) { @@ -280,15 +286,23 @@ class VideoDetailFragment : MainFragment { _orientationListener = SimpleOrientationListener(requireActivity(), lifecycleScope) _orientationListener.onOrientationChanged.subscribe { _currentOrientation = it - Logger.i(TAG, "Current orientation changed (_currentOrientation = ${_currentOrientation})") + Logger.i( + TAG, + "Current orientation changed (_currentOrientation = ${_currentOrientation})" + ) - if (Settings.instance.playback.isAutoRotate()) { - if (!isFullscreen && (it == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)) { + val is_large_window = min( + resources.configuration.screenWidthDp, + resources.configuration.screenHeightDp + ) < resources.getDimension(R.dimen.landscape_threshold) + + if (Settings.instance.playback.isAutoRotate() && is_large_window) { + if (!isFullscreen && (it == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)) { _viewDetail?.setFullscreen(true) return@subscribe } - if (isFullscreen && !Settings.instance.playback.fullscreenPortrait && (it == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)) { + if (isFullscreen && !Settings.instance.playback.fullscreenPortrait && (it == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)) { _viewDetail?.setFullscreen(false) return@subscribe } From bd9b9179c1a9b742c00a15399f3a6f98de728d66 Mon Sep 17 00:00:00 2001 From: Kai DeLorenzo Date: Thu, 22 Aug 2024 12:50:13 -0500 Subject: [PATCH 5/5] rename variable --- .../fragment/mainactivity/main/VideoDetailFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 1850947f..c5116a95 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 @@ -291,12 +291,12 @@ class VideoDetailFragment : MainFragment { "Current orientation changed (_currentOrientation = ${_currentOrientation})" ) - val is_large_window = min( + val isSmallWindow = min( resources.configuration.screenWidthDp, resources.configuration.screenHeightDp ) < resources.getDimension(R.dimen.landscape_threshold) - if (Settings.instance.playback.isAutoRotate() && is_large_window) { + if (Settings.instance.playback.isAutoRotate() && isSmallWindow) { if (!isFullscreen && (it == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)) { _viewDetail?.setFullscreen(true) return@subscribe