diff --git a/res/values/arrays.xml b/res/values/arrays.xml index cb4547377e9..6d5526475ee 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -464,6 +464,22 @@ 3 + + + IPv4 + IPv6 + IPv4/IPv6 + + + + + IP + + IPV6 + + IPV4V6 + + Internal device storage diff --git a/res/values/strings.xml b/res/values/strings.xml index fb1ec8cdfdd..5cc4d7367de 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1677,6 +1677,8 @@ PAP or CHAP APN type + + APN protocol Delete APN diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml index 68a1b318ed1..f000dd06bf0 100644 --- a/res/xml/apn_editor.xml +++ b/res/xml/apn_editor.xml @@ -114,4 +114,11 @@ android:singleLine="true" android:inputType="textNoSuggestions" /> + diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java index 9328c149b91..f738823f041 100644 --- a/src/com/android/settings/ApnEditor.java +++ b/src/com/android/settings/ApnEditor.java @@ -48,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; @@ -69,6 +70,7 @@ public class ApnEditor extends PreferenceActivity private EditTextPreference mMmsPort; private ListPreference mAuthType; private EditTextPreference mApnType; + private ListPreference mProtocol; private String mCurMnc; private String mCurMcc; @@ -99,6 +101,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; @@ -116,6 +119,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 @@ -139,9 +143,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(); @@ -238,6 +245,7 @@ public class ApnEditor extends PreferenceActivity mAuthType.setValue(null); } + mProtocol.setValue(mCursor.getString(PROTOCOL_INDEX)); } mName.setSummary(checkNull(mName.getText())); @@ -264,6 +272,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) { @@ -278,6 +308,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; } @@ -389,6 +429,8 @@ public class ApnEditor extends PreferenceActivity values.put(Telephony.Carriers.AUTH_TYPE, Integer.parseInt(authVal)); } + values.put(Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue())); + values.put(Telephony.Carriers.TYPE, checkNotSet(mApnType.getText())); values.put(Telephony.Carriers.MCC, mcc);