diff --git a/res/values/strings.xml b/res/values/strings.xml
index e10a5d1e9..9c063f4cc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -99,7 +99,7 @@
No phone numbers found for %s
Filter contacts
%s\'s phone numbers
- Echo canceler calibration
+ Echo canceller calibration
Echo limiter
Use front camera
Video
@@ -187,7 +187,7 @@
Cannot invite destination address [%s]
started
-Removes the echo heard by other end
+Removes the echo heard by other end (not recommended)
Removes the echo heard by other end (brute force method)
Stun server
Calibrating...
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index fb3927936..26279ff3f 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -41,14 +41,15 @@
-
+
+
-
-
+
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 45275e64e..651e4c5ba 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -21,15 +21,12 @@ package org.linphone;
import static android.content.Intent.ACTION_MAIN;
-import org.linphone.LinphoneManager.EcCalibrationListener;
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
import org.linphone.core.CallDirection;
import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCore;
-import org.linphone.core.LinphoneCoreException;
import org.linphone.core.Log;
import org.linphone.core.LinphoneCall.State;
-import org.linphone.core.LinphoneCore.EcCalibratorStatus;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
@@ -138,20 +135,19 @@ public class LinphoneActivity extends TabActivity implements
switch (requestCode) {
case FIRST_LOGIN_ACTIVITY:
if (resultCode == RESULT_OK) {
- Toast.makeText(this, getString(R.string.ec_calibration_launch_message), Toast.LENGTH_LONG).show();
- try {
- LinphoneManager.getInstance().startEcCalibration(new EcCalibrationListener() {
- public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) {
- PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.this)
- .edit().putBoolean(
- getString(R.string.pref_echo_canceller_calibration_key),
- status == EcCalibratorStatus.Done).commit();
- }
- });
- } catch (LinphoneCoreException e) {
- Log.e(e, "Unable to calibrate EC");
- }
-
+// Toast.makeText(this, getString(R.string.ec_calibration_launch_message), Toast.LENGTH_LONG).show();
+// try {
+// LinphoneManager.getInstance().startEcCalibration(new EcCalibrationListener() {
+// public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) {
+// PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.this)
+// .edit().putBoolean(
+// getString(R.string.pref_echo_canceller_calibration_key),
+// status == EcCalibratorStatus.Done).commit();
+// }
+// });
+// } catch (LinphoneCoreException e) {
+// Log.e(e, "Unable to calibrate EC");
+// }
fillTabHost();
} else {
finish();
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index a980c88f0..08673f824 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -230,7 +230,7 @@ public final class LinphoneManager implements LinphoneCoreListener {
public void routeAudioToSpeaker() {
routeAudioToSpeakerHelper(true);
LinphoneCall currentCall = mLc.getCurrentCall();
- if (currentCall != null) {
+ if (currentCall != null && !Hacks.hasBuiltInEchoCanceller()) {
/*disable EC, it is not efficient enough on speaker mode due to bad quality of speakers and saturation*/
currentCall.enableEchoCancellation(false);
/* instead we prefer the echo limiter */
@@ -243,13 +243,11 @@ public final class LinphoneManager implements LinphoneCoreListener {
*/
public void routeAudioToReceiver() {
routeAudioToSpeakerHelper(false);
- if (mLc.isIncall()) {
+ LinphoneCall call=mLc.getCurrentCall();
+ if (call!=null && !Hacks.hasBuiltInEchoCanceller()) {
//Restore default value
- LinphoneCall call=mLc.getCurrentCall();
- if (call!=null){
- call.enableEchoCancellation(mLc.isEchoCancellationEnabled());
- call.enableEchoLimiter(mLc.isEchoLimiterEnabled());
- }
+ call.enableEchoCancellation(mLc.isEchoCancellationEnabled());
+ call.enableEchoLimiter(mLc.isEchoLimiterEnabled());
}
}
@@ -514,16 +512,16 @@ public final class LinphoneManager implements LinphoneCoreListener {
enableDisableAudioCodec("SILK", 12000, R.string.pref_codec_silk12_key);
enableDisableAudioCodec("SILK", 8000, R.string.pref_codec_silk8_key);
-
+
// Configure video codecs
for (PayloadType videoCodec : mLc.getVideoCodecs()) {
enableDisableVideoCodecs(videoCodec);
}
- boolean use_ec=mPref.getBoolean(getString(R.string.pref_echo_cancellation_key),false);
- boolean use_el=mPref.getBoolean(getString(R.string.pref_echo_limiter_key),false);
- mLc.enableEchoCancellation(use_ec);
- mLc.enableEchoLimiter(use_el);
-
+
+ boolean useEC = getPrefBoolean(R.string.pref_echo_cancellation_key, false);
+ boolean useEL = getPrefBoolean(R.string.pref_echo_limiter_key, false);
+ mLc.enableEchoCancellation(useEC);
+ mLc.enableEchoLimiter(useEL);
} catch (LinphoneCoreException e) {
throw new LinphoneConfigException(getString(R.string.wrong_settings),e);
}
diff --git a/src/org/linphone/LinphonePreferencesActivity.java b/src/org/linphone/LinphonePreferencesActivity.java
index cb7928153..077fc0aa0 100644
--- a/src/org/linphone/LinphonePreferencesActivity.java
+++ b/src/org/linphone/LinphonePreferencesActivity.java
@@ -21,7 +21,6 @@ package org.linphone;
import static org.linphone.R.string.ec_calibrating;
-import static org.linphone.R.string.ec_calibration_launch_message;
import static org.linphone.R.string.pref_codec_amr_key;
import static org.linphone.R.string.pref_codec_ilbc_key;
import static org.linphone.R.string.pref_codec_speex16_key;
@@ -55,7 +54,6 @@ import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
-import android.widget.Toast;
public class LinphonePreferencesActivity extends PreferenceActivity implements EcCalibrationListener {
private Handler mHandler = new Handler();
@@ -129,22 +127,29 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
} else if (!AndroidCameraConfiguration.hasFrontCamera()) {
uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key);
}
- if (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) {
- if (fastCpu) {
- Toast.makeText(this, getString(ec_calibration_launch_message), Toast.LENGTH_LONG).show();
- startEcCalibration();
- }
- prefs().edit().putBoolean(LinphoneActivity.PREF_FIRST_LAUNCH, false).commit();
+ if (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) {
+ doOnFirstLaunch();
}
+ if (Hacks.hasBuiltInEchoCanceller()) {
+ uncheckDisableAndHideCheckbox(R.string.pref_echo_limiter_key);
+ uncheckDisableAndHideCheckbox(R.string.pref_echo_cancellation_key);
+ uncheckDisableAndHideCheckbox(R.string.pref_echo_canceller_calibration_key);
+ }
+
detectVideoCodec(R.string.pref_video_codec_h264_key, "H264");
addEchoPrefsListener();
if (Hacks.needSoftvolume()) checkAndDisableCheckbox(R.string.pref_audio_soft_volume_key);
+
}
+ private void doOnFirstLaunch() {
+ manageCheckbox(R.string.pref_echo_limiter_key, !Hacks.hasBuiltInEchoCanceller(), true, false);
+ prefs().edit().putBoolean(LinphoneActivity.PREF_FIRST_LAUNCH, false).commit();
+ }
private void initializeMediaEncryptionPreferences() {
LinphoneCore lc=LinphoneManager.getLc();