From 81f0a9515f8f58b0c7e8e54a0d40f0866ad7504a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 14 Mar 2024 15:55:29 +0100 Subject: [PATCH] Hide some parts of the UI depending on Core or account configuration --- app/src/main/java/org/linphone/core/CorePreferences.kt | 4 ++++ .../ui/main/chat/fragment/ConversationFragment.kt | 2 +- .../ui/main/chat/viewmodel/ConversationInfoViewModel.kt | 5 +++++ .../chat/viewmodel/SendMessageInConversationViewModel.kt | 6 ++++++ .../org/linphone/ui/main/help/viewmodel/HelpViewModel.kt | 8 ++++++++ .../fragment/CardDavAddressBookConfigurationFragment.kt | 1 + app/src/main/res/layout/chat_conversation_send_area.xml | 4 +++- app/src/main/res/layout/chat_info_fragment.xml | 2 +- app/src/main/res/layout/help_debug_fragment.xml | 1 + app/src/main/res/layout/help_fragment.xml | 1 + 10 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 7c46baba3..46d517f27 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -123,6 +123,10 @@ class CorePreferences @UiThread constructor(private val context: Context) { val darkModeAllowed: Boolean get() = config.getBool("ui", "dark_mode_allowed", true) + @get:WorkerThread + val onlyDisplaySipUriUsername: Boolean + get() = config.getBool("ui", "only_display_sip_uri_username", true) + @get:WorkerThread val disableChat: Boolean get() = config.getBool("ui", "disable_chat_feature", false) 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 0927a1504..eb9e3f812 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 @@ -857,7 +857,7 @@ class ConversationFragment : SlidingPaneChildFragment() { ) popupView.conversationMuted = viewModel.isMuted.value == true - popupView.ephemeralMessagesAvailable = viewModel.isEndToEndEncrypted.value == true || viewModel.isGroup.value == true + popupView.ephemeralMessagesAvailable = viewModel.isEndToEndEncrypted.value == true popupView.readOnlyConversation = viewModel.isReadOnly.value == true popupView.setGoToInfoClickListener { diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt index 6571f09a3..fc8f5f234 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt @@ -54,6 +54,8 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi val isGroup = MutableLiveData() + val isEndToEndEncrypted = MutableLiveData() + val subject = MutableLiveData() val sipUri = MutableLiveData() @@ -451,6 +453,9 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi val isGroupChatRoom = LinphoneUtils.isChatRoomAGroup(chatRoom) isGroup.postValue(isGroupChatRoom) + isEndToEndEncrypted.postValue( + chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt()) + ) val empty = chatRoom.hasCapability(ChatRoom.Capabilities.Conference.toInt()) && chatRoom.participants.isEmpty() val readOnly = chatRoom.isReadOnly || empty diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index dfb78f41e..a3899bf7c 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -63,6 +63,8 @@ class SendMessageInConversationViewModel @UiThread constructor() : ViewModel() { val textToSend = MutableLiveData() + val isFileTransferServerAvailable = MutableLiveData() + val isEmojiPickerOpen = MutableLiveData() val isParticipantsListOpen = MutableLiveData() @@ -141,6 +143,10 @@ class SendMessageInConversationViewModel @UiThread constructor() : ViewModel() { } init { + coreContext.postOnCoreThread { core -> + isFileTransferServerAvailable.postValue(!core.fileTransferServer.isNullOrEmpty()) + } + isEmojiPickerOpen.value = false isPlayingVoiceRecord.value = false } diff --git a/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt b/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt index fbb985424..36f267121 100644 --- a/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/help/viewmodel/HelpViewModel.kt @@ -48,6 +48,10 @@ class HelpViewModel @UiThread constructor() : ViewModel() { val printLogInLogcatEnabled = MutableLiveData() + val checkUpdateAvailable = MutableLiveData() + + val uploadLogsAvailable = MutableLiveData() + val newVersionAvailableEvent: MutableLiveData>> by lazy { MutableLiveData>>() } @@ -128,6 +132,10 @@ class HelpViewModel @UiThread constructor() : ViewModel() { coreContext.postOnCoreThread { core -> core.addListener(coreListener) printLogInLogcatEnabled.postValue(corePreferences.printLogsInLogcat) + + val checkUpdateServerUrl = core.config.getString("misc", "version_check_url_root", "") + checkUpdateAvailable.postValue(!checkUpdateServerUrl.isNullOrEmpty()) + uploadLogsAvailable.postValue(!core.logCollectionUploadServerUrl.isNullOrEmpty()) } } diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/CardDavAddressBookConfigurationFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/CardDavAddressBookConfigurationFragment.kt index b32a885f8..052c66ad4 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/CardDavAddressBookConfigurationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/CardDavAddressBookConfigurationFragment.kt @@ -57,6 +57,7 @@ class CardDavAddressBookConfigurationFragment : GenericFragment() { viewModel.cardDavOperationSuccessfulEvent.observe(viewLifecycleOwner) { it.consume { Log.i("$TAG CardDAV friend list operation was successful, going back") + // TODO FIXME: show green toast goBack() } } diff --git a/app/src/main/res/layout/chat_conversation_send_area.xml b/app/src/main/res/layout/chat_conversation_send_area.xml index 18d53839a..50fe20af6 100644 --- a/app/src/main/res/layout/chat_conversation_send_area.xml +++ b/app/src/main/res/layout/chat_conversation_send_area.xml @@ -98,6 +98,7 @@ android:onClick="@{openFilePickerClickListener}" android:padding="8dp" android:src="@drawable/paperclip" + android:visibility="@{viewModel.isFileTransferServerAvailable ? View.VISIBLE : View.GONE}" app:layout_constraintBottom_toBottomOf="@id/message_area_background" app:layout_constraintEnd_toStartOf="@id/capture_image" app:layout_constraintStart_toEndOf="@id/emoji_picker_toggle" @@ -112,6 +113,7 @@ android:onClick="@{openCameraClickListener}" android:padding="8dp" android:src="@drawable/camera" + android:visibility="@{viewModel.isFileTransferServerAvailable ? View.VISIBLE : View.GONE}" app:layout_constraintBottom_toBottomOf="@id/message_area_background" app:layout_constraintEnd_toStartOf="@id/message_area_background" app:layout_constraintStart_toEndOf="@id/attach_file" @@ -180,7 +182,7 @@ android:layout_width="40dp" android:layout_height="0dp" android:layout_marginEnd="4dp" - android:visibility="@{viewModel.textToSend.length() > 0 || viewModel.attachments.size() > 0 || viewModel.isVoiceRecording ? View.GONE : View.VISIBLE}" + android:visibility="@{viewModel.textToSend.length() > 0 || viewModel.attachments.size() > 0 || viewModel.isVoiceRecording || !viewModel.isFileTransferServerAvailable ? View.GONE : View.VISIBLE}" android:onClick="@{() -> viewModel.startVoiceMessageRecording()}" android:padding="8dp" android:src="@drawable/microphone" diff --git a/app/src/main/res/layout/chat_info_fragment.xml b/app/src/main/res/layout/chat_info_fragment.xml index 6b3cc7e1b..1184519bd 100644 --- a/app/src/main/res/layout/chat_info_fragment.xml +++ b/app/src/main/res/layout/chat_info_fragment.xml @@ -396,7 +396,7 @@ android:drawableStart="@drawable/clock_countdown" android:onClick="@{configureEphemeralMessagesClickListener}" android:text="@string/conversation_action_configure_ephemeral_messages" - android:visibility="@{!viewModel.isReadOnly ? View.VISIBLE : View.GONE}" + android:visibility="@{viewModel.isEndToEndEncrypted && !viewModel.isReadOnly ? View.VISIBLE : View.GONE}" app:layout_constraintEnd_toEndOf="@id/actions_background" app:layout_constraintStart_toStartOf="@id/actions_background" app:layout_constraintTop_toBottomOf="@id/action_add_to_contacts" /> diff --git a/app/src/main/res/layout/help_debug_fragment.xml b/app/src/main/res/layout/help_debug_fragment.xml index fa153da68..edd2675d6 100644 --- a/app/src/main/res/layout/help_debug_fragment.xml +++ b/app/src/main/res/layout/help_debug_fragment.xml @@ -126,6 +126,7 @@ android:text="@string/help_troubleshooting_share_logs" android:maxLines="1" android:ellipsize="end" + android:visibility="@{viewModel.uploadLogsAvailable ? View.VISIBLE : View.GONE}" app:layout_constraintStart_toEndOf="@id/clean_logs" app:layout_constraintTop_toBottomOf="@id/print_logs_in_logcat_subtitle"/> diff --git a/app/src/main/res/layout/help_fragment.xml b/app/src/main/res/layout/help_fragment.xml index 203a7dfae..35570b02b 100644 --- a/app/src/main/res/layout/help_fragment.xml +++ b/app/src/main/res/layout/help_fragment.xml @@ -171,6 +171,7 @@ android:text="@string/help_about_check_for_update" android:maxLines="1" android:ellipsize="end" + android:visibility="@{viewModel.checkUpdateAvailable ? View.VISIBLE : View.GONE}" app:layout_constraintStart_toEndOf="@id/version_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/version_title"