diff --git a/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt
index 39371aa9a..035a190a2 100644
--- a/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt
+++ b/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt
@@ -20,6 +20,7 @@
package org.linphone.compatibility
import android.annotation.TargetApi
+import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.ContentValues
import android.content.Context
@@ -30,6 +31,7 @@ import android.provider.MediaStore
import android.view.View
import android.view.contentcapture.ContentCaptureContext
import android.view.contentcapture.ContentCaptureSession
+import androidx.core.app.NotificationManagerCompat
import org.linphone.R
import org.linphone.core.ChatRoom
import org.linphone.core.Content
@@ -41,6 +43,24 @@ import org.linphone.utils.LinphoneUtils
@TargetApi(29)
class Api29Compatibility {
companion object {
+ fun createMessageChannel(
+ context: Context,
+ notificationManager: NotificationManagerCompat
+ ) {
+ // Create messages notification channel
+ val id = context.getString(R.string.notification_channel_chat_id)
+ val name = context.getString(R.string.notification_channel_chat_name)
+ val description = context.getString(R.string.notification_channel_chat_name)
+ val channel = NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH)
+ channel.description = description
+ channel.lightColor = context.getColor(R.color.notification_led_color)
+ channel.enableLights(true)
+ channel.enableVibration(true)
+ channel.setShowBadge(true)
+ channel.setAllowBubbles(true)
+ notificationManager.createNotificationChannel(channel)
+ }
+
fun extractLocusIdFromIntent(intent: Intent): String? {
return intent.getStringExtra(Intent.EXTRA_LOCUS_ID)
}
diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
index 6678644b6..2420db9ae 100644
--- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt
+++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt
@@ -84,7 +84,11 @@ class Compatibility {
Api26Compatibility.createServiceChannel(context, notificationManager)
Api26Compatibility.createMissedCallChannel(context, notificationManager)
Api26Compatibility.createIncomingCallChannel(context, notificationManager)
- Api26Compatibility.createMessageChannel(context, notificationManager)
+ if (Version.sdkAboveOrEqual(Version.API29_ANDROID_10)) {
+ Api29Compatibility.createMessageChannel(context, notificationManager)
+ } else {
+ Api26Compatibility.createMessageChannel(context, notificationManager)
+ }
}
}
diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt
index eb981cdb1..b0269231e 100644
--- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt
+++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt
@@ -737,9 +737,11 @@ class NotificationsManager(private val context: Context) {
.setDeleteIntent(getMarkMessageAsReadPendingIntent(notifiable))
}
- if (Compatibility.canChatMessageChannelBubble(context)) {
- notificationBuilder.bubbleMetadata = bubble
+ if (!Compatibility.canChatMessageChannelBubble(context)) {
+ Log.w("[Notifications Manager] This conversation wasn't granted bubble permission yet")
}
+ // We still need to set the bubbleMetadata, otherwise user won't ever be able to enable bubbles!
+ notificationBuilder.bubbleMetadata = bubble
return notificationBuilder.build()
}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 3eb9950a5..12c740738 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -553,8 +553,8 @@
Afficher ou masquer le menu de sélection du périphérique audio
<Censuré>
Envoyer le son vers le haut-parleur
- Superposition des notifications push sur l\'écran
- L\'autorisation d\'afficher les notifications push en superposition est requise
+ Notification d\'appel flottante
+ Une autorisation explicite est requise
Marquer comme lu lorsque la notification est supprimée
Seront remplacés par les raccourcis de contacts si activés
Transport