- fix PiP when player closed

- improve PiP speed on Android 12+
This commit is contained in:
Kai 2024-12-17 14:46:18 -06:00
parent 04c0679930
commit 3d863b9c89
No known key found for this signature in database
2 changed files with 17 additions and 12 deletions

View File

@ -269,6 +269,7 @@ class VideoDetailFragment() : MainFragment() {
} }
fun closeVideoDetails() { fun closeVideoDetails() {
Logger.i(TAG, "closeVideoDetails()") Logger.i(TAG, "closeVideoDetails()")
_viewDetail?.onPlayChanged?.emit(false)
state = State.CLOSED; state = State.CLOSED;
_viewDetail?.onStop(); _viewDetail?.onStop();
close(); close();
@ -294,12 +295,10 @@ class VideoDetailFragment() : MainFragment() {
}; };
viewDetail.onMaximize.subscribe { maximizeVideoDetail(it) }; viewDetail.onMaximize.subscribe { maximizeVideoDetail(it) };
viewDetail.onPlayChanged.subscribe { viewDetail.onPlayChanged.subscribe {
if(isInPictureInPicture) { val params = _viewDetail?.getPictureInPictureParams(it)
val params = _viewDetail?.getPictureInPictureParams();
if (params != null) if (params != null)
activity?.setPictureInPictureParams(params); activity?.setPictureInPictureParams(params)
} }
};
viewDetail.onEnterPictureInPicture.subscribe { viewDetail.onEnterPictureInPicture.subscribe {
Logger.i(TAG, "onEnterPictureInPicture") Logger.i(TAG, "onEnterPictureInPicture")
isInPictureInPicture = true; isInPictureInPicture = true;
@ -367,10 +366,10 @@ class VideoDetailFragment() : MainFragment() {
val viewDetail = _viewDetail; val viewDetail = _viewDetail;
Logger.i(TAG, "onUserLeaveHint preventPictureInPicture=${viewDetail?.preventPictureInPicture} isCasting=${StateCasting.instance.isCasting} isBackgroundPictureInPicture=${Settings.instance.playback.isBackgroundPictureInPicture()} allowBackground=${viewDetail?.allowBackground}"); 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; _leavingPiP = false;
val params = _viewDetail?.getPictureInPictureParams(); val params = _viewDetail?.getPictureInPictureParams(true);
if(params != null) { if(params != null) {
Logger.i(TAG, "enterPictureInPictureMode") Logger.i(TAG, "enterPictureInPictureMode")
activity?.enterPictureInPictureMode(params); activity?.enterPictureInPictureMode(params);
@ -379,7 +378,7 @@ class VideoDetailFragment() : MainFragment() {
} }
fun forcePictureInPicture() { fun forcePictureInPicture() {
val params = _viewDetail?.getPictureInPictureParams(); val params = _viewDetail?.getPictureInPictureParams(true);
if(params != null) if(params != null)
activity?.enterPictureInPictureMode(params); activity?.enterPictureInPictureMode(params);
} }

View File

@ -12,6 +12,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.net.Uri import android.net.Uri
import android.os.Build
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import android.text.Spanned import android.text.Spanned
import android.util.Log import android.util.Log
@ -2615,7 +2616,7 @@ class VideoDetailView(fragment: VideoDetailFragment, inflater: LayoutInflater) :
fun handleLeavePictureInPicture() { fun handleLeavePictureInPicture() {
Logger.i(TAG, "handleLeavePictureInPicture") Logger.i(TAG, "handleLeavePictureInPicture")
} }
fun getPictureInPictureParams() : PictureInPictureParams { fun getPictureInPictureParams(isPlaying: Boolean) : PictureInPictureParams {
var videoSourceWidth = _player.exoPlayer?.player?.videoSize?.width ?: 0; var videoSourceWidth = _player.exoPlayer?.player?.videoSize?.width ?: 0;
var videoSourceHeight = _player.exoPlayer?.player?.videoSize?.height ?: 0; var videoSourceHeight = _player.exoPlayer?.player?.videoSize?.height ?: 0;
@ -2641,11 +2642,16 @@ class VideoDetailView(fragment: VideoDetailFragment, inflater: LayoutInflater) :
else 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)); 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)) .setAspectRatio(Rational(videoSourceWidth, videoSourceHeight))
.setSourceRectHint(r) .setSourceRectHint(r)
.setActions(listOf(playpauseAction)) .setActions(listOf(playpauseAction))
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
params.setAutoEnterEnabled(isPlaying)
}
return params.build()
} }
//Other //Other