From 98b62138866f7a00e23544de42d775dd12c064e9 Mon Sep 17 00:00:00 2001 From: Kai Date: Tue, 17 Jun 2025 15:26:27 -0500 Subject: [PATCH 1/3] remove layout changed listener Changelog: changed --- .../mainactivity/main/VideoDetailView.kt | 16 +++++++--------- .../views/video/FutoVideoPlayer.kt | 3 ++- 2 files changed, 9 insertions(+), 10 deletions(-) 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 45d43704..eebaac46 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 @@ -432,10 +432,6 @@ class VideoDetailView : ConstraintLayout { showChaptersUI(); }; - _layoutPlayerContainer.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> - onShouldEnterPictureInPictureChanged.emit() - } - _title.setOnLongClickListener { val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager; val clip = ClipData.newPlainText("Video Title", (it as TextView).text); @@ -1967,6 +1963,10 @@ class VideoDetailView : ConstraintLayout { videoTrackFormats.distinctBy { it.height }.sortedBy { it.height }, audioTrackFormats.distinctBy { it.bitrate }.sortedBy { it.bitrate }); } + + _layoutPlayerContainer.post { + onShouldEnterPictureInPictureChanged.emit() + } } private var _didTriggerDatasourceErrorCount = 0; @@ -2427,7 +2427,6 @@ class VideoDetailView : ConstraintLayout { } isPlaying = playing; - onShouldEnterPictureInPictureChanged.emit() updateTracker(lastPositionMilliseconds, playing, true); } @@ -2559,6 +2558,9 @@ class VideoDetailView : ConstraintLayout { setProgressBarOverlayed(false); } onFullscreenChanged.emit(fullscreen); + _layoutPlayerContainer.post { + onShouldEnterPictureInPictureChanged.emit() + } } private fun setCastEnabled(isCasting: Boolean) { @@ -2832,10 +2834,6 @@ class VideoDetailView : ConstraintLayout { } else { _layoutPlayerContainer.setPadding(0, 0, 0, 0); } - - _layoutPlayerContainer.post { - onShouldEnterPictureInPictureChanged.emit() - } } fun getPictureInPictureParams() : PictureInPictureParams { var videoSourceWidth = _player.exoPlayer?.player?.videoSize?.width ?: 0; diff --git a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt index 44bc9303..e97a1dfb 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt +++ b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt @@ -484,7 +484,8 @@ class FutoVideoPlayer : FutoVideoPlayerBase { fun getVideoRect(): Rect { val r = Rect() - _videoView.getGlobalVisibleRect(r) + // this is the only way i could reliably get a reference to a view that matches perfectly with the video playback + _videoView.subtitleView?.getGlobalVisibleRect(r) return r } From c1e6e401ccb15151046f970b56ff69cfe348e80d Mon Sep 17 00:00:00 2001 From: Kai Date: Wed, 18 Jun 2025 09:36:31 -0500 Subject: [PATCH 2/3] formatting Changelog: changed --- .../fragment/mainactivity/main/VideoDetailView.kt | 2 +- 1 file changed, 1 insertion(+), 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 eebaac46..78f5729c 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 @@ -2559,7 +2559,7 @@ class VideoDetailView : ConstraintLayout { } onFullscreenChanged.emit(fullscreen); _layoutPlayerContainer.post { - onShouldEnterPictureInPictureChanged.emit() + onShouldEnterPictureInPictureChanged.emit() } } From a10bc8c7de54cc8c1dcceb7aa229e06a48b9c006 Mon Sep 17 00:00:00 2001 From: Kai Date: Wed, 18 Jun 2025 12:12:39 -0500 Subject: [PATCH 3/3] fix very wide screen videos enter PiP mode Changelog: changed --- .../fragment/mainactivity/main/VideoDetailView.kt | 9 ++++++++- 1 file changed, 8 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 78f5729c..0e9f3c32 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 @@ -2844,16 +2844,23 @@ class VideoDetailView : ConstraintLayout { videoSourceHeight = 9; } val aspectRatio = videoSourceWidth.toDouble() / videoSourceHeight; + val r = _player.getVideoRect() if(aspectRatio > 2.38) { videoSourceWidth = 16; videoSourceHeight = 9; + + // shrink the left and right equally to get the rect to be 16 by 9 aspect ratio + // we don't want a picture in picture mode that's more squashed than 16 by 9 + val targetWidth = r.height() * 16 / 9 + val shrinkAmount = (r.width() - targetWidth) / 2 + r.left += shrinkAmount + r.right -= shrinkAmount } else if(aspectRatio < 0.43) { videoSourceHeight = 16; videoSourceWidth = 9; } - val r = _player.getVideoRect() val playpauseAction = if(_player.playing) RemoteAction(Icon.createWithResource(context, R.drawable.ic_pause_notif), context.getString(R.string.pause), context.getString(R.string.pauses_the_video), MediaControlReceiver.getPauseIntent(context, 5)); else