From a98cc5706fd6c0974f4f3f9437694014ca552753 Mon Sep 17 00:00:00 2001 From: Nicholas Date: Tue, 20 Sep 2022 12:13:54 -0400 Subject: [PATCH] Use ViewCompat to get window insets on Android 5.0+. On devices running API 20 and below, getRootWindowInsets() always returns null. --- .../thoughtcrime/securesms/util/ViewUtil.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java index 9b45046835..b64f6674d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java @@ -39,6 +39,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ContextThemeWrapper; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import androidx.lifecycle.Lifecycle; @@ -326,21 +328,31 @@ public final class ViewUtil { } public static int getStatusBarHeight(@NonNull View view) { - int result = 0; - int resourceId = view.getResources().getIdentifier("status_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = view.getResources().getDimensionPixelSize(resourceId); + final WindowInsetsCompat rootWindowInsets = ViewCompat.getRootWindowInsets(view); + if (rootWindowInsets != null) { + return rootWindowInsets.getInsets(WindowInsetsCompat.Type.statusBars()).top; + } else { + int result = 0; + int resourceId = view.getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = view.getResources().getDimensionPixelSize(resourceId); + } + return result; } - return result; } public static int getNavigationBarHeight(@NonNull View view) { - int result = 0; - int resourceId = view.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); - if (resourceId > 0) { - result = view.getResources().getDimensionPixelSize(resourceId); + final WindowInsetsCompat rootWindowInsets = ViewCompat.getRootWindowInsets(view); + if (rootWindowInsets != null) { + return rootWindowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom; + } else { + int result = 0; + int resourceId = view.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = view.getResources().getDimensionPixelSize(resourceId); + } + return result; } - return result; } public static void hideKeyboard(@NonNull Context context, @NonNull View view) {