OSDN Git Service

Support configuring the protocol in APN settings.
[android-x86/packages-apps-Settings.git] / src / com / android / settings / ApnEditor.java
index e097854..4ac7401 100644 (file)
@@ -37,6 +37,7 @@ import android.view.Menu;
 import android.view.MenuItem;
 
 import com.android.internal.telephony.TelephonyProperties;
+import com.android.internal.telephony.RILConstants;
 
 
 public class ApnEditor extends PreferenceActivity
@@ -47,6 +48,7 @@ public class ApnEditor extends PreferenceActivity
 
     private final static String SAVED_POS = "pos";
     private final static String KEY_AUTH_TYPE = "auth_type";
+    private final static String KEY_PROTOCOL = "apn_protocol";
 
     private static final int MENU_DELETE = Menu.FIRST;
     private static final int MENU_SAVE = Menu.FIRST + 1;
@@ -67,6 +69,7 @@ public class ApnEditor extends PreferenceActivity
     private EditTextPreference mMmsPort;
     private ListPreference mAuthType;
     private EditTextPreference mApnType;
+    private ListPreference mProtocol;
 
     private String mCurMnc;
     private String mCurMcc;
@@ -97,6 +100,7 @@ public class ApnEditor extends PreferenceActivity
             Telephony.Carriers.MMSPORT, // 13
             Telephony.Carriers.AUTH_TYPE, // 14
             Telephony.Carriers.TYPE, // 15
+            Telephony.Carriers.PROTOCOL, // 16
     };
 
     private static final int ID_INDEX = 0;
@@ -114,6 +118,7 @@ public class ApnEditor extends PreferenceActivity
     private static final int MMSPORT_INDEX = 13;
     private static final int AUTH_TYPE_INDEX = 14;
     private static final int TYPE_INDEX = 15;
+    private static final int PROTOCOL_INDEX = 16;
 
 
     @Override
@@ -137,9 +142,12 @@ public class ApnEditor extends PreferenceActivity
         mMnc = (EditTextPreference) findPreference("apn_mnc");
         mApnType = (EditTextPreference) findPreference("apn_type");
 
-        mAuthType = (ListPreference) findPreference("auth_type");
+        mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE);
         mAuthType.setOnPreferenceChangeListener(this);
 
+        mProtocol = (ListPreference) findPreference(KEY_PROTOCOL);
+        mProtocol.setOnPreferenceChangeListener(this);
+
         mRes = getResources();
 
         final Intent intent = getIntent();
@@ -234,6 +242,7 @@ public class ApnEditor extends PreferenceActivity
                 mAuthType.setValueIndex(authVal);
             }
 
+            mProtocol.setValue(mCursor.getString(PROTOCOL_INDEX));
         }
 
         mName.setSummary(checkNull(mName.getText()));
@@ -260,6 +269,28 @@ public class ApnEditor extends PreferenceActivity
         } else {
             mAuthType.setSummary(sNotSet);
         }
+
+        mProtocol.setSummary(
+                checkNull(protocolDescription(mProtocol.getValue())));
+    }
+
+    /**
+     * Returns the UI choice (e.g., "IPv4/IPv6") corresponding to the given
+     * raw value of the protocol preference (e.g., "IPV4V6"). If unknown,
+     * return null.
+     */
+    private String protocolDescription(String raw) {
+        int protocolIndex = mProtocol.findIndexOfValue(raw);
+        if (protocolIndex == -1) {
+            return null;
+        } else {
+            String[] values = mRes.getStringArray(R.array.apn_protocol_entries);
+            try {
+                return values[protocolIndex];
+            } catch (ArrayIndexOutOfBoundsException e) {
+                return null;
+            }
+        }
     }
 
     public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -274,6 +305,16 @@ public class ApnEditor extends PreferenceActivity
             } catch (NumberFormatException e) {
                 return false;
             }
+            return true;
+        }
+
+        if (KEY_PROTOCOL.equals(key)) {
+            String protocol = protocolDescription((String) newValue);
+            if (protocol == null) {
+                return false;
+            }
+            mProtocol.setSummary(protocol);
+            mProtocol.setValue((String) newValue);
         }
         return true;
     }
@@ -396,6 +437,13 @@ public class ApnEditor extends PreferenceActivity
             values.put(Telephony.Carriers.AUTH_TYPE, Integer.parseInt(authVal));
         }
 
+        values.put(Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue()));
+
+        // Hardcode IPv4 roaming for now until the carriers sort out all the
+        // billing arrangements.
+        values.put(Telephony.Carriers.ROAMING_PROTOCOL,
+                RILConstants.SETUP_DATA_PROTOCOL_IP);
+
         values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText()));
 
         values.put(Telephony.Carriers.MCC, mcc);