diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index f322106a4..a37e68e4f 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -33,7 +33,7 @@
false
false
- false
+ true
false
true
diff --git a/tests/src/org/linphone/test/Calls.java b/tests/src/org/linphone/test/Calls.java
deleted file mode 100644
index 8ce7fdb8a..000000000
--- a/tests/src/org/linphone/test/Calls.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.linphone.test;
-
-import junit.framework.Assert;
-
-import org.linphone.InCallActivity;
-import org.linphone.LinphoneActivity;
-import org.linphone.core.LinphoneCall;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.SmallTest;
-
-/**
- * @author Sylvain Berfini
- */
-public class Calls extends SampleTest {
-
- @SmallTest
- @MediumTest
- @LargeTest
- public void testASimpleCall() {
- solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain));
- solo.clickOnView(solo.getView(org.linphone.R.id.Call));
-
- solo.waitForActivity("InCallActivity", 5000);
- solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class);
-
- solo.sleep(2000);
- Assert.assertEquals(LinphoneCall.State.StreamsRunning, LinphoneTestManager.getLc().getCalls()[0].getState());
-
- solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
- solo.waitForActivity("LinphoneActivity", 5000);
- solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
- }
-}
diff --git a/tests/src/org/linphone/test/CallsAudio.java b/tests/src/org/linphone/test/CallsAudio.java
new file mode 100644
index 000000000..2539f3ec2
--- /dev/null
+++ b/tests/src/org/linphone/test/CallsAudio.java
@@ -0,0 +1,353 @@
+package org.linphone.test;
+
+import junit.framework.Assert;
+
+import org.linphone.InCallActivity;
+import org.linphone.LinphoneActivity;
+import org.linphone.LinphoneManager;
+import org.linphone.core.LinphoneCall;
+
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * @author Sylvain Berfini
+ */
+public class CallsAudio extends SampleTest {
+
+ @SmallTest
+ @MediumTest
+ @LargeTest
+ public void testAInit() {
+ //Disable video
+ goToSettings();
+
+ selectItemInListOnUIThread(3);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
+ solo.sleep(500);
+
+ solo.goBack();
+ solo.sleep(1000);
+ Assert.assertFalse(LinphoneManager.getLc().isVideoEnabled());
+ }
+
+ @SmallTest
+ @MediumTest
+ @LargeTest
+ public void testBOutgoingCallWithDefaultConfig() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testCDTMFRFC2833InPCMUCall() {
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu));
+ goBackToDialerAfterCodecChanges();
+ solo.sleep(1000);
+
+ LinphoneManager.getLc().setUseRfc2833ForDtmfs(true);
+ LinphoneManager.getLc().setUseSipInfoForDtmfs(false);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Digit3));
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+
+ solo.sleep(1000);
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+
+ //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed
+ //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
+ LinphoneTestManager.getInstance().isDTMFReceived = false;
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testDDTMFSIPINFO() {
+ LinphoneManager.getLc().setUseRfc2833ForDtmfs(false);
+ LinphoneManager.getLc().setUseSipInfoForDtmfs(true);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Digit3));
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+
+ solo.sleep(1000);
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+
+ //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed
+ //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
+ LinphoneTestManager.getInstance().isDTMFReceived = false;
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testEOutgoingCallToAudioClient() {
+ LinphoneTestManager.getLc().enableVideo(false, false);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testFOutgoingCallToVideoClient() {
+ LinphoneTestManager.getLc().enableVideo(true, true);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testGOutgoingCallCancelled() {
+ LinphoneTestManager.getInstance().autoAnswer = false;
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ solo.waitForActivity("InCallActivity", 5000);
+ solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class);
+
+ solo.sleep(2000);
+ Assert.assertEquals(LinphoneCall.State.OutgoingRinging, LinphoneManager.getLc().getCalls()[0].getState());
+
+ LinphoneTestManager.getInstance().autoAnswer = true;
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testHOutgoingCallDeclined() {
+ LinphoneTestManager.getInstance().autoAnswer = true; // Just in case
+ LinphoneTestManager.getInstance().declineCall = true;
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ solo.sleep(500);
+ Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.error_call_declined)));
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+
+ LinphoneTestManager.getInstance().declineCall = false;
+ }
+
+ @MediumTest // TODO: Remove
+ @LargeTest
+ public void testIIncomingAudioCall() {
+ LinphoneTestManager.getInstance().declineCall = false; // Just in case
+ LinphoneTestManager.getLc().enableVideo(false, false);
+ }
+
+ @MediumTest // TODO: Remove
+ @LargeTest
+ public void testJIncomingVideoCall() {
+ LinphoneTestManager.getLc().enableVideo(true, true);
+
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testKSelfPauseResumeCall() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.pause));
+ LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState();
+ solo.sleep(1000);
+
+ Assert.assertTrue(LinphoneCall.State.Paused == state || LinphoneCall.State.Pausing == state);
+ solo.clickOnView(solo.getView(org.linphone.R.id.pause));
+ solo.sleep(1000);
+
+ state = LinphoneManager.getLc().getCalls()[0].getState();
+ Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state);
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testLRemotePauseResumeCall() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ LinphoneTestManager.getLc().pauseAllCalls();
+ solo.sleep(1000);
+
+ Assert.assertEquals(LinphoneCall.State.PausedByRemote, LinphoneManager.getLc().getCalls()[0].getState());
+ LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]);
+ solo.sleep(1000);
+
+ LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState();
+ Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state);
+
+ solo.clickLongOnScreen(200, 200); //To ensure controls are shown
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testMSwitchOnVideoInCallIsNotAllowed() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ Assert.assertFalse(solo.getView(org.linphone.R.id.video).isEnabled());
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ //TODO: Test each audio codec
+
+ private void assertCallIsCorrectlyRunning() {
+ solo.waitForActivity("InCallActivity", 5000);
+ solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class);
+
+ solo.sleep(2000);
+ LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
+ Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState());
+ }
+
+ private void goToSettings() {
+ solo.waitForActivity("LinphoneActivity", 2000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.settings));
+ }
+
+ private void goToAudioCodecsSettings() {
+ goToSettings();
+
+ selectItemInListOnUIThread(4);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_audio));
+ solo.sleep(500);
+ }
+
+ private void disableAllEnabledAudioCodecs() {
+ goToAudioCodecsSettings();
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext);
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex16_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex8_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_ilbc_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_ilbc_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amr_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amr_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amrwb_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amrwb_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g729_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g729_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_gsm_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_gsm_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g722_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g722_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk24_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk24_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk16_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcmu_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcmu_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcma_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcma_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma));
+ solo.sleep(500);
+ }
+ }
+
+ private void goBackToDialerAfterCodecChanges()
+ {
+ solo.goBack();
+ solo.goBack();
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+}
diff --git a/tests/src/org/linphone/test/CallsVideo.java b/tests/src/org/linphone/test/CallsVideo.java
new file mode 100644
index 000000000..5309d0555
--- /dev/null
+++ b/tests/src/org/linphone/test/CallsVideo.java
@@ -0,0 +1,387 @@
+package org.linphone.test;
+
+import junit.framework.Assert;
+
+import org.linphone.InCallActivity;
+import org.linphone.LinphoneActivity;
+import org.linphone.LinphoneManager;
+import org.linphone.core.LinphoneCall;
+
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * @author Sylvain Berfini
+ */
+public class CallsVideo extends SampleTest {
+
+ @SmallTest
+ @MediumTest
+ @LargeTest
+ public void testAInit() {
+ //Disable video
+ goToSettings();
+
+ selectItemInListOnUIThread(3);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
+ solo.sleep(500);
+
+ solo.goBack();
+ solo.sleep(1000);
+ Assert.assertTrue(LinphoneManager.getLc().isVideoEnabled());
+ }
+
+ @SmallTest
+ @MediumTest
+ @LargeTest
+ public void testBOutgoingCallWithDefaultConfig() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testCDTMFRFC2833InPCMUCall() {
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu));
+ goBackToDialerAfterCodecChanges();
+ solo.sleep(1000);
+
+ LinphoneManager.getLc().setUseRfc2833ForDtmfs(true);
+ LinphoneManager.getLc().setUseSipInfoForDtmfs(false);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Digit3));
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+
+ solo.sleep(1000);
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+
+ //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed
+ //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
+ LinphoneTestManager.getInstance().isDTMFReceived = false;
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testDDTMFSIPINFO() {
+ LinphoneManager.getLc().setUseRfc2833ForDtmfs(false);
+ LinphoneManager.getLc().setUseSipInfoForDtmfs(true);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Digit3));
+ solo.clickOnView(solo.getView(org.linphone.R.id.dialer));
+
+ solo.sleep(1000);
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+
+ //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed
+ //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived);
+ LinphoneTestManager.getInstance().isDTMFReceived = false;
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testEOutgoingCallToAudioClient() {
+ LinphoneTestManager.getLc().enableVideo(false, false);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testFOutgoingCallToVideoClient() {
+ LinphoneTestManager.getLc().enableVideo(true, true);
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testGOutgoingCallCancelled() {
+ LinphoneTestManager.getInstance().autoAnswer = false;
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ solo.waitForActivity("InCallActivity", 5000);
+ solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class);
+
+ solo.sleep(2000);
+ Assert.assertEquals(LinphoneCall.State.OutgoingRinging, LinphoneManager.getLc().getCalls()[0].getState());
+
+ LinphoneTestManager.getInstance().autoAnswer = true;
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testHOutgoingCallDeclined() {
+ LinphoneTestManager.getInstance().autoAnswer = true; // Just in case
+ LinphoneTestManager.getInstance().declineCall = true;
+
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ solo.sleep(500);
+ Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.error_call_declined)));
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+
+ LinphoneTestManager.getInstance().declineCall = false;
+ }
+
+ @MediumTest // TODO: Remove
+ @LargeTest
+ public void testIIncomingAudioCall() {
+ LinphoneTestManager.getInstance().declineCall = false; // Just in case
+ LinphoneTestManager.getLc().enableVideo(false, false);
+
+ }
+
+ @MediumTest // TODO: Remove
+ @LargeTest
+ public void testJIncomingVideoCall() {
+ LinphoneTestManager.getLc().enableVideo(true, true);
+
+ }
+
+ //TODO: Test each video codec
+
+ @MediumTest
+ @LargeTest
+ public void testKSelfPauseResumeCall() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.pause));
+ LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState();
+ solo.sleep(1000);
+
+ Assert.assertTrue(LinphoneCall.State.Paused == state || LinphoneCall.State.Pausing == state);
+ solo.clickOnView(solo.getView(org.linphone.R.id.pause));
+ solo.sleep(1000);
+
+ state = LinphoneManager.getLc().getCalls()[0].getState();
+ Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state);
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testLRemotePauseResumeCall() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ LinphoneTestManager.getLc().pauseAllCalls();
+ solo.sleep(1000);
+
+ Assert.assertEquals(LinphoneCall.State.PausedByRemote, LinphoneManager.getLc().getCalls()[0].getState());
+ LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]);
+ solo.sleep(1000);
+
+ LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState();
+ Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state);
+
+ solo.clickLongOnScreen(200, 200); //To ensure controls are shown
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ @MediumTest
+ @LargeTest
+ public void testMSwitchOffVideoInCall() {
+ solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain));
+ solo.clickOnView(solo.getView(org.linphone.R.id.Call));
+
+ assertCallIsCorrectlyRunning();
+
+ Assert.assertTrue(solo.getView(org.linphone.R.id.video).isEnabled());
+ solo.clickOnView(solo.getView(org.linphone.R.id.video));
+ Assert.assertFalse(LinphoneManager.getLc().getCurrentCall().cameraEnabled());
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.hangUp));
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+
+ private void assertCallIsCorrectlyRunning() {
+ solo.waitForActivity("InCallActivity", 5000);
+ solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class);
+
+ solo.sleep(2000);
+ LinphoneCall call = LinphoneManager.getLc().getCalls()[0];
+ Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState());
+ }
+
+ private void goToSettings() {
+ solo.waitForActivity("LinphoneActivity", 2000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+
+ solo.clickOnView(solo.getView(org.linphone.R.id.settings));
+ }
+
+ private void goToAudioCodecsSettings() {
+ goToSettings();
+
+ selectItemInListOnUIThread(4);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_audio));
+ solo.sleep(500);
+ }
+
+ private void goToVideoCodecsSettings() {
+ goToSettings();
+
+ selectItemInListOnUIThread(6);
+ if (solo.searchText(aContext.getString(org.linphone.R.string.pref_video), 2)) // Needed in case pref_video_enable_title contains pref_video
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video), 2);
+ else
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video));
+ solo.sleep(500);
+ }
+
+ private void disableAllEnabledAudioCodecs() {
+ goToAudioCodecsSettings();
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext);
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex16_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex8_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_ilbc_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_ilbc_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amr_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amr_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amrwb_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amrwb_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g729_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g729_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_gsm_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_gsm_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g722_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g722_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk24_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk24_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk16_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcmu_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcmu_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcma_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcma_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma));
+ solo.sleep(500);
+ }
+ }
+
+ private void disableAllEnabledVideoCodecs() {
+ goToVideoCodecsSettings();
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext);
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_vp8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_vp8_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_vp8_title));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_h264_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_h264_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_h264_title));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_mpeg4_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_mpeg4_default))) {
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_mpeg4_title));
+ solo.sleep(500);
+ }
+ }
+
+ private void goBackToDialerAfterCodecChanges()
+ {
+ solo.goBack();
+ solo.goBack();
+
+ solo.waitForActivity("LinphoneActivity", 5000);
+ solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class);
+ }
+}
diff --git a/tests/src/org/linphone/test/LinphoneTestManager.java b/tests/src/org/linphone/test/LinphoneTestManager.java
index c4a9e4425..62241a5fd 100644
--- a/tests/src/org/linphone/test/LinphoneTestManager.java
+++ b/tests/src/org/linphone/test/LinphoneTestManager.java
@@ -49,6 +49,9 @@ public class LinphoneTestManager implements LinphoneCoreListener {
private static Transports initialTransports;
public String lastMessageReceived;
+ public boolean isDTMFReceived = false;
+ public boolean autoAnswer = true;
+ public boolean declineCall = false;
private Timer mTimer = new Timer("Linphone scheduler");
@@ -62,7 +65,7 @@ public class LinphoneTestManager implements LinphoneCoreListener {
throw new RuntimeException("Linphone Manager is already initialized");
instance = new LinphoneTestManager(ac, ic);
- instance.startLibLinphone(ac);
+ instance.startLibLinphone(ic);
TelephonyManager tm = (TelephonyManager) ac.getSystemService(Context.TELEPHONY_SERVICE);
boolean gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE;
setGsmIdle(gsmIdle);
@@ -188,6 +191,9 @@ public class LinphoneTestManager implements LinphoneCoreListener {
mLc.setFirewallPolicy(FirewallPolicy.NoFirewall);
}
+ mLc.setUseRfc2833ForDtmfs(false);
+ mLc.setUseSipInfoForDtmfs(true);
+
//accounts
try {
initAccounts();
@@ -411,10 +417,14 @@ public class LinphoneTestManager implements LinphoneCoreListener {
// TODO Auto-generated method stub
Log.e("Call state = " + cstate.toString());
if (cstate == LinphoneCall.State.IncomingReceived) {
- try {
- mLc.acceptCall(call);
- } catch (LinphoneCoreException e) {
- e.printStackTrace();
+ if (declineCall) {
+ mLc.terminateCall(call);
+ } else if (autoAnswer) {
+ try {
+ mLc.acceptCall(call);
+ } catch (LinphoneCoreException e) {
+ e.printStackTrace();
+ }
}
}
}
@@ -471,7 +481,8 @@ public class LinphoneTestManager implements LinphoneCoreListener {
@Override
public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) {
// TODO Auto-generated method stub
-
+ Log.e("DTMF received = " + dtmf);
+ isDTMFReceived = true;
}
@Override
diff --git a/tests/src/org/linphone/test/SampleTest.java b/tests/src/org/linphone/test/SampleTest.java
index 35bcb9bb4..40269f94b 100644
--- a/tests/src/org/linphone/test/SampleTest.java
+++ b/tests/src/org/linphone/test/SampleTest.java
@@ -1,6 +1,7 @@
package org.linphone.test;
import org.linphone.LinphoneLauncherActivity;
+import org.linphone.LinphoneManager;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase2;
@@ -31,6 +32,7 @@ public abstract class SampleTest extends ActivityInstrumentationTestCase2