NetworkSettings: Don't error out with TD-SCDMA values

This adds persistence and the ability to read TD-SCDMA values if
they are set. Both Network configuration and the QS tile toggle
now cycle these modes correctly
Devices supporting TD-SCDMA need to overlay the config_enabled_tdscdma
boolean configuration value to "true" for the proper network modes
to be presented to the user.

The ro.telephony.default_network should also be changed to a TD-SCDMA
value (20 or 18, depending on whether LTE is also supported)

Change-Id: I3a88a01aa9c5c111101c53388d5ba76a99cd0df6
diff --git a/res/values/config.xml b/res/values/config.xml
index 6e79575..a97a134 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -148,4 +148,7 @@
     <!-- carrier settings menu -->
     <string name="carrier_settings" translatable="false"></string>
     <string name="carrier_settings_menu" translatable="false"></string>
+
+    <!-- Use TD-SDCMA 3G/4G technologies on this device -->
+    <bool name="config_enabled_tdscdma" translatable="false">false</bool>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 31c2eb4..c3ec771 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -701,6 +701,17 @@
         <item>"2"</item>
     </string-array>
 
+    <!-- TD-SCDMA uses a variation of the GSM combos -->
+    <string-array name="enabled_networks_tdscdma_values" translatable="false">
+        <item>"20"</item>
+        <item>"18"</item>
+        <item>"1"</item>
+    </string-array>
+    <string-array name="enabled_networks_tdscdma_except_lte_values" translatable="false">
+        <item>"18"</item>
+        <item>"1"</item>
+    </string-array>
+
     <string name="cdma_subscription_title">CDMA subscription</string>
     <string name="cdma_subscription_summary">Change between RUIM/SIM and NV</string>
     <string name="cdma_subscription_dialogtitle">subscription</string>
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 237b8df..e712b58 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -284,8 +284,13 @@
                 } else if (!getResources().getBoolean(R.bool.config_enabled_lte)) {
                     mButtonEnabledNetworks.setEntries(
                             R.array.enabled_networks_except_lte_choices);
-                    mButtonEnabledNetworks.setEntryValues(
-                            R.array.enabled_networks_except_lte_values);
+                    if (getResources().getBoolean(R.bool.config_enabled_tdscdma)) {
+                        mButtonEnabledNetworks.setEntryValues(
+                                R.array.enabled_networks_tdscdma_except_lte_values);
+                    } else {
+                        mButtonEnabledNetworks.setEntryValues(
+                                R.array.enabled_networks_except_lte_values);
+                    }
                 } else if (mIsGlobalCdma) {
                     mButtonEnabledNetworks.setEntries(
                             R.array.enabled_networks_cdma_choices);
@@ -295,8 +300,13 @@
                     int select = (mShow4GForLTE == true) ? R.array.enabled_networks_4g_choices
                         : R.array.enabled_networks_choices;
                     mButtonEnabledNetworks.setEntries(select);
-                    mButtonEnabledNetworks.setEntryValues(
-                            R.array.enabled_networks_values);
+                    if (getResources().getBoolean(R.bool.config_enabled_tdscdma)) {
+                        mButtonEnabledNetworks.setEntryValues(
+                                R.array.enabled_networks_tdscdma_values);
+                    } else {
+                        mButtonEnabledNetworks.setEntryValues(
+                                R.array.enabled_networks_values);
+                    }
                 }
                 mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet);
             } else {
@@ -441,6 +451,16 @@
                     case Phone.NT_MODE_CDMA:
                     case Phone.NT_MODE_CDMA_NO_EVDO:
                     case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
+                    case Phone.NT_MODE_TD_SCDMA_ONLY:
+                    case Phone.NT_MODE_TD_SCDMA_WCDMA:
+                    case Phone.NT_MODE_TD_SCDMA_LTE:
+                    case Phone.NT_MODE_TD_SCDMA_GSM:
+                    case Phone.NT_MODE_TD_SCDMA_GSM_LTE:
+                    case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA:
+                    case Phone.NT_MODE_TD_SCDMA_WCDMA_LTE:
+                    case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA_LTE:
+                    case Phone.NT_MODE_TD_SCDMA_CDMA_EVDO_GSM_WCDMA:
+                    case Phone.NT_MODE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA:
                         // This is one of the modes we recognize
                         modemNetworkMode = buttonNetworkMode;
                         break;
@@ -717,6 +737,25 @@
                         Integer.toString(Phone.NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA));
                 mButtonEnabledNetworks.setSummary(R.string.network_global);
                 break;
+            case Phone.NT_MODE_TD_SCDMA_ONLY:
+            case Phone.NT_MODE_TD_SCDMA_WCDMA:
+            case Phone.NT_MODE_TD_SCDMA_GSM:
+            case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA:
+            case Phone.NT_MODE_TD_SCDMA_CDMA_EVDO_GSM_WCDMA:
+                mButtonEnabledNetworks.setValue(
+                        Integer.toString(Phone.NT_MODE_TD_SCDMA_GSM_WCDMA));
+                mButtonEnabledNetworks.setSummary(R.string.network_3G);
+                break;
+            case Phone.NT_MODE_TD_SCDMA_LTE:
+            case Phone.NT_MODE_TD_SCDMA_GSM_LTE:
+            case Phone.NT_MODE_TD_SCDMA_WCDMA_LTE:
+            case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA_LTE:
+            case Phone.NT_MODE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA:
+                mButtonEnabledNetworks.setValue(
+                        Integer.toString(Phone.NT_MODE_TD_SCDMA_GSM_WCDMA_LTE));
+                mButtonEnabledNetworks.setSummary((mShow4GForLTE == true)
+                        ? R.string.network_4G : R.string.network_lte);
+                break;
             default:
                 String errMsg = "Invalid Network Mode (" + NetworkMode + "). Ignore.";
                 loge(errMsg);
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index c1d9d2c..5a80321 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -368,6 +368,13 @@
         case Phone.NT_MODE_LTE_CDMA_AND_EVDO:
             network = Phone.NT_MODE_CDMA;
             break;
+        // TD-SCDMA Devices
+        case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA:
+            network = Phone.NT_MODE_TD_SCDMA_GSM_WCDMA_LTE;
+            break;
+        case Phone.NT_MODE_TD_SCDMA_GSM_WCDMA_LTE:
+            network = Phone.NT_MODE_TD_SCDMA_GSM_WCDMA;
+            break;
         }
 
         mPhone.setPreferredNetworkType(network,