diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java
index fd81bae66..cb0c0d24b 100644
--- a/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java
+++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java
@@ -23,6 +23,7 @@ import android.annotation.TargetApi;
import android.app.NotificationManager;
import android.content.Context;
import android.os.PowerManager;
+import android.service.notification.StatusBarNotification;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.Address;
@@ -111,4 +112,8 @@ class ApiTwentyThreePlus {
return true;
}
+
+ public static StatusBarNotification[] getActiveNotifications(NotificationManager manager) {
+ return manager.getActiveNotifications();
+ }
}
diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java
index a4e05e732..057c6e68a 100644
--- a/app/src/main/java/org/linphone/compatibility/Compatibility.java
+++ b/app/src/main/java/org/linphone/compatibility/Compatibility.java
@@ -22,6 +22,7 @@ package org.linphone.compatibility;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.app.Notification;
+import android.app.NotificationManager;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.content.ContentProviderClient;
@@ -30,6 +31,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import android.provider.Settings;
+import android.service.notification.StatusBarNotification;
import org.linphone.core.Address;
import org.linphone.mediastream.Version;
import org.linphone.notifications.Notifiable;
@@ -309,4 +311,12 @@ public class Compatibility {
}
return null;
}
+
+ public static StatusBarNotification[] getActiveNotifications(NotificationManager manager) {
+ if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) {
+ return ApiTwentyThreePlus.getActiveNotifications(manager);
+ }
+
+ return new StatusBarNotification[0];
+ }
}
diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.java b/app/src/main/java/org/linphone/notifications/NotificationsManager.java
index 438443c91..f960c6f54 100644
--- a/app/src/main/java/org/linphone/notifications/NotificationsManager.java
+++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.java
@@ -29,6 +29,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.service.notification.StatusBarNotification;
import java.io.File;
import java.util.HashMap;
import org.linphone.LinphoneManager;
@@ -84,7 +85,19 @@ public class NotificationsManager {
mCurrentChatRoomAddress = null;
mNM = (NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);
- mNM.cancelAll();
+
+ if (mContext.getResources().getBoolean(R.bool.keep_missed_call_notification_upon_restart)) {
+ StatusBarNotification[] notifs = Compatibility.getActiveNotifications(mNM);
+ if (notifs != null && notifs.length > 1) {
+ for (StatusBarNotification notif : notifs) {
+ if (notif.getId() != MISSED_CALLS_NOTIF_ID) {
+ dismissNotification(notif.getId());
+ }
+ }
+ }
+ } else {
+ mNM.cancelAll();
+ }
mLastNotificationId = 5; // Do not conflict with hardcoded notifications ids !
diff --git a/app/src/main/res/values/non_localizable_custom.xml b/app/src/main/res/values/non_localizable_custom.xml
index b94817cc8..1b644be68 100644
--- a/app/src/main/res/values/non_localizable_custom.xml
+++ b/app/src/main/res/values/non_localizable_custom.xml
@@ -132,6 +132,9 @@
1000
7000
+
+ false
+
false