Support Picture-in-Picture on Chrome OS
enterPictureInPictureMode() must be called in onUserLeaveHint() to
support Picture-in-Picture in a multi-window environment such as
Chrome OS.
The current implemententation (calling the API in onPause()) causes
the following issues on Chrome OS:
- VLC enters PiP without being occluded, but just with another
window activated. In a multi-window environment, we can't assume
onPause() means the window gets hidden. As only one window can
be resumed at the same time, it's possible that a window is
fully visible, but paused.
- When some ChromeOS-specific system UI gets shown (e.g. Alt-Tab
window cycler, Overview Mode), VLC enters PiP unexpectedly.
This patch moves switchToPopup() from onPause() to onUserLeaveHint()
to prevent those issues.
(cherry picked from commit f466ecb066)
This commit is contained in:
committed by
Geoffrey Métais
parent
4598db40d7
commit
a5b8465ea8
@@ -595,16 +595,17 @@ open class VideoPlayerActivity : AppCompatActivity(), IPlaybackSettingsControlle
|
||||
|
||||
/* Stop the earliest possible to avoid vout error */
|
||||
|
||||
if (!isInPictureInPictureMode) {
|
||||
if (finishing || (AndroidUtil.isNougatOrLater && !AndroidUtil.isOOrLater //Video on background on Nougat Android TVs
|
||||
if (!isInPictureInPictureMode
|
||||
&& (finishing || (AndroidUtil.isNougatOrLater && !AndroidUtil.isOOrLater //Video on background on Nougat Android TVs
|
||||
&& AndroidDevices.isAndroidTv && !requestVisibleBehind(true))))
|
||||
stopPlayback()
|
||||
}
|
||||
|
||||
&& AndroidDevices.isAndroidTv && !requestVisibleBehind(true)))
|
||||
stopPlayback()
|
||||
else if (displayManager.isPrimary && !isShowingDialog && "2" == settings.getString(KEY_VIDEO_APP_SWITCH, "0")
|
||||
&& isInteractive && service?.hasRenderer() == false) {
|
||||
switchToPopup()
|
||||
}
|
||||
}
|
||||
@TargetApi(Build.VERSION_CODES.O)
|
||||
override fun onUserLeaveHint() {
|
||||
if (!isInPictureInPictureMode && displayManager.isPrimary && !isShowingDialog &&
|
||||
"2" == settings.getString(KEY_VIDEO_APP_SWITCH, "0") && isInteractive && service?.hasRenderer() == false)
|
||||
switchToPopup()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
|
||||
Reference in New Issue
Block a user