Simplify summary notifications (#2958)
This commit is contained in:
parent
d89004f174
commit
025d913b6e
10 changed files with 16 additions and 183 deletions
|
|
@ -57,7 +57,6 @@ interface NotificationDataFactory {
|
|||
invitationNotifications: List<OneShotNotification>,
|
||||
simpleNotifications: List<OneShotNotification>,
|
||||
fallbackNotifications: List<OneShotNotification>,
|
||||
useCompleteNotificationFormat: Boolean
|
||||
): SummaryNotification
|
||||
}
|
||||
|
||||
|
|
@ -149,7 +148,6 @@ class DefaultNotificationDataFactory @Inject constructor(
|
|||
invitationNotifications: List<OneShotNotification>,
|
||||
simpleNotifications: List<OneShotNotification>,
|
||||
fallbackNotifications: List<OneShotNotification>,
|
||||
useCompleteNotificationFormat: Boolean
|
||||
): SummaryNotification {
|
||||
return when {
|
||||
roomNotifications.isEmpty() && invitationNotifications.isEmpty() && simpleNotifications.isEmpty() -> SummaryNotification.Removed
|
||||
|
|
@ -160,7 +158,6 @@ class DefaultNotificationDataFactory @Inject constructor(
|
|||
invitationNotifications = invitationNotifications,
|
||||
simpleNotifications = simpleNotifications,
|
||||
fallbackNotifications = fallbackNotifications,
|
||||
useCompleteNotificationFormat = useCompleteNotificationFormat
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,6 @@ class NotificationRenderer @Inject constructor(
|
|||
invitationNotifications = invitationNotifications,
|
||||
simpleNotifications = simpleNotifications,
|
||||
fallbackNotifications = fallbackNotifications,
|
||||
useCompleteNotificationFormat = useCompleteNotificationFormat
|
||||
)
|
||||
|
||||
// Remove summary first to avoid briefly displaying it after dismissing the last notification
|
||||
|
|
|
|||
|
|
@ -17,12 +17,10 @@
|
|||
package io.element.android.libraries.push.impl.notifications
|
||||
|
||||
import android.app.Notification
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.push.impl.R
|
||||
import io.element.android.libraries.push.impl.notifications.debug.annotateForDebug
|
||||
import io.element.android.libraries.push.impl.notifications.factories.NotificationCreator
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
import javax.inject.Inject
|
||||
|
|
@ -34,7 +32,6 @@ interface SummaryGroupMessageCreator {
|
|||
invitationNotifications: List<OneShotNotification>,
|
||||
simpleNotifications: List<OneShotNotification>,
|
||||
fallbackNotifications: List<OneShotNotification>,
|
||||
useCompleteNotificationFormat: Boolean
|
||||
): Notification
|
||||
}
|
||||
|
||||
|
|
@ -58,21 +55,11 @@ class DefaultSummaryGroupMessageCreator @Inject constructor(
|
|||
invitationNotifications: List<OneShotNotification>,
|
||||
simpleNotifications: List<OneShotNotification>,
|
||||
fallbackNotifications: List<OneShotNotification>,
|
||||
useCompleteNotificationFormat: Boolean
|
||||
): Notification {
|
||||
val summaryInboxStyle = NotificationCompat.InboxStyle().also { style ->
|
||||
roomNotifications.forEach { style.addLine(it.summaryLine.annotateForDebug(40)) }
|
||||
invitationNotifications.forEach { style.addLine(it.summaryLine.annotateForDebug(41)) }
|
||||
simpleNotifications.forEach { style.addLine(it.summaryLine.annotateForDebug(42)) }
|
||||
fallbackNotifications.forEach { style.addLine(it.summaryLine) }
|
||||
}
|
||||
|
||||
val summaryIsNoisy = roomNotifications.any { it.shouldBing } ||
|
||||
invitationNotifications.any { it.isNoisy } ||
|
||||
simpleNotifications.any { it.isNoisy }
|
||||
|
||||
val messageCount = roomNotifications.fold(initial = 0) { acc, current -> acc + current.messageCount }
|
||||
|
||||
val lastMessageTimestamp = roomNotifications.lastOrNull()?.latestTimestamp
|
||||
?: invitationNotifications.lastOrNull()?.timestamp
|
||||
?: simpleNotifications.last().timestamp
|
||||
|
|
@ -80,109 +67,9 @@ class DefaultSummaryGroupMessageCreator @Inject constructor(
|
|||
// FIXME roomIdToEventMap.size is not correct, this is the number of rooms
|
||||
val nbEvents = roomNotifications.size + simpleNotifications.size
|
||||
val sumTitle = stringProvider.getQuantityString(R.plurals.notification_compat_summary_title, nbEvents, nbEvents)
|
||||
summaryInboxStyle.setBigContentTitle(sumTitle.annotateForDebug(43))
|
||||
// .setSummaryText(stringProvider.getQuantityString(R.plurals.notification_unread_notified_messages, nbEvents, nbEvents).annotateForDebug(44))
|
||||
// Use account name now, for multi-session
|
||||
.setSummaryText(currentUser.userId.value.annotateForDebug(44))
|
||||
return if (useCompleteNotificationFormat) {
|
||||
notificationCreator.createSummaryListNotification(
|
||||
currentUser,
|
||||
summaryInboxStyle,
|
||||
sumTitle,
|
||||
noisy = summaryIsNoisy,
|
||||
lastMessageTimestamp = lastMessageTimestamp
|
||||
)
|
||||
} else {
|
||||
processSimpleGroupSummary(
|
||||
currentUser,
|
||||
summaryIsNoisy,
|
||||
messageCount,
|
||||
simpleNotifications.size,
|
||||
invitationNotifications.size,
|
||||
roomNotifications.size,
|
||||
lastMessageTimestamp
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun processSimpleGroupSummary(
|
||||
currentUser: MatrixUser,
|
||||
summaryIsNoisy: Boolean,
|
||||
messageEventsCount: Int,
|
||||
simpleEventsCount: Int,
|
||||
invitationEventsCount: Int,
|
||||
roomCount: Int,
|
||||
lastMessageTimestamp: Long
|
||||
): Notification {
|
||||
// Add the simple events as message (?)
|
||||
val messageNotificationCount = messageEventsCount + simpleEventsCount
|
||||
|
||||
val privacyTitle = if (invitationEventsCount > 0) {
|
||||
val invitationsStr = stringProvider.getQuantityString(
|
||||
R.plurals.notification_invitations,
|
||||
invitationEventsCount,
|
||||
invitationEventsCount
|
||||
)
|
||||
if (messageNotificationCount > 0) {
|
||||
// Invitation and message
|
||||
val messageStr = stringProvider.getQuantityString(
|
||||
R.plurals.notification_new_messages_for_room,
|
||||
messageNotificationCount,
|
||||
messageNotificationCount
|
||||
)
|
||||
if (roomCount > 1) {
|
||||
// In several rooms
|
||||
val roomStr = stringProvider.getQuantityString(
|
||||
R.plurals.notification_unread_notified_messages_in_room_rooms,
|
||||
roomCount,
|
||||
roomCount
|
||||
)
|
||||
stringProvider.getString(
|
||||
R.string.notification_unread_notified_messages_in_room_and_invitation,
|
||||
messageStr,
|
||||
roomStr,
|
||||
invitationsStr
|
||||
)
|
||||
} else {
|
||||
// In one room
|
||||
stringProvider.getString(
|
||||
R.string.notification_unread_notified_messages_and_invitation,
|
||||
messageStr,
|
||||
invitationsStr
|
||||
)
|
||||
}
|
||||
} else {
|
||||
// Only invitation
|
||||
invitationsStr
|
||||
}
|
||||
} else {
|
||||
// No invitation, only messages
|
||||
val messageStr = stringProvider.getQuantityString(
|
||||
R.plurals.notification_new_messages_for_room,
|
||||
messageNotificationCount,
|
||||
messageNotificationCount
|
||||
)
|
||||
if (roomCount > 1) {
|
||||
// In several rooms
|
||||
val roomStr = stringProvider.getQuantityString(
|
||||
R.plurals.notification_unread_notified_messages_in_room_rooms,
|
||||
roomCount,
|
||||
roomCount
|
||||
)
|
||||
stringProvider.getString(
|
||||
R.string.notification_unread_notified_messages_in_room,
|
||||
messageStr,
|
||||
roomStr
|
||||
)
|
||||
} else {
|
||||
// In one room
|
||||
messageStr
|
||||
}
|
||||
}
|
||||
return notificationCreator.createSummaryListNotification(
|
||||
currentUser = currentUser,
|
||||
style = null,
|
||||
compatSummary = privacyTitle,
|
||||
currentUser,
|
||||
sumTitle,
|
||||
noisy = summaryIsNoisy,
|
||||
lastMessageTimestamp = lastMessageTimestamp
|
||||
)
|
||||
|
|
|
|||
|
|
@ -85,7 +85,6 @@ interface NotificationCreator {
|
|||
*/
|
||||
fun createSummaryListNotification(
|
||||
currentUser: MatrixUser,
|
||||
style: NotificationCompat.InboxStyle?,
|
||||
compatSummary: String,
|
||||
noisy: Boolean,
|
||||
lastMessageTimestamp: Long
|
||||
|
|
@ -331,7 +330,6 @@ class DefaultNotificationCreator @Inject constructor(
|
|||
*/
|
||||
override fun createSummaryListNotification(
|
||||
currentUser: MatrixUser,
|
||||
style: NotificationCompat.InboxStyle?,
|
||||
compatSummary: String,
|
||||
noisy: Boolean,
|
||||
lastMessageTimestamp: Long
|
||||
|
|
@ -343,12 +341,9 @@ class DefaultNotificationCreator @Inject constructor(
|
|||
.setOnlyAlertOnce(true)
|
||||
// used in compat < N, after summary is built based on child notifications
|
||||
.setWhen(lastMessageTimestamp)
|
||||
.setStyle(style)
|
||||
.setContentTitle(currentUser.userId.value.annotateForDebug(9))
|
||||
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
|
||||
.setSmallIcon(smallIcon)
|
||||
// set content text to support devices running API level < 24
|
||||
.setContentText(compatSummary.annotateForDebug(10))
|
||||
.setGroup(currentUser.userId.value)
|
||||
// set this notification as the summary for the group
|
||||
.setGroupSummary(true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue