From 6e65574e16b53b9dce80a368f3a6ebf0857e3123 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Wed, 17 Oct 2012 12:39:40 +0200 Subject: [PATCH] Move automatic echo canceller calibration in the wizard and collect the results on the linphone server. --- res/drawable-xhdpi/logo.png | Bin 0 -> 4858 bytes res/drawable-xlarge-xhdpi/logo.png | Bin 0 -> 10691 bytes res/layout/setup_ec_calibration.xml | 27 +++++ res/values/strings.xml | 1 + src/org/linphone/LinphoneActivity.java | 29 +---- .../EchoCancellerCalibrationFragment.java | 109 ++++++++++++++++++ .../linphone/setup/GenericLoginFragment.java | 2 +- .../linphone/setup/LinphoneLoginFragment.java | 2 +- src/org/linphone/setup/SetupActivity.java | 44 +++++-- src/org/linphone/setup/SetupFragments.java | 3 +- 10 files changed, 179 insertions(+), 38 deletions(-) create mode 100644 res/drawable-xhdpi/logo.png create mode 100644 res/drawable-xlarge-xhdpi/logo.png create mode 100644 res/layout/setup_ec_calibration.xml create mode 100644 src/org/linphone/setup/EchoCancellerCalibrationFragment.java diff --git a/res/drawable-xhdpi/logo.png b/res/drawable-xhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff196251617ba5f90bc7225b24baa17dd4a3e7ce GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/res/layout/setup_ec_calibration.xml b/res/layout/setup_ec_calibration.xml new file mode 100644 index 000000000..0b795c433 --- /dev/null +++ b/res/layout/setup_ec_calibration.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index e105a5692..eab717a0c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -385,6 +385,7 @@ utomatically accept new friend requests Friend request wants to share it\'s presence status with you and be aware of yours. + Echo canceller calibration in progress diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index ce50e93c7..53f2c500e 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -25,7 +25,6 @@ import java.util.Calendar; import java.util.List; import org.linphone.LinphoneManager.AddressType; -import org.linphone.LinphoneManager.EcCalibrationListener; import org.linphone.LinphoneManager.LinphoneConfigException; import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener; import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener; @@ -39,7 +38,6 @@ import org.linphone.core.LinphoneCallLog; import org.linphone.core.LinphoneCallLog.CallStatus; import org.linphone.core.LinphoneChatMessage; import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; @@ -47,7 +45,6 @@ import org.linphone.core.LinphoneFriend; import org.linphone.core.Log; import org.linphone.core.OnlineStatus; import org.linphone.mediastream.Version; -import org.linphone.mediastream.video.capture.hwconf.Hacks; import org.linphone.setup.SetupActivity; import org.linphone.ui.AddressText; @@ -90,8 +87,7 @@ import android.widget.Toast; public class LinphoneActivity extends FragmentActivity implements OnClickListener, ContactPicked, LinphoneOnCallStateChangedListener, LinphoneOnMessageReceivedListener, - LinphoneOnRegistrationStateChangedListener, - EcCalibrationListener { + LinphoneOnRegistrationStateChangedListener { public static final String PREF_FIRST_LAUNCH = "pref_first_launch"; private static final int SETTINGS_ACTIVITY = 123; private static final int FIRST_LOGIN_ACTIVITY = 101; @@ -1137,30 +1133,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene 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_cancellation_key), false); - } else if ((status == EcCalibratorStatus.Done) || (status == EcCalibratorStatus.Failed)) { - editor.putBoolean(getString(R.string.pref_echo_cancellation_key), true); - } - editor.commit(); - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if ((requestCode == FIRST_LOGIN_ACTIVITY) && (resultCode == RESULT_OK)) { - if (!Hacks.hasBuiltInEchoCanceller()) { - 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 (resultCode == Activity.RESULT_FIRST_USER && requestCode == SETTINGS_ACTIVITY) { if (data.getExtras().getBoolean("Exit", false)) { exit(); } else { diff --git a/src/org/linphone/setup/EchoCancellerCalibrationFragment.java b/src/org/linphone/setup/EchoCancellerCalibrationFragment.java new file mode 100644 index 000000000..23e0622f5 --- /dev/null +++ b/src/org/linphone/setup/EchoCancellerCalibrationFragment.java @@ -0,0 +1,109 @@ +package org.linphone.setup; + +/* +EchoCancellerCalibrationFragment.java +Copyright (C) 2012 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +import java.net.URL; + +import org.linphone.LinphoneManager; +import org.linphone.LinphoneManager.EcCalibrationListener; +import org.linphone.R; +import org.linphone.core.LinphoneCore.EcCalibratorStatus; +import org.linphone.core.LinphoneCoreException; +import org.linphone.core.Log; + +import de.timroes.axmlrpc.XMLRPCCallback; +import de.timroes.axmlrpc.XMLRPCClient; +import de.timroes.axmlrpc.XMLRPCException; +import de.timroes.axmlrpc.XMLRPCServerException; + +import android.content.SharedPreferences; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +/** + * @author Ghislain MARY + */ +public class EchoCancellerCalibrationFragment extends Fragment implements EcCalibrationListener { + private Handler mHandler = new Handler(); + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.setup_ec_calibration, container, false); + + try { + LinphoneManager.getInstance().startEcCalibration(this); + } catch (LinphoneCoreException e) { + Log.e(e, "Unable to calibrate EC"); + } + + return view; + } + + @Override + public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + SharedPreferences.Editor editor = prefs.edit(); + if (status == EcCalibratorStatus.DoneNoEcho) { + 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_cancellation_key), true); + } + editor.commit(); + sendEcCalibrationResult(status, delayMs); + } + + private void sendEcCalibrationResult(EcCalibratorStatus status, int delayMs) { + try { + XMLRPCClient client = new XMLRPCClient(new URL(getString(R.string.wizard_url))); + + XMLRPCCallback listener = new XMLRPCCallback() { + Runnable runFinished = new Runnable() { + public void run() { + SetupActivity.instance().isEchoCalibrationFinished(); + } + }; + + public void onResponse(long id, Object result) { + mHandler.post(runFinished); + } + + public void onError(long id, XMLRPCException error) { + mHandler.post(runFinished); + } + + public void onServerError(long id, XMLRPCServerException error) { + mHandler.post(runFinished); + } + }; + + Log.i("Add echo canceller calibration result: manufacturer=" + Build.MANUFACTURER + " model=" + Build.MODEL + " status=" + status + " delay=" + delayMs + "ms"); + client.callAsync(listener, "add_ec_calibration_result", Build.MANUFACTURER, Build.MODEL, status.toString(), delayMs); + } + catch(Exception ex) {} + } +} diff --git a/src/org/linphone/setup/GenericLoginFragment.java b/src/org/linphone/setup/GenericLoginFragment.java index 7de4c705a..ace26f74f 100644 --- a/src/org/linphone/setup/GenericLoginFragment.java +++ b/src/org/linphone/setup/GenericLoginFragment.java @@ -59,7 +59,7 @@ public class GenericLoginFragment extends Fragment implements OnClickListener { return; } - SetupActivity.instance().logIn(login.getText().toString(), password.getText().toString(), domain.getText().toString()); + SetupActivity.instance().genericLogIn(login.getText().toString(), password.getText().toString(), domain.getText().toString()); } } } diff --git a/src/org/linphone/setup/LinphoneLoginFragment.java b/src/org/linphone/setup/LinphoneLoginFragment.java index 91e5fcf73..198da57cb 100644 --- a/src/org/linphone/setup/LinphoneLoginFragment.java +++ b/src/org/linphone/setup/LinphoneLoginFragment.java @@ -58,7 +58,7 @@ public class LinphoneLoginFragment extends Fragment implements OnClickListener { return; } - SetupActivity.instance().logIn(login.getText().toString(), password.getText().toString(), getString(R.string.default_domain)); + SetupActivity.instance().linphoneLogIn(login.getText().toString(), password.getText().toString()); } } } diff --git a/src/org/linphone/setup/SetupActivity.java b/src/org/linphone/setup/SetupActivity.java index fbec54211..b35e48124 100644 --- a/src/org/linphone/setup/SetupActivity.java +++ b/src/org/linphone/setup/SetupActivity.java @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import org.linphone.LinphoneManager; import org.linphone.R; import org.linphone.core.Log; +import org.linphone.mediastream.video.capture.hwconf.Hacks; import android.app.Activity; import android.content.Context; @@ -141,14 +142,32 @@ public class SetupActivity extends FragmentActivity implements OnClickListener { Log.e(e, "Error while initializing from config in first login activity"); Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show(); } - + } + + public void linphoneLogIn(String username, String password) { + logIn(username, password, getString(R.string.default_domain)); if (LinphoneManager.getLc().getDefaultProxyConfig() != null) { - writePreference(R.string.first_launch_suceeded_once_key, true); - setResult(Activity.RESULT_OK); - finish(); + if (!Hacks.hasBuiltInEchoCanceller()) { + EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment(); + changeFragment(fragment); + currentFragment = SetupFragments.ECHO_CANCELLER_CALIBRATION; + back.setVisibility(View.GONE); + next.setVisibility(View.VISIBLE); + next.setEnabled(false); + cancel.setEnabled(false); + } else { + success(); + } } } - + + public void genericLogIn(String username, String password, String domain) { + logIn(username, password, domain); + if (LinphoneManager.getLc().getDefaultProxyConfig() != null) { + success(); + } + } + private void writePreference(int key, String value) { mPref.edit().putString(getString(key), value).commit(); } @@ -237,9 +256,12 @@ public class SetupActivity extends FragmentActivity implements OnClickListener { Log.e(e, "Error while initializing from config in first login activity"); Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show(); } - - writePreference(R.string.first_launch_suceeded_once_key, true); - finish(); + + success(); + } + + public void isEchoCalibrationFinished() { + success(); } public boolean onKeyDown(int keyCode, KeyEvent event) { @@ -249,4 +271,10 @@ public class SetupActivity extends FragmentActivity implements OnClickListener { } return super.onKeyDown(keyCode, event); } + + public void success() { + writePreference(R.string.first_launch_suceeded_once_key, true); + setResult(Activity.RESULT_OK); + finish(); + } } diff --git a/src/org/linphone/setup/SetupFragments.java b/src/org/linphone/setup/SetupFragments.java index 966ab5863..afd878dc4 100644 --- a/src/org/linphone/setup/SetupFragments.java +++ b/src/org/linphone/setup/SetupFragments.java @@ -26,5 +26,6 @@ public enum SetupFragments { WIZARD, WIZARD_CONFIRM, LINPHONE_LOGIN, - GENERIC_LOGIN; + GENERIC_LOGIN, + ECHO_CANCELLER_CALIBRATION; }