MainPlayerUi: separate enter/exit fullscreen methods

Most usages of `toggleFullscreen` are clear about whether they want to
enter or exit fullscreen, so let’s split the setup into two functions
for easier debugging.

The two remaining uses of `toggleFullscreen` *should* really toggle,
but I’m not 100% sure.

Also rename `onScreenRotationButtonClicked` to
`onFullscreenToggleButtonClicked`, since we renamed the button id
earlier.
This commit is contained in:
Profpatsch 2025-01-22 22:29:47 +01:00
parent 753a3e68d5
commit 0382cfd2ae
4 changed files with 51 additions and 25 deletions

View File

@ -991,7 +991,7 @@ class VideoDetailFragment :
// restored (i.e. bottomSheetState) to STATE_EXPANDED.
updateBottomSheetState(BottomSheetBehavior.STATE_EXPANDED)
// toggle landscape in order to open directly in fullscreen
onScreenRotationButtonClicked()
onFullscreenToggleButtonClicked()
}
if (PreferenceManager.getDefaultSharedPreferences(activity)
@ -1726,7 +1726,7 @@ class VideoDetailFragment :
tryAddVideoPlayerView()
}
override fun onScreenRotationButtonClicked() {
override fun onFullscreenToggleButtonClicked() {
// In tablet user experience will be better if screen will not be rotated
// from landscape to portrait every time.
// Just turn on fullscreen mode in landscape orientation

View File

@ -10,7 +10,7 @@ public interface PlayerServiceEventListener extends PlayerEventListener {
void onFullscreenStateChanged(boolean fullscreen);
void onScreenRotationButtonClicked();
void onFullscreenToggleButtonClicked();
void onMoreOptionsLongClicked();

View File

@ -243,8 +243,8 @@ object PlayerHolder {
listener?.onFullscreenStateChanged(fullscreen)
}
override fun onScreenRotationButtonClicked() {
listener?.onScreenRotationButtonClicked()
override fun onFullscreenToggleButtonClicked() {
listener?.onFullscreenToggleButtonClicked()
}
override fun onMoreOptionsLongClicked() {

View File

@ -122,7 +122,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
&& DeviceUtils.isTablet(player.getService())
&& PlayerHelper.globalScreenOrientationLocked(player.getService())) {
player.getFragmentListener().ifPresent(
PlayerServiceEventListener::onScreenRotationButtonClicked);
PlayerServiceEventListener::onFullscreenToggleButtonClicked);
}
}
@ -159,7 +159,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
// orientation a screen orientation can be changed automatically
if (!isVerticalVideo || (isLandscape() && globalScreenOrientationLocked(context))) {
player.getFragmentListener()
.ifPresent(PlayerServiceEventListener::onScreenRotationButtonClicked);
.ifPresent(PlayerServiceEventListener::onFullscreenToggleButtonClicked);
} else {
toggleFullscreen();
}
@ -233,7 +233,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
// Exit from fullscreen when user closes the player via notification
if (isFullscreen) {
toggleFullscreen();
exitFullscreen();
}
removeViewFromParent();
@ -414,7 +414,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
public void onCompleted() {
super.onCompleted();
if (isFullscreen) {
toggleFullscreen();
exitFullscreen();
}
}
//endregion
@ -905,7 +905,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
&& !DeviceUtils.isTablet(context)) {
// set correct orientation
player.getFragmentListener().ifPresent(
PlayerServiceEventListener::onScreenRotationButtonClicked);
PlayerServiceEventListener::onFullscreenToggleButtonClicked);
}
setupScreenRotationButton();
@ -915,28 +915,54 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
if (DEBUG) {
Log.d(TAG, "toggleFullscreen() called");
}
if (isFullscreen) {
exitFullscreen();
} else {
enterFullscreen();
}
}
public void enterFullscreen() {
if (DEBUG) {
Log.d(TAG, "enterFullscreen() called");
}
final PlayerServiceEventListener fragmentListener = player.getFragmentListener()
.orElse(null);
if (fragmentListener == null || player.exoPlayerIsNull()) {
return;
}
isFullscreen = true;
// Android needs tens milliseconds to send new insets but a user is able to see
// how controls changes it's position from `0` to `nav bar height` padding.
// So just hide the controls to hide this visual inconsistency
hideControls(0, 0);
fragmentListener.onFullscreenStateChanged(true);
setupFullscreenButtons(true);
}
isFullscreen = !isFullscreen;
if (isFullscreen) {
// Android needs tens milliseconds to send new insets but a user is able to see
// how controls changes it's position from `0` to `nav bar height` padding.
// So just hide the controls to hide this visual inconsistency
hideControls(0, 0);
} else {
// Apply window insets because Android will not do it when orientation changes
// from landscape to portrait (open vertical video to reproduce)
binding.playbackControlRoot.setPadding(0, 0, 0, 0);
public void exitFullscreen() {
if (DEBUG) {
Log.d(TAG, "exitFullscreen() called");
}
fragmentListener.onFullscreenStateChanged(isFullscreen);
final PlayerServiceEventListener fragmentListener = player.getFragmentListener()
.orElse(null);
if (fragmentListener == null || player.exoPlayerIsNull()) {
return;
}
isFullscreen = false;
// Apply window insets because Android will not do it when orientation changes
// from landscape to portrait (open vertical video to reproduce)
binding.playbackControlRoot.setPadding(0, 0, 0, 0);
fragmentListener.onFullscreenStateChanged(false);
setupFullscreenButtons(false);
}
binding.titleTextView.setVisibility(isFullscreen ? View.VISIBLE : View.GONE);
binding.channelTextView.setVisibility(isFullscreen ? View.VISIBLE : View.GONE);
binding.playerCloseButton.setVisibility(isFullscreen ? View.GONE : View.VISIBLE);
private void setupFullscreenButtons(final boolean fullscreen) {
binding.titleTextView.setVisibility(fullscreen ? View.VISIBLE : View.GONE);
binding.channelTextView.setVisibility(fullscreen ? View.VISIBLE : View.GONE);
binding.playerCloseButton.setVisibility(fullscreen ? View.GONE : View.VISIBLE);
setupScreenRotationButton();
}
@ -951,7 +977,7 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh
if (videoInLandscapeButNotInFullscreen
&& notPaused
&& !DeviceUtils.isTablet(context)) {
toggleFullscreen();
enterFullscreen();
}
}
//endregion