From 3d863b9c89f468e3cb275f25e87dfc2a9257c0f3 Mon Sep 17 00:00:00 2001 From: Kai Date: Tue, 17 Dec 2024 14:46:18 -0600 Subject: [PATCH] - fix PiP when player closed - improve PiP speed on Android 12+ --- .../mainactivity/main/VideoDetailFragment.kt | 17 ++++++++--------- .../mainactivity/main/VideoDetailView.kt | 12 +++++++++--- 2 files changed, 17 insertions(+), 12 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 122c02c8..785a3cad 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 @@ -269,6 +269,7 @@ class VideoDetailFragment() : MainFragment() { } fun closeVideoDetails() { Logger.i(TAG, "closeVideoDetails()") + _viewDetail?.onPlayChanged?.emit(false) state = State.CLOSED; _viewDetail?.onStop(); close(); @@ -294,12 +295,10 @@ class VideoDetailFragment() : MainFragment() { }; viewDetail.onMaximize.subscribe { maximizeVideoDetail(it) }; viewDetail.onPlayChanged.subscribe { - if(isInPictureInPicture) { - val params = _viewDetail?.getPictureInPictureParams(); - if (params != null) - activity?.setPictureInPictureParams(params); - } - }; + val params = _viewDetail?.getPictureInPictureParams(it) + if (params != null) + activity?.setPictureInPictureParams(params) + } viewDetail.onEnterPictureInPicture.subscribe { Logger.i(TAG, "onEnterPictureInPicture") isInPictureInPicture = true; @@ -367,10 +366,10 @@ class VideoDetailFragment() : MainFragment() { val viewDetail = _viewDetail; Logger.i(TAG, "onUserLeaveHint preventPictureInPicture=${viewDetail?.preventPictureInPicture} isCasting=${StateCasting.instance.isCasting} isBackgroundPictureInPicture=${Settings.instance.playback.isBackgroundPictureInPicture()} allowBackground=${viewDetail?.allowBackground}"); - if(viewDetail?.preventPictureInPicture == false && !StateCasting.instance.isCasting && Settings.instance.playback.isBackgroundPictureInPicture() && !viewDetail.allowBackground) { + if(Build.VERSION.SDK_INT < Build.VERSION_CODES.S && viewDetail?.preventPictureInPicture == false && !StateCasting.instance.isCasting && Settings.instance.playback.isBackgroundPictureInPicture() && !viewDetail.allowBackground) { _leavingPiP = false; - val params = _viewDetail?.getPictureInPictureParams(); + val params = _viewDetail?.getPictureInPictureParams(true); if(params != null) { Logger.i(TAG, "enterPictureInPictureMode") activity?.enterPictureInPictureMode(params); @@ -379,7 +378,7 @@ class VideoDetailFragment() : MainFragment() { } fun forcePictureInPicture() { - val params = _viewDetail?.getPictureInPictureParams(); + val params = _viewDetail?.getPictureInPictureParams(true); if(params != null) activity?.enterPictureInPictureMode(params); } 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 42030e63..5efe886c 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 @@ -12,6 +12,7 @@ import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.net.Uri +import android.os.Build import android.support.v4.media.session.PlaybackStateCompat import android.text.Spanned import android.util.Log @@ -2615,7 +2616,7 @@ class VideoDetailView(fragment: VideoDetailFragment, inflater: LayoutInflater) : fun handleLeavePictureInPicture() { Logger.i(TAG, "handleLeavePictureInPicture") } - fun getPictureInPictureParams() : PictureInPictureParams { + fun getPictureInPictureParams(isPlaying: Boolean) : PictureInPictureParams { var videoSourceWidth = _player.exoPlayer?.player?.videoSize?.width ?: 0; var videoSourceHeight = _player.exoPlayer?.player?.videoSize?.height ?: 0; @@ -2641,11 +2642,16 @@ class VideoDetailView(fragment: VideoDetailFragment, inflater: LayoutInflater) : else RemoteAction(Icon.createWithResource(context, R.drawable.ic_play_notif), context.getString(R.string.play), context.getString(R.string.resumes_the_video), MediaControlReceiver.getPlayIntent(context, 6)); - return PictureInPictureParams.Builder() + val params = PictureInPictureParams.Builder() .setAspectRatio(Rational(videoSourceWidth, videoSourceHeight)) .setSourceRectHint(r) .setActions(listOf(playpauseAction)) - .build(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + params.setAutoEnterEnabled(isPlaying) + } + + return params.build() } //Other