Skip to content

Commit 4d7a6fb

Browse files
Use WindowMetrics API in VideoDetailFragment and PopupPlayerUi.
1 parent 81c4b82 commit 4d7a6fb

3 files changed

Lines changed: 36 additions & 12 deletions

File tree

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import android.content.pm.ActivityInfo;
2222
import android.database.ContentObserver;
2323
import android.graphics.Color;
24-
import android.graphics.Point;
2524
import android.graphics.Rect;
2625
import android.graphics.drawable.Drawable;
2726
import android.net.Uri;
@@ -1051,15 +1050,13 @@ public void updateTabLayoutVisibility() {
10511050
// call `post()` to be sure `viewPager.getHitRect()`
10521051
// is up to date and not being currently recomputed
10531052
binding.tabLayout.post(() -> {
1054-
if (getContext() != null) {
1053+
final var activity = getActivity();
1054+
if (activity != null) {
10551055
final Rect pagerHitRect = new Rect();
10561056
binding.viewPager.getHitRect(pagerHitRect);
10571057

1058-
final Point displaySize = new Point();
1059-
Objects.requireNonNull(ContextCompat.getSystemService(getContext(),
1060-
WindowManager.class)).getDefaultDisplay().getSize(displaySize);
1061-
1062-
final int viewPagerVisibleHeight = displaySize.y - pagerHitRect.top;
1058+
final int height = DeviceUtils.getWindowHeight(activity.getWindowManager());
1059+
final int viewPagerVisibleHeight = height - pagerHitRect.top;
10631060
// see TabLayout.DEFAULT_HEIGHT, which is equal to 48dp
10641061
final float tabLayoutHeight = TypedValue.applyDimension(
10651062
TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics());

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.view.MotionEvent;
2222
import android.view.View;
2323
import android.view.ViewGroup;
24+
import android.view.WindowInsets;
2425
import android.view.WindowManager;
2526
import android.view.animation.AnticipateInterpolator;
2627
import android.widget.LinearLayout;
@@ -255,11 +256,20 @@ public void checkPopupPositionBounds() {
255256
}
256257

257258
public void updateScreenSize() {
258-
final DisplayMetrics metrics = new DisplayMetrics();
259-
windowManager.getDefaultDisplay().getMetrics(metrics);
260-
261-
screenWidth = metrics.widthPixels;
262-
screenHeight = metrics.heightPixels;
259+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
260+
final var windowMetrics = windowManager.getCurrentWindowMetrics();
261+
final var bounds = windowMetrics.getBounds();
262+
final var windowInsets = windowMetrics.getWindowInsets();
263+
final var insets = windowInsets.getInsetsIgnoringVisibility(
264+
WindowInsets.Type.navigationBars() | WindowInsets.Type.displayCutout());
265+
screenWidth = bounds.width() - (insets.left + insets.right);
266+
screenHeight = bounds.height() - (insets.top + insets.bottom);
267+
} else {
268+
final DisplayMetrics metrics = new DisplayMetrics();
269+
windowManager.getDefaultDisplay().getMetrics(metrics);
270+
screenWidth = metrics.widthPixels;
271+
screenHeight = metrics.heightPixels;
272+
}
263273
if (DEBUG) {
264274
Log.d(TAG, "updateScreenSize() called: screenWidth = ["
265275
+ screenWidth + "], screenHeight = [" + screenHeight + "]");

app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
import android.content.Context;
55
import android.content.pm.PackageManager;
66
import android.content.res.Configuration;
7+
import android.graphics.Point;
78
import android.os.BatteryManager;
89
import android.os.Build;
910
import android.provider.Settings;
1011
import android.util.TypedValue;
1112
import android.view.KeyEvent;
13+
import android.view.WindowInsets;
14+
import android.view.WindowManager;
1215

1316
import androidx.annotation.Dimension;
1417
import androidx.annotation.NonNull;
@@ -151,4 +154,18 @@ public static boolean hasAnimationsAnimatorDurationEnabled(final Context context
151154
Settings.Global.ANIMATOR_DURATION_SCALE,
152155
1F) != 0F;
153156
}
157+
158+
public static int getWindowHeight(@NonNull final WindowManager windowManager) {
159+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
160+
final var windowMetrics = windowManager.getCurrentWindowMetrics();
161+
final var windowInsets = windowMetrics.getWindowInsets();
162+
final var insets = windowInsets.getInsetsIgnoringVisibility(
163+
WindowInsets.Type.navigationBars() | WindowInsets.Type.displayCutout());
164+
return windowMetrics.getBounds().height() - (insets.top + insets.bottom);
165+
} else {
166+
final Point point = new Point();
167+
windowManager.getDefaultDisplay().getSize(point);
168+
return point.y;
169+
}
170+
}
154171
}

0 commit comments

Comments
 (0)