Skip to content

Commit 0382cfd

Browse files
committed
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.
1 parent 753a3e6 commit 0382cfd

4 files changed

Lines changed: 51 additions & 25 deletions

File tree

app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,7 @@ class VideoDetailFragment :
991991
// restored (i.e. bottomSheetState) to STATE_EXPANDED.
992992
updateBottomSheetState(BottomSheetBehavior.STATE_EXPANDED)
993993
// toggle landscape in order to open directly in fullscreen
994-
onScreenRotationButtonClicked()
994+
onFullscreenToggleButtonClicked()
995995
}
996996

997997
if (PreferenceManager.getDefaultSharedPreferences(activity)
@@ -1726,7 +1726,7 @@ class VideoDetailFragment :
17261726
tryAddVideoPlayerView()
17271727
}
17281728

1729-
override fun onScreenRotationButtonClicked() {
1729+
override fun onFullscreenToggleButtonClicked() {
17301730
// In tablet user experience will be better if screen will not be rotated
17311731
// from landscape to portrait every time.
17321732
// Just turn on fullscreen mode in landscape orientation

app/src/main/java/org/schabi/newpipe/player/event/PlayerServiceEventListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface PlayerServiceEventListener extends PlayerEventListener {
1010

1111
void onFullscreenStateChanged(boolean fullscreen);
1212

13-
void onScreenRotationButtonClicked();
13+
void onFullscreenToggleButtonClicked();
1414

1515
void onMoreOptionsLongClicked();
1616

app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,8 @@ object PlayerHolder {
243243
listener?.onFullscreenStateChanged(fullscreen)
244244
}
245245

246-
override fun onScreenRotationButtonClicked() {
247-
listener?.onScreenRotationButtonClicked()
246+
override fun onFullscreenToggleButtonClicked() {
247+
listener?.onFullscreenToggleButtonClicked()
248248
}
249249

250250
override fun onMoreOptionsLongClicked() {

app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private void directlyOpenFullscreenIfNeeded() {
122122
&& DeviceUtils.isTablet(player.getService())
123123
&& PlayerHelper.globalScreenOrientationLocked(player.getService())) {
124124
player.getFragmentListener().ifPresent(
125-
PlayerServiceEventListener::onScreenRotationButtonClicked);
125+
PlayerServiceEventListener::onFullscreenToggleButtonClicked);
126126
}
127127
}
128128

@@ -159,7 +159,7 @@ protected void initListeners() {
159159
// orientation a screen orientation can be changed automatically
160160
if (!isVerticalVideo || (isLandscape() && globalScreenOrientationLocked(context))) {
161161
player.getFragmentListener()
162-
.ifPresent(PlayerServiceEventListener::onScreenRotationButtonClicked);
162+
.ifPresent(PlayerServiceEventListener::onFullscreenToggleButtonClicked);
163163
} else {
164164
toggleFullscreen();
165165
}
@@ -233,7 +233,7 @@ public void destroy() {
233233

234234
// Exit from fullscreen when user closes the player via notification
235235
if (isFullscreen) {
236-
toggleFullscreen();
236+
exitFullscreen();
237237
}
238238

239239
removeViewFromParent();
@@ -414,7 +414,7 @@ public void onPlaying() {
414414
public void onCompleted() {
415415
super.onCompleted();
416416
if (isFullscreen) {
417-
toggleFullscreen();
417+
exitFullscreen();
418418
}
419419
}
420420
//endregion
@@ -905,7 +905,7 @@ && isLandscape() == isVerticalVideo
905905
&& !DeviceUtils.isTablet(context)) {
906906
// set correct orientation
907907
player.getFragmentListener().ifPresent(
908-
PlayerServiceEventListener::onScreenRotationButtonClicked);
908+
PlayerServiceEventListener::onFullscreenToggleButtonClicked);
909909
}
910910

911911
setupScreenRotationButton();
@@ -915,28 +915,54 @@ public void toggleFullscreen() {
915915
if (DEBUG) {
916916
Log.d(TAG, "toggleFullscreen() called");
917917
}
918+
919+
if (isFullscreen) {
920+
exitFullscreen();
921+
} else {
922+
enterFullscreen();
923+
}
924+
925+
}
926+
927+
public void enterFullscreen() {
928+
if (DEBUG) {
929+
Log.d(TAG, "enterFullscreen() called");
930+
}
918931
final PlayerServiceEventListener fragmentListener = player.getFragmentListener()
919932
.orElse(null);
920933
if (fragmentListener == null || player.exoPlayerIsNull()) {
921934
return;
922935
}
936+
isFullscreen = true;
937+
// Android needs tens milliseconds to send new insets but a user is able to see
938+
// how controls changes it's position from `0` to `nav bar height` padding.
939+
// So just hide the controls to hide this visual inconsistency
940+
hideControls(0, 0);
941+
fragmentListener.onFullscreenStateChanged(true);
942+
setupFullscreenButtons(true);
943+
}
923944

924-
isFullscreen = !isFullscreen;
925-
if (isFullscreen) {
926-
// Android needs tens milliseconds to send new insets but a user is able to see
927-
// how controls changes it's position from `0` to `nav bar height` padding.
928-
// So just hide the controls to hide this visual inconsistency
929-
hideControls(0, 0);
930-
} else {
931-
// Apply window insets because Android will not do it when orientation changes
932-
// from landscape to portrait (open vertical video to reproduce)
933-
binding.playbackControlRoot.setPadding(0, 0, 0, 0);
945+
public void exitFullscreen() {
946+
if (DEBUG) {
947+
Log.d(TAG, "exitFullscreen() called");
934948
}
935-
fragmentListener.onFullscreenStateChanged(isFullscreen);
949+
final PlayerServiceEventListener fragmentListener = player.getFragmentListener()
950+
.orElse(null);
951+
if (fragmentListener == null || player.exoPlayerIsNull()) {
952+
return;
953+
}
954+
isFullscreen = false;
955+
// Apply window insets because Android will not do it when orientation changes
956+
// from landscape to portrait (open vertical video to reproduce)
957+
binding.playbackControlRoot.setPadding(0, 0, 0, 0);
958+
fragmentListener.onFullscreenStateChanged(false);
959+
setupFullscreenButtons(false);
960+
}
936961

937-
binding.titleTextView.setVisibility(isFullscreen ? View.VISIBLE : View.GONE);
938-
binding.channelTextView.setVisibility(isFullscreen ? View.VISIBLE : View.GONE);
939-
binding.playerCloseButton.setVisibility(isFullscreen ? View.GONE : View.VISIBLE);
962+
private void setupFullscreenButtons(final boolean fullscreen) {
963+
binding.titleTextView.setVisibility(fullscreen ? View.VISIBLE : View.GONE);
964+
binding.channelTextView.setVisibility(fullscreen ? View.VISIBLE : View.GONE);
965+
binding.playerCloseButton.setVisibility(fullscreen ? View.GONE : View.VISIBLE);
940966
setupScreenRotationButton();
941967
}
942968

@@ -951,7 +977,7 @@ public void checkLandscape() {
951977
if (videoInLandscapeButNotInFullscreen
952978
&& notPaused
953979
&& !DeviceUtils.isTablet(context)) {
954-
toggleFullscreen();
980+
enterFullscreen();
955981
}
956982
}
957983
//endregion

0 commit comments

Comments
 (0)