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