From 5f1c2bc3528e53cd69f66e7def61e1d55418ef73 Mon Sep 17 00:00:00 2001 From: Andrew Tremblay Date: Wed, 28 Aug 2019 15:38:36 -0400 Subject: [PATCH 1/5] Adding a ignoreInForeground key for iOS parity --- .../modules/RNPushNotificationHelper.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java index be6e85046..37c6f5cf9 100644 --- a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java +++ b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java @@ -386,14 +386,16 @@ public void sendToNotificationCentre(Bundle bundle) { commit(editor); } - Notification info = notification.build(); - info.defaults |= Notification.DEFAULT_LIGHTS; - - if (bundle.containsKey("tag")) { - String tag = bundle.getString("tag"); - notificationManager.notify(tag, notificationID, info); - } else { - notificationManager.notify(notificationID, info); + if (!(bundle.getBoolean("foreground", false) && bundle.getBoolean("ignoreInForeground", false))) { + Notification info = notification.build(); + info.defaults |= Notification.DEFAULT_LIGHTS; + + if (bundle.containsKey("tag")) { + String tag = bundle.getString("tag"); + notificationManager.notify(tag, notificationID, info); + } else { + notificationManager.notify(notificationID, info); + } } // Can't use setRepeating for recurring notifications because setRepeating From f03a567fef21ae6d514f995f54c04862c513cff2 Mon Sep 17 00:00:00 2001 From: Andrew Tremblay Date: Wed, 28 Aug 2019 15:41:25 -0400 Subject: [PATCH 2/5] Update README.md adding new key to the documentation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b83be78fb..f4563c3c5 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,7 @@ PushNotification.localNotification({ priority: "high", // (optional) set notification priority, default: high visibility: "private", // (optional) set notification visibility, default: private importance: "high", // (optional) set notification importance, default: high + ignoreInForeground: false, // (optional) if true, the notification will not be visible when the app is in the foreground (useful for parity with how iOS notifications appear) /* iOS only properties */ alertAction: // (optional) default: view From 071a3406b6cb3c5ad38ca2ebb4ee6dab25b6661b Mon Sep 17 00:00:00 2001 From: Andrew Tremblay Date: Wed, 28 Aug 2019 20:06:22 -0400 Subject: [PATCH 3/5] adding more manual isApplicationInForeground check since foreground is not guaranteed in the bundle --- .../modules/RNPushNotificationHelper.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java index 37c6f5cf9..b77dcf5e0 100644 --- a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java +++ b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java @@ -386,7 +386,7 @@ public void sendToNotificationCentre(Bundle bundle) { commit(editor); } - if (!(bundle.getBoolean("foreground", false) && bundle.getBoolean("ignoreInForeground", false))) { + if (!(this.isApplicationInForeground(context) && bundle.getBoolean("ignoreInForeground"))) { Notification info = notification.build(); info.defaults |= Notification.DEFAULT_LIGHTS; @@ -603,4 +603,22 @@ private void checkOrCreateChannel(NotificationManager manager) { manager.createNotificationChannel(channel); channelCreated = true; } + + private boolean isApplicationInForeground(Context context) { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List processInfos = activityManager.getRunningAppProcesses(); + if (processInfos != null) { + for (RunningAppProcessInfo processInfo : processInfos) { + if (processInfo.processName.equals(context.getPackageName())) { + if (processInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + for (String d : processInfo.pkgList) { + return true; + } + } + } + } + } + return false; + } + } From 16a3adeea31632c7791ba262ab6e1b2258a9718f Mon Sep 17 00:00:00 2001 From: "Andrew Tremblay (Pear profile)" <43054023+andrewtremblay-pear@users.noreply.github.com> Date: Wed, 13 Nov 2019 16:44:47 -0800 Subject: [PATCH 4/5] Addressing missing imports --- .../modules/RNPushNotificationHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java index b77dcf5e0..fd5d025b1 100644 --- a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java +++ b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java @@ -1,6 +1,8 @@ package com.dieam.reactnativepushnotification.modules; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningAppProcessInfo; import android.app.AlarmManager; import android.app.Application; import android.app.Notification; @@ -31,6 +33,7 @@ import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.List; import static com.dieam.reactnativepushnotification.modules.RNPushNotification.LOG_TAG; import static com.dieam.reactnativepushnotification.modules.RNPushNotificationAttributes.fromJson; From e517d1dfa4d75f082d7e2cc2ec4dc01290f9fdf6 Mon Sep 17 00:00:00 2001 From: Andrew Tremblay Date: Thu, 16 Apr 2020 11:36:19 -0400 Subject: [PATCH 5/5] simplifying isApplicationInForeground check --- .../modules/RNPushNotificationHelper.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java index dc98d93f3..386121096 100644 --- a/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java +++ b/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java @@ -618,12 +618,10 @@ private boolean isApplicationInForeground(Context context) { List processInfos = activityManager.getRunningAppProcesses(); if (processInfos != null) { for (RunningAppProcessInfo processInfo : processInfos) { - if (processInfo.processName.equals(context.getPackageName())) { - if (processInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { - for (String d : processInfo.pkgList) { - return true; - } - } + if (processInfo.processName.equals(context.getPackageName()) + && processInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND + && processInfo.pkgList.length > 0) { + return true; } } }