diff --git a/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt b/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt index bdf282863..f53551ec7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt @@ -35,7 +35,7 @@ import org.linphone.core.tools.Log import org.linphone.databinding.ChatBubbleIncomingBinding import org.linphone.databinding.ChatBubbleOutgoingBinding import org.linphone.databinding.ChatConversationEventBinding -import org.linphone.databinding.ChatConversationSecuredFirstEventBinding +import org.linphone.databinding.ChatConversationE2eEncryptedFirstEventBinding import org.linphone.ui.main.chat.model.EventLogModel import org.linphone.ui.main.chat.model.EventModel import org.linphone.ui.main.chat.model.MessageModel @@ -70,13 +70,19 @@ class ConversationEventAdapter : MutableLiveData>() } + private var isConversationSecured: Boolean = false + + fun setIsConversationSecured(secured: Boolean) { + isConversationSecured = secured + } + override fun displayHeaderForPosition(position: Int): Boolean { // We only want to display it at top return position == 0 } override fun getHeaderViewForPosition(context: Context, position: Int): View { - val binding = ChatConversationSecuredFirstEventBinding.inflate(LayoutInflater.from(context)) + val binding = ChatConversationE2eEncryptedFirstEventBinding.inflate(LayoutInflater.from(context)) return binding.root } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationDialogFragment.kt index 1daf8b3fd..b56cb83cf 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationDialogFragment.kt @@ -29,7 +29,7 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.databinding.ChatLongPressMenuBinding +import org.linphone.databinding.ChatConversationLongPressMenuBinding @UiThread class ConversationDialogFragment( @@ -71,7 +71,7 @@ class ConversationDialogFragment( container: ViewGroup?, savedInstanceState: Bundle? ): View { - val view = ChatLongPressMenuBinding.inflate(layoutInflater) + val view = ChatConversationLongPressMenuBinding.inflate(layoutInflater) view.isMuted = isMuted view.isGroup = isGroup view.isReadOnly = isReadOnly diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index dd44bcd17..1a3eaf118 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -314,7 +314,9 @@ open class ConversationFragment : SlidingPaneChildFragment() { if (e.action == MotionEvent.ACTION_UP) { if ((rv.layoutManager as LinearLayoutManager).findFirstCompletelyVisibleItemPosition() == 0) { if (e.y >= 0 && e.y <= headerItemDecoration.getDecorationHeight(0)) { - showEndToEndEncryptionDetailsBottomSheet() + if (viewModel.isEndToEndEncrypted.value == true) { + showEndToEndEncryptionDetailsBottomSheet() + } return true } } @@ -504,6 +506,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { } } else { sendMessageViewModel.configureChatRoom(viewModel.chatRoom) + adapter.setIsConversationSecured(viewModel.isEndToEndEncrypted.value == true) // Wait for chat room to be ready before trying to forward a message in it sharedViewModel.messageToForwardEvent.observe(viewLifecycleOwner) { event -> @@ -585,6 +588,8 @@ open class ConversationFragment : SlidingPaneChildFragment() { } viewModel.isEndToEndEncrypted.observe(viewLifecycleOwner) { encrypted -> + adapter.setIsConversationSecured(encrypted) + if (encrypted) { binding.eventsList.addItemDecoration(headerItemDecoration) binding.eventsList.addOnItemTouchListener(listItemTouchListener) @@ -700,7 +705,7 @@ open class ConversationFragment : SlidingPaneChildFragment() { } binding.setWarningConversationDisabledClickListener { - showUnsafeConversationDetailsBottomSheet() + showUnsafeConversationDisabledDetailsBottomSheet() } binding.searchField.setOnEditorActionListener { view, actionId, _ -> @@ -1415,13 +1420,13 @@ open class ConversationFragment : SlidingPaneChildFragment() { bottomSheetDialog = e2eEncryptionDetailsBottomSheet } - private fun showUnsafeConversationDetailsBottomSheet() { - val unsafeConversationDetailsBottomSheet = UnsafeConversationDetailsDialogFragment() - unsafeConversationDetailsBottomSheet.show( + private fun showUnsafeConversationDisabledDetailsBottomSheet() { + val unsafeConversationDisabledDetailsBottomSheet = UnsafeConversationDisabledDetailsDialogFragment() + unsafeConversationDisabledDetailsBottomSheet.show( requireActivity().supportFragmentManager, - UnsafeConversationDetailsDialogFragment.TAG + UnsafeConversationDisabledDetailsDialogFragment.TAG ) - bottomSheetDialog = unsafeConversationDetailsBottomSheet + bottomSheetDialog = unsafeConversationDisabledDetailsBottomSheet } private fun showOpenOrExportFileDialog(path: String, mime: String, bundle: Bundle) { diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt index 482491b0d..cc40b959f 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/EndToEndEncryptionDetailsDialogFragment.kt @@ -29,7 +29,7 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.databinding.ChatConversationE2eDetailsBottomSheetBinding +import org.linphone.databinding.ChatConversationE2eEncryptedDetailsBottomSheetBinding @UiThread class EndToEndEncryptionDetailsDialogFragment( @@ -62,7 +62,7 @@ class EndToEndEncryptionDetailsDialogFragment( container: ViewGroup?, savedInstanceState: Bundle? ): View { - val view = ChatConversationE2eDetailsBottomSheetBinding.inflate(layoutInflater) + val view = ChatConversationE2eEncryptedDetailsBottomSheetBinding.inflate(layoutInflater) return view.root } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDisabledDetailsDialogFragment.kt similarity index 87% rename from app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt rename to app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDisabledDetailsDialogFragment.kt index 597120f99..681cea5af 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDetailsDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/UnsafeConversationDisabledDetailsDialogFragment.kt @@ -29,14 +29,14 @@ import androidx.annotation.UiThread import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.databinding.ChatConversationUnsafeDetailsBottomSheetBinding +import org.linphone.databinding.ChatConversationUnsafeDisabledDetailsBottomSheetBinding @UiThread -class UnsafeConversationDetailsDialogFragment( +class UnsafeConversationDisabledDetailsDialogFragment( private val onDismiss: (() -> Unit)? = null ) : BottomSheetDialogFragment() { companion object { - const val TAG = "UnsafeConversationDetailsDialogFragment" + const val TAG = "UnsafeConversationDisabledDetailsDialogFragment" } override fun onCancel(dialog: DialogInterface) { @@ -62,7 +62,7 @@ class UnsafeConversationDetailsDialogFragment( container: ViewGroup?, savedInstanceState: Bundle? ): View { - val view = ChatConversationUnsafeDetailsBottomSheetBinding.inflate(layoutInflater) + val view = ChatConversationUnsafeDisabledDetailsBottomSheetBinding.inflate(layoutInflater) return view.root } } 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 45363fd9a..514ec947c 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 @@ -60,6 +60,8 @@ class ConversationModel val isEncrypted = chatRoom.hasCapability(Capabilities.Encrypted.toInt()) + val isEncryptionAvailable = LinphoneUtils.isEndToEndEncryptedChatAvailable(chatRoom.core) + val isReadOnly = MutableLiveData() val subject = MutableLiveData() 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 6ddd58e44..789f93f21 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 @@ -72,6 +72,8 @@ class ConversationViewModel val isEndToEndEncrypted = MutableLiveData() + val isEndToEndEncryptionAvailable = MutableLiveData() + val isGroup = MutableLiveData() val subject = MutableLiveData() @@ -313,7 +315,8 @@ class ConversationViewModel } init { - coreContext.postOnCoreThread { + coreContext.postOnCoreThread { core -> + isEndToEndEncryptionAvailable.postValue(LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) coreContext.contactsManager.addListener(contactsListener) } diff --git a/app/src/main/res/layout/chat_conversation_e2e_details_bottom_sheet.xml b/app/src/main/res/layout/chat_conversation_e2e_encrypted_details_bottom_sheet.xml similarity index 100% rename from app/src/main/res/layout/chat_conversation_e2e_details_bottom_sheet.xml rename to app/src/main/res/layout/chat_conversation_e2e_encrypted_details_bottom_sheet.xml diff --git a/app/src/main/res/layout/chat_conversation_secured_first_event.xml b/app/src/main/res/layout/chat_conversation_e2e_encrypted_first_event.xml similarity index 100% rename from app/src/main/res/layout/chat_conversation_secured_first_event.xml rename to app/src/main/res/layout/chat_conversation_e2e_encrypted_first_event.xml diff --git a/app/src/main/res/layout/chat_conversation_fragment.xml b/app/src/main/res/layout/chat_conversation_fragment.xml index e55c41f38..48a70bf0a 100644 --- a/app/src/main/res/layout/chat_conversation_fragment.xml +++ b/app/src/main/res/layout/chat_conversation_fragment.xml @@ -289,7 +289,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:visibility="@{viewModel.isEmpty && viewModel.isEndToEndEncrypted ? View.VISIBLE : View.GONE}" - layout="@layout/chat_conversation_secured_first_event" + layout="@layout/chat_conversation_e2e_encrypted_first_event" app:layout_constraintTop_toTopOf="@id/events_list" app:layout_constraintStart_toStartOf="@id/events_list" app:layout_constraintEnd_toEndOf="@id/events_list" /> diff --git a/app/src/main/res/layout/chat_long_press_menu.xml b/app/src/main/res/layout/chat_conversation_long_press_menu.xml similarity index 100% rename from app/src/main/res/layout/chat_long_press_menu.xml rename to app/src/main/res/layout/chat_conversation_long_press_menu.xml diff --git a/app/src/main/res/layout/chat_conversation_unsafe_details_bottom_sheet.xml b/app/src/main/res/layout/chat_conversation_unsafe_disabled_details_bottom_sheet.xml similarity index 100% rename from app/src/main/res/layout/chat_conversation_unsafe_details_bottom_sheet.xml rename to app/src/main/res/layout/chat_conversation_unsafe_disabled_details_bottom_sheet.xml diff --git a/app/src/main/res/layout/chat_list_cell.xml b/app/src/main/res/layout/chat_list_cell.xml index 74dbd8502..77d4e4c90 100644 --- a/app/src/main/res/layout/chat_list_cell.xml +++ b/app/src/main/res/layout/chat_list_cell.xml @@ -206,7 +206,7 @@ android:layout_marginEnd="10dp" android:src="@drawable/lock_simple_open_bold" android:contentDescription="@string/content_description_chat_unsecured" - android:visibility="@{model.isEncrypted ? View.GONE : View.VISIBLE}" + android:visibility="@{model.isEncrypted || !model.isEncryptionAvailable ? View.GONE : View.VISIBLE}" app:layout_constraintTop_toBottomOf="@id/date_time" app:layout_constraintBottom_toTopOf="@id/separator" app:layout_constraintEnd_toStartOf="@id/ephemeral"