diff --git a/android/src/newarch/IntercomModule.java b/android/src/newarch/IntercomModule.java index c892bd10..9814029a 100644 --- a/android/src/newarch/IntercomModule.java +++ b/android/src/newarch/IntercomModule.java @@ -1,7 +1,9 @@ package com.intercom.reactnative; import android.app.Activity; +import android.app.ActivityManager; import android.app.Application; +import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; @@ -90,10 +92,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 +107,33 @@ public static void handleRemotePushMessage(@NonNull Application application, Rem } } + private static boolean isAppInForeground(@NonNull Application application) { + try { + ActivityManager activityManager = (ActivityManager) application.getSystemService(Context.ACTIVITY_SERVICE); + if (activityManager == null) { + return false; + } + + List appProcesses = activityManager.getRunningAppProcesses(); + if (appProcesses == null) { + return false; + } + + final 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..6d46d17a 100644 --- a/android/src/oldarch/IntercomModule.java +++ b/android/src/oldarch/IntercomModule.java @@ -1,7 +1,9 @@ package com.intercom.reactnative; import android.app.Activity; +import android.app.ActivityManager; import android.app.Application; +import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; @@ -82,10 +84,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 +99,33 @@ public static void handleRemotePushMessage(@NonNull Application application, Rem } } + private static boolean isAppInForeground(@NonNull Application application) { + try { + ActivityManager activityManager = (ActivityManager) application.getSystemService(Context.ACTIVITY_SERVICE); + if (activityManager == null) { + return false; + } + + List appProcesses = activityManager.getRunningAppProcesses(); + if (appProcesses == null) { + return false; + } + + final 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");