Merge pull request #3916 from element-hq/feature/bma/notificationActions

Enable all notification actions: quick reply, accept/decline invite, mark as read from notification.
This commit is contained in:
Benoit Marty 2024-11-26 18:01:37 +01:00 committed by GitHub
commit 8d26af5b26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 58 additions and 22 deletions

View file

@ -230,10 +230,8 @@ class DefaultNotificationCreator @Inject constructor(
.setSmallIcon(smallIcon)
.setColor(accentColor)
.apply {
if (NotificationConfig.SUPPORT_JOIN_DECLINE_INVITE) {
addAction(rejectInvitationActionFactory.create(inviteNotifiableEvent))
addAction(acceptInvitationActionFactory.create(inviteNotifiableEvent))
}
addAction(rejectInvitationActionFactory.create(inviteNotifiableEvent))
addAction(acceptInvitationActionFactory.create(inviteNotifiableEvent))
// Build the pending intent for when the notification is clicked
setContentIntent(pendingIntentFactory.createOpenRoomPendingIntent(inviteNotifiableEvent.sessionId, inviteNotifiableEvent.roomId))

View file

@ -11,12 +11,14 @@ import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import io.element.android.appconfig.NotificationConfig
import io.element.android.libraries.androidutils.uri.createIgnoredUri
import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.push.impl.R
import io.element.android.libraries.push.impl.notifications.NotificationActionIds
import io.element.android.libraries.push.impl.notifications.NotificationBroadcastReceiver
import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent
import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.services.toolbox.api.strings.StringProvider
import io.element.android.services.toolbox.api.systemclock.SystemClock
import javax.inject.Inject
@ -27,8 +29,8 @@ class AcceptInvitationActionFactory @Inject constructor(
private val stringProvider: StringProvider,
private val clock: SystemClock,
) {
// offer to type a quick accept button
fun create(inviteNotifiableEvent: InviteNotifiableEvent): NotificationCompat.Action {
fun create(inviteNotifiableEvent: InviteNotifiableEvent): NotificationCompat.Action? {
if (!NotificationConfig.SHOW_ACCEPT_AND_DECLINE_INVITE_ACTIONS) return null
val sessionId = inviteNotifiableEvent.sessionId.value
val roomId = inviteNotifiableEvent.roomId.value
val intent = Intent(context, NotificationBroadcastReceiver::class.java)
@ -44,7 +46,7 @@ class AcceptInvitationActionFactory @Inject constructor(
)
return NotificationCompat.Action.Builder(
R.drawable.vector_notification_accept_invitation,
stringProvider.getString(R.string.notification_invitation_action_join),
stringProvider.getString(CommonStrings.action_accept),
pendingIntent
).build()
}

View file

@ -29,7 +29,7 @@ class MarkAsReadActionFactory @Inject constructor(
private val clock: SystemClock,
) {
fun create(roomInfo: RoomEventGroupInfo): NotificationCompat.Action? {
if (!NotificationConfig.SUPPORT_MARK_AS_READ_ACTION) return null
if (!NotificationConfig.SHOW_MARK_AS_READ_ACTION) return null
val sessionId = roomInfo.sessionId.value
val roomId = roomInfo.roomId.value
val intent = Intent(context, NotificationBroadcastReceiver::class.java)

View file

@ -34,7 +34,7 @@ class QuickReplyActionFactory @Inject constructor(
private val clock: SystemClock,
) {
fun create(roomInfo: RoomEventGroupInfo, threadId: ThreadId?): NotificationCompat.Action? {
if (!NotificationConfig.SUPPORT_QUICK_REPLY_ACTION) return null
if (!NotificationConfig.SHOW_QUICK_REPLY_ACTION) return null
val sessionId = roomInfo.sessionId
val roomId = roomInfo.roomId
val replyPendingIntent = buildQuickReplyIntent(sessionId, roomId, threadId)

View file

@ -11,12 +11,14 @@ import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import io.element.android.appconfig.NotificationConfig
import io.element.android.libraries.androidutils.uri.createIgnoredUri
import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.push.impl.R
import io.element.android.libraries.push.impl.notifications.NotificationActionIds
import io.element.android.libraries.push.impl.notifications.NotificationBroadcastReceiver
import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent
import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.services.toolbox.api.strings.StringProvider
import io.element.android.services.toolbox.api.systemclock.SystemClock
import javax.inject.Inject
@ -28,6 +30,7 @@ class RejectInvitationActionFactory @Inject constructor(
private val clock: SystemClock,
) {
fun create(inviteNotifiableEvent: InviteNotifiableEvent): NotificationCompat.Action? {
if (!NotificationConfig.SHOW_ACCEPT_AND_DECLINE_INVITE_ACTIONS) return null
val sessionId = inviteNotifiableEvent.sessionId.value
val roomId = inviteNotifiableEvent.roomId.value
val intent = Intent(context, NotificationBroadcastReceiver::class.java)
@ -41,10 +44,9 @@ class RejectInvitationActionFactory @Inject constructor(
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
return NotificationCompat.Action.Builder(
R.drawable.vector_notification_reject_invitation,
stringProvider.getString(R.string.notification_invitation_action_reject),
stringProvider.getString(CommonStrings.action_reject),
pendingIntent
).build()
}