diff --git a/app/src/main/java/live/hms/app2/ui/meeting/MeetingViewModel.kt b/app/src/main/java/live/hms/app2/ui/meeting/MeetingViewModel.kt
index 63684bcde..38549d811 100644
--- a/app/src/main/java/live/hms/app2/ui/meeting/MeetingViewModel.kt
+++ b/app/src/main/java/live/hms/app2/ui/meeting/MeetingViewModel.kt
@@ -215,6 +215,9 @@ class MeetingViewModel(
.audio(
HMSAudioTrackSettings.Builder()
.setUseHardwareAcousticEchoCanceler(settings.enableHardwareAEC)
+ .enableEchoCancellation(settings.enableAEC)
+ .enableNoiseSupression(settings.enableNS)
+ .enableAutomaticGainControl(settings.enableAGC)
.initialState(getAudioTrackState())
.build()
)
diff --git a/app/src/main/java/live/hms/app2/ui/settings/SettingsFragment.kt b/app/src/main/java/live/hms/app2/ui/settings/SettingsFragment.kt
index 8ee36b6a6..dd023da20 100644
--- a/app/src/main/java/live/hms/app2/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/live/hms/app2/ui/settings/SettingsFragment.kt
@@ -480,6 +480,24 @@ class SettingsFragment : Fragment() {
forceSoftwareDecoder
) { commitHelper.setForceSoftwareDecoder(it) }
+ initSwitch(
+ EnumSet.of(SettingsMode.HOME),
+ settings.enableAEC,
+ enableEchoCancellation
+ ) { commitHelper.setEnableAEC(it) }
+
+ initSwitch(
+ EnumSet.of(SettingsMode.HOME),
+ settings.enableNS,
+ enableNoiseSupression
+ ) { commitHelper.setEnableNS(it) }
+
+ initSwitch(
+ EnumSet.of(SettingsMode.HOME),
+ settings.enableAGC,
+ enableAutomaticGainControl
+ ) { commitHelper.setEnableAGC(it) }
+
initSwitch(
EnumSet.of(SettingsMode.HOME),
diff --git a/app/src/main/java/live/hms/app2/ui/settings/SettingsStore.kt b/app/src/main/java/live/hms/app2/ui/settings/SettingsStore.kt
index c96113f48..49003ae21 100644
--- a/app/src/main/java/live/hms/app2/ui/settings/SettingsStore.kt
+++ b/app/src/main/java/live/hms/app2/ui/settings/SettingsStore.kt
@@ -50,6 +50,9 @@ class SettingsStore(context: Context) {
const val SHOW_STATS = "show-video-stats"
const val DISABLE_AUTO_RESIZE = "disable-auto-resize"
const val FORCE_SOFTWARE_DECODER = "force-software-decoder"
+ const val ENABLE_ECHO_CANCELLATION = "enable_echo_cancellation"
+ const val ENABLE_NOISE_SUPRESSION = "enable_noise_supression"
+ const val ENABLE_AUTOMATIC_GAIN_CONTROL = "enable_automatic_gain_control"
val APPLY_CONSTRAINTS_KEYS = arrayOf(
VIDEO_FRAME_RATE,
@@ -134,6 +137,18 @@ class SettingsStore(context: Context) {
get() = sharedPreferences.getBoolean(FORCE_SOFTWARE_DECODER, false)
set(value) = putBoolean(FORCE_SOFTWARE_DECODER, value)
+ var enableAEC: Boolean
+ get() = sharedPreferences.getBoolean(ENABLE_ECHO_CANCELLATION, true)
+ set(value) = putBoolean(ENABLE_ECHO_CANCELLATION, value)
+
+ var enableNS: Boolean
+ get() = sharedPreferences.getBoolean(ENABLE_NOISE_SUPRESSION, true)
+ set(value) = putBoolean(ENABLE_NOISE_SUPRESSION, value)
+
+ var enableAGC: Boolean
+ get() = sharedPreferences.getBoolean(ENABLE_AUTOMATIC_GAIN_CONTROL, true)
+ set(value) = putBoolean(ENABLE_AUTOMATIC_GAIN_CONTROL, value)
+
var publishVideo: Boolean
get() = sharedPreferences.getBoolean(PUBLISH_VIDEO, true)
set(value) = putBoolean(PUBLISH_VIDEO, value)
@@ -316,6 +331,9 @@ class SettingsStore(context: Context) {
fun setShowStats(value: Boolean) = apply { editor.putBoolean(SHOW_STATS, value) }
fun setDisableAutoResize(value: Boolean) = apply { editor.putBoolean(DISABLE_AUTO_RESIZE, value) }
fun setForceSoftwareDecoder(value: Boolean) = apply { editor.putBoolean(FORCE_SOFTWARE_DECODER, value) }
+ fun setEnableAEC(value: Boolean) = apply { editor.putBoolean(ENABLE_ECHO_CANCELLATION, value) }
+ fun setEnableNS(value: Boolean) = apply { editor.putBoolean(ENABLE_NOISE_SUPRESSION, value) }
+ fun setEnableAGC(value: Boolean) = apply { editor.putBoolean(ENABLE_AUTOMATIC_GAIN_CONTROL, value) }
fun commit() {
diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index c004c762c..aff43fc4e 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -248,6 +248,31 @@
android:visibility="visible" />
+
+
+
+
+
+
+
Show stats
Disable Auto Resize
Force Software Decoder
+ Enable echo_cancellation
+ Enable noise suppression
+ Enable automatic gain control
✋ Raise Hand
PIP mode
Lower Hand