From e9bfb1d4ef68c9073126e1249f0ac053f8a3a029 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Fri, 28 Aug 2026 02:45:33 +0300 Subject: [PATCH 1/2] fix(android): avoid blocking foreground delivery and consume display events --- .../rnonesignalandroid/RNOneSignal.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java index 9863ed5d..797ef0e9 100644 --- a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java +++ b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java @@ -67,6 +67,7 @@ of this software and associated documentation files (the "Software"), to deal import com.onesignal.user.subscriptions.IPushSubscription; import com.onesignal.user.subscriptions.IPushSubscriptionObserver; import com.onesignal.user.subscriptions.PushSubscriptionChangedState; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.json.JSONException; @@ -82,8 +83,8 @@ public class RNOneSignal extends NativeOneSignalSpec private boolean hasSetPushSubscriptionObserver = false; private boolean hasSetUserStateObserver = false; - private final HashMap notificationWillDisplayCache = new HashMap<>(); - private final HashMap preventDefaultCache = new HashMap<>(); + private final Map notificationWillDisplayCache = + Collections.synchronizedMap(new HashMap<>()); private boolean hasAddedNotificationForegroundListener = false; private boolean hasAddedInAppMessageLifecycleListener = false; @@ -366,6 +367,7 @@ public void addNotificationForegroundLifecycleListener() { public void onWillDisplay(INotificationWillDisplayEvent event) { if (!this.hasAddedNotificationForegroundListener) { event.getNotification().display(); + return; } INotification notification = event.getNotification(); @@ -376,16 +378,6 @@ public void onWillDisplay(INotificationWillDisplayEvent event) { try { emitOnNotificationWillDisplay( RNUtils.convertHashMapToWritableMap(RNUtils.convertNotificationToMap(notification))); - - try { - synchronized (event) { - while (preventDefaultCache.containsKey(notificationId)) { - event.wait(); - } - } - } catch (InterruptedException e) { - Logging.error("InterruptedException: " + e.toString(), null); - } } catch (JSONException e) { logJSONException("onNotificationWillDisplay", e); } @@ -393,7 +385,7 @@ public void onWillDisplay(INotificationWillDisplayEvent event) { @Override public void displayNotification(String notificationId) { - INotificationWillDisplayEvent event = notificationWillDisplayCache.get(notificationId); + INotificationWillDisplayEvent event = notificationWillDisplayCache.remove(notificationId); if (event == null) { Logging.error( "Could not find onWillDisplayNotification event for notification with id: " + notificationId, null); @@ -411,7 +403,6 @@ public void preventDefault(String notificationId) { return; } event.preventDefault(); - this.preventDefaultCache.put(notificationId, event); } @Override From 1cca47f559bafc572050b7bb40bd5babd7d5ec61 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Mon, 31 Aug 2026 18:15:19 -0700 Subject: [PATCH 2/2] fix(android): remove stale prevention cache cleanup Co-authored-by: Cursor --- .../main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java | 1 - 1 file changed, 1 deletion(-) diff --git a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java index 797ef0e9..25e47c6a 100644 --- a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java +++ b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java @@ -215,7 +215,6 @@ public String getName() { public void invalidate() { removeObservers(); notificationWillDisplayCache.clear(); - preventDefaultCache.clear(); if (currentInstance == this) { currentInstance = null; }