From f86fb0ee44b5b883da3b84f41e795c0fabd3757e Mon Sep 17 00:00:00 2001 From: Kai Date: Thu, 5 Jun 2025 23:13:05 -0500 Subject: [PATCH 1/5] add functionality to copy playlists fix https://github.com/futo-org/grayjay-android/issues/2306 Changelog: added --- .../mainactivity/main/PlaylistFragment.kt | 27 ++++++++++--------- .../futo/platformplayer/models/Playlist.kt | 3 +++ 2 files changed, 18 insertions(+), 12 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 c56585b0..ba433563 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 @@ -10,7 +10,6 @@ import androidx.lifecycle.lifecycleScope import com.futo.platformplayer.* import com.futo.platformplayer.activities.IWithResultLauncher import com.futo.platformplayer.api.media.models.playlists.IPlatformPlaylist -import com.futo.platformplayer.api.media.models.playlists.IPlatformPlaylistDetails import com.futo.platformplayer.api.media.models.video.IPlatformVideo import com.futo.platformplayer.api.media.models.video.SerializedPlatformVideo import com.futo.platformplayer.constructs.TaskHandler @@ -165,14 +164,16 @@ class PlaylistFragment : MainFragment() { }; } - private fun copyPlaylist(playlist: Playlist) { + private fun savePlaylist(playlist: Playlist) { StatePlaylists.instance.playlistStore.save(playlist) - _fragment.topBar?.assume()?.setMenuItems( - arrayListOf() - ) UIDialogs.toast("Playlist saved") } + private fun copyPlaylist(playlist: Playlist) { + StatePlaylists.instance.playlistStore.save(playlist.makeCopy()) + UIDialogs.toast("Playlist copied") + } + fun onShown(parameter: Any?) { _taskLoadPlaylist.cancel() @@ -188,12 +189,14 @@ class PlaylistFragment : MainFragment() { setButtonExportVisible(false) setButtonEditVisible(true) - if (!StatePlaylists.instance.playlistStore.hasItem { it.id == parameter.id }) { - _fragment.topBar?.assume() - ?.setMenuItems(arrayListOf(Pair(R.drawable.ic_copy) { + _fragment.topBar?.assume() + ?.setMenuItems(arrayListOf(Pair(R.drawable.ic_copy) { + if (StatePlaylists.instance.playlistStore.hasItem { it.id == parameter.id }) { copyPlaylist(parameter) - })) - } + } else { + savePlaylist(parameter) + } + })) } else { setName(null) setVideos(null, false) @@ -259,7 +262,7 @@ class PlaylistFragment : MainFragment() { val playlist = _playlist ?: return if (!StatePlaylists.instance.playlistStore.hasItem { it.id == playlist.id }) { UIDialogs.showConfirmationDialog(context, "Playlist must be saved to download", { - copyPlaylist(playlist) + savePlaylist(playlist) download() }) return @@ -292,7 +295,7 @@ class PlaylistFragment : MainFragment() { 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) + savePlaylist(playlist) onEditClick() }) return diff --git a/app/src/main/java/com/futo/platformplayer/models/Playlist.kt b/app/src/main/java/com/futo/platformplayer/models/Playlist.kt index d7b1035f..d6bca755 100644 --- a/app/src/main/java/com/futo/platformplayer/models/Playlist.kt +++ b/app/src/main/java/com/futo/platformplayer/models/Playlist.kt @@ -35,6 +35,9 @@ class Playlist { this.videos = ArrayList(list); } + fun makeCopy(): Playlist { + return Playlist("$name (Copy)", videos) + } companion object { fun fromV8(config: SourcePluginConfig, obj: V8ValueObject?): Playlist? { From 8e70f1b865fa9dceab0e4341be367337ea757e7d Mon Sep 17 00:00:00 2001 From: Kai Date: Thu, 5 Jun 2025 23:14:03 -0500 Subject: [PATCH 2/5] add long tap to copy playing video title Changelog: added --- .../fragment/mainactivity/main/VideoDetailView.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 199f5566..073d67b0 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -2,6 +2,8 @@ package com.futo.platformplayer.fragment.mainactivity.main import android.app.PictureInPictureParams import android.app.RemoteAction +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.content.res.Configuration @@ -408,6 +410,14 @@ class VideoDetailView : ConstraintLayout { showChaptersUI(); }; + _title.setOnLongClickListener { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager; + val clip = ClipData.newPlainText("Video Title", (it as TextView).text); + clipboard.setPrimaryClip(clip); + UIDialogs.toast(context, "Copied", false) + // let other interactions happen based on the touch + false + } _buttonSubscribe.onSubscribed.subscribe { _slideUpOverlay = UISlideOverlays.showSubscriptionOptionsOverlay(it, _overlayContainer); From dd1c04bea1461460444bd19756e0954ccd80def4 Mon Sep 17 00:00:00 2001 From: Kai Date: Fri, 6 Jun 2025 09:39:09 -0500 Subject: [PATCH 3/5] make the copied playlist name unique Changelog: changed --- .../fragment/mainactivity/main/PlaylistFragment.kt | 9 ++++++++- .../main/java/com/futo/platformplayer/models/Playlist.kt | 4 ++-- 2 files changed, 10 insertions(+), 3 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 ba433563..c4b55e6f 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 @@ -170,7 +170,14 @@ class PlaylistFragment : MainFragment() { } private fun copyPlaylist(playlist: Playlist) { - StatePlaylists.instance.playlistStore.save(playlist.makeCopy()) + var copyNumber = 1 + var newName = "${playlist.name} (Copy)" + val playlists = StatePlaylists.instance.playlistStore.getItems() + while (playlists.any { it.name == newName }) { + copyNumber += 1 + newName = "${playlist.name} (Copy $copyNumber)" + } + StatePlaylists.instance.playlistStore.save(playlist.makeCopy(newName)) UIDialogs.toast("Playlist copied") } diff --git a/app/src/main/java/com/futo/platformplayer/models/Playlist.kt b/app/src/main/java/com/futo/platformplayer/models/Playlist.kt index d6bca755..9862e675 100644 --- a/app/src/main/java/com/futo/platformplayer/models/Playlist.kt +++ b/app/src/main/java/com/futo/platformplayer/models/Playlist.kt @@ -35,8 +35,8 @@ class Playlist { this.videos = ArrayList(list); } - fun makeCopy(): Playlist { - return Playlist("$name (Copy)", videos) + fun makeCopy(newName: String? = null): Playlist { + return Playlist(newName ?: name, videos) } companion object { From 389798457b29f758bf9ca2ea488b2371e1db76ea Mon Sep 17 00:00:00 2001 From: Kai Date: Fri, 6 Jun 2025 15:57:09 -0500 Subject: [PATCH 4/5] navigate to playlist screen after copying Changelog: changed --- .../fragment/mainactivity/main/PlaylistFragment.kt | 1 + 1 file changed, 1 insertion(+) 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 c4b55e6f..1e90e36e 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 @@ -178,6 +178,7 @@ class PlaylistFragment : MainFragment() { newName = "${playlist.name} (Copy $copyNumber)" } StatePlaylists.instance.playlistStore.save(playlist.makeCopy(newName)) + _fragment.navigate(withHistory = false) UIDialogs.toast("Playlist copied") } From fb12073a82ce85feef982a742e93098562ac9001 Mon Sep 17 00:00:00 2001 From: Kai Date: Tue, 10 Jun 2025 09:18:28 -0500 Subject: [PATCH 5/5] Only save brightness on resume fullscreen if use system brightness is enabled Changelog: changed --- .../fragment/mainactivity/main/VideoDetailView.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 45ccf042..b705fbb4 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -2539,7 +2539,9 @@ class VideoDetailView : ConstraintLayout { } fun saveBrightness() { - _player.gestureControl.saveBrightness() + if (Settings.instance.gestureControls.useSystemBrightness) { + _player.gestureControl.saveBrightness() + } } fun restoreBrightness() { _player.gestureControl.restoreBrightness()