From 44a6e5da38a7b7dea79dfcfe6a8b61f63063e200 Mon Sep 17 00:00:00 2001 From: Koen J Date: Thu, 5 Sep 2024 10:04:53 +0200 Subject: [PATCH 1/4] Added background subscription upadte failed toast and removed home page refresh when older than a minute. --- .../fragment/mainactivity/main/HomeFragment.kt | 5 ++--- app/src/main/java/com/futo/platformplayer/states/StateApp.kt | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) 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..16cc1a7b 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 @@ -141,10 +141,9 @@ class HomeFragment : MainFragment() { val feedstyleChanged = recyclerData.loadedFeedStyle != feedStyle; val clientsChanged = lastClients == null || lastClients.size != clients.size || !lastClients.containsAll(clients); - val outdated = recyclerData.lastLoad.getNowDiffSeconds() > 60; - Logger.i(TAG, "onShown (recyclerData.loadedFeedStyle=${recyclerData.loadedFeedStyle}, recyclerData.lastLoad=${recyclerData.lastLoad}, feedstyleChanged=$feedstyleChanged, clientsChanged=$clientsChanged, outdated=$outdated)") + Logger.i(TAG, "onShown (recyclerData.loadedFeedStyle=${recyclerData.loadedFeedStyle}, recyclerData.lastLoad=${recyclerData.lastLoad}, feedstyleChanged=$feedstyleChanged, clientsChanged=$clientsChanged)") - if(feedstyleChanged || outdated || clientsChanged) { + if(feedstyleChanged || clientsChanged) { recyclerData.lastLoad = OffsetDateTime.now(); recyclerData.loadedFeedStyle = feedStyle; recyclerData.lastClients = clients; diff --git a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt index e44cdea7..6194bd6b 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt @@ -645,6 +645,7 @@ class StateApp { wm.cancelAllWork(); } catch (e: Throwable) { Logger.e(TAG, "Failed to schedule background subscription updates.", e) + UIDialogs.toast(context, "Background subscription update failed: " + e.message) } } From 66f9824b6823713bf3ebd8842bcaf7b7f88508af Mon Sep 17 00:00:00 2001 From: Koen J Date: Thu, 5 Sep 2024 10:53:42 +0200 Subject: [PATCH 2/4] Finetuning rotation. --- .../mainactivity/main/VideoDetailFragment.kt | 57 +++++++++++++------ 1 file changed, 41 insertions(+), 16 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 f9c0e280..5c7ff866 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 @@ -93,22 +93,35 @@ class VideoDetailFragment : MainFragment { } private fun updateOrientation() { + val a = activity ?: return val isMaximized = state == State.MAXIMIZED val isFullScreenPortraitAllowed = Settings.instance.playback.fullscreenPortrait; - val currentOrientation = _currentOrientation + val currentRequestedOrientation = a.requestedOrientation + val currentOrientation = if (_currentOrientation == -1) currentRequestedOrientation else _currentOrientation + val isAutoRotate = Settings.instance.playback.isAutoRotate() val isFs = isFullscreen if (isFs && isMaximized) { if (isFullScreenPortraitAllowed) { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR + if (isAutoRotate) { + a.requestedOrientation = currentOrientation + } + } else if (currentOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) { + if (isAutoRotate) { + a.requestedOrientation = currentOrientation + } } else { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + } + } else if (currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { + if (isAutoRotate) { + a.requestedOrientation = currentOrientation } } else { - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } - 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}, currentRequestedOrientation = ${currentRequestedOrientation}, isMaximized = ${isMaximized}, isAutoRotate = ${isAutoRotate}, isFullScreenPortraitAllowed = ${isFullScreenPortraitAllowed}) resulted in requested orientation ${activity?.requestedOrientation}"); } override fun onShownWithView(parameter: Any?, isBack: Boolean) { @@ -269,6 +282,9 @@ class VideoDetailFragment : MainFragment { } _autoRotateChangeListener = AutoRotateChangeListener(requireContext(), Handler()) { _ -> + if (updateAutoFullscreen()) { + return@AutoRotateChangeListener + } updateOrientation() } @@ -280,6 +296,9 @@ class VideoDetailFragment : MainFragment { } StatePlayer.instance.onRotationLockChanged.subscribe(this) { + if (updateAutoFullscreen()) { + return@subscribe + } updateOrientation() } @@ -288,23 +307,29 @@ class VideoDetailFragment : MainFragment { _currentOrientation = it Logger.i(TAG, "Current orientation changed (_currentOrientation = ${_currentOrientation})") - if (Settings.instance.playback.isAutoRotate()) { - if (state == State.MAXIMIZED && !isFullscreen && (it == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)) { - _viewDetail?.setFullscreen(true) - return@subscribe - } - - if (state == State.MAXIMIZED && isFullscreen && !Settings.instance.playback.fullscreenPortrait && (it == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || it == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)) { - _viewDetail?.setFullscreen(false) - return@subscribe - } + if (updateAutoFullscreen()) { + return@subscribe } - updateOrientation() } return _view!!; } + private fun updateAutoFullscreen(): Boolean { + if (Settings.instance.playback.isAutoRotate()) { + if (state == State.MAXIMIZED && !isFullscreen && (_currentOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || _currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)) { + _viewDetail?.setFullscreen(true) + return true + } + + if (state == State.MAXIMIZED && isFullscreen && !Settings.instance.playback.fullscreenPortrait && (_currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || _currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)) { + _viewDetail?.setFullscreen(false) + return true + } + } + return false + } + fun onUserLeaveHint() { val viewDetail = _viewDetail; Logger.i(TAG, "onUserLeaveHint preventPictureInPicture=${viewDetail?.preventPictureInPicture} isCasting=${StateCasting.instance.isCasting} isBackgroundPictureInPicture=${Settings.instance.playback.isBackgroundPictureInPicture()} allowBackground=${viewDetail?.allowBackground}"); From ff8d7558d4aea563b3be7a34917b7e8f513c6c5e Mon Sep 17 00:00:00 2001 From: Koen J Date: Thu, 5 Sep 2024 12:42:12 +0200 Subject: [PATCH 3/4] Re-added bypass rotation prevention. --- .../fragment/mainactivity/main/VideoDetailFragment.kt | 5 +++++ 1 file changed, 5 insertions(+) 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 5c7ff866..95a4c47b 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,6 +96,7 @@ class VideoDetailFragment : MainFragment { val a = activity ?: return val isMaximized = state == State.MAXIMIZED val isFullScreenPortraitAllowed = Settings.instance.playback.fullscreenPortrait; + val bypassRotationPrevention = Settings.instance.other.bypassRotationPrevention; val currentRequestedOrientation = a.requestedOrientation val currentOrientation = if (_currentOrientation == -1) currentRequestedOrientation else _currentOrientation val isAutoRotate = Settings.instance.playback.isAutoRotate() @@ -113,6 +114,10 @@ class VideoDetailFragment : MainFragment { } else { a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE } + } else if (bypassRotationPrevention) { + if (isAutoRotate) { + a.requestedOrientation = currentOrientation + } } else if (currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || currentOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { if (isAutoRotate) { a.requestedOrientation = currentOrientation From 0f0f368a758af8793c1ab6384389ab260d22d961 Mon Sep 17 00:00:00 2001 From: Koen J Date: Thu, 5 Sep 2024 13:14:41 +0200 Subject: [PATCH 4/4] Do not allow downloading/editing name of temporary playlist. --- .../mainactivity/main/PlaylistFragment.kt | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt index 1c706c28..25e96e1b 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt @@ -156,6 +156,14 @@ class PlaylistFragment : MainFragment() { }; } + private fun copyPlaylist(playlist: Playlist) { + StatePlaylists.instance.playlistStore.save(playlist) + _fragment.topBar?.assume()?.setMenuItems( + arrayListOf() + ) + UIDialogs.toast("Playlist saved") + } + fun onShown(parameter: Any?) { _taskLoadPlaylist.cancel() @@ -170,14 +178,10 @@ class PlaylistFragment : MainFragment() { setButtonDownloadVisible(true) setButtonEditVisible(true) - if (!StatePlaylists.instance.playlistStore.getItems().contains(parameter)) { + if (!StatePlaylists.instance.playlistStore.hasItem { it.id == parameter.id }) { _fragment.topBar?.assume() ?.setMenuItems(arrayListOf(Pair(R.drawable.ic_copy) { - StatePlaylists.instance.playlistStore.save(parameter) - _fragment.topBar?.assume()?.setMenuItems( - arrayListOf() - ) - UIDialogs.toast("Playlist saved") + copyPlaylist(parameter) })) } } else { @@ -242,6 +246,15 @@ class PlaylistFragment : MainFragment() { } private fun download() { + val playlist = _playlist ?: return + if (!StatePlaylists.instance.playlistStore.hasItem { it.id == playlist.id }) { + UIDialogs.showConfirmationDialog(context, "Playlist must be saved to download", { + copyPlaylist(playlist) + download() + }) + return + } + _playlist?.let { UISlideOverlays.showDownloadPlaylistOverlay(it, overlayContainer); } @@ -266,6 +279,15 @@ class PlaylistFragment : MainFragment() { override fun canEdit(): Boolean { return _playlist != null; } override fun onEditClick() { + val playlist = _playlist ?: return + if (!StatePlaylists.instance.playlistStore.hasItem { it.id == playlist.id }) { + UIDialogs.showConfirmationDialog(context, "Playlist must be saved to edit the name", { + copyPlaylist(playlist) + onEditClick() + }) + return + } + _editPlaylistNameInput?.activate(); _editPlaylistOverlay?.show(); }