diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 80ad9ce73..43544b854 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -54,63 +54,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:key="@string/pref_codecs_key"/>
@@ -153,26 +97,7 @@
android:title="@string/pref_video_codecs_title"
android:key="@string/pref_video_codecs_key"
android:dependency="@string/pref_video_enable_key"
- android:shouldDisableView="true" >
-
-
-
-
-
-
-
-
-
-
+ android:shouldDisableView="true"/>
diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java
index ba79ac2ed..a1c36b195 100644
--- a/src/org/linphone/LinphonePreferences.java
+++ b/src/org/linphone/LinphonePreferences.java
@@ -322,7 +322,13 @@ public class LinphonePreferences {
// End of accounts settings
// Audio settings
+ public void setEchoCancellation(boolean enable) {
+ getLc().enableEchoCancellation(enable);
+ }
+ public boolean isEchoCancellationEnabled() {
+ return getLc().isEchoCancellationEnabled();
+ }
// End of audio settings
// Video settings
diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java
index c1d17b8a6..fe4f7d636 100644
--- a/src/org/linphone/SettingsFragment.java
+++ b/src/org/linphone/SettingsFragment.java
@@ -11,6 +11,7 @@ import org.linphone.core.LinphoneCore.MediaEncryption;
import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneProxyConfig;
+import org.linphone.core.PayloadType;
import org.linphone.mediastream.Log;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
@@ -54,6 +55,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
private void initSettings() {
//initAccounts(); Init accounts on Resume instead of on Create to update the account list when coming back from wizard
+ initAudioSettings();
initNetworkSettings();
initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key)));
@@ -100,6 +102,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
// Sets listener for each preference to update the matching value in linphonecore
private void setListeners() {
+ setAudioPreferencesListener();
setNetworkPreferencesListener();
setAdvancedPreferencesListener();
}
@@ -375,6 +378,63 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
pref.setEntryValues(contents);
}
+ private void initAudioSettings() {
+ PreferenceCategory codecs = (PreferenceCategory) findPreference(getString(R.string.pref_codecs_key));
+ codecs.removeAll();
+
+ LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
+ for(final PayloadType pt : lc.getAudioCodecs()) {
+ CheckBoxPreference codec = new CheckBoxPreference(LinphoneService.instance());
+ codec.setTitle(pt.getMime());
+ codec.setSummary(pt.getRate() + " Hz");
+ codec.setChecked(lc.isPayloadTypeEnabled(pt));
+
+ codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean enable = (Boolean) newValue;
+ try {
+ LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable);
+ } catch (LinphoneCoreException e) {
+ e.printStackTrace();
+ }
+ return true;
+ }
+ });
+
+ codecs.addPreference(codec);
+ }
+
+ CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key));
+ echoCancellation.setChecked(mPrefs.isEchoCancellationEnabled());
+ }
+
+ private void setAudioPreferencesListener() {
+ findPreference(getString(R.string.pref_echo_cancellation_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean enabled = (Boolean) newValue;
+ mPrefs.setEchoCancellation(enabled);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_echo_canceller_calibration_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ synchronized (SettingsFragment.this) {
+ try {
+ LinphoneManager.getInstance().startEcCalibration(SettingsFragment.this);
+ preference.setSummary(R.string.ec_calibrating);
+ } catch (LinphoneCoreException e) {
+ Log.w(e, "Cannot calibrate EC");
+ }
+ }
+ return true;
+ }
+ });
+ }
+
private void initNetworkSettings() {
initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key)));
initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key)));
@@ -609,8 +669,24 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
}
@Override
- public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) {
-
+ public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key));
+ Preference echoCancellerCalibration = findPreference(getString(R.string.pref_echo_canceller_calibration_key));
+
+ if (status == EcCalibratorStatus.DoneNoEcho) {
+ echoCancellerCalibration.setSummary(R.string.no_echo);
+ echoCancellation.setChecked(false);
+ } else if (status == EcCalibratorStatus.Done) {
+ echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
+ echoCancellation.setChecked(true);
+ } else if (status == EcCalibratorStatus.Failed) {
+ echoCancellerCalibration.setSummary(R.string.failed);
+ echoCancellation.setChecked(true);
+ }
+ }
+ });
}
@Override