#16633: Use Checkbox for two state account preferences in account creation activity
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
index 9a788e1..b35ca40 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
@@ -44,6 +44,7 @@
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceManager;
 import android.preference.EditTextPreference;
+import android.preference.CheckBoxPreference;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -52,6 +53,7 @@
 import com.savoirfairelinux.sflphone.R;
 import com.savoirfairelinux.sflphone.service.SipService;
 import com.savoirfairelinux.sflphone.service.ISipService;
+import com.savoirfairelinux.sflphone.utils.AccountDetail;
 import com.savoirfairelinux.sflphone.utils.AccountDetailsHandler;
 import com.savoirfairelinux.sflphone.utils.AccountDetailBasic;
 import com.savoirfairelinux.sflphone.utils.AccountDetailAdvanced;
@@ -76,13 +78,22 @@
 
     Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
-            
-            ((EditTextPreference)preference).setText(((CharSequence) newValue).toString());
-            preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
             return true;
         }
     };
 
+    Preference.OnPreferenceChangeListener changeNewAccountTwoStateListener = new Preference.OnPreferenceChangeListener() {
+        public boolean onPreferenceChange(Preference preference, Object newValue) {
+            if(((CheckBoxPreference)preference).isChecked()) {
+                preference.setSummary(getString(R.string.account_current_value_label) + "enabled");
+            }
+            else {
+                preference.setSummary(getString(R.string.account_current_value_label) + "disabled");
+            }
+            return true;
+        } 
+    };
+
     private ServiceConnection mConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName className, IBinder binder) {
@@ -150,45 +161,27 @@
         return true;
     }
 
+    private void addPreferenceListener(AccountDetail details) {
+        for(AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+            Preference pref = mPreferenceManager.findPreference(p.mKey);
+            if(pref != null) {
+                Log.i(TAG, "FOUND " + p.mKey);
+                if(!p.isTwoState) {
+                    pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
+                }
+            }
+        }
+    }
+
     @Override
     protected void onStart() {
         super.onStart();
 
-        // AlertDialog dialog = createAlertDialog();
-        // dialog.show();
-
-        for(String s : basicDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s);
-                pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
-            }
-        }
-
-        for(String s : advancedDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s);
-                pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
-            }
-        }
-
-        for(String s : srtpDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s);
-                pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
-            }
-        }
-
-        for(String s : tlsDetails.getDetailKeys()) {
-            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
-            if(pref != null) {
-                Log.i(TAG, "FOUND " + s);
-                pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
-            }
-        }
-
+        addPreferenceListener(basicDetails);
+        addPreferenceListener(advancedDetails);
+        addPreferenceListener(srtpDetails);
+        addPreferenceListener(tlsDetails);
+ 
         if(!mBound) {
             Log.i(TAG, "onStart: Binding service...");
             Intent intent = new Intent(this, SipService.class);
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
index 8934a90..0243e29 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetail.java
@@ -35,11 +35,20 @@
     {
         public String mKey;
         public int mLabelId;
+        public boolean isTwoState;
 
         public PreferenceEntry(String key, int labelId)
         {
             mKey = key;
             mLabelId = labelId;
+            isTwoState = false;
+        }
+
+        public PreferenceEntry(String key, int labelId, boolean twoState)
+        {
+            mKey = key;
+            mLabelId = labelId;
+            isTwoState = twoState;
         }
     }
 
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
index b8cee46..f6098da 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailAdvanced.java
@@ -80,17 +80,17 @@
         privateMap.put(CONFIG_RINGTONE_PATH,
                        new PreferenceEntry(CONFIG_RINGTONE_PATH, R.string.account_ringtone_path_label));
         privateMap.put(CONFIG_RINGTONE_ENABLED,
-                       new PreferenceEntry(CONFIG_RINGTONE_ENABLED, R.string.account_ringtone_enabled_label));
+                       new PreferenceEntry(CONFIG_RINGTONE_ENABLED, R.string.account_ringtone_enabled_label, true));
         privateMap.put(CONFIG_KEEP_ALIVE_ENABLED,
-                       new PreferenceEntry(CONFIG_KEEP_ALIVE_ENABLED, R.string.account_keep_alive_label));
+                       new PreferenceEntry(CONFIG_KEEP_ALIVE_ENABLED, R.string.account_keep_alive_label, true));
         privateMap.put(CONFIG_ACCOUNT_AUTOANSWER,
-                       new PreferenceEntry(CONFIG_ACCOUNT_AUTOANSWER, R.string.account_account_interface_label));
+                       new PreferenceEntry(CONFIG_ACCOUNT_AUTOANSWER, R.string.account_account_interface_label, true));
         privateMap.put(CONFIG_LOCAL_INTERFACE,
                        new PreferenceEntry(CONFIG_LOCAL_INTERFACE, R.string.account_local_interface_label));
         privateMap.put(CONFIG_INTERFACE,
                        new PreferenceEntry(CONFIG_INTERFACE, R.string.account_account_interface_label));
         privateMap.put(CONFIG_PUBLISHED_SAMEAS_LOCAL,
-                       new PreferenceEntry(CONFIG_PUBLISHED_SAMEAS_LOCAL, R.string.account_published_same_as_local_label));
+                       new PreferenceEntry(CONFIG_PUBLISHED_SAMEAS_LOCAL, R.string.account_published_same_as_local_label, true));
         privateMap.put(CONFIG_LOCAL_PORT,
                        new PreferenceEntry(CONFIG_LOCAL_PORT, R.string.account_local_port_label));
         privateMap.put(CONFIG_PUBLISHED_PORT,
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
index 161fff1..b6629bb 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailBasic.java
@@ -52,7 +52,7 @@
         privateMap.put(CONFIG_ACCOUNT_ALIAS,
                        new PreferenceEntry(CONFIG_ACCOUNT_ALIAS, R.string.account_alias_label));
         privateMap.put(CONFIG_ACCOUNT_ENABLE,
-                       new PreferenceEntry(CONFIG_ACCOUNT_ENABLE, R.string.account_enabled_label));
+                       new PreferenceEntry(CONFIG_ACCOUNT_ENABLE, R.string.account_enabled_label, true));
         privateMap.put(CONFIG_ACCOUNT_HOSTNAME,
                        new PreferenceEntry(CONFIG_ACCOUNT_HOSTNAME, R.string.account_hostname_label));
         privateMap.put(CONFIG_ACCOUNT_USERNAME,
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
index b3446f7..4afc0e2 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailSrtp.java
@@ -46,21 +46,21 @@
         privateMap = new HashMap<String, AccountDetail.PreferenceEntry>();
 
         privateMap.put(CONFIG_SRTP_ENABLE,
-                       new PreferenceEntry(CONFIG_SRTP_ENABLE, R.string.account_srtp_enabled_label));
+                       new PreferenceEntry(CONFIG_SRTP_ENABLE, R.string.account_srtp_enabled_label, true));
         privateMap.put(CONFIG_SRTP_KEY_EXCHANGE,
-                       new PreferenceEntry(CONFIG_SRTP_KEY_EXCHANGE, R.string.account_srtp_exchange_label));
+                       new PreferenceEntry(CONFIG_SRTP_KEY_EXCHANGE, R.string.account_srtp_exchange_label, true));
         privateMap.put(CONFIG_SRTP_ENCRYPTION_ALGO,
-                       new PreferenceEntry(CONFIG_SRTP_ENCRYPTION_ALGO, R.string.account_encryption_algo_label));
+                       new PreferenceEntry(CONFIG_SRTP_ENCRYPTION_ALGO, R.string.account_encryption_algo_label, true));
         privateMap.put(CONFIG_SRTP_RTP_FALLBACK,
-                       new PreferenceEntry(CONFIG_SRTP_RTP_FALLBACK, R.string.account_srtp_fallback_label));
+                       new PreferenceEntry(CONFIG_SRTP_RTP_FALLBACK, R.string.account_srtp_fallback_label, true));
         privateMap.put(CONFIG_ZRTP_HELLO_HASH,
-                       new PreferenceEntry(CONFIG_ZRTP_HELLO_HASH, R.string.account_hello_hash_enable_label));
+                       new PreferenceEntry(CONFIG_ZRTP_HELLO_HASH, R.string.account_hello_hash_enable_label, true));
         privateMap.put(CONFIG_ZRTP_DISPLAY_SAS,
-                       new PreferenceEntry(CONFIG_ZRTP_DISPLAY_SAS, R.string.account_display_sas_label));
+                       new PreferenceEntry(CONFIG_ZRTP_DISPLAY_SAS, R.string.account_display_sas_label, true));
         privateMap.put(CONFIG_ZRTP_NOT_SUPP_WARNING,
-                       new PreferenceEntry(CONFIG_ZRTP_NOT_SUPP_WARNING, R.string.account_not_supported_warning_label));
+                       new PreferenceEntry(CONFIG_ZRTP_NOT_SUPP_WARNING, R.string.account_not_supported_warning_label, true));
         privateMap.put(CONFIG_ZRTP_DISPLAY_SAS_ONCE,
-                       new PreferenceEntry(CONFIG_ZRTP_DISPLAY_SAS_ONCE, R.string.account_display_sas_once_label));
+                       new PreferenceEntry(CONFIG_ZRTP_DISPLAY_SAS_ONCE, R.string.account_display_sas_once_label, true));
     }
 
     public Set<String> getDetailKeys()
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
index 4fce769..f2bb95d 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountDetailTls.java
@@ -54,7 +54,7 @@
         privateMap.put(CONFIG_TLS_LISTENER_PORT,
                        new PreferenceEntry(CONFIG_TLS_LISTENER_PORT, R.string.account_listener_port_label));
         privateMap.put(CONFIG_TLS_ENABLE,
-                       new PreferenceEntry(CONFIG_TLS_ENABLE, R.string.account_tls_enabled_label));
+                       new PreferenceEntry(CONFIG_TLS_ENABLE, R.string.account_tls_enabled_label, true));
         privateMap.put(CONFIG_TLS_CA_LIST_FILE,
                        new PreferenceEntry(CONFIG_TLS_CA_LIST_FILE, R.string.account_tls_certificate_list_label));
         privateMap.put(CONFIG_TLS_CERTIFICATE_FILE,
@@ -70,11 +70,11 @@
         privateMap.put(CONFIG_TLS_SERVER_NAME,
                        new PreferenceEntry(CONFIG_TLS_SERVER_NAME, R.string.account_tls_server_name_label));
         privateMap.put(CONFIG_TLS_VERIFY_SERVER,
-                       new PreferenceEntry(CONFIG_TLS_VERIFY_SERVER, R.string.account_tls_verify_label));
+                       new PreferenceEntry(CONFIG_TLS_VERIFY_SERVER, R.string.account_tls_verify_label, true));
         privateMap.put(CONFIG_TLS_VERIFY_CLIENT,
-                       new PreferenceEntry(CONFIG_TLS_VERIFY_CLIENT, R.string.account_tls_verify_client_label));
+                       new PreferenceEntry(CONFIG_TLS_VERIFY_CLIENT, R.string.account_tls_verify_client_label, true));
         privateMap.put(CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE,
-                       new PreferenceEntry(CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE, R.string.account_tls_require_client_certificat_label));
+                       new PreferenceEntry(CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE, R.string.account_tls_require_client_certificat_label, true));
         privateMap.put(CONFIG_TLS_NEGOTIATION_TIMEOUT_SEC,
                        new PreferenceEntry(CONFIG_TLS_NEGOTIATION_TIMEOUT_SEC, R.string.account_tls_negotiation_timeout_sec));
         privateMap.put(CONFIG_TLS_NEGOTIATION_TIMEOUT_MSEC,