Launch echo canceller calibration on first startup and automatically configure echo canceller according to the results.
This commit is contained in:
parent
501373d96c
commit
2f99e1ba1b
2 changed files with 36 additions and 9 deletions
|
@ -25,6 +25,7 @@ import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager.AddressType;
|
import org.linphone.LinphoneManager.AddressType;
|
||||||
|
import org.linphone.LinphoneManager.EcCalibrationListener;
|
||||||
import org.linphone.LinphoneManager.LinphoneConfigException;
|
import org.linphone.LinphoneManager.LinphoneConfigException;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
|
||||||
|
@ -38,6 +39,7 @@ import org.linphone.core.LinphoneCallLog;
|
||||||
import org.linphone.core.LinphoneCallLog.CallStatus;
|
import org.linphone.core.LinphoneCallLog.CallStatus;
|
||||||
import org.linphone.core.LinphoneChatMessage;
|
import org.linphone.core.LinphoneChatMessage;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||||
import org.linphone.core.LinphoneCore.RegistrationState;
|
import org.linphone.core.LinphoneCore.RegistrationState;
|
||||||
import org.linphone.core.LinphoneCoreException;
|
import org.linphone.core.LinphoneCoreException;
|
||||||
import org.linphone.core.LinphoneCoreFactory;
|
import org.linphone.core.LinphoneCoreFactory;
|
||||||
|
@ -87,7 +89,8 @@ import android.widget.Toast;
|
||||||
public class LinphoneActivity extends FragmentActivity implements OnClickListener, ContactPicked,
|
public class LinphoneActivity extends FragmentActivity implements OnClickListener, ContactPicked,
|
||||||
LinphoneOnCallStateChangedListener,
|
LinphoneOnCallStateChangedListener,
|
||||||
LinphoneOnMessageReceivedListener,
|
LinphoneOnMessageReceivedListener,
|
||||||
LinphoneOnRegistrationStateChangedListener {
|
LinphoneOnRegistrationStateChangedListener,
|
||||||
|
EcCalibrationListener {
|
||||||
public static final String PREF_FIRST_LAUNCH = "pref_first_launch";
|
public static final String PREF_FIRST_LAUNCH = "pref_first_launch";
|
||||||
private static final int SETTINGS_ACTIVITY = 123;
|
private static final int SETTINGS_ACTIVITY = 123;
|
||||||
private static final int FIRST_LOGIN_ACTIVITY = 101;
|
private static final int FIRST_LOGIN_ACTIVITY = 101;
|
||||||
|
@ -1132,10 +1135,31 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
||||||
finish();
|
finish();
|
||||||
stopService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class));
|
stopService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
SharedPreferences.Editor editor = prefs.edit();
|
||||||
|
if (status == EcCalibratorStatus.DoneNoEcho) {
|
||||||
|
editor.putBoolean(getString(R.string.pref_echo_limiter_key), false);
|
||||||
|
editor.putBoolean(getString(R.string.pref_echo_cancellation_key), false);
|
||||||
|
} else if ((status == EcCalibratorStatus.Done) || (status == EcCalibratorStatus.Failed)) {
|
||||||
|
editor.putBoolean(getString(R.string.pref_echo_limiter_key), false);
|
||||||
|
editor.putBoolean(getString(R.string.pref_echo_cancellation_key), true);
|
||||||
|
}
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
if (resultCode == Activity.RESULT_FIRST_USER && requestCode == SETTINGS_ACTIVITY) {
|
if ((requestCode == FIRST_LOGIN_ACTIVITY) && (resultCode == RESULT_OK)) {
|
||||||
|
Toast.makeText(this, getString(R.string.ec_calibration_launch_message), Toast.LENGTH_LONG).show();
|
||||||
|
try {
|
||||||
|
LinphoneManager.getInstance().startEcCalibration(this);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
Log.e(e, "Unable to calibrate EC");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (resultCode == Activity.RESULT_FIRST_USER && requestCode == SETTINGS_ACTIVITY) {
|
||||||
if (data.getExtras().getBoolean("Exit", false)) {
|
if (data.getExtras().getBoolean("Exit", false)) {
|
||||||
exit();
|
exit();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -130,7 +130,6 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
|
||||||
findPreference(pref_codec_speex16_key).setEnabled(true);
|
findPreference(pref_codec_speex16_key).setEnabled(true);
|
||||||
//findPreference(pref_codec_speex32_key)).setEnabled(enableIlbc);
|
//findPreference(pref_codec_speex32_key)).setEnabled(enableIlbc);
|
||||||
}
|
}
|
||||||
findPreference(pref_echo_limiter_key).setEnabled(true);
|
|
||||||
|
|
||||||
initializeMediaEncryptionPreferences();
|
initializeMediaEncryptionPreferences();
|
||||||
|
|
||||||
|
@ -213,7 +212,6 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doOnFirstLaunch() {
|
private void doOnFirstLaunch() {
|
||||||
manageCheckbox(R.string.pref_echo_limiter_key, !Hacks.hasBuiltInEchoCanceller(), true, false);
|
|
||||||
prefs().edit().putBoolean(LinphoneActivity.PREF_FIRST_LAUNCH, false).commit();
|
prefs().edit().putBoolean(LinphoneActivity.PREF_FIRST_LAUNCH, false).commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,12 +304,17 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
|
||||||
public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
|
public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
if (status == EcCalibratorStatus.Done) {
|
if (status == EcCalibratorStatus.DoneNoEcho) {
|
||||||
|
elPref.setChecked(false);
|
||||||
|
ecPref.setChecked(false);
|
||||||
|
} else if (status == EcCalibratorStatus.Done) {
|
||||||
ecCalibratePref.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
ecCalibratePref.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
||||||
|
elPref.setChecked(false);
|
||||||
|
ecPref.setChecked(true);
|
||||||
} else if (status == EcCalibratorStatus.Failed) {
|
} else if (status == EcCalibratorStatus.Failed) {
|
||||||
ecCalibratePref.setSummary(R.string.failed);
|
ecCalibratePref.setSummary(R.string.failed);
|
||||||
elPref.setChecked(true);
|
elPref.setChecked(false);
|
||||||
ecPref.setChecked(false);
|
ecPref.setChecked(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue