reply to threaded push notification now sent to thread not to main timeline (#7805)
This commit is contained in:
parent
ed6b2e3846
commit
f4dca572c5
1
changelog.d/7475.bugfix
Normal file
1
changelog.d/7475.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
[Push Notifications, Threads] - quick reply to threaded notification now sent to thread except main timeline
|
@ -118,6 +118,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
|
|||||||
private fun handleSmartReply(intent: Intent, context: Context) {
|
private fun handleSmartReply(intent: Intent, context: Context) {
|
||||||
val message = getReplyMessage(intent)
|
val message = getReplyMessage(intent)
|
||||||
val roomId = intent.getStringExtra(KEY_ROOM_ID)
|
val roomId = intent.getStringExtra(KEY_ROOM_ID)
|
||||||
|
val threadId = intent.getStringExtra(KEY_THREAD_ID)
|
||||||
|
|
||||||
if (message.isNullOrBlank() || roomId.isNullOrBlank()) {
|
if (message.isNullOrBlank() || roomId.isNullOrBlank()) {
|
||||||
// ignore this event
|
// ignore this event
|
||||||
@ -126,13 +127,20 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
|
|||||||
}
|
}
|
||||||
activeSessionHolder.getActiveSession().let { session ->
|
activeSessionHolder.getActiveSession().let { session ->
|
||||||
session.getRoom(roomId)?.let { room ->
|
session.getRoom(roomId)?.let { room ->
|
||||||
sendMatrixEvent(message, session, room, context)
|
sendMatrixEvent(message, threadId, session, room, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendMatrixEvent(message: String, session: Session, room: Room, context: Context?) {
|
private fun sendMatrixEvent(message: String, threadId: String?, session: Session, room: Room, context: Context?) {
|
||||||
room.sendService().sendTextMessage(message)
|
if (threadId != null) {
|
||||||
|
room.relationService().replyInThread(
|
||||||
|
rootThreadEventId = threadId,
|
||||||
|
replyInThreadText = message,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
room.sendService().sendTextMessage(message)
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new event to be displayed in the notification drawer, right now
|
// Create a new event to be displayed in the notification drawer, right now
|
||||||
|
|
||||||
@ -148,7 +156,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
|
|||||||
body = message,
|
body = message,
|
||||||
imageUriString = null,
|
imageUriString = null,
|
||||||
roomId = room.roomId,
|
roomId = room.roomId,
|
||||||
threadId = null, // needs to be changed: https://github.com/vector-im/element-android/issues/7475
|
threadId = threadId,
|
||||||
roomName = room.roomSummary()?.displayName ?: room.roomId,
|
roomName = room.roomSummary()?.displayName ?: room.roomId,
|
||||||
roomIsDirect = room.roomSummary()?.isDirect == true,
|
roomIsDirect = room.roomSummary()?.isDirect == true,
|
||||||
outGoingMessage = true,
|
outGoingMessage = true,
|
||||||
@ -223,6 +231,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val KEY_ROOM_ID = "roomID"
|
const val KEY_ROOM_ID = "roomID"
|
||||||
|
const val KEY_THREAD_ID = "threadID"
|
||||||
const val KEY_TEXT_REPLY = "key_text_reply"
|
const val KEY_TEXT_REPLY = "key_text_reply"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -657,7 +657,7 @@ class NotificationUtils @Inject constructor(
|
|||||||
|
|
||||||
// Quick reply
|
// Quick reply
|
||||||
if (!roomInfo.hasSmartReplyError) {
|
if (!roomInfo.hasSmartReplyError) {
|
||||||
buildQuickReplyIntent(roomInfo.roomId, senderDisplayNameForReplyCompat)?.let { replyPendingIntent ->
|
buildQuickReplyIntent(roomInfo.roomId, threadId, senderDisplayNameForReplyCompat)?.let { replyPendingIntent ->
|
||||||
val remoteInput = RemoteInput.Builder(NotificationBroadcastReceiver.KEY_TEXT_REPLY)
|
val remoteInput = RemoteInput.Builder(NotificationBroadcastReceiver.KEY_TEXT_REPLY)
|
||||||
.setLabel(stringProvider.getString(R.string.action_quick_reply))
|
.setLabel(stringProvider.getString(R.string.action_quick_reply))
|
||||||
.build()
|
.build()
|
||||||
@ -892,13 +892,17 @@ class NotificationUtils @Inject constructor(
|
|||||||
However, for Android devices running Marshmallow and below (API level 23 and below),
|
However, for Android devices running Marshmallow and below (API level 23 and below),
|
||||||
it will be more appropriate to use an activity. Since you have to provide your own UI.
|
it will be more appropriate to use an activity. Since you have to provide your own UI.
|
||||||
*/
|
*/
|
||||||
private fun buildQuickReplyIntent(roomId: String, senderName: String?): PendingIntent? {
|
private fun buildQuickReplyIntent(roomId: String, threadId: String?, senderName: String?): PendingIntent? {
|
||||||
val intent: Intent
|
val intent: Intent
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
intent = Intent(context, NotificationBroadcastReceiver::class.java)
|
intent = Intent(context, NotificationBroadcastReceiver::class.java)
|
||||||
intent.action = actionIds.smartReply
|
intent.action = actionIds.smartReply
|
||||||
intent.data = createIgnoredUri(roomId)
|
intent.data = createIgnoredUri(roomId)
|
||||||
intent.putExtra(NotificationBroadcastReceiver.KEY_ROOM_ID, roomId)
|
intent.putExtra(NotificationBroadcastReceiver.KEY_ROOM_ID, roomId)
|
||||||
|
threadId?.let {
|
||||||
|
intent.putExtra(NotificationBroadcastReceiver.KEY_THREAD_ID, it)
|
||||||
|
}
|
||||||
|
|
||||||
return PendingIntent.getBroadcast(
|
return PendingIntent.getBroadcast(
|
||||||
context,
|
context,
|
||||||
clock.epochMillis().toInt(),
|
clock.epochMillis().toInt(),
|
||||||
|
Loading…
Reference in New Issue
Block a user