From 6a39c12b86f967b18734f7a1fb3dc852db296e42 Mon Sep 17 00:00:00 2001 From: Akshay Ayyanchira Date: Wed, 24 Sep 2025 07:31:46 -0700 Subject: [PATCH 1/2] [MOB-11844] - Support edge to edge to InApps --- ...IterableInAppFragmentHTMLNotification.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java index 779c1c93c..0ba74ec8f 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; +import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; @@ -31,6 +32,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.ColorUtils; +import androidx.core.view.ViewCompat; import androidx.fragment.app.DialogFragment; public class IterableInAppFragmentHTMLNotification extends DialogFragment implements IterableWebView.HTMLNotificationCallbacks { @@ -199,6 +201,33 @@ public void run() { return relativeLayout; } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + // Use ViewCompat to handle insets dynamically + ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + // For API 30 and above: Use WindowInsetsCompat to handle insets + Insets systemBarsInsets = insets.getSystemGestureInsets().toPlatformInsets(); + v.setPadding( + 0, + systemBarsInsets.top, // Padding for status bar and cutout + 0, + systemBarsInsets.bottom // Padding for navigation bar + ); + } else { + // For older Android versions: Use legacy methods + v.setPadding( + 0, + insets.getSystemWindowInsetTop(), // Padding for status bar and cutout + 0, + insets.getSystemWindowInsetBottom() // Padding for navigation bar + ); + } + return insets; + }); + } + public void setLoaded(boolean loaded) { this.loaded = loaded; } From 06e91e40948cc1a6d6afe5014031fd28168e11c0 Mon Sep 17 00:00:00 2001 From: Akshay Ayyanchira Date: Mon, 29 Sep 2025 03:46:53 -0700 Subject: [PATCH 2/2] Committing just whats needed. Removing code Where if else was given. All android version conditioning should be covered by relying on getInsets and using systemBars() --- ...IterableInAppFragmentHTMLNotification.java | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java index 0ba74ec8f..f9ac3aa62 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; -import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; @@ -32,7 +31,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.ColorUtils; +import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.DialogFragment; public class IterableInAppFragmentHTMLNotification extends DialogFragment implements IterableWebView.HTMLNotificationCallbacks { @@ -204,26 +205,10 @@ public void run() { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - // Use ViewCompat to handle insets dynamically + // Handle edge-to-edge insets with modern approach ViewCompat.setOnApplyWindowInsetsListener(view, (v, insets) -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - // For API 30 and above: Use WindowInsetsCompat to handle insets - Insets systemBarsInsets = insets.getSystemGestureInsets().toPlatformInsets(); - v.setPadding( - 0, - systemBarsInsets.top, // Padding for status bar and cutout - 0, - systemBarsInsets.bottom // Padding for navigation bar - ); - } else { - // For older Android versions: Use legacy methods - v.setPadding( - 0, - insets.getSystemWindowInsetTop(), // Padding for status bar and cutout - 0, - insets.getSystemWindowInsetBottom() // Padding for navigation bar - ); - } + Insets sysBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(0, sysBars.top, 0, sysBars.bottom); return insets; }); }