#16682: account preference field validity before creating new account
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
index eb51690..4bed35d 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
@@ -62,7 +62,7 @@
 import com.savoirfairelinux.sflphone.utils.AccountDetailSrtp;
 import com.savoirfairelinux.sflphone.utils.AccountDetailTls;
 
-//import java.util.ArrayList; 
+import java.util.ArrayList; 
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Set;
@@ -78,12 +78,11 @@
     private AccountDetailSrtp srtpDetails;
     private AccountDetailTls tlsDetails;
     private MenuItem createAccountAction = null;
+    private ArrayList<String> requiredFields = null;
 
     Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
             preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
-            AccountCreationActivity activity = (AccountCreationActivity)preference.getContext();
-            activity.validateAccountCreation();
             return true;
         }
     };
@@ -115,6 +114,13 @@
         advancedDetails = new AccountDetailAdvanced();
         srtpDetails = new AccountDetailSrtp();
         tlsDetails = new AccountDetailTls();
+
+        requiredFields = new ArrayList<String>();
+
+        requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS);
+        requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME);
+        requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME);
+        requiredFields.add(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD);
     }
 
     private AlertDialog createAlertDialog()
@@ -140,10 +146,41 @@
         return alertDialog;
     }
 
-    public boolean validateAccountCreation()
+    private AlertDialog createCouldNotValidateDialog(ArrayList<String> missingValue)
     {
-        createAccountAction.setEnabled(true);
-        return true; 
+        String message = "The following parameters are missing:";
+
+        for(String s : missingValue)
+            message += "\n    - " + s;
+
+        Activity ownerActivity = this;
+        AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
+        builder.setMessage(message).setTitle("Missing Parameters")
+               .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+                   public void onClick(DialogInterface dialog, int whichButton) {
+                       /* Nothing to be done */
+                   }
+               });
+
+        AlertDialog alertDialog = builder.create();
+        return alertDialog;
+    }
+
+    public boolean validateAccountCreation(ArrayList<String> missingValue)
+    {
+        boolean valid = true;
+
+        for(String s : requiredFields) {
+            EditTextPreference pref = (EditTextPreference)mPreferenceManager.findPreference(s);
+            Log.i(TAG, "Looking for " + s);
+            if(pref.getText().isEmpty()) {
+                Log.i(TAG, "    INVALIDATED " + s + " " + pref.getText() + ";");
+                valid = false;
+                missingValue.add(pref.getTitle().toString());
+            }
+        }
+
+        return valid;
     }
 
     @Override
@@ -157,16 +194,20 @@
     public boolean onCreateOptionsMenu(Menu menu) {
         createAccountAction = menu.add("Create Account");
         createAccountAction.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
-        createAccountAction.setEnabled(false);
         return true;
     }
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if(item.isEnabled()) {
+        ArrayList<String> missingValue = new ArrayList<String>();
+        if(validateAccountCreation(missingValue)) {
             createNewAccount();
             finish();
         }
+        else {
+            AlertDialog dialog = createCouldNotValidateDialog(missingValue);
+            dialog.show();
+        }
 
         return true;
     }
@@ -243,39 +284,6 @@
         updateAccountDetails(accountDetails, advancedDetails);
         updateAccountDetails(accountDetails, srtpDetails);
         updateAccountDetails(accountDetails, tlsDetails);
-/*
-        for(String s : basicDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s + " " + pref.getText());
-                accountDetails.put(s, pref.getText());
-            }
-        }
-
-        for(String s : advancedDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s + " " + pref.getText());
-                accountDetails.put(s, pref.getText());
-            }
-        }
-
-        for(String s : srtpDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s + " " + pref.getText());
-                accountDetails.put(s, pref.getText());
-            }
-        }
-
-        for(String s : tlsDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s + " " + pref.getText());
-                accountDetails.put(s, pref.getText());
-            }
-        }
-*/
 
         try {
             Log.i(TAG, "ADD ACCOUNT");