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();