diff --git a/changelog.d/3243.bugfix b/changelog.d/3243.bugfix new file mode 100644 index 0000000000..8c912a5c13 --- /dev/null +++ b/changelog.d/3243.bugfix @@ -0,0 +1 @@ +Notifications - Fix missing sound on notifications. \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt index 37ed1e654a..fea4716b39 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt @@ -100,13 +100,14 @@ class NotificationDrawerManager @Inject constructor(private val context: Context if (existing != null) { if (existing.isPushGatewayEvent) { // Use the event coming from the event stream as it may contains more info than - // the fcm one (like type/content/clear text) + // the fcm one (like type/content/clear text) (e.g when an encrypted message from + // FCM should be update with clear text after a sync) // In this case the message has already been notified, and might have done some noise // So we want the notification to be updated even if it has already been displayed - // But it should make no noise (e.g when an encrypted message from FCM should be - // update with clear text after a sync) + // Use setOnlyAlertOnce to ensure update notification does not interfere with sound + // from first notify invocation as outlined in: + // https://developer.android.com/training/notify-user/build-notification#Updating notifiableEvent.hasBeenDisplayed = false - notifiableEvent.noisy = false eventList.remove(existing) eventList.add(notifiableEvent) } else { diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt index cf13150e59..33f419857b 100755 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt @@ -540,6 +540,7 @@ class NotificationUtils @Inject constructor(private val context: Context, val channelID = if (roomInfo.shouldBing) NOISY_NOTIFICATION_CHANNEL_ID else SILENT_NOTIFICATION_CHANNEL_ID return NotificationCompat.Builder(context, channelID) + .setOnlyAlertOnce(true) .setWhen(lastMessageTimestamp) // MESSAGING_STYLE sets title and content for API 16 and above devices. .setStyle(messageStyle) @@ -641,6 +642,7 @@ class NotificationUtils @Inject constructor(private val context: Context, val channelID = if (inviteNotifiableEvent.noisy) NOISY_NOTIFICATION_CHANNEL_ID else SILENT_NOTIFICATION_CHANNEL_ID return NotificationCompat.Builder(context, channelID) + .setOnlyAlertOnce(true) .setContentTitle(stringProvider.getString(R.string.app_name)) .setContentText(inviteNotifiableEvent.description) .setGroup(stringProvider.getString(R.string.app_name)) @@ -704,6 +706,7 @@ class NotificationUtils @Inject constructor(private val context: Context, val channelID = if (simpleNotifiableEvent.noisy) NOISY_NOTIFICATION_CHANNEL_ID else SILENT_NOTIFICATION_CHANNEL_ID return NotificationCompat.Builder(context, channelID) + .setOnlyAlertOnce(true) .setContentTitle(stringProvider.getString(R.string.app_name)) .setContentText(simpleNotifiableEvent.description) .setGroup(stringProvider.getString(R.string.app_name))