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 7bead3371..c3935b882 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 @@ -38,7 +38,7 @@ import org.linphone.databinding.ChatInfoFragmentBinding import org.linphone.databinding.ChatParticipantAdminPopupMenuBinding import org.linphone.ui.main.MainActivity import org.linphone.ui.main.chat.adapter.ConversationParticipantsAdapter -import org.linphone.ui.main.chat.model.ConversationEditSubjectDialogModel +import org.linphone.ui.main.chat.model.ConversationSetOrEditSubjectDialogModel import org.linphone.ui.main.chat.model.ParticipantModel import org.linphone.ui.main.chat.viewmodel.ConversationInfoViewModel import org.linphone.ui.main.fragment.SlidingPaneChildFragment @@ -216,9 +216,9 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { binding.setEditSubjectClickListener { val currentSubject = viewModel.subject.value.orEmpty() - val model = ConversationEditSubjectDialogModel(currentSubject) + val model = ConversationSetOrEditSubjectDialogModel(currentSubject) - val dialog = DialogUtils.getEditConversationSubjectDialog( + val dialog = DialogUtils.getSetOrEditConversationSubjectDialog( requireContext(), model ) 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 a820f7cf0..9bda3645a 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 @@ -33,9 +33,12 @@ import org.linphone.core.Friend import org.linphone.core.tools.Log import org.linphone.databinding.StartChatFragmentBinding import org.linphone.ui.main.MainActivity +import org.linphone.ui.main.chat.model.ConversationSetOrEditSubjectDialogModel import org.linphone.ui.main.chat.viewmodel.StartConversationViewModel import org.linphone.ui.main.fragment.GenericAddressPickerFragment +import org.linphone.utils.DialogUtils import org.linphone.utils.Event +import org.linphone.utils.hideKeyboard @UiThread class StartConversationFragment : GenericAddressPickerFragment() { @@ -70,6 +73,10 @@ class StartConversationFragment : GenericAddressPickerFragment() { goBack() } + binding.setAskForGroupConversationSubjectClickListener { + showGroupConversationSubjectDialog() + } + setupRecyclerView(binding.contactsList) viewModel.contactsAndSuggestionsList.observe( @@ -113,4 +120,40 @@ class StartConversationFragment : GenericAddressPickerFragment() { override fun onSingleAddressSelected(address: Address, friend: Friend) { viewModel.createOneToOneChatRoomWith(address) } + + private fun showGroupConversationSubjectDialog() { + val model = ConversationSetOrEditSubjectDialogModel("") + + val dialog = DialogUtils.getSetOrEditConversationSubjectDialog( + requireContext(), + model + ) + + model.dismissEvent.observe(viewLifecycleOwner) { + it.consume { + Log.i("$TAG Set conversation subject cancelled") + dialog.dismiss() + } + } + + model.confirmEvent.observe(viewLifecycleOwner) { + it.consume { newSubject -> + if (newSubject.isNotEmpty()) { + Log.i( + "$TAG Conversation subject has been set to [$newSubject]" + ) + viewModel.subject.value = newSubject + viewModel.createGroupChatRoom() + + dialog.currentFocus?.hideKeyboard() + dialog.dismiss() + } else { + // TODO: show error + } + } + } + + Log.i("$TAG Showing dialog to set conversation subject") + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationEditSubjectDialogModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationSetOrEditSubjectDialogModel.kt similarity index 90% rename from app/src/main/java/org/linphone/ui/main/chat/model/ConversationEditSubjectDialogModel.kt rename to app/src/main/java/org/linphone/ui/main/chat/model/ConversationSetOrEditSubjectDialogModel.kt index e2ae96bcb..f1324937e 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationEditSubjectDialogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationSetOrEditSubjectDialogModel.kt @@ -23,7 +23,9 @@ import androidx.annotation.UiThread import androidx.lifecycle.MutableLiveData import org.linphone.utils.Event -class ConversationEditSubjectDialogModel @UiThread constructor(initialSubject: String) { +class ConversationSetOrEditSubjectDialogModel @UiThread constructor(initialSubject: String) { + val isEdit = initialSubject.isNotEmpty() + val subject = MutableLiveData() val dismissEvent = MutableLiveData>() 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 ee9df826b..48bbba60c 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 @@ -89,14 +89,7 @@ class StartConversationViewModel @UiThread constructor() : AddressSelectionViewM init { groupChatRoomCreateButtonEnabled.postValue(false) groupChatRoomCreateButtonEnabled.addSource(selection) { - groupChatRoomCreateButtonEnabled.postValue( - subject.value.orEmpty().isNotEmpty() && selection.value.orEmpty().isNotEmpty() - ) - } - groupChatRoomCreateButtonEnabled.addSource(subject) { - groupChatRoomCreateButtonEnabled.postValue( - subject.value.orEmpty().isNotEmpty() && selection.value.orEmpty().isNotEmpty() - ) + groupChatRoomCreateButtonEnabled.postValue(it.isNotEmpty()) } updateGroupChatButtonVisibility() diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index 616274726..d18cdf33b 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -39,17 +39,17 @@ import org.linphone.databinding.DialogConfirmZrtpSasBinding import org.linphone.databinding.DialogContactConfirmTrustCallBinding import org.linphone.databinding.DialogContactTrustProcessBinding import org.linphone.databinding.DialogDeleteContactBinding -import org.linphone.databinding.DialogEditGroupConversationSubjectBinding import org.linphone.databinding.DialogManageAccountInternationalPrefixHelpBinding import org.linphone.databinding.DialogPickNumberOrAddressBinding import org.linphone.databinding.DialogRemoveAccountBinding import org.linphone.databinding.DialogRemoveAllCallLogsBinding import org.linphone.databinding.DialogRemoveCallLogsBinding +import org.linphone.databinding.DialogSetOrEditGroupConversationSubjectBindingImpl import org.linphone.databinding.DialogUpdateAvailableBinding import org.linphone.ui.assistant.model.AcceptConditionsAndPolicyDialogModel import org.linphone.ui.assistant.model.ConfirmPhoneNumberDialogModel import org.linphone.ui.call.model.ZrtpSasConfirmationDialogModel -import org.linphone.ui.main.chat.model.ConversationEditSubjectDialogModel +import org.linphone.ui.main.chat.model.ConversationSetOrEditSubjectDialogModel import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel import org.linphone.ui.main.contacts.model.TrustCallDialogModel import org.linphone.ui.main.history.model.ConfirmationDialogModel @@ -268,13 +268,13 @@ class DialogUtils { } @UiThread - fun getEditConversationSubjectDialog( + fun getSetOrEditConversationSubjectDialog( context: Context, - viewModel: ConversationEditSubjectDialogModel + viewModel: ConversationSetOrEditSubjectDialogModel ): Dialog { - val binding: DialogEditGroupConversationSubjectBinding = DataBindingUtil.inflate( + val binding: DialogSetOrEditGroupConversationSubjectBindingImpl = DataBindingUtil.inflate( LayoutInflater.from(context), - R.layout.dialog_edit_group_conversation_subject, + R.layout.dialog_set_or_edit_group_conversation_subject, null, false ) @@ -323,16 +323,20 @@ class DialogUtils { dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog.setContentView(binding.root) - dialog.window - ?.setLayout( + dialog.window?.apply { + setLayout( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT ) - val d: Drawable = ColorDrawable( - context.getColor(R.color.black) - ) - d.alpha = 153 // 60% - dialog.window?.setBackgroundDrawable(d) + setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) + + val d: Drawable = ColorDrawable( + context.getColor(R.color.black) + ) + d.alpha = 153 // 60% + setBackgroundDrawable(d) + } + return dialog } } diff --git a/app/src/main/res/layout-land/chat_list_fragment.xml b/app/src/main/res/layout-land/chat_list_fragment.xml index 70824a277..2c43282b5 100644 --- a/app/src/main/res/layout-land/chat_list_fragment.xml +++ b/app/src/main/res/layout-land/chat_list_fragment.xml @@ -106,8 +106,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/plus_circle" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout-land/contacts_list_fragment.xml b/app/src/main/res/layout-land/contacts_list_fragment.xml index df890798a..a41a3a089 100644 --- a/app/src/main/res/layout-land/contacts_list_fragment.xml +++ b/app/src/main/res/layout-land/contacts_list_fragment.xml @@ -154,8 +154,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/user_plus" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout-land/history_list_fragment.xml b/app/src/main/res/layout-land/history_list_fragment.xml index 06512bdd3..7e93caeb5 100644 --- a/app/src/main/res/layout-land/history_list_fragment.xml +++ b/app/src/main/res/layout-land/history_list_fragment.xml @@ -125,8 +125,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/phone_plus" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout-land/meetings_list_fragment.xml b/app/src/main/res/layout-land/meetings_list_fragment.xml index 2096a9a91..acc56bff7 100644 --- a/app/src/main/res/layout-land/meetings_list_fragment.xml +++ b/app/src/main/res/layout-land/meetings_list_fragment.xml @@ -122,8 +122,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/plus_circle" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/chat_conversation_fragment.xml b/app/src/main/res/layout/chat_conversation_fragment.xml index e89742b3c..3aa7a645f 100644 --- a/app/src/main/res/layout/chat_conversation_fragment.xml +++ b/app/src/main/res/layout/chat_conversation_fragment.xml @@ -252,8 +252,8 @@ android:layout_margin="16dp" android:src="@drawable/caret_double_down" android:visibility="@{viewModel.isUserScrollingUp ? View.VISIBLE : View.GONE}" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/send_area" /> diff --git a/app/src/main/res/layout/chat_list_fragment.xml b/app/src/main/res/layout/chat_list_fragment.xml index be5e4abcd..4ba1d47db 100644 --- a/app/src/main/res/layout/chat_list_fragment.xml +++ b/app/src/main/res/layout/chat_list_fragment.xml @@ -107,8 +107,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/plus_circle" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" /> diff --git a/app/src/main/res/layout/contacts_list_fragment.xml b/app/src/main/res/layout/contacts_list_fragment.xml index e6c34fd19..550d7120c 100644 --- a/app/src/main/res/layout/contacts_list_fragment.xml +++ b/app/src/main/res/layout/contacts_list_fragment.xml @@ -156,8 +156,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/user_plus" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" /> diff --git a/app/src/main/res/layout/dialog_edit_group_conversation_subject.xml b/app/src/main/res/layout/dialog_set_or_edit_group_conversation_subject.xml similarity index 93% rename from app/src/main/res/layout/dialog_edit_group_conversation_subject.xml rename to app/src/main/res/layout/dialog_set_or_edit_group_conversation_subject.xml index a77140c77..9132cff75 100644 --- a/app/src/main/res/layout/dialog_edit_group_conversation_subject.xml +++ b/app/src/main/res/layout/dialog_set_or_edit_group_conversation_subject.xml @@ -8,7 +8,7 @@ + type="org.linphone.ui.main.chat.model.ConversationSetOrEditSubjectDialogModel" /> diff --git a/app/src/main/res/layout/meetings_list_fragment.xml b/app/src/main/res/layout/meetings_list_fragment.xml index 47fc9b145..0169d0985 100644 --- a/app/src/main/res/layout/meetings_list_fragment.xml +++ b/app/src/main/res/layout/meetings_list_fragment.xml @@ -123,8 +123,8 @@ android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/plus_circle" - app:tint="?attr/color_main2_700" - app:backgroundTint="?attr/color_main2_000" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" app:shapeAppearanceOverlay="@style/rounded" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" /> diff --git a/app/src/main/res/layout/start_chat_fragment.xml b/app/src/main/res/layout/start_chat_fragment.xml index 549ec85ab..d78558772 100644 --- a/app/src/main/res/layout/start_chat_fragment.xml +++ b/app/src/main/res/layout/start_chat_fragment.xml @@ -8,6 +8,9 @@ + @@ -26,29 +29,29 @@ android:id="@+id/multiple_selection_group" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:constraint_referenced_ids="group_name_title, group_name, required_label, create_group, multiple_selection, multiple_selection_count" + app:constraint_referenced_ids="multiple_selection, multiple_selection_count" android:visibility="@{viewModel.multipleSelectionMode ? View.VISIBLE : View.GONE, default=gone}" /> + app:layout_constraintTop_toTopOf="parent" /> @@ -60,65 +63,19 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/title" /> - - - - - - + app:layout_constraintTop_toBottomOf="@id/back" /> + app:layout_constraintStart_toStartOf="@id/title" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/title" /> + app:layout_constraintBottom_toBottomOf="parent" /> - + android:layout_gravity="end|bottom" + android:layout_margin="16dp" + android:visibility="@{viewModel.multipleSelectionMode && viewModel.groupChatRoomCreateButtonEnabled ? View.VISIBLE : View.GONE, default=gone}" + android:src="@drawable/check" + app:tint="?attr/color_main2_000" + app:backgroundTint="?attr/color_main1_500" + app:shapeAppearanceOverlay="@style/rounded" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c28ff5e0e..dcdf553f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,7 +119,9 @@ A new version %s is available. Do you want to update? Why do we need it? Blah blah blah + Set conversation subject Edit conversation subject + Conversation subject Confirm Invalid QR code! @@ -396,6 +398,7 @@ 3 days 1 week New conversation + New group conversation Search contact Create a group conversation No contact and no suggestion for the moment…