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