diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml
index f152b64c5..93edf37c4 100644
--- a/res/values/non_localizable_strings.xml
+++ b/res/values/non_localizable_strings.xml
@@ -36,6 +36,8 @@
pref_domain_key
pref_passwd_key
pref_username_key
+ pref_wizard_key
+ pref_activated_key
pref_debug_key
first_launch_suceeded_once_key
diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java
index 6dbcb34bd..8266fee9b 100644
--- a/src/org/linphone/DialerActivity.java
+++ b/src/org/linphone/DialerActivity.java
@@ -33,11 +33,19 @@ import org.linphone.ui.CallButton;
import org.linphone.ui.EraseButton;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
import android.widget.Adapter;
+import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
@@ -67,10 +75,16 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
private static DialerActivity instance;
private boolean mPreventDoubleCallOnRotation;
+
+ private AlertDialog wizardDialog;
+ protected String username;
+ private String key;
private static final String CURRENT_ADDRESS = "org.linphone.current-address";
private static final String CURRENT_DISPLAYNAME = "org.linphone.current-displayname";
private static final String PREVENT_DOUBLE_CALL = "prevent_call_on_phone_rotation";
+
+ private static final int CONFIRM_ID = 0x668;
/**
* @return null if not ready yet
@@ -111,6 +125,68 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
accounts.invalidate();
}
}
+
+ protected Dialog onCreateDialog (int id) {
+ if (id == CONFIRM_ID) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.wizard_confirmation);
+
+ final LayoutInflater inflater = LayoutInflater.from(this);
+ View v = inflater.inflate(R.layout.wizard_confirm, null);
+ builder.setView(v);
+
+ Button check = (Button) v.findViewById(R.id.wizardCheckAccount);
+ check.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ wizardDialog.dismiss();
+ if (LinphonePreferencesActivity.isAccountVerified(username)) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(DialerActivity.this);
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(getString(R.string.pref_activated_key) + key, true);
+ editor.commit();
+ } else {
+ showDialog(CONFIRM_ID);
+ }
+ }
+ });
+
+ Button cancel = (Button) v.findViewById(R.id.wizardCancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ wizardDialog.dismiss();
+ }
+ });
+
+ wizardDialog = builder.create();
+ return wizardDialog;
+ }
+ return null;
+ }
+
+ private void verifiyAccountsActivated() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ int nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
+
+ for (int i = 0; i < nbAccounts; i++) {
+ String key = (i == 0 ? "" : Integer.toString(i));
+ boolean createdByWizard = prefs.getBoolean(getString(R.string.pref_wizard_key) + key, false);
+ boolean activated = prefs.getBoolean(getString(R.string.pref_activated_key) + key, true);
+ if (createdByWizard && !activated) {
+ //Check if account has been activated since
+ String username = prefs.getString(getString(R.string.pref_username_key) + key, "");
+ activated = LinphonePreferencesActivity.isAccountVerified(username);
+ if (activated) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(getString(R.string.pref_activated_key) + key, true);
+ editor.commit();
+ } else {
+ this.username = username;
+ this.key = key;
+ showDialog(CONFIRM_ID);
+ }
+ }
+ }
+ }
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.dialer);
@@ -155,6 +231,9 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
instance = this;
super.onCreate(savedInstanceState);
+
+ verifiyAccountsActivated();
+
displayRegisterStatus();
}
diff --git a/src/org/linphone/LinphonePreferencesActivity.java b/src/org/linphone/LinphonePreferencesActivity.java
index 008b6a567..ca2d2d540 100644
--- a/src/org/linphone/LinphonePreferencesActivity.java
+++ b/src/org/linphone/LinphonePreferencesActivity.java
@@ -184,7 +184,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
parent.addPreference(me);
}
- private void fillLinphoneAccount(int i, String username, String password) {
+ private void fillLinphoneAccount(int i, String username, String password, boolean createdByWizard) {
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
SharedPreferences.Editor editor = prefs.edit();
@@ -192,6 +192,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
editor.putString(getString(R.string.pref_passwd_key) + i, password);
editor.putString(getString(R.string.pref_domain_key) + i, "sip.linphone.org");
editor.putString(getString(R.string.pref_proxy_key) + i, "");
+ editor.putBoolean(getString(R.string.pref_wizard_key) + i, createdByWizard);
+ editor.putBoolean(getString(R.string.pref_activated_key) + i, false);
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + i, false);
editor.commit();
@@ -217,7 +219,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
}
}
- private void addWizardAccount() {
+ private void addWizardPreferenceButton() {
Preference wizard = (Preference) getPreferenceScreen().getPreference(2);
wizard.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
@@ -272,15 +274,21 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
AlertDialog.Builder builder = new AlertDialog.Builder(LinphonePreferencesActivity.this);
builder.setTitle(R.string.wizard_confirmation);
- LayoutInflater inflater = LayoutInflater.from(LinphonePreferencesActivity.this);
+ final LayoutInflater inflater = LayoutInflater.from(LinphonePreferencesActivity.this);
View v = inflater.inflate(R.layout.wizard_confirm, null);
builder.setView(v);
Button check = (Button) v.findViewById(R.id.wizardCheckAccount);
check.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
+ wizardDialog.dismiss();
if (isAccountVerified(username)) {
- wizardDialog.dismiss();
+ SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(getString(R.string.pref_activated_key) + (nbAccounts - 1), true);
+ editor.commit();
+ } else {
+ showDialog(CONFIRM_ID);
}
}
});
@@ -302,7 +310,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
return username.matches("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{2,}$");
}
- private boolean isAccountVerified(String username) {
+ static boolean isAccountVerified(String username) {
try {
XMLRPCClient client = new XMLRPCClient(new URL("https://www.linphone.org/wizard.php"));
Object resultO = client.call("check_account_validated", "sip:" + username + "@sip.linphone.org");
@@ -402,7 +410,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
public void run() {
addExtraAccountPreferencesButton(accounts, nbAccounts, true);
LinphonePreferencesActivity.this.username = username;
- fillLinphoneAccount(nbAccounts, username, password);
+ fillLinphoneAccount(nbAccounts, username, password, true);
nbAccounts++;
createDynamicAccountsPreferences();
wizardDialog.dismiss();
@@ -529,6 +537,26 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
field2.addTextChangedListener(passwordListener);
}
+ private void verifiyAccountsActivated() {
+ SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ for (int i = 0; i < nbAccounts; i++) {
+ String key = (i == 0 ? "" : Integer.toString(i));
+ boolean createdByWizard = prefs.getBoolean(getString(R.string.pref_wizard_key) + key, false);
+ boolean activated = prefs.getBoolean(getString(R.string.pref_activated_key) + key, true);
+ if (createdByWizard && !activated) {
+ //Check if account has been activated since
+ activated = isAccountVerified(prefs.getString(getString(R.string.pref_username_key) + key, ""));
+ if (activated) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(getString(R.string.pref_activated_key) + key, true);
+ editor.commit();
+ } else {
+ showDialog(CONFIRM_ID);
+ }
+ }
+ }
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -536,9 +564,11 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
addPreferencesFromResource(R.xml.preferences);
createDynamicAccountsPreferences();
- addWizardAccount();
+ addWizardPreferenceButton();
addTransportChecboxesListener();
+ verifiyAccountsActivated();
+
ecCalibratePref = (CheckBoxPreference) findPreference(pref_echo_canceller_calibration_key);
ecCalibratePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {