android, desktop: notifications improvement (missed call, hidden user) (#4389)

* android, desktop: notifications improvement (missed call, hidden user)

* change

* change
This commit is contained in:
Stanislav Dmitrenko
2024-07-03 00:19:43 +07:00
committed by GitHub
parent 85af368371
commit ecff3c6ee5
9 changed files with 52 additions and 10 deletions
@@ -16,7 +16,7 @@ import java.io.File
import javax.imageio.ImageIO
object NtfManager {
private val prevNtfs = arrayListOf<Pair<ChatId, Slice>>()
private val prevNtfs = arrayListOf<Pair<Pair<Long, ChatId>, Slice>>()
private val prevNtfsMutex: Mutex = Mutex()
fun notifyCallInvitation(invitation: RcvCallInvitation): Boolean {
@@ -45,14 +45,14 @@ object NtfManager {
generalGetString(MR.strings.accept) to { ntfManager.acceptCallAction(invitation.contact.id) },
generalGetString(MR.strings.reject) to { ChatModel.callManager.endCall(invitation = invitation) }
)
displayNotificationViaLib(contactId, title, text, prepareIconPath(largeIcon), actions) {
displayNotificationViaLib(invitation.user.userId, contactId, title, text, prepareIconPath(largeIcon), actions) {
ntfManager.openChatAction(invitation.user.userId, contactId)
}
return true
}
fun showMessage(title: String, text: String) {
displayNotificationViaLib("MESSAGE", title, text, null, emptyList()) {}
displayNotificationViaLib(-1, "MESSAGE", title, text, null, emptyList()) {}
}
fun hasNotificationsForChat(chatId: ChatId) = false//prevNtfs.any { it.first == chatId }
@@ -60,7 +60,7 @@ object NtfManager {
fun cancelNotificationsForChat(chatId: ChatId) {
withBGApi {
prevNtfsMutex.withLock {
val ntf = prevNtfs.firstOrNull { it.first == chatId }
val ntf = prevNtfs.firstOrNull { (userChat) -> userChat.second == chatId }
if (ntf != null) {
prevNtfs.remove(ntf)
/*try {
@@ -74,6 +74,16 @@ object NtfManager {
}
}
fun cancelNotificationsForUser(userId: Long) {
withBGApi {
prevNtfsMutex.withLock {
prevNtfs.filter { (userChat) -> userChat.first == userId }.forEach {
prevNtfs.remove(it)
}
}
}
}
fun cancelAllNotifications() {
// prevNtfs.forEach { try { it.second.close() } catch (e: Exception) { println("Failed to close notification: ${e.stackTraceToString()}") } }
withBGApi {
@@ -95,12 +105,13 @@ object NtfManager {
else -> base64ToBitmap(image)
}
displayNotificationViaLib(chatId, title, content, prepareIconPath(largeIcon), actions.map { it.first.name to it.second }) {
displayNotificationViaLib(user.userId, chatId, title, content, prepareIconPath(largeIcon), actions.map { it.first.name to it.second }) {
ntfManager.openChatAction(user.userId, chatId)
}
}
private fun displayNotificationViaLib(
userId: Long,
chatId: String,
title: String,
text: String,
@@ -123,7 +134,7 @@ object NtfManager {
try {
withBGApi {
prevNtfsMutex.withLock {
prevNtfs.add(chatId to builder.toast())
prevNtfs.add(Pair(userId, chatId) to builder.toast())
}
}
} catch (e: Throwable) {
@@ -18,6 +18,7 @@ fun initApp() {
override fun notifyCallInvitation(invitation: RcvCallInvitation): Boolean = chat.simplex.common.model.NtfManager.notifyCallInvitation(invitation)
override fun hasNotificationsForChat(chatId: String): Boolean = chat.simplex.common.model.NtfManager.hasNotificationsForChat(chatId)
override fun cancelNotificationsForChat(chatId: String) = chat.simplex.common.model.NtfManager.cancelNotificationsForChat(chatId)
override fun cancelNotificationsForUser(userId: Long) = chat.simplex.common.model.NtfManager.cancelNotificationsForUser(userId)
override fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = chat.simplex.common.model.NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions)
override fun androidCreateNtfChannelsMaybeShowAlert() {}
override fun cancelCallNotification() {}