diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt index dbe8710d9..d7ecfae80 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt @@ -40,7 +40,10 @@ import org.linphone.utils.LinphoneUtils import org.linphone.utils.ShortcutUtils import org.linphone.utils.TimestampUtils -class ConversationModel @WorkerThread constructor(val chatRoom: ChatRoom) { +class ConversationModel @WorkerThread constructor( + val chatRoom: ChatRoom, + val isDisabledBecauseNotSecured: Boolean = false +) { companion object { private const val TAG = "[Conversation Model]" } 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 db5b0d83c..4ba3b8455 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 @@ -41,6 +41,7 @@ import org.linphone.core.tools.Log import org.linphone.ui.main.chat.model.EventLogModel import org.linphone.ui.main.chat.model.MessageModel import org.linphone.ui.main.contacts.model.ContactAvatarModel +import org.linphone.ui.main.model.isInSecureMode import org.linphone.utils.AppUtils import org.linphone.utils.Event import org.linphone.utils.ImageUtils @@ -71,6 +72,8 @@ class ConversationViewModel @UiThread constructor() : ViewModel() { val isReadOnly = MutableLiveData() + val isDisabledBecauseNotSecured = MutableLiveData() + val composingLabel = MutableLiveData() val searchBarVisible = MutableLiveData() @@ -314,6 +317,7 @@ class ConversationViewModel @UiThread constructor() : ViewModel() { init { searchBarVisible.value = false isUserScrollingUp.value = false + isDisabledBecauseNotSecured.value = false } override fun onCleared() { @@ -561,6 +565,16 @@ class ConversationViewModel @UiThread constructor() : ViewModel() { Log.w("$TAG Conversation with subject [${chatRoom.subject}] is read only!") } + if (!chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt())) { + val account = LinphoneUtils.getDefaultAccount() + if (account?.isInSecureMode() == true) { + Log.w( + "$TAG Conversation with subject [${chatRoom.subject}] has been disabled because it isn't encrypted and default account is in secure mode" + ) + isDisabledBecauseNotSecured.postValue(true) + } + } + subject.postValue(chatRoom.subject) val friends = arrayListOf() diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt index 730883e9d..63d1fd5e7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationsListViewModel.kt @@ -142,18 +142,11 @@ class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewMod val account = LinphoneUtils.getDefaultAccount() val chatRooms = account?.chatRooms ?: coreContext.core.chatRooms for (chatRoom in chatRooms) { - // TODO: remove when SDK will do it automatically - if (account?.isInSecureMode() == true) { - if (!chatRoom.hasCapability(Capabilities.Encrypted.toInt()) && chatRoom.unreadMessagesCount == 0) { // TODO: remove message count check later - Log.d( - "$TAG Skipping conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] as it is not E2E encrypted and default account requires it" - ) - continue - } - } - + val disabledBecauseNotSecured = account?.isInSecureMode() == true && !chatRoom.hasCapability( + Capabilities.Encrypted.toInt() + ) if (filter.isEmpty()) { - val model = ConversationModel(chatRoom) + val model = ConversationModel(chatRoom, disabledBecauseNotSecured) list.add(model) count += 1 } else { @@ -175,7 +168,7 @@ class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewMod chatRoom.peerAddress.asStringUriOnly().contains(filter, ignoreCase = true) || chatRoom.subject.orEmpty().contains(filter, ignoreCase = true) ) { - val model = ConversationModel(chatRoom) + val model = ConversationModel(chatRoom, disabledBecauseNotSecured) list.add(model) count += 1 } diff --git a/app/src/main/res/layout/chat_conversation_fragment.xml b/app/src/main/res/layout/chat_conversation_fragment.xml index 024df5f93..cbed14686 100644 --- a/app/src/main/res/layout/chat_conversation_fragment.xml +++ b/app/src/main/res/layout/chat_conversation_fragment.xml @@ -251,15 +251,34 @@ android:textSize="12sp" android:textColor="?attr/color_main2_400" android:visibility="@{viewModel.composingLabel.length() == 0 ? View.GONE : View.VISIBLE}" - app:layout_constraintBottom_toTopOf="@id/send_area" + app:layout_constraintBottom_toTopOf="@id/warning_disabled_not_secured" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + + + app:constraint_referenced_ids="warning_disabled_not_secured, notifications_count, date_time, ephemeral, muted, last_sent_message_status" /> + + Remove admin rights See contact profile Add to contacts + This conversation was disabled because it is not encrypted! You have joined the group You have left the group