From 34014bbfb160ee63b79a9988052903256f1404e6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 8 Feb 2012 11:28:35 +0100 Subject: [PATCH] wizard confirmation popup improved --- res/values/non_localizable_strings.xml | 2 + src/org/linphone/DialerActivity.java | 79 +++++++++++++++++++ .../linphone/LinphonePreferencesActivity.java | 44 +++++++++-- 3 files changed, 118 insertions(+), 7 deletions(-) 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) {