Minor fixes on SipEditor

+ show "optional" in Outbound proxy address's summary
+ show "same as username" in Display name's summary
+ move default values to xml files and revise the code accordingly

Change-Id: I2d33ad1b70b1ae0a67f4dfbb7e9ff233d0570969
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f3928ed..06bb9f3 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1280,8 +1280,6 @@
     <!-- Title of the sip editor screen. [CHAR LIMIT=NONE] -->
     <string name="sip_edit_new_title">Edit new SIP account</string>
 
-    <!-- Initial status of the preferences is '<Not set>'. [CHAR LIMIT=NONE] -->
-    <string name="initial_preference_summary">&lt;Not set&gt;</string>
     <!-- Text of the sip profile name preference. [CHAR LIMIT=NONE] -->
     <string name="profile_name_title">Name</string>
     <!-- Text of the domain address preference. [CHAR LIMIT=NONE] -->
@@ -1292,16 +1290,12 @@
     <string name="password_title">Password</string>
     <!-- Text of the display name preference. [CHAR LIMIT=NONE] -->
     <string name="display_name_title">Display name</string>
-    <!-- Text of the default display name preference summary. [CHAR LIMIT=NONE] -->
-    <string name="display_name_summary">&lt;Same as username&gt;</string>
     <!-- Text of the outbound proxy address preference. [CHAR LIMIT=NONE] -->
-    <string name="proxy_address_title">Outbound Proxy address</string>
+    <string name="proxy_address_title">Outbound proxy address</string>
     <!-- Text of the sip server/proxy port number. [CHAR LIMIT=NONE] -->
-    <string name="port_title">Port Number</string>
-    <!-- Text of the default sip server/proxy port number. [CHAR LIMIT=NONE] -->
-    <string name="port_summary">5060</string>
+    <string name="port_title">Port number</string>
     <!-- Text of the transport type preference. [CHAR LIMIT=NONE] -->
-    <string name="transport_title">Transport Type</string>
+    <string name="transport_title">Transport type</string>
     <!-- Text of the keepalive preference. [CHAR LIMIT=NONE] -->
     <string name="send_keepalive_title">Send keep-alive</string>
     <!-- Text of the keepalive preference summary. [CHAR LIMIT=NONE] -->
@@ -1317,6 +1311,17 @@
     <!-- Text of the advanced settings section. [CHAR LIMIT=NONE] -->
     <string name="advanced_settings">Optional settings</string>
 
+    <!-- Initial status of the preferences is '<Not set>'. [CHAR LIMIT=NONE] -->
+    <string name="default_preference_summary">&lt;Not set&gt;</string>
+    <!-- Default value for the display-name preference summary. [CHAR LIMIT=NONE] -->
+    <string name="display_name_summary">&lt;Same as username&gt;</string>
+    <!-- Default value for the outbound-proxy-address preference summary. [CHAR LIMIT=NONE] -->
+    <string name="optional_summary">&lt;Optional&gt;</string>
+    <!-- Default sip server/proxy port number. [CHAR LIMIT=NONE] -->
+    <string name="default_port">5060</string>
+    <!-- Default sip server/proxy transport protocol. [CHAR LIMIT=NONE] -->
+    <string name="default_transport">UDP</string>
+
     <!-- Hint to show the advanced settings section. [CHAR LIMIT=NONE] -->
     <string name="advanced_settings_show">▷ Select to show all</string>
     <!-- Hint to hide the advanced settings section. [CHAR LIMIT=NONE] -->
diff --git a/res/xml/sip_advanced_edit.xml b/res/xml/sip_advanced_edit.xml
index 81ae359..e068339 100644
--- a/res/xml/sip_advanced_edit.xml
+++ b/res/xml/sip_advanced_edit.xml
@@ -25,6 +25,7 @@
             android:key="@string/display_name"
             android:title="@string/display_name_title"
             android:dialogTitle="@string/display_name_title"
+            android:summary="@string/display_name_summary"
             android:persistent="false"
             android:singleLine="true"/>
 
@@ -32,14 +33,16 @@
             android:key="@string/proxy_address"
             android:title="@string/proxy_address_title"
             android:dialogTitle="@string/proxy_address_title"
+            android:summary="@string/optional_summary"
+            android:defaultValue=""
             android:persistent="false"
             android:singleLine="true"/>
 
         <EditTextPreference
             android:key="@string/port"
             android:title="@string/port_title"
-            android:defaultValue="@string/port_summary"
-            android:summary="@string/port_summary"
+            android:defaultValue="@string/default_port"
+            android:summary="@string/default_port"
             android:dialogTitle="@string/port_title"
             android:persistent="false"
             android:singleLine="true"/>
@@ -49,6 +52,7 @@
             android:title="@string/transport_title"
             android:entries="@array/transport_types"
             android:entryValues="@array/transport_types"
+            android:summary="@string/default_transport"
             android:persistent="false"
             android:dialogTitle="@string/transport_title"/>
 
diff --git a/res/xml/sip_edit.xml b/res/xml/sip_edit.xml
index 0e76c5a..6ecc6a9 100644
--- a/res/xml/sip_edit.xml
+++ b/res/xml/sip_edit.xml
@@ -22,6 +22,8 @@
         android:key="@string/profile_name"
         android:title="@string/profile_name_title"
         android:dialogTitle="@string/profile_name_title"
+        android:defaultValue=""
+        android:summary="@string/default_preference_summary"
         android:persistent="false"
         android:singleLine="true"/>
 
@@ -29,6 +31,8 @@
         android:key="@string/username"
         android:title="@string/username_title"
         android:dialogTitle="@string/username_title"
+        android:defaultValue=""
+        android:summary="@string/default_preference_summary"
         android:persistent="false"
         android:singleLine="true"/>
 
@@ -36,6 +40,8 @@
         android:key="@string/domain_address"
         android:title="@string/domain_address_title"
         android:dialogTitle="@string/domain_address_title"
+        android:defaultValue=""
+        android:summary="@string/default_preference_summary"
         android:persistent="false"
         android:singleLine="true"/>
 
@@ -44,6 +50,8 @@
         android:title="@string/password_title"
         android:dialogTitle="@string/password_title"
         android:password="true"
+        android:defaultValue=""
+        android:summary="@string/default_preference_summary"
         android:persistent="false"
         android:singleLine="true"/>
 
diff --git a/src/com/android/phone/sip/SipEditor.java b/src/com/android/phone/sip/SipEditor.java
index bdff215..2c9c5d3 100644
--- a/src/com/android/phone/sip/SipEditor.java
+++ b/src/com/android/phone/sip/SipEditor.java
@@ -57,12 +57,9 @@
 
     private static final String TAG = SipEditor.class.getSimpleName();
     private static final String KEY_PROFILE = "profile";
-    private static final String EMPTY = "";
-    private static final String LEAVE_AS_IS = null;
-    private static final String DEFAULT_SIP_PORT = "5060";
-    private static final String DEFAULT_PROTOCOL = "UDP";
     private static final String GET_METHOD_PREFIX = "get";
     private static final char SCRAMBLED = '*';
+    private static final int NA = 0;
 
     private PrimaryAccountSelector mPrimaryAccountSelector;
     private AdvancedSettings mAdvancedSettings;
@@ -70,27 +67,27 @@
     private boolean mDisplayNameSet;
 
     enum PreferenceKey {
-        ProfileName(R.string.profile_name, EMPTY),
-        DomainAddress(R.string.domain_address, EMPTY),
-        Username(R.string.username, EMPTY),
-        Password(R.string.password, EMPTY),
-        DisplayName(R.string.display_name, LEAVE_AS_IS),
-        ProxyAddress(R.string.proxy_address, EMPTY),
-        Port(R.string.port, DEFAULT_SIP_PORT),
-        Transport(R.string.transport, DEFAULT_PROTOCOL),
-        SendKeepAlive(R.string.send_keepalive, LEAVE_AS_IS);
+        ProfileName(R.string.profile_name, R.string.default_preference_summary),
+        DomainAddress(R.string.domain_address, R.string.default_preference_summary),
+        Username(R.string.username, R.string.default_preference_summary),
+        Password(R.string.password, R.string.default_preference_summary),
+        DisplayName(R.string.display_name, R.string.display_name_summary),
+        ProxyAddress(R.string.proxy_address, R.string.optional_summary),
+        Port(R.string.port, NA),
+        Transport(R.string.transport, NA),
+        SendKeepAlive(R.string.send_keepalive, NA);
 
         /**
          * @param key The key name of the preference.
          * @param defaultValue The default value of the preference.
          */
-        PreferenceKey(int text, String defaultValue) {
+        PreferenceKey(int text, int defaultValue) {
             this.text = text;
             this.defaultValue = defaultValue;
         }
 
         final int text;
-        final String defaultValue;
+        final int defaultValue;
         Preference preference;
     }
 
@@ -197,21 +194,17 @@
     private boolean validateAndSetResult() {
         for (PreferenceKey key : PreferenceKey.values()) {
             Preference pref = key.preference;
-            String value = EMPTY;
-            if (pref instanceof ListPreference) {
-                value = ((ListPreference)pref).getValue();
-            } else if (pref instanceof EditTextPreference) {
+            if (pref instanceof EditTextPreference) {
                 // use default value if display name is empty
                 if (pref == PreferenceKey.DisplayName.preference) continue;
-                value = ((EditTextPreference)pref).getText();
-            } else if (pref instanceof CheckBoxPreference) {
-                continue;
-            }
-            if (TextUtils.isEmpty(value) &&
-                    (key != PreferenceKey.ProxyAddress)) {
-                showAlert(pref.getTitle() + " "
-                        + getString(R.string.empty_alert));
-                return false;
+                if (pref == PreferenceKey.ProxyAddress.preference) continue;
+
+                String value = ((EditTextPreference) pref).getText();
+                if (TextUtils.isEmpty(value)) {
+                    showAlert(pref.getTitle() + " "
+                            + getString(R.string.empty_alert));
+                    return false;
+                }
             }
         }
         try {
@@ -241,7 +234,7 @@
                             ? getValue(PreferenceKey.DisplayName)
                             : getDefaultDisplayName())
                     .setPort(Integer.parseInt(getValue(PreferenceKey.Port)))
-                    .setSendKeepAlive(isChecked(PreferenceKey.SendKeepAlive))
+                    .setSendKeepAlive(isAlwaysSendKeepAlive())
                     .setAutoRegistration(
                             mSharedPreferences.isReceivingCallsEnabled())
                     .build();
@@ -249,24 +242,29 @@
 
     public boolean onPreferenceChange(Preference pref, Object newValue) {
         if (pref instanceof CheckBoxPreference) return true;
-        String value = (String) newValue;
-        if (value == null) value = EMPTY;
-        if (pref == PreferenceKey.Password.preference) {
-            pref.setSummary(scramble(newValue.toString()));
+        String value = (newValue == null) ? "" : newValue.toString();
+        if (TextUtils.isEmpty(value)) {
+            pref.setSummary(getPreferenceKey(pref).defaultValue);
+        } else if (pref == PreferenceKey.Password.preference) {
+            pref.setSummary(scramble(value));
         } else {
             pref.setSummary(value);
         }
 
-        if (pref instanceof EditTextPreference) {
-            ((EditTextPreference) pref).setText(value);
-        }
-
         if (pref == PreferenceKey.DisplayName.preference) {
+            ((EditTextPreference) pref).setText(value);
             checkIfDisplayNameSet();
         }
         return true;
     }
 
+    private PreferenceKey getPreferenceKey(Preference pref) {
+        for (PreferenceKey key : PreferenceKey.values()) {
+            if (key.preference == pref) return key;
+        }
+        throw new RuntimeException("not possible to reach here");
+    }
+
     private void loadPreferencesFromProfile(SipProfile p) {
         if (p != null) {
             Log.v(TAG, "Edit the existing profile : " + p.getProfileName());
@@ -275,17 +273,15 @@
                 for (PreferenceKey key : PreferenceKey.values()) {
                     Method meth = profileClass.getMethod(GET_METHOD_PREFIX
                             + getString(key.text), (Class[])null);
-                    if (key == PreferenceKey.Port) {
-                        setValue(key,
-                                String.valueOf(meth.invoke(p, (Object[])null)));
-                    } else if (key == PreferenceKey.SendKeepAlive) {
+                    if (key == PreferenceKey.SendKeepAlive) {
                         boolean value = ((Boolean)
                                 meth.invoke(p, (Object[]) null)).booleanValue();
                         setValue(key, getString(value
                                 ? R.string.sip_always_send_keepalive
                                 : R.string.sip_system_decide));
                     } else {
-                        setValue(key, (String) meth.invoke(p, (Object[])null));
+                        setValue(key,
+                                String.valueOf(meth.invoke(p, (Object[])null)));
                     }
                 }
                 checkIfDisplayNameSet();
@@ -295,27 +291,16 @@
         } else {
             Log.v(TAG, "Edit a new profile");
             for (PreferenceKey key : PreferenceKey.values()) {
-                if (key.defaultValue == LEAVE_AS_IS) continue;
                 Preference pref = key.preference;
                 pref.setOnPreferenceChangeListener(this);
-                if (pref instanceof EditTextPreference) {
-                    ((EditTextPreference) pref).setText(key.defaultValue);
-                } else if (pref instanceof ListPreference) {
-                    ((ListPreference) pref).setValue(key.defaultValue);
-                } else {
-                    continue;
-                }
-                pref.setSummary((EMPTY == key.defaultValue)
-                        ? getString(R.string.initial_preference_summary)
-                        : key.defaultValue);
             }
             mDisplayNameSet = false;
         }
     }
 
-    private boolean isChecked(PreferenceKey key) {
-        // must be PreferenceKey.SendKeepAlive
-        ListPreference pref = (ListPreference) key.preference;
+    private boolean isAlwaysSendKeepAlive() {
+        ListPreference pref = (ListPreference)
+                PreferenceKey.SendKeepAlive.preference;
         return getString(R.string.sip_always_send_keepalive).equals(
                 pref.getValue());
     }
@@ -344,9 +329,12 @@
         }
 
         if (TextUtils.isEmpty(value)) {
-            pref.setSummary(getString(R.string.initial_preference_summary));
+            pref.setSummary(getString(key.defaultValue));
         } else if (key == PreferenceKey.Password) {
             pref.setSummary(scramble(value));
+        } else if ((key == PreferenceKey.DisplayName)
+                && value.equals(getDefaultDisplayName())) {
+            pref.setSummary(getString(key.defaultValue));
         } else {
             pref.setSummary(value);
         }
@@ -372,8 +360,6 @@
             PreferenceKey.DisplayName.preference.setSummary(displayName);
         } else {
             setValue(PreferenceKey.DisplayName, "");
-            PreferenceKey.DisplayName.preference.setSummary(
-                    getString(R.string.display_name_summary));
         }
     }