diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index 71a18acfa..52bcb796e 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -22,6 +22,7 @@
false
false
+ false
false
false
false
diff --git a/src/org/linphone/InCallActivity.java b/src/org/linphone/InCallActivity.java
index a99505f5b..b509dcbbb 100644
--- a/src/org/linphone/InCallActivity.java
+++ b/src/org/linphone/InCallActivity.java
@@ -333,16 +333,13 @@ public class InCallActivity extends FragmentActivity implements
mHandler.post(new Runnable() {
@Override
public void run() {
- if (getResources().getBoolean(R.bool.disable_options_in_call)) {
- options.setEnabled(false);
- } else {
- options.setEnabled(true);
- }
+ addCall.setEnabled(LinphoneManager.getLc().getCallsNb() < LinphoneManager.getLc().getMaxCalls());
+ transfer.setEnabled(getResources().getBoolean(R.bool.allow_transfers));
+ options.setEnabled(!getResources().getBoolean(R.bool.disable_options_in_call) && (addCall.isEnabled() || transfer.isEnabled()));
video.setEnabled(true);
micro.setEnabled(true);
speaker.setEnabled(true);
- addCall.setEnabled(true);
transfer.setEnabled(true);
pause.setEnabled(true);
dialer.setEnabled(true);
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index 2a4bd7415..947c1bcc3 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -1637,7 +1637,7 @@ public class LinphoneManager implements LinphoneCoreListener {
public void onRegistrationStateChanged(RegistrationState state,
String message) {
if (serviceListener != null) serviceListener.onRegistrationStateChanged(state, message);
- for (LinphoneOnRegistrationStateChangedListener listener : getSimpleListeners(LinphoneActivity.class)) {
+ for (LinphoneOnRegistrationStateChangedListener listener : getSimpleListeners(LinphoneOnRegistrationStateChangedListener.class)) {
listener.onRegistrationStateChanged(state);
}
}
diff --git a/src/org/linphone/setup/LinphoneLoginFragment.java b/src/org/linphone/setup/LinphoneLoginFragment.java
index 2b4c361ca..69180a2c1 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().linphoneLogIn(login.getText().toString(), password.getText().toString());
+ SetupActivity.instance().linphoneLogIn(login.getText().toString(), password.getText().toString(), getResources().getBoolean(R.bool.setup_account_validation_mandatory));
}
@Override
diff --git a/src/org/linphone/setup/SetupActivity.java b/src/org/linphone/setup/SetupActivity.java
index 0e5a1d67e..cfb8644f9 100644
--- a/src/org/linphone/setup/SetupActivity.java
+++ b/src/org/linphone/setup/SetupActivity.java
@@ -18,7 +18,9 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
import org.linphone.LinphoneManager;
+import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
import org.linphone.R;
+import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.mediastream.Log;
import android.app.Activity;
@@ -26,6 +28,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
+import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
@@ -47,6 +50,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
private SetupFragmentsEnum firstFragment;
private Fragment fragment;
private boolean accountCreated = false;
+ private Handler mHandler = new Handler();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -191,9 +195,55 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
launchEchoCancellerCalibration(sendEcCalibrationResult);
}
}
+
+
+ private LinphoneOnRegistrationStateChangedListener registrationListener = new LinphoneOnRegistrationStateChangedListener() {
+ public void onRegistrationStateChanged(RegistrationState state) {
+ if (state == RegistrationState.RegistrationOk) {
+ LinphoneManager.removeListener(registrationListener);
+
+ if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
+ mHandler .post(new Runnable () {
+ public void run() {
+ launchEchoCancellerCalibration(true);
+ }
+ });
+ }
+ } else if (state == RegistrationState.RegistrationFailed) {
+ LinphoneManager.removeListener(registrationListener);
+ deleteCreatedAccount();
+ mHandler.post(new Runnable () {
+ public void run() {
+ Toast.makeText(SetupActivity.this, getString(R.string.first_launch_bad_login_password), Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+ }
+ };
+ public void checkAccount(String username, String password, String domain) {
+ LinphoneManager.removeListener(registrationListener);
+ LinphoneManager.addListener(registrationListener);
+
+ saveCreatedAccount(username, password, domain);
+ LinphoneManager.getInstance().initializePayloads();
- public void linphoneLogIn(String username, String password) {
- logIn(username, password, getString(R.string.default_domain), true);
+ try {
+ LinphoneManager.getInstance().initFromConf();
+ } catch (Throwable e) {
+ LinphoneManager.removeListener(registrationListener);
+ deleteCreatedAccount();
+
+ 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, boolean validate) {
+ if (validate) {
+ checkAccount(username, password, getString(R.string.default_domain));
+ } else {
+ logIn(username, password, getString(R.string.default_domain), true);
+ }
}
public void genericLogIn(String username, String password, String domain) {
@@ -253,6 +303,14 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
currentFragment = SetupFragmentsEnum.WIZARD;
}
+ public void deleteCreatedAccount() {
+ if (!accountCreated)
+ return;
+
+ writePreference(R.string.pref_extra_accounts, 0);
+ accountCreated = false;
+ }
+
public void saveCreatedAccount(String username, String password, String domain) {
if (accountCreated)
return;