From 1c1e5936eeff30003d2330e9d37594c3a221785e Mon Sep 17 00:00:00 2001 From: t895 Date: Thu, 11 Jan 2024 16:12:52 -0500 Subject: [PATCH] [NavigationRailView] Use display cutout and system bar insets for start padding Fixes an issue where the navigation rail would appear "underneath" display cutouts. --- .../material/navigationrail/NavigationRailView.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/java/com/google/android/material/navigationrail/NavigationRailView.java b/lib/java/com/google/android/material/navigationrail/NavigationRailView.java index 8bb97391ce8..ae1940ed095 100644 --- a/lib/java/com/google/android/material/navigationrail/NavigationRailView.java +++ b/lib/java/com/google/android/material/navigationrail/NavigationRailView.java @@ -419,8 +419,9 @@ public WindowInsetsCompat onApplyWindowInsets( @NonNull WindowInsetsCompat insets, @NonNull RelativePadding initialPadding) { // Apply the top, bottom, and start padding for a start edge aligned - // NavigationRailView to dodge the system status and navigation bars + // NavigationRailView to dodge the system status/navigation bars and display cutouts Insets systemBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + Insets displayCutoutInsets = insets.getInsets(WindowInsetsCompat.Type.displayCutout()); if (shouldApplyWindowInsetPadding(paddingTopSystemWindowInsets)) { initialPadding.top += systemBarInsets.top; } @@ -428,8 +429,11 @@ public WindowInsetsCompat onApplyWindowInsets( initialPadding.bottom += systemBarInsets.bottom; } if (shouldApplyWindowInsetPadding(paddingStartSystemWindowInsets)) { - initialPadding.start += - ViewUtils.isLayoutRtl(view) ? systemBarInsets.right : systemBarInsets.left; + if (ViewUtils.isLayoutRtl(view)) { + initialPadding.start += Math.max(systemBarInsets.right, displayCutoutInsets.right); + } else { + initialPadding.start += Math.max(systemBarInsets.left, displayCutoutInsets.left); + } } initialPadding.applyToView(view); return insets;