diff --git a/res/layout/assistant_linphone_login.xml b/res/layout/assistant_linphone_login.xml index 225d4bc7a..2f03b512a 100644 --- a/res/layout/assistant_linphone_login.xml +++ b/res/layout/assistant_linphone_login.xml @@ -15,7 +15,7 @@ android:textAllCaps="true" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" + android:gravity="center_vertical|center_horizontal|center" android:layout_gravity="center"/> Finish configuration Your account is created. Please check your mails to validate your account. Once it is done, come back here and click on the button. This assistant will help you configure and use your SIP account. - Enter your username and password of Linphone account - Enter your username and password with your SIP domain + Please enter your username and password of Linphone account + Please enter your username and password with your SIP domain Please provide your provisioning URL Transport Your SIP address is @@ -99,7 +99,7 @@ An error occurred, try again later. Server unreachable, verify your network connection. This username is already in use. - This phone number is already in used.\r\nPlease type a different number or delete your existing account if you want to reuse your number. + This phone number is already in used.\r\nPlease type a different number.\r\nYou can delete your existing account if you want to reuse your phone number. Your username is invalid. Your phone number is invalid. Your email is invalid. @@ -125,6 +125,7 @@ Invalid username Invalid domain Invalid route + Invalid display name Username too short Username too long Username length invalid diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index a220899a3..8e0518d95 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -1853,6 +1853,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.Status status) { } + + @Override + public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.Status status) { + + } } interface ContactPicked { diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java index edd0497d6..c12ed3f9f 100644 --- a/src/org/linphone/LinphoneUtils.java +++ b/src/org/linphone/LinphoneUtils.java @@ -606,15 +606,15 @@ public final class LinphoneUtils { if (status.equals(LinphoneAccountCreator.Status.PhoneNumberInvalid)) return ctxt.getString(R.string.phone_number_invalid); if (status.equals(LinphoneAccountCreator.Status.PasswordTooShort)) - return ctxt.getString(R.string.username_too_short); + return ctxt.getString(R.string.password_too_short); if (status.equals(LinphoneAccountCreator.Status.PasswordTooLong)) - return ctxt.getString(R.string.username_too_long); + return ctxt.getString(R.string.password_too_long); if (status.equals(LinphoneAccountCreator.Status.DomainInvalid)) return ctxt.getString(R.string.invalid_domain); if (status.equals(LinphoneAccountCreator.Status.RouteInvalid)) return ctxt.getString(R.string.invalid_route); if (status.equals(LinphoneAccountCreator.Status.DisplayNameInvalid)) - return ctxt.getString(R.string.invalid_route); + return ctxt.getString(R.string.invalid_display_name); if (status.equals(LinphoneAccountCreator.Status.Failed)) return ctxt.getString(R.string.request_failed); if (status.equals(LinphoneAccountCreator.Status.TransportNotSupported)) @@ -625,15 +625,17 @@ public final class LinphoneUtils { return ctxt.getString(R.string.account_already_exist); if (status.equals(LinphoneAccountCreator.Status.CountryCodeInvalid)) return ctxt.getString(R.string.country_code_invalid); - if (status.equals(LinphoneAccountCreator.Status.AccountCreated) + if (status.equals(LinphoneAccountCreator.Status.PhoneNumberUsedAccount) + || status.equals(LinphoneAccountCreator.Status.PhoneNumberUsedAlias)) + return ctxt.getString(R.string.assistant_phone_number_unavailable); + if (status.equals(LinphoneAccountCreator.Status.PhoneNumberNotUsed) || status.equals(LinphoneAccountCreator.Status.AccountNotCreated) || status.equals(LinphoneAccountCreator.Status.AccountNotExist) || status.equals(LinphoneAccountCreator.Status.AccountNotActivated) || status.equals(LinphoneAccountCreator.Status.AccountAlreadyActivated) || status.equals(LinphoneAccountCreator.Status.AccountActivated) - || status.equals(LinphoneAccountCreator.Status.Ok)) { + || status.equals(LinphoneAccountCreator.Status.Ok)) return ""; - } } return null; } diff --git a/src/org/linphone/assistant/AssistantActivity.java b/src/org/linphone/assistant/AssistantActivity.java index 0f4e291e5..5fe701c8a 100644 --- a/src/org/linphone/assistant/AssistantActivity.java +++ b/src/org/linphone/assistant/AssistantActivity.java @@ -683,6 +683,11 @@ private static AssistantActivity instance; } + @Override + public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.Status status) { + + } + public CountryListAdapter getCountryListAdapter() { return countryListAdapter; } diff --git a/src/org/linphone/assistant/CreateAccountCodeActivationFragment.java b/src/org/linphone/assistant/CreateAccountCodeActivationFragment.java index 6eb8ea680..ef826e096 100644 --- a/src/org/linphone/assistant/CreateAccountCodeActivationFragment.java +++ b/src/org/linphone/assistant/CreateAccountCodeActivationFragment.java @@ -53,7 +53,7 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_account_creation_code_activation, container, false); - + username = getArguments().getString("Username"); phone = getArguments().getString("Phone"); dialcode = getArguments().getString("Dialcode"); @@ -190,4 +190,9 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, Status status) { } + + @Override + public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, Status status) { + + } } diff --git a/src/org/linphone/assistant/CreateAccountFragment.java b/src/org/linphone/assistant/CreateAccountFragment.java index 45a63c57e..6cde4cedf 100644 --- a/src/org/linphone/assistant/CreateAccountFragment.java +++ b/src/org/linphone/assistant/CreateAccountFragment.java @@ -58,13 +58,14 @@ import static org.linphone.core.LinphoneAccountCreator.*; /** * @author Sylvain Berfini */ -public class CreateAccountFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, OnClickListener, LinphoneAccountCreatorListener { - private EditText phoneNumberEdit, usernameEdit, passwordEdit, passwordConfirmEdit, emailEdit, dialCode; - private TextView phoneNumberError, usernameError, passwordError, passwordConfirmError, emailError, assisstantTitle, sipUri, skip; +public class CreateAccountFragment extends Fragment implements CompoundButton.OnCheckedChangeListener + , OnClickListener, LinphoneAccountCreatorListener { + private EditText phoneNumberEdit, usernameEdit, passwordEdit, passwordConfirmEdit + , emailEdit, dialCode; + private TextView phoneNumberError, usernameError, passwordError, passwordConfirmError + , emailError, assisstantTitle, sipUri, skip; private ImageView phoneNumberInfo; - private boolean phoneNumberOk = false; - private boolean usernameOk = false; private boolean passwordOk = false; private boolean emailOk = false; private boolean confirmPasswordOk = false; @@ -82,7 +83,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On View view = inflater.inflate(R.layout.assistant_account_creation, container, false); //Initialize accountCreator - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc(), LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc() + , LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setDomain(getResources().getString(R.string.default_domain)); accountCreator.setListener(this); @@ -124,7 +126,9 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On //Phone number if (getResources().getBoolean(R.bool.use_phone_number_validation)) { //Automatically get the country code from the phone - TelephonyManager tm = (TelephonyManager) getActivity().getApplicationContext().getSystemService(getActivity().getApplicationContext().TELEPHONY_SERVICE); + TelephonyManager tm = + (TelephonyManager) getActivity().getApplicationContext().getSystemService( + getActivity().getApplicationContext().TELEPHONY_SERVICE); String countryIso = tm.getNetworkCountryIso(); LinphoneProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); countryCode = proxyConfig.lookupCCCFromIso(countryIso.toUpperCase()); @@ -138,7 +142,13 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On if (previousPhone != null ) { phoneNumberEdit.setText(previousPhone); } - LinphoneUtils.setCountry(AssistantActivity.instance().country, dialCode, selectCountry, countryCode); + AssistantActivity.Country c = AssistantActivity.instance().getCountryListAdapter() + .getCountryFromCountryCode(String.valueOf(countryCode)); + if (c != null) { + AssistantActivity.instance().country = c; + selectCountry.setText(c.name); + } + LinphoneUtils.setCountry(c, dialCode, selectCountry, countryCode); //Allow user to enter a username instead use the phone number as username if (getResources().getBoolean(R.bool.assistant_allow_username)) { @@ -150,7 +160,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } //Password & email address - if (getResources().getBoolean(R.bool.isTablet) || !getResources().getBoolean(R.bool.use_phone_number_validation)) { + if (getResources().getBoolean(R.bool.isTablet) + || !getResources().getBoolean(R.bool.use_phone_number_validation)) { useEmail.setVisibility(View.VISIBLE); useEmail.setOnCheckedChangeListener(this); @@ -273,7 +284,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On if (linkAccount) { new AlertDialog.Builder(getActivity()) .setTitle(getString(R.string.phone_number_info_title)) - .setMessage(getString(R.string.phone_number_link_info_content) + "\n" + getString(R.string.phone_number_link_info_content_already_account)) + .setMessage(getString(R.string.phone_number_link_info_content) + "\n" + + getString(R.string.phone_number_link_info_content_already_account)) .show(); } else { new AlertDialog.Builder(getActivity()) @@ -285,7 +297,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } case R.id.assistant_create: { - accountCreator.isAccountActivated(); + accountCreator.isAccountUsed(); break; } } @@ -301,8 +313,11 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } private void addAlias() { - accountCreator.setUsername(LinphonePreferences.instance().getAccountUsername(LinphonePreferences.instance().getDefaultAccountIndex())); - Status status = accountCreator.setPhoneNumber(phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); + accountCreator.setUsername(LinphonePreferences.instance().getAccountUsername( + LinphonePreferences.instance().getDefaultAccountIndex()) + ); + Status status = accountCreator.setPhoneNumber( + phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); boolean isOk = status.equals(LinphoneAccountCreator.Status.Ok); if (isOk) { accountCreator.linkPhoneNumberWithAccount(); @@ -313,7 +328,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } private void createAccount() { - if (getResources().getBoolean(R.bool.isTablet) || !getResources().getBoolean(R.bool.use_phone_number_validation)) { + if (getResources().getBoolean(R.bool.isTablet) + || !getResources().getBoolean(R.bool.use_phone_number_validation)) { Status emailStatus; Status passwordStatus; @@ -342,28 +358,34 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On if (phoneNumberEdit.length() > 0 || dialCode.length() > 1) { Status phoneStatus; boolean isOk; - phoneStatus = accountCreator.setPhoneNumber(phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); + phoneStatus = accountCreator.setPhoneNumber( + phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); isOk = phoneStatus.equals(LinphoneAccountCreator.Status.Ok); if (!useUsername.isChecked() && accountCreator.getUsername() == null) { accountCreator.setUsername(accountCreator.getPhoneNumber()); } else { accountCreator.setUsername(usernameEdit.getText().toString()); - accountCreator.setPhoneNumber(phoneNumberEdit.getText().toString(), dialCode.getText().toString()); + accountCreator.setPhoneNumber( + phoneNumberEdit.getText().toString(), dialCode.getText().toString()); } if (isOk) { accountCreator.createAccount(); } else { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(phoneStatus), getContext()); - LinphoneUtils.displayError(isOk, phoneNumberError, LinphoneUtils.errorForStatus(phoneStatus)); + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(phoneStatus) + , getContext()); + LinphoneUtils.displayError(isOk, phoneNumberError + , LinphoneUtils.errorForStatus(phoneStatus)); } } else { - LinphoneUtils.displayErrorAlert(getString(R.string.assistant_create_account_part_1), getContext()); + LinphoneUtils.displayErrorAlert(getString(R.string.assistant_create_account_part_1) + , getContext()); } } } private LinphoneAccountCreator.Status getPhoneNumberStatus() { - LinphoneAccountCreator.Status status = accountCreator.setPhoneNumber(phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); + LinphoneAccountCreator.Status status = accountCreator.setPhoneNumber( + phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); addressSip = accountCreator.getPhoneNumber(); return status; } @@ -410,7 +432,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On field.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { if (field.equals(dialCode)) { - AssistantActivity.Country c = AssistantActivity.instance().getCountryListAdapter().getCountryFromCountryCode(dialCode.getText().toString()); + AssistantActivity.Country c = AssistantActivity.instance().getCountryListAdapter() + .getCountryFromCountryCode(dialCode.getText().toString()); if (c != null) { AssistantActivity.instance().country = c; selectCountry.setText(c.name); @@ -457,7 +480,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On LinphoneUtils.displayError(emailOk, emailError, ""); } else { - LinphoneUtils.displayError(emailOk, emailError, LinphoneUtils.errorForStatus(status)); + LinphoneUtils.displayError(emailOk + , emailError, LinphoneUtils.errorForStatus(status)); } } @@ -479,7 +503,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On LinphoneUtils.displayError(passwordOk, passwordError, ""); } else { - LinphoneUtils.displayError(passwordOk, passwordError, LinphoneUtils.errorForStatus(status)); + LinphoneUtils.displayError(passwordOk + , passwordError, LinphoneUtils.errorForStatus(status)); } } @@ -500,12 +525,14 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On if (field1.getText().toString().equals(field2.getText().toString())) { confirmPasswordOk = true; if (!isPasswordCorrect(field1.getText().toString())) { - LinphoneUtils.displayError(passwordOk, passwordError, getString(R.string.wizard_password_incorrect)); + LinphoneUtils.displayError(passwordOk + , passwordError, getString(R.string.wizard_password_incorrect)); } else { LinphoneUtils.displayError(confirmPasswordOk, passwordConfirmError, ""); } } else { - LinphoneUtils.displayError(confirmPasswordOk, passwordConfirmError, getString(R.string.wizard_passwords_unmatched)); + LinphoneUtils.displayError(confirmPasswordOk + , passwordConfirmError, getString(R.string.wizard_passwords_unmatched)); } } @@ -520,15 +547,23 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On @Override public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, final Status status) { + if (status.equals(Status.AccountExist) || status.equals(Status.AccountExistWithAlias)) { + accountCreator.isPhoneNumberUsed(); + } else { + createAccount(); + } } @Override public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, Status status) { if (status.equals(Status.AccountCreated)) { if (useEmail.isChecked() || !getResources().getBoolean(R.bool.use_phone_number_validation)) { - AssistantActivity.instance().displayAssistantConfirm(getUsername(), passwordEdit.getText().toString()); + AssistantActivity.instance().displayAssistantConfirm(getUsername() + , passwordEdit.getText().toString()); } else { - AssistantActivity.instance().displayAssistantCodeConfirm(getUsername(), phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode), false); + AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() + , phoneNumberEdit.getText().toString() + , LinphoneUtils.getCountryCode(dialCode), false); } } else { LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), getContext()); @@ -542,39 +577,59 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On @Override public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, Status status) { if (status.equals(Status.Ok)) { - AssistantActivity.instance().displayAssistantCodeConfirm(getUsername(), phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode), false); + AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() + , phoneNumberEdit.getText().toString() + , LinphoneUtils.getCountryCode(dialCode), false); } } @Override public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, Status status) { if (status.equals(Status.Ok)) { - AssistantActivity.instance().displayAssistantCodeConfirm(getUsername(), phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode), false); + AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() + , phoneNumberEdit.getText().toString() + , LinphoneUtils.getCountryCode(dialCode), false); } } @Override public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, Status status) { if (status.equals(Status.AccountNotActivated)) { - if (useEmail.isChecked() || !getResources().getBoolean(R.bool.use_phone_number_validation)) { - AssistantActivity.instance().displayAssistantConfirm(getUsername(), passwordEdit.getText().toString()); + if (getResources().getBoolean(R.bool.isTablet) + || !getResources().getBoolean(R.bool.use_phone_number_validation)) { + //accountCreator.activateAccount(); // Resend email TODO } else { - AssistantActivity.instance().displayAssistantCodeConfirm(getUsername(), phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode), false); + accountCreator.recoverPhoneAccount(); // Resend SMS } } else { - if (linkAccount) { - addAlias(); - } else { - createAccount(); - } + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), getContext()); } } @Override public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, Status status) { + if (status.equals(Status.Ok)) { + AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() + , dialCode.getText().toString() , phoneNumberEdit.getText().toString(), false); + } else { + //SMS error + LinphoneUtils.displayErrorAlert(getString(R.string.request_failed), getContext()); + } } @Override public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, Status status) { } + + @Override + public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator ac, Status status) { + if (status.equals(Status.PhoneNumberUsedAccount) || status.equals(Status.PhoneNumberUsedAlias)) { + if (accountCreator.getPhoneNumber().compareTo(accountCreator.getUsername()) == 0) + accountCreator.isAccountActivated(); + else + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), getContext()); + } else { + accountCreator.isAccountActivated(); + } + } } diff --git a/src/org/linphone/assistant/LinphoneLoginFragment.java b/src/org/linphone/assistant/LinphoneLoginFragment.java index 796904cdd..895139791 100644 --- a/src/org/linphone/assistant/LinphoneLoginFragment.java +++ b/src/org/linphone/assistant/LinphoneLoginFragment.java @@ -104,6 +104,13 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On LinphoneProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); countryCode = proxyConfig.lookupCCCFromIso(countryIso.toUpperCase()); + AssistantActivity.Country c = AssistantActivity.instance().getCountryListAdapter() + .getCountryFromCountryCode(dialCode.getText().toString()); + if (c != null) { + AssistantActivity.instance().country = c; + selectCountry.setText(c.name); + } + phoneNumberLayout.setVisibility(View.VISIBLE); selectCountry.setOnClickListener(this); phoneNumberInfo.setOnClickListener(this); @@ -332,4 +339,9 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.Status status) { } + + @Override + public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.Status status) { + + } } diff --git a/submodules/linphone b/submodules/linphone index 38c95f6b2..1f28e348d 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 38c95f6b2a11c48be593b0a23879c60100b118b6 +Subproject commit 1f28e348db77c416a4402eed72be59af0c16f601