diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatRoomData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatRoomData.kt index 96d63b7f9..233ae0985 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatRoomData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatRoomData.kt @@ -28,7 +28,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.contact.ContactDataInterface import org.linphone.contact.ContactsUpdatedListenerStub @@ -273,6 +272,6 @@ class ChatRoomData(val chatRoom: ChatRoom) : ContactDataInterface { } private fun areNotificationsMuted(): Boolean { - return corePreferences.chatRoomMuted(id) + return chatRoom.muted } } diff --git a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt index 47887665c..5e24b7468 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt @@ -285,13 +285,11 @@ class ChatRoomViewModel(val chatRoom: ChatRoom) : ViewModel(), ContactDataInterf } fun areNotificationsMuted(): Boolean { - val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) - return corePreferences.chatRoomMuted(id) + return chatRoom.muted } fun muteNotifications(mute: Boolean) { - val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) - corePreferences.muteChatRoom(id, mute) + chatRoom.muted = mute } fun getRemoteAddress(): Address? { diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 00d1fc259..c47ba2235 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -481,6 +481,35 @@ class CoreContext( computeUserAgent() + val fiveTwoMigrationRequired = core.config.getBool("app", "migration_5.2_required", true) + if (fiveTwoMigrationRequired) { + Log.i( + "[Context] Starting migration of muted chat room from shared preferences to our SDK" + ) + val sharedPreferences: SharedPreferences = context.getSharedPreferences( + "notifications", + Context.MODE_PRIVATE + ) + val editor = sharedPreferences.edit() + + for (chatRoom in core.chatRooms) { + val id = LinphoneUtils.getChatRoomId(chatRoom) + if (sharedPreferences.getBoolean(id, false)) { + Log.i("[Context] Migrating muted flag for chat room [$id]") + chatRoom.muted = true + editor.remove(id) + } + } + + editor.apply() + core.config.setBool( + "app", + "migration_5.2_required", + false + ) + Log.i("[Context] Migration of muted chat room finished") + } + val fiveOneMigrationRequired = core.config.getBool("app", "migration_5.1_required", true) if (fiveOneMigrationRequired) { core.config.setBool( diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 9a19daf03..03a50db5c 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -91,24 +91,6 @@ class CorePreferences constructor(private val context: Context) { // logcatLogsOutput = false } - fun chatRoomMuted(id: String): Boolean { - val sharedPreferences: SharedPreferences = coreContext.context.getSharedPreferences( - "notifications", - Context.MODE_PRIVATE - ) - return sharedPreferences.getBoolean(id, false) - } - - fun muteChatRoom(id: String, mute: Boolean) { - val sharedPreferences: SharedPreferences = coreContext.context.getSharedPreferences( - "notifications", - Context.MODE_PRIVATE - ) - val editor = sharedPreferences.edit() - editor.putBoolean(id, mute) - editor.apply() - } - /* App settings */ var debugLogs: Boolean diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt index bdd1b30e7..c25bfa158 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt @@ -161,9 +161,8 @@ class NotificationsManager(private val context: Context) { return } - val id = LinphoneUtils.getChatRoomId(room.localAddress, room.peerAddress) - val mute = corePreferences.chatRoomMuted(id) - if (mute) { + if (room.muted) { + val id = LinphoneUtils.getChatRoomId(room.localAddress, room.peerAddress) Log.i("[Notifications Manager] Chat room $id has been muted") return } @@ -179,14 +178,6 @@ class NotificationsManager(private val context: Context) { } } - var allOutgoing = true - for (message in messages) { - if (!message.isOutgoing) { - allOutgoing = false - break - } - } - val notifiable = getNotifiableForRoom(room) val updated = updateChatNotifiableWithMessages(notifiable, room, messages) if (!updated) { @@ -205,6 +196,18 @@ class NotificationsManager(private val context: Context) { } } + override fun onReactionRemoved( + core: Core, + chatRoom: ChatRoom, + message: ChatMessage, + address: Address + ) { + Log.i( + "[Notifications Manager] [${address.asStringUriOnly()}] removed it's previously sent reaction for chat message [$message]" + // TODO: remove notification if any + ) + } + override fun onNewMessageReaction( core: Core, chatRoom: ChatRoom, @@ -234,9 +237,8 @@ class NotificationsManager(private val context: Context) { return } - val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) - val mute = corePreferences.chatRoomMuted(id) - if (mute) { + if (chatRoom.muted) { + val id = LinphoneUtils.getChatRoomId(chatRoom.localAddress, chatRoom.peerAddress) Log.i("[Notifications Manager] Chat room $id has been muted") return }