From 3a41b89e527e44244b50e0f1cfbcacab8b6df897 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Wed, 13 Nov 2024 18:39:01 +0100 Subject: [PATCH] Requests --- .../futo/platformplayer/UISlideOverlays.kt | 42 +++++------ .../media/platforms/js/SourcePluginConfig.kt | 3 +- .../mainactivity/main/VideoDetailView.kt | 73 +++++++++++-------- 3 files changed, 66 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt b/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt index c5b15eaf..be7a5e78 100644 --- a/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt +++ b/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt @@ -25,6 +25,7 @@ import com.futo.platformplayer.api.media.models.subtitles.ISubtitleSource import com.futo.platformplayer.api.media.models.video.IPlatformVideo import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails import com.futo.platformplayer.api.media.models.video.SerializedPlatformVideo +import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.models.sources.JSDashManifestRawAudioSource import com.futo.platformplayer.api.media.platforms.js.models.sources.JSDashManifestRawSource import com.futo.platformplayer.downloads.VideoLocal @@ -879,6 +880,12 @@ class UISlideOverlays { val items = arrayListOf(); val lastUpdated = StatePlaylists.instance.getLastUpdatedPlaylist(); + val isLimited = video?.url != null && StatePlatform.instance.getContentClientOrNull(video!!.url)?.let { + if (it is JSClient) + return@let it.config.reduceFunctionsInLimitedVersion && BuildConfig.IS_PLAYSTORE_BUILD + else false; + } ?: false; + if (lastUpdated != null) { items.add( SlideUpMenuGroup(container.context, container.context.getString(R.string.recently_used_playlist), "recentlyusedplaylist", @@ -899,17 +906,18 @@ class UISlideOverlays { val watchLater = StatePlaylists.instance.getWatchLater(); items.add(SlideUpMenuGroup(container.context, container.context.getString(R.string.actions), "actions", (listOf( - SlideUpMenuItem( - container.context, - R.drawable.ic_download, - container.context.getString(R.string.download), - container.context.getString(R.string.download_the_video), - tag = "download", - call = { - showDownloadVideoOverlay(video, container, true); - }, - invokeParent = false - ), + if(!isLimited) + SlideUpMenuItem( + container.context, + R.drawable.ic_download, + container.context.getString(R.string.download), + container.context.getString(R.string.download_the_video), + tag = "download", + call = { + showDownloadVideoOverlay(video, container, true); + }, + invokeParent = false + ) else null, SlideUpMenuItem( container.context, R.drawable.ic_share, @@ -936,7 +944,7 @@ class UISlideOverlays { StateMeta.instance.addHiddenCreator(video.author.url); UIDialogs.toast(container.context, "[${video.author.name}] hidden, you may need to reload home"); })) - + actions) + + actions).filterNotNull() )); items.add( SlideUpMenuGroup(container.context, container.context.getString(R.string.add_to), "addto", @@ -1033,15 +1041,7 @@ class UISlideOverlays { "${watchLater.size} " + container.context.getString(R.string.videos), tag = "watch later", call = { StatePlaylists.instance.addToWatchLater(SerializedPlatformVideo.fromVideo(video)); }), - SlideUpMenuItem( - container.context, - R.drawable.ic_download, - container.context.getString(R.string.download), - container.context.getString(R.string.download_the_video), - tag = container.context.getString(R.string.download), - call = { showDownloadVideoOverlay(video, container, true); }, - invokeParent = false - )) + ) ); val playlistItems = arrayListOf(); diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginConfig.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginConfig.kt index bd3c2ded..3af034aa 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginConfig.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/SourcePluginConfig.kt @@ -50,7 +50,8 @@ class SourcePluginConfig( var primaryClaimFieldType: Int? = null, var developerSubmitUrl: String? = null, var allowAllHttpHeaderAccess: Boolean = false, - var maxDownloadParallelism: Int = 0 + var maxDownloadParallelism: Int = 0, + var reduceFunctionsInLimitedVersion: Boolean = false, ) : IV8PluginConfig { val absoluteIconUrl: String? get() = resolveAbsoluteUrl(iconUrl, sourceUrl); 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 ee835a3e..9d389d06 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 @@ -40,6 +40,7 @@ import androidx.media3.ui.TimeBar import com.bumptech.glide.Glide import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.transition.Transition +import com.futo.platformplayer.BuildConfig import com.futo.platformplayer.R import com.futo.platformplayer.Settings import com.futo.platformplayer.UIDialogs @@ -72,6 +73,7 @@ import com.futo.platformplayer.api.media.models.subtitles.ISubtitleSource import com.futo.platformplayer.api.media.models.video.IPlatformVideo import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails import com.futo.platformplayer.api.media.models.video.SerializedPlatformVideo +import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig import com.futo.platformplayer.api.media.platforms.js.models.JSVideoDetails import com.futo.platformplayer.api.media.structures.IPager @@ -819,6 +821,11 @@ class VideoDetailView : ConstraintLayout { } fun updateMoreButtons() { + val isLimitedVersion = video?.url != null && StatePlatform.instance.getContentClientOrNull(video!!.url)?.let { + if (it is JSClient) + return@let it.config.reduceFunctionsInLimitedVersion && BuildConfig.IS_PLAYSTORE_BUILD + else false; + } ?: false; val buttons = listOf(RoundButton(context, R.drawable.ic_add, context.getString(R.string.add), TAG_ADD) { (video ?: _searchVideo)?.let { _slideUpOverlay = UISlideOverlays.showAddToOverlay(it, _overlayContainer) { @@ -838,38 +845,44 @@ class VideoDetailView : ConstraintLayout { } _slideUpOverlay?.hide(); } else null, - RoundButton(context, R.drawable.ic_screen_share, context.getString(R.string.background), TAG_BACKGROUND) { - if(!allowBackground) { - _player.switchToAudioMode(); - allowBackground = true; - it.text.text = resources.getString(R.string.background_revert); + if(!isLimitedVersion) + RoundButton(context, R.drawable.ic_screen_share, context.getString(R.string.background), TAG_BACKGROUND) { + if(!allowBackground) { + _player.switchToAudioMode(); + allowBackground = true; + it.text.text = resources.getString(R.string.background_revert); + } + else { + _player.switchToVideoMode(); + allowBackground = false; + it.text.text = resources.getString(R.string.background); + } + _slideUpOverlay?.hide(); } - else { - _player.switchToVideoMode(); - allowBackground = false; - it.text.text = resources.getString(R.string.background); + else null, + if(!isLimitedVersion) + RoundButton(context, R.drawable.ic_download, context.getString(R.string.download), TAG_DOWNLOAD) { + video?.let { + _slideUpOverlay = UISlideOverlays.showDownloadVideoOverlay(it, _overlayContainer, context.contentResolver); + }; } - _slideUpOverlay?.hide(); - }, - RoundButton(context, R.drawable.ic_download, context.getString(R.string.download), TAG_DOWNLOAD) { - video?.let { - _slideUpOverlay = UISlideOverlays.showDownloadVideoOverlay(it, _overlayContainer, context.contentResolver); - }; - }, - RoundButton(context, R.drawable.ic_share, context.getString(R.string.share), TAG_SHARE) { - video?.let { - Logger.i(TAG, "Share preventPictureInPicture = true"); - preventPictureInPicture = true; - shareVideo(); - }; - _slideUpOverlay?.hide(); - }, - RoundButton(context, R.drawable.ic_screen_share, context.getString(R.string.overlay), TAG_OVERLAY) { - this.startPictureInPicture(); - fragment.forcePictureInPicture(); - //PiPActivity.startPiP(context); - _slideUpOverlay?.hide(); - }, + else null, + RoundButton(context, R.drawable.ic_share, context.getString(R.string.share), TAG_SHARE) { + video?.let { + Logger.i(TAG, "Share preventPictureInPicture = true"); + preventPictureInPicture = true; + shareVideo(); + }; + _slideUpOverlay?.hide(); + }, + if(!isLimitedVersion) + RoundButton(context, R.drawable.ic_screen_share, context.getString(R.string.overlay), TAG_OVERLAY) { + this.startPictureInPicture(); + fragment.forcePictureInPicture(); + //PiPActivity.startPiP(context); + _slideUpOverlay?.hide(); + } + else null, RoundButton(context, R.drawable.ic_export, context.getString(R.string.page), TAG_OPEN) { video?.let { val url = video?.shareUrl ?: _searchVideo?.shareUrl ?: _url;