1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2024-12-23 16:40:32 +00:00

Extract isLandscape and isInMultiWindow to DeviceUtils

This commit is contained in:
Stypox 2021-03-25 22:54:55 +01:00
parent 3c2ea7697c
commit 2dfe837c35
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
4 changed files with 26 additions and 25 deletions

View File

@ -220,7 +220,7 @@ public final class VideoDetailFragment
return; return;
} }
if (isLandscape()) { if (DeviceUtils.isLandscape(requireContext())) {
// If the video is playing but orientation changed // If the video is playing but orientation changed
// let's make the video in fullscreen again // let's make the video in fullscreen again
checkLandscape(); checkLandscape();
@ -1107,7 +1107,7 @@ public final class VideoDetailFragment
public void openVideoPlayer(final boolean directlyFullscreenIfApplicable) { public void openVideoPlayer(final boolean directlyFullscreenIfApplicable) {
if (directlyFullscreenIfApplicable if (directlyFullscreenIfApplicable
&& PlayerHelper.isStartMainPlayerFullscreenEnabled(requireContext()) && PlayerHelper.isStartMainPlayerFullscreenEnabled(requireContext())
&& !isLandscape() && !DeviceUtils.isLandscape(requireContext())
&& PlayerHelper.globalScreenOrientationLocked(requireContext())) { && PlayerHelper.globalScreenOrientationLocked(requireContext())) {
// open directly in fullscreen TODO does it work for large-land layouts? // open directly in fullscreen TODO does it work for large-land layouts?
onScreenRotationButtonClicked(); onScreenRotationButtonClicked();
@ -1261,7 +1261,7 @@ public final class VideoDetailFragment
final DisplayMetrics metrics = getResources().getDisplayMetrics(); final DisplayMetrics metrics = getResources().getDisplayMetrics();
if (getView() != null) { if (getView() != null) {
final int height = (isInMultiWindow() final int height = (DeviceUtils.isInMultiWindow(activity)
? requireView() ? requireView()
: activity.getWindow().getDecorView()).getHeight(); : activity.getWindow().getDecorView()).getHeight();
setHeightThumbnail(height, metrics); setHeightThumbnail(height, metrics);
@ -1284,7 +1284,7 @@ public final class VideoDetailFragment
requireView().getViewTreeObserver().removeOnPreDrawListener(preDrawListener); requireView().getViewTreeObserver().removeOnPreDrawListener(preDrawListener);
if (isPlayerAvailable() && player.isFullscreen()) { if (isPlayerAvailable() && player.isFullscreen()) {
final int height = (isInMultiWindow() final int height = (DeviceUtils.isInMultiWindow(activity)
? requireView() ? requireView()
: activity.getWindow().getDecorView()).getHeight(); : activity.getWindow().getDecorView()).getHeight();
// Height is zero when the view is not yet displayed like after orientation change // 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. // from landscape to portrait every time.
// Just turn on fullscreen mode in landscape orientation // Just turn on fullscreen mode in landscape orientation
// or portrait & unlocked global orientation // or portrait & unlocked global orientation
final boolean isLandscape = DeviceUtils.isLandscape(requireContext());
if (DeviceUtils.isTablet(activity) if (DeviceUtils.isTablet(activity)
&& (!globalScreenOrientationLocked(activity) || isLandscape())) { && (!globalScreenOrientationLocked(activity) || isLandscape)) {
player.toggleFullscreen(); player.toggleFullscreen();
return; return;
} }
final int newOrientation = isLandscape() final int newOrientation = isLandscape
? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
: ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
@ -1951,15 +1952,17 @@ public final class VideoDetailFragment
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
// In multiWindow mode status bar is not transparent for devices with cutout // 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 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; visibility |= View.SYSTEM_UI_FLAG_FULLSCREEN;
} }
activity.getWindow().getDecorView().setSystemUiVisibility(visibility); activity.getWindow().getDecorView().setSystemUiVisibility(visibility);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
&& (isInMultiWindow() || (isPlayerAvailable() && player.isFullscreen()))) { && (isInMultiWindow || (isPlayerAvailable() && player.isFullscreen()))) {
activity.getWindow().setStatusBarColor(Color.TRANSPARENT); activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
activity.getWindow().setNavigationBarColor(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 * Means that the player fragment was swiped away via BottomSheetLayout
* and is empty but ready for any new actions. See cleanUp() * and is empty but ready for any new actions. See cleanUp()
@ -2222,7 +2216,7 @@ public final class VideoDetailFragment
setOverlayElementsClickable(false); setOverlayElementsClickable(false);
hideSystemUiIfNeeded(); hideSystemUiIfNeeded();
// Conditions when the player should be expanded to fullscreen // Conditions when the player should be expanded to fullscreen
if (isLandscape() if (DeviceUtils.isLandscape(requireContext())
&& isPlayerAvailable() && isPlayerAvailable()
&& player.isPlaying() && player.isPlaying()
&& !player.isFullscreen() && !player.isFullscreen()

View File

@ -24,7 +24,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -36,6 +35,7 @@ import androidx.core.content.ContextCompat;
import org.schabi.newpipe.App; import org.schabi.newpipe.App;
import org.schabi.newpipe.databinding.PlayerBinding; import org.schabi.newpipe.databinding.PlayerBinding;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
@ -222,11 +222,8 @@ public final class MainPlayer extends Service {
boolean isLandscape() { boolean isLandscape() {
// DisplayMetrics from activity context knows about MultiWindow feature // DisplayMetrics from activity context knows about MultiWindow feature
// while DisplayMetrics from app context doesn't // while DisplayMetrics from app context doesn't
final DisplayMetrics metrics = (player != null return DeviceUtils.isLandscape(player != null && player.getParentActivity() != null
&& player.getParentActivity() != null ? player.getParentActivity() : this);
? player.getParentActivity().getResources()
: getResources()).getDisplayMetrics();
return metrics.heightPixels < metrics.widthPixels;
} }
@Nullable @Nullable

View File

@ -11,6 +11,7 @@ import android.view.KeyEvent;
import androidx.annotation.Dimension; import androidx.annotation.Dimension;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -130,4 +131,13 @@ public final class DeviceUtils {
&& !HI3798MV200 && !HI3798MV200
&& !CVT_MT5886_EU_1G; && !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();
}
} }

View File

@ -369,7 +369,7 @@ public final class NavigationHelper {
// Starting directly in fullscreen if the previous player type was popup. // Starting directly in fullscreen if the previous player type was popup.
if (playerType == MainPlayer.PlayerType.POPUP if (playerType == MainPlayer.PlayerType.POPUP
&& !detailFragment.isLandscape() && !DeviceUtils.isLandscape(context)
&& PlayerHelper.globalScreenOrientationLocked(context)) { && PlayerHelper.globalScreenOrientationLocked(context)) {
detailFragment.onScreenRotationButtonClicked(); detailFragment.onScreenRotationButtonClicked();
} }