diff --git a/android/src/newarch/IntercomModule.java b/android/src/newarch/IntercomModule.java index c892bd10..9d1d01f0 100644 --- a/android/src/newarch/IntercomModule.java +++ b/android/src/newarch/IntercomModule.java @@ -1,6 +1,7 @@ package com.intercom.reactnative; import android.app.Activity; +import android.app.ActivityManager; import android.app.Application; import android.content.Intent; import android.util.Log; @@ -90,10 +91,14 @@ public static void handleRemotePushWithCustomStack(@NonNull Application applicat public static void handleRemotePushMessage(@NonNull Application application, RemoteMessage remoteMessage) { try { TaskStackBuilder customStack = TaskStackBuilder.create(application); - Intent launchIntent = application.getPackageManager().getLaunchIntentForPackage(application.getPackageName()); - if (launchIntent != null) { - customStack.addNextIntent(launchIntent); + + if (!isAppInForeground(application)) { + Intent launchIntent = application.getPackageManager().getLaunchIntentForPackage(application.getPackageName()); + if (launchIntent != null) { + customStack.addNextIntent(launchIntent); + } } + handleRemotePushWithCustomStack(application, remoteMessage, customStack); } catch (Exception err) { Log.e(NAME, "handleRemotePushMessage error:"); @@ -101,6 +106,31 @@ public static void handleRemotePushMessage(@NonNull Application application, Rem } } + private static boolean isAppInForeground(@NonNull Application application) { + try { + ActivityManager activityManager = (ActivityManager) application.getSystemService(android.content.Context.ACTIVITY_SERVICE); + if (activityManager == null) { + return false; + } + java.util.List appProcesses = activityManager.getRunningAppProcesses(); + if (appProcesses == null) { + return false; + } + String packageName = application.getPackageName(); + for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND + && appProcess.processName.equals(packageName)) { + return true; + } + } + return false; + } catch (Exception err) { + Log.e(NAME, "isAppInForeground error:"); + Log.e(NAME, err.toString()); + return false; + } + } + public static void sendTokenToIntercom(Application application, @NonNull String token) { if (application == null || token == null || token.isEmpty()) { Log.w(NAME, "sendTokenToIntercom: application or token is null or empty"); diff --git a/android/src/oldarch/IntercomModule.java b/android/src/oldarch/IntercomModule.java index 32afd733..3e19270a 100644 --- a/android/src/oldarch/IntercomModule.java +++ b/android/src/oldarch/IntercomModule.java @@ -1,6 +1,7 @@ package com.intercom.reactnative; import android.app.Activity; +import android.app.ActivityManager; import android.app.Application; import android.content.Intent; import android.util.Log; @@ -82,10 +83,14 @@ public static void handleRemotePushWithCustomStack(@NonNull Application applicat public static void handleRemotePushMessage(@NonNull Application application, RemoteMessage remoteMessage) { try { TaskStackBuilder customStack = TaskStackBuilder.create(application); - Intent launchIntent = application.getPackageManager().getLaunchIntentForPackage(application.getPackageName()); - if (launchIntent != null) { - customStack.addNextIntent(launchIntent); + + if (!isAppInForeground(application)) { + Intent launchIntent = application.getPackageManager().getLaunchIntentForPackage(application.getPackageName()); + if (launchIntent != null) { + customStack.addNextIntent(launchIntent); + } } + handleRemotePushWithCustomStack(application, remoteMessage, customStack); } catch (Exception err) { Log.e(NAME, "handleRemotePushMessage error:"); @@ -93,6 +98,31 @@ public static void handleRemotePushMessage(@NonNull Application application, Rem } } + private static boolean isAppInForeground(@NonNull Application application) { + try { + ActivityManager activityManager = (ActivityManager) application.getSystemService(android.content.Context.ACTIVITY_SERVICE); + if (activityManager == null) { + return false; + } + java.util.List appProcesses = activityManager.getRunningAppProcesses(); + if (appProcesses == null) { + return false; + } + String packageName = application.getPackageName(); + for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND + && appProcess.processName.equals(packageName)) { + return true; + } + } + return false; + } catch (Exception err) { + Log.e(NAME, "isAppInForeground error:"); + Log.e(NAME, err.toString()); + return false; + } + } + public static void sendTokenToIntercom(Application application, @NonNull String token) { intercomPushClient.sendTokenToIntercom(application, token); Log.d(NAME, "sendTokenToIntercom");