diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index 9a3c856a2..a45b75d18 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -56,7 +56,6 @@ import org.linphone.ui.call.model.CallMediaEncryptionModel import org.linphone.ui.call.model.CallStatsModel import org.linphone.ui.main.contacts.model.ContactAvatarModel import org.linphone.ui.main.history.model.NumpadModel -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory import org.linphone.utils.AppUtils import org.linphone.utils.AudioUtils import org.linphone.utils.Event @@ -1311,9 +1310,7 @@ class CurrentCallViewModel @UiThread constructor() : GenericViewModel() { val localAddress = call.callLog.localAddress val remoteAddress = call.remoteAddress val core = call.core - val account = core.accountList.find { - it.params.identityAddress?.weakEqual(localAddress) == true - } ?: LinphoneUtils.getDefaultAccount() ?: return null + val account = LinphoneUtils.getAccountForAddress(localAddress) ?: LinphoneUtils.getDefaultAccount() ?: return null val params: ChatRoomParams = core.createDefaultChatRoomParams() params.isGroupEnabled = false @@ -1321,13 +1318,13 @@ class CurrentCallViewModel @UiThread constructor() : GenericViewModel() { params.ephemeralLifetime = 0 // Make sure ephemeral is disabled by default val sameDomain = remoteAddress.domain == corePreferences.defaultDomain && remoteAddress.domain == account.params.domain - if (isEndToEndEncryptionMandatory() && sameDomain) { + if (account.params.instantMessagingEncryptionMandatory && sameDomain) { Log.i( "$TAG Account is in secure mode & domain matches, requesting E2E encryption" ) params.backend = ChatRoom.Backend.FlexisipChat params.isEncryptionEnabled = true - } else if (!isEndToEndEncryptionMandatory()) { + } else if (!account.params.instantMessagingEncryptionMandatory) { if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) { Log.i( "$TAG Account is in interop mode but LIME is available, requesting E2E encryption" diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt index 71d193daf..6faeeec74 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt @@ -55,7 +55,6 @@ import org.linphone.core.Player import org.linphone.core.PlayerListener import org.linphone.core.tools.Log import org.linphone.ui.main.contacts.model.ContactAvatarModel -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory import org.linphone.utils.AppUtils import org.linphone.utils.AudioUtils import org.linphone.utils.Event @@ -103,7 +102,11 @@ class MessageModel @WorkerThread constructor( val time = TimestampUtils.toString(timestamp) val chatRoomIsReadOnly = chatMessage.chatRoom.isReadOnly || - (!chatMessage.chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt()) && isEndToEndEncryptionMandatory()) + ( + !chatMessage.chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt()) && LinphoneUtils.getAccountForAddress( + chatMessage.chatRoom.localAddress + )?.params?.instantMessagingEncryptionMandatory == true + ) val avatarModel = MutableLiveData() diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationForwardMessageViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationForwardMessageViewModel.kt index 5169f778a..7e10c4a72 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationForwardMessageViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationForwardMessageViewModel.kt @@ -209,11 +209,11 @@ class ConversationForwardMessageViewModel @UiThread constructor() : AddressSelec params.ephemeralLifetime = 0 // Make sure ephemeral is disabled by default val sameDomain = remote.domain == corePreferences.defaultDomain && remote.domain == account.params.domain - if (isEndToEndEncryptionMandatory() && sameDomain) { + if (account.params.instantMessagingEncryptionMandatory && sameDomain) { Log.i("$TAG Account is in secure mode & domain matches, creating a E2E conversation") params.backend = ChatRoom.Backend.FlexisipChat params.isEncryptionEnabled = true - } else if (!isEndToEndEncryptionMandatory()) { + } else if (!account.params.instantMessagingEncryptionMandatory) { if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) { Log.i( "$TAG Account is in interop mode but LIME is available, creating a E2E conversation" diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index 1451839dc..0cbab24cf 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -49,7 +49,6 @@ import org.linphone.ui.main.chat.model.EventLogModel import org.linphone.ui.main.chat.model.FileModel import org.linphone.ui.main.chat.model.MessageModel import org.linphone.ui.main.contacts.model.ContactAvatarModel -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory import org.linphone.utils.AppUtils import org.linphone.utils.Event import org.linphone.utils.FileUtils @@ -548,7 +547,7 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo @WorkerThread fun checkIfConversationShouldBeDisabledForSecurityReasons() { if (!chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt())) { - if (isEndToEndEncryptionMandatory()) { + if (LinphoneUtils.getAccountForAddress(chatRoom.localAddress)?.params?.instantMessagingEncryptionMandatory == true) { Log.w( "$TAG Conversation with subject [${chatRoom.subject}] has been disabled because it isn't encrypted and default account is in secure mode" ) diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt index 19b7a974b..21b6741d4 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt @@ -31,7 +31,6 @@ import org.linphone.core.ChatRoom import org.linphone.core.ChatRoomListenerStub import org.linphone.core.ChatRoomParams import org.linphone.core.tools.Log -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory import org.linphone.ui.main.viewmodel.AddressSelectionViewModel import org.linphone.utils.AppUtils import org.linphone.utils.Event @@ -193,11 +192,11 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM params.ephemeralLifetime = 0 // Make sure ephemeral is disabled by default val sameDomain = remote.domain == corePreferences.defaultDomain && remote.domain == account.params.domain - if (isEndToEndEncryptionMandatory() && sameDomain) { + if (account.params.instantMessagingEncryptionMandatory && sameDomain) { Log.i("$TAG Account is in secure mode & domain matches, creating a E2E conversation") params.backend = ChatRoom.Backend.FlexisipChat params.isEncryptionEnabled = true - } else if (!isEndToEndEncryptionMandatory()) { + } else if (!account.params.instantMessagingEncryptionMandatory) { if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) { Log.i( "$TAG Account is in interop mode but LIME is available, creating a E2E conversation" diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index a611f079c..8693ef4ad 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -555,13 +555,13 @@ class ContactViewModel @UiThread constructor() : GenericViewModel() { params.ephemeralLifetime = 0 // Make sure ephemeral is disabled by default val sameDomain = remote.domain == corePreferences.defaultDomain && remote.domain == account.params.domain - if (isEndToEndEncryptionMandatory() && sameDomain) { + if (account.params.instantMessagingEncryptionMandatory && sameDomain) { Log.i( "$TAG Account is in secure mode & domain matches, creating a E2E conversation" ) params.backend = ChatRoom.Backend.FlexisipChat params.isEncryptionEnabled = true - } else if (!isEndToEndEncryptionMandatory()) { + } else if (!account.params.instantMessagingEncryptionMandatory) { if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) { Log.i( "$TAG Account is in interop mode but LIME is available, creating a E2E conversation" diff --git a/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt b/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt index d8ab43027..b9b1b516b 100644 --- a/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt @@ -33,7 +33,6 @@ import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.ui.main.history.model.CallLogHistoryModel import org.linphone.ui.main.history.model.CallLogModel -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory import org.linphone.utils.AppUtils import org.linphone.utils.Event import org.linphone.utils.LinphoneUtils @@ -189,13 +188,13 @@ class HistoryViewModel @UiThread constructor() : GenericViewModel() { params.ephemeralLifetime = 0 // Make sure ephemeral is disabled by default val sameDomain = remote.domain == corePreferences.defaultDomain && remote.domain == account.params.domain - if (isEndToEndEncryptionMandatory() && sameDomain) { + if (account.params.instantMessagingEncryptionMandatory && sameDomain) { Log.i( "$TAG Account is in secure mode & domain matches, creating a E2E conversation" ) params.backend = ChatRoom.Backend.FlexisipChat params.isEncryptionEnabled = true - } else if (!isEndToEndEncryptionMandatory()) { + } else if (!account.params.instantMessagingEncryptionMandatory) { if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) { Log.i( "$TAG Account is in interop mode but LIME is available, creating a E2E conversation" diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 9e1fd4786..d066f03fb 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -55,6 +55,13 @@ class LinphoneUtils { return coreContext.core.defaultAccount ?: coreContext.core.accountList.firstOrNull() } + @WorkerThread + fun getAccountForAddress(address: Address): Account? { + return coreContext.core.accountList.find { + it.params.identityAddress?.weakEqual(address) == true + } + } + @WorkerThread fun applyInternationalPrefix(account: Account? = null): Boolean { return account?.params?.useInternationalPrefixForCallsAndChats diff --git a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt index 7e223f69f..983a5b3c3 100644 --- a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt +++ b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt @@ -37,7 +37,6 @@ import org.linphone.core.ChatRoom import org.linphone.core.tools.Log import org.linphone.mediastream.Version import org.linphone.ui.main.MainActivity -import org.linphone.ui.main.model.isEndToEndEncryptionMandatory class ShortcutUtils { companion object { @@ -66,7 +65,7 @@ class ShortcutUtils { var count = 0 for (chatRoom in defaultAccount.chatRooms) { - if (isEndToEndEncryptionMandatory() && !chatRoom.currentParams.isEncryptionEnabled) { + if (defaultAccount.params.instantMessagingEncryptionMandatory && !chatRoom.currentParams.isEncryptionEnabled) { Log.w( "$TAG Account is in secure mode, skipping not encrypted conversation [${LinphoneUtils.getChatRoomId( chatRoom