diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index a39ef0a0a..950430463 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -220,7 +220,7 @@ public final class VideoDetailFragment return; } - if (isLandscape()) { + if (DeviceUtils.isLandscape(requireContext())) { // If the video is playing but orientation changed // let's make the video in fullscreen again checkLandscape(); @@ -1107,7 +1107,7 @@ public final class VideoDetailFragment public void openVideoPlayer(final boolean directlyFullscreenIfApplicable) { if (directlyFullscreenIfApplicable && PlayerHelper.isStartMainPlayerFullscreenEnabled(requireContext()) - && !isLandscape() + && !DeviceUtils.isLandscape(requireContext()) && PlayerHelper.globalScreenOrientationLocked(requireContext())) { // open directly in fullscreen TODO does it work for large-land layouts? onScreenRotationButtonClicked(); @@ -1261,7 +1261,7 @@ public final class VideoDetailFragment final DisplayMetrics metrics = getResources().getDisplayMetrics(); if (getView() != null) { - final int height = (isInMultiWindow() + final int height = (DeviceUtils.isInMultiWindow(activity) ? requireView() : activity.getWindow().getDecorView()).getHeight(); setHeightThumbnail(height, metrics); @@ -1284,7 +1284,7 @@ public final class VideoDetailFragment requireView().getViewTreeObserver().removeOnPreDrawListener(preDrawListener); if (isPlayerAvailable() && player.isFullscreen()) { - final int height = (isInMultiWindow() + final int height = (DeviceUtils.isInMultiWindow(activity) ? requireView() : activity.getWindow().getDecorView()).getHeight(); // Height is zero when the view is not yet displayed like after orientation change @@ -1873,13 +1873,14 @@ public final class VideoDetailFragment // from landscape to portrait every time. // Just turn on fullscreen mode in landscape orientation // or portrait & unlocked global orientation + final boolean isLandscape = DeviceUtils.isLandscape(requireContext()); if (DeviceUtils.isTablet(activity) - && (!globalScreenOrientationLocked(activity) || isLandscape())) { + && (!globalScreenOrientationLocked(activity) || isLandscape)) { player.toggleFullscreen(); return; } - final int newOrientation = isLandscape() + final int newOrientation = isLandscape ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; @@ -1951,15 +1952,17 @@ public final class VideoDetailFragment | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + // In multiWindow mode status bar is not transparent for devices with cutout // if I include this flag. So without it is better in this case - if (!isInMultiWindow()) { + final boolean isInMultiWindow = DeviceUtils.isInMultiWindow(activity); + if (!isInMultiWindow) { visibility |= View.SYSTEM_UI_FLAG_FULLSCREEN; } activity.getWindow().getDecorView().setSystemUiVisibility(visibility); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - && (isInMultiWindow() || (isPlayerAvailable() && player.isFullscreen()))) { + && (isInMultiWindow || (isPlayerAvailable() && player.isFullscreen()))) { activity.getWindow().setStatusBarColor(Color.TRANSPARENT); activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); } @@ -2031,15 +2034,6 @@ public final class VideoDetailFragment } } - public boolean isLandscape() { - return getResources().getDisplayMetrics().heightPixels < getResources() - .getDisplayMetrics().widthPixels; - } - - private boolean isInMultiWindow() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInMultiWindowMode(); - } - /* * Means that the player fragment was swiped away via BottomSheetLayout * and is empty but ready for any new actions. See cleanUp() @@ -2222,7 +2216,7 @@ public final class VideoDetailFragment setOverlayElementsClickable(false); hideSystemUiIfNeeded(); // Conditions when the player should be expanded to fullscreen - if (isLandscape() + if (DeviceUtils.isLandscape(requireContext()) && isPlayerAvailable() && player.isPlaying() && !player.isFullscreen() diff --git a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java index 7a04ec22e..5b4b308d6 100644 --- a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java @@ -24,7 +24,6 @@ import android.content.Context; import android.content.Intent; import android.os.Binder; import android.os.IBinder; -import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -36,6 +35,7 @@ import androidx.core.content.ContextCompat; import org.schabi.newpipe.App; import org.schabi.newpipe.databinding.PlayerBinding; +import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.ThemeHelper; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; @@ -222,11 +222,8 @@ public final class MainPlayer extends Service { boolean isLandscape() { // DisplayMetrics from activity context knows about MultiWindow feature // while DisplayMetrics from app context doesn't - final DisplayMetrics metrics = (player != null - && player.getParentActivity() != null - ? player.getParentActivity().getResources() - : getResources()).getDisplayMetrics(); - return metrics.heightPixels < metrics.widthPixels; + return DeviceUtils.isLandscape(player != null && player.getParentActivity() != null + ? player.getParentActivity() : this); } @Nullable diff --git a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java index 8d918c162..73bc4d6bb 100644 --- a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java @@ -11,6 +11,7 @@ import android.view.KeyEvent; import androidx.annotation.Dimension; import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; @@ -130,4 +131,13 @@ public final class DeviceUtils { && !HI3798MV200 && !CVT_MT5886_EU_1G; } + + public static boolean isLandscape(final Context context) { + return context.getResources().getDisplayMetrics().heightPixels < context.getResources() + .getDisplayMetrics().widthPixels; + } + + public static boolean isInMultiWindow(final AppCompatActivity activity) { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInMultiWindowMode(); + } } diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index 539387082..563a67af4 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -369,7 +369,7 @@ public final class NavigationHelper { // Starting directly in fullscreen if the previous player type was popup. if (playerType == MainPlayer.PlayerType.POPUP - && !detailFragment.isLandscape() + && !DeviceUtils.isLandscape(context) && PlayerHelper.globalScreenOrientationLocked(context)) { detailFragment.onScreenRotationButtonClicked(); }