diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt index f85dd1c19..e8509c7f1 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt @@ -226,6 +226,7 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { val dialog = DialogUtils.getSetOrEditGroupSubjectDialog( requireContext(), + viewLifecycleOwner, model ) @@ -238,11 +239,17 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { model.confirmEvent.observe(viewLifecycleOwner) { it.consume { newSubject -> - Log.i( - "$TAG Conversation subject edit confirmed, new subject is [$newSubject] (old was [$currentSubject])" - ) - viewModel.updateSubject(newSubject) - dialog.dismiss() + if (newSubject.isNotEmpty()) { + Log.i( + "$TAG Conversation subject edit confirmed, new subject is [$newSubject] (old was [$currentSubject])" + ) + viewModel.updateSubject(newSubject) + dialog.dismiss() + } else { + val message = getString(R.string.conversation_invalid_empty_subject_toast) + val icon = R.drawable.warning_circle + (requireActivity() as GenericActivity).showRedToast(message, icon) + } } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt index 8e7340dca..2745f8977 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt @@ -129,6 +129,7 @@ class StartConversationFragment : GenericAddressPickerFragment() { val dialog = DialogUtils.getSetOrEditGroupSubjectDialog( requireContext(), + viewLifecycleOwner, model ) diff --git a/app/src/main/java/org/linphone/ui/main/fragment/GroupSetOrEditSubjectDialogModel.kt b/app/src/main/java/org/linphone/ui/main/fragment/GroupSetOrEditSubjectDialogModel.kt index 860053294..7a36c7063 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/GroupSetOrEditSubjectDialogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/GroupSetOrEditSubjectDialogModel.kt @@ -20,6 +20,7 @@ package org.linphone.ui.main.fragment import androidx.annotation.UiThread +import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import org.linphone.utils.Event @@ -35,7 +36,12 @@ class GroupSetOrEditSubjectDialogModel @UiThread constructor( val confirmEvent = MutableLiveData>() + val emptySubject = MediatorLiveData() + init { + emptySubject.addSource(subject) { subject -> + emptySubject.value = subject.isEmpty() + } subject.value = initialSubject } @@ -46,6 +52,8 @@ class GroupSetOrEditSubjectDialogModel @UiThread constructor( @UiThread fun confirm() { - confirmEvent.value = Event(subject.value.orEmpty()) + val newSubject = subject.value.orEmpty() + emptySubject.value = newSubject.isEmpty() + confirmEvent.value = Event(newSubject) } } diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/StartCallFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/StartCallFragment.kt index f1f3365ba..9fa539662 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/StartCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/StartCallFragment.kt @@ -180,6 +180,7 @@ class StartCallFragment : GenericAddressPickerFragment() { val dialog = DialogUtils.getSetOrEditGroupSubjectDialog( requireContext(), + viewLifecycleOwner, model ) diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index cc02556e6..2ba5b061e 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -258,6 +258,7 @@ class DialogUtils { @UiThread fun getSetOrEditGroupSubjectDialog( context: Context, + lifecycleOwner: LifecycleOwner, viewModel: GroupSetOrEditSubjectDialogModel ): Dialog { val binding: DialogSetOrEditGroupSubjectBindingImpl = DataBindingUtil.inflate( @@ -266,6 +267,7 @@ class DialogUtils { null, false ) + binding.lifecycleOwner = lifecycleOwner binding.viewModel = viewModel // For some reason, binding.subject triggers an error on Android Studio... binding.root.findViewById(R.id.subject)?.requestFocus() diff --git a/app/src/main/res/layout/dialog_set_or_edit_group_subject.xml b/app/src/main/res/layout/dialog_set_or_edit_group_subject.xml index 196887c24..e1ff1bd5b 100644 --- a/app/src/main/res/layout/dialog_set_or_edit_group_subject.xml +++ b/app/src/main/res/layout/dialog_set_or_edit_group_subject.xml @@ -67,7 +67,7 @@ android:textSize="14sp" android:textColor="?attr/color_main2_600" android:maxLines="1" - android:background="@drawable/edit_text_background" + android:background="@{viewModel.emptySubject ? @drawable/shape_edit_text_error_background : @drawable/edit_text_background, default=@drawable/edit_text_background}" android:inputType="text|textCapSentences" app:layout_constraintHorizontal_bias="0" app:layout_constraintWidth_max="@dimen/text_input_max_width" @@ -76,6 +76,19 @@ app:layout_constraintEnd_toEndOf="@id/dialog_background" app:layout_constraintTop_toBottomOf="@id/title"/> + + Nombre maximum de fichiers atteint ! Nommer la conversation Renommer la conversation + Un nom est obligatoire Nom de la conversation Confirmer Ouvrir ou sauvegarder le fichier ? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc85fa8d9..643cf0de1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -478,6 +478,7 @@ Maximum number of attachments reached! Set conversation subject Edit conversation subject + Subject is mandatory Conversation subject Confirm Open or export file?