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:
parent
3c2ea7697c
commit
2dfe837c35
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user