diff --git a/linphone-desktop/assets/languages/en.ts b/linphone-desktop/assets/languages/en.ts
index 7c0bb44cf..6bbac0d0c 100644
--- a/linphone-desktop/assets/languages/en.ts
+++ b/linphone-desktop/assets/languages/en.ts
@@ -685,6 +685,10 @@ Server url not configured.
ringLabel
Ring
+
+ echoCancellationLabel
+ Enable echo cancellation
+
SettingsCallsChat
diff --git a/linphone-desktop/assets/languages/fr.ts b/linphone-desktop/assets/languages/fr.ts
index be788e13e..684a9e148 100644
--- a/linphone-desktop/assets/languages/fr.ts
+++ b/linphone-desktop/assets/languages/fr.ts
@@ -695,6 +695,10 @@ Url du serveur non configurée.
ringLabel
Sonnerie
+
+ echoCancellationLabel
+ Activer annulation d'écho
+
SettingsCallsChat
diff --git a/linphone-desktop/src/components/settings/SettingsModel.cpp b/linphone-desktop/src/components/settings/SettingsModel.cpp
index 479449f43..4d2eacc4e 100644
--- a/linphone-desktop/src/components/settings/SettingsModel.cpp
+++ b/linphone-desktop/src/components/settings/SettingsModel.cpp
@@ -137,6 +137,17 @@ void SettingsModel::setRingPath (const QString &path) {
emit ringPathChanged(cleaned_path);
}
+// -----------------------------------------------------------------------------
+
+bool SettingsModel::getEchoCancellationEnabled () const {
+ return CoreManager::getInstance()->getCore()->echoCancellationEnabled();
+}
+
+void SettingsModel::setEchoCancellationEnabled (bool status) {
+ CoreManager::getInstance()->getCore()->enableEchoCancellation(status);
+ emit echoCancellationEnabledChanged(status);
+}
+
// =============================================================================
// Chat & calls.
// =============================================================================
diff --git a/linphone-desktop/src/components/settings/SettingsModel.hpp b/linphone-desktop/src/components/settings/SettingsModel.hpp
index 5e9758810..7c07fd165 100644
--- a/linphone-desktop/src/components/settings/SettingsModel.hpp
+++ b/linphone-desktop/src/components/settings/SettingsModel.hpp
@@ -47,6 +47,8 @@ class SettingsModel : public QObject {
Q_PROPERTY(QString ringPath READ getRingPath WRITE setRingPath NOTIFY ringPathChanged);
+ Q_PROPERTY(bool echoCancellationEnabled READ getEchoCancellationEnabled WRITE setEchoCancellationEnabled NOTIFY echoCancellationEnabledChanged);
+
// Chat & calls. -------------------------------------------------------------
Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged);
@@ -142,6 +144,9 @@ public:
QString getRingPath () const;
void setRingPath (const QString &path);
+ bool getEchoCancellationEnabled () const;
+ void setEchoCancellationEnabled (bool status);
+
// Chat & calls. -------------------------------------------------------------
bool getAutoAnswerStatus () const;
@@ -242,6 +247,8 @@ signals:
void ringPathChanged (const QString &path);
+ void echoCancellationEnabledChanged (bool status);
+
// Chat & calls. -------------------------------------------------------------
void autoAnswerStatusChanged (bool status);
diff --git a/linphone-desktop/ui/views/App/Settings/SettingsAudio.qml b/linphone-desktop/ui/views/App/Settings/SettingsAudio.qml
index 3711eb8f0..aaf6e2a2a 100644
--- a/linphone-desktop/ui/views/App/Settings/SettingsAudio.qml
+++ b/linphone-desktop/ui/views/App/Settings/SettingsAudio.qml
@@ -70,5 +70,17 @@ TabContainer {
}
}
}
+
+ FormLine {
+ FormGroup {
+ label: qsTr('echoCancellationLabel')
+
+ Switch {
+ checked: SettingsModel.echoCancellationEnabled
+
+ onClicked: SettingsModel.echoCancellationEnabled = !checked
+ }
+ }
+ }
}
}