Loading src/com/android/settings/network/ApnEditor.java +38 −24 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public class ApnEditor extends SettingsPreferenceFragment private final static boolean VDBG = false; // STOPSHIP if true private final static String KEY_AUTH_TYPE = "auth_type"; private static final String KEY_APN_TYPE = "apn_type"; private final static String KEY_PROTOCOL = "apn_protocol"; private final static String KEY_ROAMING_PROTOCOL = "apn_roaming_protocol"; private final static String KEY_CARRIER_ENABLED = "carrier_enabled"; Loading Loading @@ -344,6 +345,7 @@ public class ApnEditor extends SettingsPreferenceFragment public void onViewStateRestored(@Nullable Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); fillUI(savedInstanceState == null); setCarrierCustomizedConfigToUi(); } @VisibleForTesting Loading Loading @@ -645,7 +647,9 @@ public class ApnEditor extends SettingsPreferenceFragment * return null. */ private String protocolDescription(String raw, ListPreference protocol) { final int protocolIndex = protocol.findIndexOfValue(raw); String uRaw = checkNull(raw).toUpperCase(); uRaw = uRaw.equals("IPV4") ? "IP" : uRaw; final int protocolIndex = protocol.findIndexOfValue(uRaw); if (protocolIndex == -1) { return null; } else { Loading Loading @@ -745,6 +749,13 @@ public class ApnEditor extends SettingsPreferenceFragment } catch (NumberFormatException e) { return false; } } else if (KEY_APN_TYPE.equals(key)) { String data = (TextUtils.isEmpty((String) newValue) && !ArrayUtils.isEmpty(mDefaultApnTypes)) ? getEditableApnType(mDefaultApnTypes) : (String) newValue; if (!TextUtils.isEmpty(data)) { mApnType.setSummary(data); } } else if (KEY_PROTOCOL.equals(key)) { final String protocol = protocolDescription((String) newValue, mProtocol); if (protocol == null) { Loading Loading @@ -780,7 +791,6 @@ public class ApnEditor extends SettingsPreferenceFragment } else { preference.setSummary(checkNull(newValue != null ? String.valueOf(newValue) : null)); } return true; } Loading Loading @@ -1002,13 +1012,13 @@ public class ApnEditor extends SettingsPreferenceFragment callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.PROTOCOL, getUserEnteredApnProtocol(mProtocol, mDefaultApnProtocol), checkNotSet(mProtocol.getValue()), callUpdate, PROTOCOL_INDEX); callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.ROAMING_PROTOCOL, getUserEnteredApnProtocol(mRoamingProtocol, mDefaultApnRoamingProtocol), checkNotSet(mRoamingProtocol.getValue()), callUpdate, ROAMING_PROTOCOL_INDEX); Loading Loading @@ -1204,17 +1214,6 @@ public class ApnEditor extends SettingsPreferenceFragment return sNotSet.equals(value) ? null : value; } @VisibleForTesting String getUserEnteredApnProtocol(ListPreference preference, String defaultApnProtocol) { // if user has not specified a protocol or enter empty type, map it just for default final String userEnteredApnProtocol = checkNotSet( ((preference == null) ? null : preference.getValue())); if (TextUtils.isEmpty(userEnteredApnProtocol)) { return defaultApnProtocol; } return userEnteredApnProtocol.trim(); } @VisibleForTesting String getUserEnteredApnType() { // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY" Loading @@ -1222,16 +1221,11 @@ public class ApnEditor extends SettingsPreferenceFragment String userEnteredApnType = mApnType.getText(); if (userEnteredApnType != null) userEnteredApnType = userEnteredApnType.trim(); if ((TextUtils.isEmpty(userEnteredApnType) || APN_TYPE_ALL.equals(userEnteredApnType)) && !ArrayUtils.isEmpty(mReadOnlyApnTypes)) { String[] apnTypeList = APN_TYPES; if (TextUtils.isEmpty(userEnteredApnType) && !ArrayUtils.isEmpty(mDefaultApnTypes)) { apnTypeList = mDefaultApnTypes; || APN_TYPE_ALL.equals(userEnteredApnType))) { userEnteredApnType = getEditableApnType(APN_TYPES); } userEnteredApnType = getEditableApnType(apnTypeList); Log.d(TAG, "getUserEnteredApnType: changed apn type to editable apn types: " + userEnteredApnType); } return userEnteredApnType; } Loading Loading @@ -1324,6 +1318,26 @@ public class ApnEditor extends SettingsPreferenceFragment } } private void setCarrierCustomizedConfigToUi() { if (TextUtils.isEmpty(mApnType.getText()) && !ArrayUtils.isEmpty(mDefaultApnTypes)) { String value = getEditableApnType(mDefaultApnTypes); mApnType.setText(value); mApnType.setSummary(value); } String protocol = protocolDescription(mDefaultApnProtocol, mProtocol); if (TextUtils.isEmpty(mProtocol.getValue()) && !TextUtils.isEmpty(protocol)) { mProtocol.setValue(mDefaultApnProtocol); mProtocol.setSummary(protocol); } String roamingProtocol = protocolDescription(mDefaultApnRoamingProtocol, mRoamingProtocol); if (TextUtils.isEmpty(mRoamingProtocol.getValue()) && !TextUtils.isEmpty(roamingProtocol)) { mRoamingProtocol.setValue(mDefaultApnRoamingProtocol); mRoamingProtocol.setSummary(roamingProtocol); } } public static class ErrorDialog extends InstrumentedDialogFragment { public static void showError(ApnEditor editor) { Loading tests/robotests/src/com/android/settings/network/ApnEditorTest.java +15 −23 Original line number Diff line number Diff line Loading @@ -81,11 +81,11 @@ public class ApnEditorTest { "" /* MMS port */, 0 /* Authentication type */, "default,supl,ia" /* APN type */, "IPv6" /* APN protocol */, "IP" /* APN protocol */, 1 /* APN enable/disable */, 0 /* Bearer */, 0 /* Bearer BITMASK*/, "IPv4" /* APN roaming protocol */, "IPV6" /* APN roaming protocol */, "None" /* MVNO type */, "", /* MVNO value */ }; Loading Loading @@ -464,33 +464,25 @@ public class ApnEditorTest { } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIPv4v6() { // GIVEN read default APN protocol with IPV4V6 mApnEditorUT.mDefaultApnProtocol = "IPV4V6"; public void testOnViewStateRestored_customizedValueWithoutDefault_shouldShowCustomized() { mApnEditorUT.mDefaultApnProtocol = "IP"; mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = null; mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"}); // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IPV4V6"); assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv4"); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIP() { // GIVEN read default APN protocol with IP public void testOnViewStateRestored_customizedValueWithDefault_shouldShowDefault() { mApnEditorUT.mDefaultApnProtocol = "IP"; mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = "IPV6"; mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"}); // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IP"); assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv6"); } @Test Loading @@ -503,7 +495,7 @@ public class ApnEditorTest { // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be default assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default"); Loading @@ -516,7 +508,7 @@ public class ApnEditorTest { // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be default assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default"); Loading Loading
src/com/android/settings/network/ApnEditor.java +38 −24 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public class ApnEditor extends SettingsPreferenceFragment private final static boolean VDBG = false; // STOPSHIP if true private final static String KEY_AUTH_TYPE = "auth_type"; private static final String KEY_APN_TYPE = "apn_type"; private final static String KEY_PROTOCOL = "apn_protocol"; private final static String KEY_ROAMING_PROTOCOL = "apn_roaming_protocol"; private final static String KEY_CARRIER_ENABLED = "carrier_enabled"; Loading Loading @@ -344,6 +345,7 @@ public class ApnEditor extends SettingsPreferenceFragment public void onViewStateRestored(@Nullable Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); fillUI(savedInstanceState == null); setCarrierCustomizedConfigToUi(); } @VisibleForTesting Loading Loading @@ -645,7 +647,9 @@ public class ApnEditor extends SettingsPreferenceFragment * return null. */ private String protocolDescription(String raw, ListPreference protocol) { final int protocolIndex = protocol.findIndexOfValue(raw); String uRaw = checkNull(raw).toUpperCase(); uRaw = uRaw.equals("IPV4") ? "IP" : uRaw; final int protocolIndex = protocol.findIndexOfValue(uRaw); if (protocolIndex == -1) { return null; } else { Loading Loading @@ -745,6 +749,13 @@ public class ApnEditor extends SettingsPreferenceFragment } catch (NumberFormatException e) { return false; } } else if (KEY_APN_TYPE.equals(key)) { String data = (TextUtils.isEmpty((String) newValue) && !ArrayUtils.isEmpty(mDefaultApnTypes)) ? getEditableApnType(mDefaultApnTypes) : (String) newValue; if (!TextUtils.isEmpty(data)) { mApnType.setSummary(data); } } else if (KEY_PROTOCOL.equals(key)) { final String protocol = protocolDescription((String) newValue, mProtocol); if (protocol == null) { Loading Loading @@ -780,7 +791,6 @@ public class ApnEditor extends SettingsPreferenceFragment } else { preference.setSummary(checkNull(newValue != null ? String.valueOf(newValue) : null)); } return true; } Loading Loading @@ -1002,13 +1012,13 @@ public class ApnEditor extends SettingsPreferenceFragment callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.PROTOCOL, getUserEnteredApnProtocol(mProtocol, mDefaultApnProtocol), checkNotSet(mProtocol.getValue()), callUpdate, PROTOCOL_INDEX); callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.ROAMING_PROTOCOL, getUserEnteredApnProtocol(mRoamingProtocol, mDefaultApnRoamingProtocol), checkNotSet(mRoamingProtocol.getValue()), callUpdate, ROAMING_PROTOCOL_INDEX); Loading Loading @@ -1204,17 +1214,6 @@ public class ApnEditor extends SettingsPreferenceFragment return sNotSet.equals(value) ? null : value; } @VisibleForTesting String getUserEnteredApnProtocol(ListPreference preference, String defaultApnProtocol) { // if user has not specified a protocol or enter empty type, map it just for default final String userEnteredApnProtocol = checkNotSet( ((preference == null) ? null : preference.getValue())); if (TextUtils.isEmpty(userEnteredApnProtocol)) { return defaultApnProtocol; } return userEnteredApnProtocol.trim(); } @VisibleForTesting String getUserEnteredApnType() { // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY" Loading @@ -1222,16 +1221,11 @@ public class ApnEditor extends SettingsPreferenceFragment String userEnteredApnType = mApnType.getText(); if (userEnteredApnType != null) userEnteredApnType = userEnteredApnType.trim(); if ((TextUtils.isEmpty(userEnteredApnType) || APN_TYPE_ALL.equals(userEnteredApnType)) && !ArrayUtils.isEmpty(mReadOnlyApnTypes)) { String[] apnTypeList = APN_TYPES; if (TextUtils.isEmpty(userEnteredApnType) && !ArrayUtils.isEmpty(mDefaultApnTypes)) { apnTypeList = mDefaultApnTypes; || APN_TYPE_ALL.equals(userEnteredApnType))) { userEnteredApnType = getEditableApnType(APN_TYPES); } userEnteredApnType = getEditableApnType(apnTypeList); Log.d(TAG, "getUserEnteredApnType: changed apn type to editable apn types: " + userEnteredApnType); } return userEnteredApnType; } Loading Loading @@ -1324,6 +1318,26 @@ public class ApnEditor extends SettingsPreferenceFragment } } private void setCarrierCustomizedConfigToUi() { if (TextUtils.isEmpty(mApnType.getText()) && !ArrayUtils.isEmpty(mDefaultApnTypes)) { String value = getEditableApnType(mDefaultApnTypes); mApnType.setText(value); mApnType.setSummary(value); } String protocol = protocolDescription(mDefaultApnProtocol, mProtocol); if (TextUtils.isEmpty(mProtocol.getValue()) && !TextUtils.isEmpty(protocol)) { mProtocol.setValue(mDefaultApnProtocol); mProtocol.setSummary(protocol); } String roamingProtocol = protocolDescription(mDefaultApnRoamingProtocol, mRoamingProtocol); if (TextUtils.isEmpty(mRoamingProtocol.getValue()) && !TextUtils.isEmpty(roamingProtocol)) { mRoamingProtocol.setValue(mDefaultApnRoamingProtocol); mRoamingProtocol.setSummary(roamingProtocol); } } public static class ErrorDialog extends InstrumentedDialogFragment { public static void showError(ApnEditor editor) { Loading
tests/robotests/src/com/android/settings/network/ApnEditorTest.java +15 −23 Original line number Diff line number Diff line Loading @@ -81,11 +81,11 @@ public class ApnEditorTest { "" /* MMS port */, 0 /* Authentication type */, "default,supl,ia" /* APN type */, "IPv6" /* APN protocol */, "IP" /* APN protocol */, 1 /* APN enable/disable */, 0 /* Bearer */, 0 /* Bearer BITMASK*/, "IPv4" /* APN roaming protocol */, "IPV6" /* APN roaming protocol */, "None" /* MVNO type */, "", /* MVNO value */ }; Loading Loading @@ -464,33 +464,25 @@ public class ApnEditorTest { } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIPv4v6() { // GIVEN read default APN protocol with IPV4V6 mApnEditorUT.mDefaultApnProtocol = "IPV4V6"; public void testOnViewStateRestored_customizedValueWithoutDefault_shouldShowCustomized() { mApnEditorUT.mDefaultApnProtocol = "IP"; mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = null; mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"}); // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IPV4V6"); assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv4"); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIP() { // GIVEN read default APN protocol with IP public void testOnViewStateRestored_customizedValueWithDefault_shouldShowDefault() { mApnEditorUT.mDefaultApnProtocol = "IP"; mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = "IPV6"; mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"}); // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IP"); assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv6"); } @Test Loading @@ -503,7 +495,7 @@ public class ApnEditorTest { // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be default assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default"); Loading @@ -516,7 +508,7 @@ public class ApnEditorTest { // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); mApnEditorUT.onViewStateRestored(null); // THEN APN type should be default assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default"); Loading