From 0d96010865ae0e72502dcf24997ffdbf7b564f9e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Apr 2024 13:13:18 +0200 Subject: [PATCH] Started merge calls into conference --- .../ui/call/fragment/CallsListFragment.kt | 27 +++++- .../ui/call/viewmodel/CallsViewModel.kt | 19 +++- .../java/org/linphone/utils/DialogUtils.kt | 17 ++++ .../dialog_merge_calls_into_conference.xml | 88 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 32 +++++-- app/src/main/res/values/strings.xml | 6 +- 6 files changed, 181 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/layout/dialog_merge_calls_into_conference.xml diff --git a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt index 4edac46e2..793243747 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/CallsListFragment.kt @@ -31,6 +31,8 @@ import org.linphone.core.tools.Log import org.linphone.databinding.CallsListFragmentBinding import org.linphone.ui.call.adapter.CallsListAdapter import org.linphone.ui.call.viewmodel.CallsViewModel +import org.linphone.ui.main.history.model.ConfirmationDialogModel +import org.linphone.utils.DialogUtils class CallsListFragment : GenericCallFragment() { companion object { @@ -99,7 +101,7 @@ class CallsListFragment : GenericCallFragment() { } binding.setMergeCallsClickListener { - viewModel.mergeCallsIntoConference() + showMergeCallsIntoConferenceConfirmationDialog() } viewModel.calls.observe(viewLifecycleOwner) { @@ -114,4 +116,27 @@ class CallsListFragment : GenericCallFragment() { bottomSheetDialog?.dismiss() bottomSheetDialog = null } + + private fun showMergeCallsIntoConferenceConfirmationDialog() { + val model = ConfirmationDialogModel() + val dialog = DialogUtils.getConfirmMergeCallsDialog( + requireActivity(), + model + ) + + model.dismissEvent.observe(viewLifecycleOwner) { + it.consume { + dialog.dismiss() + } + } + + model.confirmEvent.observe(viewLifecycleOwner) { + it.consume { + viewModel.mergeCallsIntoConference() + dialog.dismiss() + } + } + + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt index 774de120c..460959c73 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CallsViewModel.kt @@ -216,7 +216,24 @@ class CallsViewModel @UiThread constructor() : ViewModel() { @UiThread fun mergeCallsIntoConference() { - // TODO FIXME: implement local conferences merge + coreContext.postOnCoreThread { core -> + val callsCount = core.callsNb + val defaultAccount = LinphoneUtils.getDefaultAccount() + val subject = if (defaultAccount != null && defaultAccount.params.audioVideoConferenceFactoryAddress != null) { + Log.i("$TAG Merging [$callsCount] calls into a remotely hosted conference") + AppUtils.getString(R.string.conference_remotely_hosted_title) + } else { + Log.i("$TAG Merging [$callsCount] calls into a locally hosted conference") + AppUtils.getString(R.string.conference_locally_hosted_title) + } + + val params = core.createConferenceParams(null) + params.subject = subject + // Prevent group call to start in audio only layout + params.isVideoEnabled = true + val conference = core.createConferenceWithParams(params) + conference?.addParticipants(core.calls) + } } @WorkerThread diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index 4eba289db..ccbb601da 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -42,6 +42,7 @@ import org.linphone.databinding.DialogContactConfirmTrustCallBinding import org.linphone.databinding.DialogContactTrustProcessBinding import org.linphone.databinding.DialogDeleteContactBinding import org.linphone.databinding.DialogManageAccountInternationalPrefixHelpBinding +import org.linphone.databinding.DialogMergeCallsIntoConferenceBinding import org.linphone.databinding.DialogPickNumberOrAddressBinding import org.linphone.databinding.DialogRemoveAccountBinding import org.linphone.databinding.DialogRemoveAllCallLogsBinding @@ -338,6 +339,22 @@ class DialogUtils { return getDialog(context, binding) } + @UiThread + fun getConfirmMergeCallsDialog( + context: Context, + viewModel: ConfirmationDialogModel + ): Dialog { + val binding: DialogMergeCallsIntoConferenceBinding = DataBindingUtil.inflate( + LayoutInflater.from(context), + R.layout.dialog_merge_calls_into_conference, + null, + false + ) + binding.viewModel = viewModel + + return getDialog(context, binding) + } + @UiThread fun getCancelMeetingDialog( context: Context, diff --git a/app/src/main/res/layout/dialog_merge_calls_into_conference.xml b/app/src/main/res/layout/dialog_merge_calls_into_conference.xml new file mode 100644 index 000000000..0c8ea1ec0 --- /dev/null +++ b/app/src/main/res/layout/dialog_merge_calls_into_conference.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d98cda98b..488c9b08e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -4,7 +4,8 @@ ]> - + + Adresse SIP utilisateur@domaine Nom d\'affichage @@ -19,11 +20,12 @@ Aujourd\'hui Hier - + %s selectionné %s selectionnés + Refuser Accepter Annuler @@ -37,6 +39,7 @@ Non Oui + &appName; notifications d\'appels en cours &appName; notifications d\'appels entrants &appName; notifications d\'appels manqués @@ -51,6 +54,7 @@ &appName; Recherche de nouveaux messages + Bienvenue sur &appName; Une application de communication sécurisée, open source et française. @@ -89,7 +93,7 @@ Vous avez quitté la conversation Le volume media est bas, vous pourriez ne rien entendre ! Aucune application trouvée pour lire ce fichier - + %s fichier en attente de partage %s fichiers en attente de partage @@ -99,6 +103,7 @@ L\'appel a été transferré Le transfert a échoué ! + Conditions de service & politique de confidentialité blah blah blah Confirmez votre numéro de téléphone @@ -151,11 +156,13 @@ Microphone : Pour permettre à vos correspondants de vous entendre. Caméra : Pour capturer votre vidéo lors des appels et des conférences. + Contacts Appels Conversations Réunions + Paramètres du profil Connecté En cours de rafraîchissement… @@ -165,6 +172,7 @@ Aucun compte configuré Ajouter un compte + Aide À propos de &appName; Politique de confidentialité @@ -189,6 +197,7 @@ Echec à l\'envoi des journaux Afficher la configuration + Paramètres Securité Chiffrer tous les fichiers @@ -245,6 +254,7 @@ Auto Paramètres avancés + Votre compte Détails Appareils @@ -307,6 +317,7 @@ Voulez-vous supprimer tout les appels avec cette personne ? TOut l\'historique d\'appel avec cette personne sera supprimmé. + Aucun contact pour le moment… Favoris Tous les contacts @@ -362,6 +373,7 @@ Vérifier Appareil sans nom + Aucune conversation pour le moment… En cours de suppression… %s : @@ -388,7 +400,7 @@ Aucun résultat trouvé… Nom du groupe Dites quelque chose… - + %s est en train d\'écrire… %s sont en train d\'écrire… @@ -450,6 +462,7 @@ Cliquez pour supprimer Transféré + Aucune réunion pour le moment… Aujourd\'hui @@ -488,6 +501,7 @@ Connexion à la réunion Vous allez rejoindre la réunion dans quelques instants… + Appel sortant Appel entrant Appel terminé @@ -520,6 +534,7 @@ %s est en train d\'enregistrer %s appels %s appels en pause + Fusionner les appels en une conférence ? Valider l\'appareil Dites %s puis cliquez sur les lettres données par votre correspondant : @@ -549,11 +564,12 @@ Algorithme d\'authentification : %s Algorithm SAS: %s + Partager le lien En attente d\'autres participants… Partage d\'écran Participants - + %s participant %s participants @@ -565,8 +581,13 @@ Intervenant actif Audio uniquement + Appel de groupe distant + Appel de groupe local + + Enregistrements + Ajouter aux contacts Voir le contact Copier l\'adresse SIP @@ -579,6 +600,7 @@ Transférer Copier le texte + Erreur de connexion au compte Vous n\'êtes pas connecté à internet Opération en cours, merci de patienter… diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0812d7641..0342d6e7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -489,7 +489,6 @@ Shared media Shared documents - Read %s Received %s Sent %s @@ -499,6 +498,7 @@ Click to remove Forwarded + No meeting for the moment… Today @@ -570,6 +570,7 @@ %s is recording %s calls %s paused calls + Merge all calls into conference? Validate the device Say %s and click on the letters given by your correspondent: @@ -616,6 +617,9 @@ Speaker Audio only + Remote group call + Local group call + Recordings