Loading src/com/android/settings/network/ApnEditor.java +34 −4 Original line number Diff line number Diff line Loading @@ -137,6 +137,10 @@ public class ApnEditor extends SettingsPreferenceFragment String[] mReadOnlyApnTypes; @VisibleForTesting String[] mDefaultApnTypes; @VisibleForTesting String mDefaultApnProtocol; @VisibleForTesting String mDefaultApnRoamingProtocol; private String[] mReadOnlyApnFields; private boolean mReadOnlyApn; private Uri mCarrierUri; Loading Loading @@ -241,12 +245,14 @@ public class ApnEditor extends SettingsPreferenceFragment private static final int AUTH_TYPE_INDEX = 14; @VisibleForTesting static final int TYPE_INDEX = 15; private static final int PROTOCOL_INDEX = 16; @VisibleForTesting static final int PROTOCOL_INDEX = 16; @VisibleForTesting static final int CARRIER_ENABLED_INDEX = 17; private static final int BEARER_INDEX = 18; private static final int BEARER_BITMASK_INDEX = 19; private static final int ROAMING_PROTOCOL_INDEX = 20; @VisibleForTesting static final int ROAMING_PROTOCOL_INDEX = 20; private static final int MVNO_TYPE_INDEX = 21; private static final int MVNO_MATCH_DATA_INDEX = 22; private static final int EDITED_INDEX = 23; Loading Loading @@ -317,6 +323,19 @@ public class ApnEditor extends SettingsPreferenceFragment if (!ArrayUtils.isEmpty(mDefaultApnTypes)) { Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes)); } mDefaultApnProtocol = b.getString( CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_PROTOCOL_STRING); if (!TextUtils.isEmpty(mDefaultApnProtocol)) { Log.d(TAG, "onCreate: default apn protocol: " + mDefaultApnProtocol); } mDefaultApnRoamingProtocol = b.getString( CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING); if (!TextUtils.isEmpty(mDefaultApnRoamingProtocol)) { Log.d(TAG, "onCreate: default apn roaming protocol: " + mDefaultApnRoamingProtocol); } } } Loading Loading @@ -1029,13 +1048,13 @@ public class ApnEditor extends SettingsPreferenceFragment callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue()), getUserEnteredApnProtocol(mProtocol, mDefaultApnProtocol), callUpdate, PROTOCOL_INDEX); callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.ROAMING_PROTOCOL, checkNotSet(mRoamingProtocol.getValue()), getUserEnteredApnProtocol(mRoamingProtocol, mDefaultApnRoamingProtocol), callUpdate, ROAMING_PROTOCOL_INDEX); Loading Loading @@ -1231,6 +1250,17 @@ 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 tests/robotests/src/com/android/settings/network/ApnEditorTest.java +41 −35 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ContentResolver; import android.content.ContentValues; Loading Loading @@ -57,7 +56,6 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; Loading Loading @@ -246,7 +244,6 @@ public class ApnEditorTest { @Test public void testValidateApnData_validData_shouldReturnNull() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -259,9 +256,7 @@ public class ApnEditorTest { @Test public void testValidateApn_apnNameNotSet_shouldReturnErrorMessage() { // GIVEN a apn data without the apn name final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN validate the apn data Loading @@ -274,9 +269,7 @@ public class ApnEditorTest { @Test public void testValidateApnData_apnNotSet_shouldReturnErrorMessage() { // GIVEN a apn data without the apn final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.APN_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.APN_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN validate the apn data Loading @@ -288,11 +281,8 @@ public class ApnEditorTest { @Test public void testValidateApnData_mccInvalid_shouldReturnErrorMessage() { // GIVEN a apn data with invalid mcc final FakeApnData apnData = new FakeApnData(APN_DATA); // The length of the mcc should be 3 apnData.mData[ApnEditor.MCC_INDEX] = "1324"; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.MCC_INDEX] = "1324"; mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -305,10 +295,8 @@ public class ApnEditorTest { @Test public void testValidateApnData_mncInvalid_shouldReturnErrorMessage() { // GIVEN an apn data with invalid mnc final FakeApnData apnData = new FakeApnData(APN_DATA); // The length of the mnc should be 2 or 3 apnData.mData[ApnEditor.MNC_INDEX] = "1324"; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.MNC_INDEX] = "1324"; mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -321,7 +309,6 @@ public class ApnEditorTest { @Test public void testSaveApnData_pressBackButtonWithValidApnData_shouldSaveApnData() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the back button Loading @@ -336,7 +323,6 @@ public class ApnEditorTest { @Test public void testSaveApnData_pressSaveButtonWithValidApnData_shouldSaveApnData() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the save button Loading @@ -353,10 +339,8 @@ public class ApnEditorTest { @Test public void testSaveApnData_apnDataInvalid_shouldNotSaveApnData() { // GIVEN an invalid apn data final FakeApnData apnData = new FakeApnData(APN_DATA); // The valid apn data should contains a non-empty apn name apnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the save button Loading Loading @@ -474,20 +458,46 @@ public class ApnEditorTest { verify(mApnEditorUT).finish(); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIPv4v6() { // GIVEN read default APN protocol with IPV4V6 mApnEditorUT.mDefaultApnProtocol = "IPV4V6"; // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IPV4V6"); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIP() { // GIVEN read default APN protocol with IP mApnEditorUT.mDefaultApnProtocol = "IP"; // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IP"); } @Test public void getUserEnteredApnType_emptyApnType_shouldReturnDefault() { // case 1 // GIVEN read only APN types with DUN String[] readOnlyApnTypes = {"dun"}; mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypes; mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"}; // GIVEN read specificApnTypeForEmptyInput with DEFAULT,DUN String[] defaultApnTypes = {"default", "dun"}; mApnEditorUT.mDefaultApnTypes = defaultApnTypes; mApnEditorUT.mDefaultApnTypes = new String [] {"default", "dun"}; // Input empty in TYPE final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be default Loading @@ -495,16 +505,12 @@ public class ApnEditorTest { // case 2 // GIVEN read only APN types with DUN String[] readOnlyApnTypesCase2 = {"dun"}; mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypesCase2; mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"}; // GIVEN read specificApnTypeForEmptyInput with DEFAULT String[] defaultApnTypesCase2 = {"default"}; mApnEditorUT.mDefaultApnTypes = defaultApnTypesCase2; mApnEditorUT.mDefaultApnTypes = new String [] {"default"}; // Input empty in TYPE final FakeApnData apnDataCase2 = new FakeApnData(APN_DATA); apnDataCase2.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.mApnData = apnDataCase2; mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be default Loading Loading
src/com/android/settings/network/ApnEditor.java +34 −4 Original line number Diff line number Diff line Loading @@ -137,6 +137,10 @@ public class ApnEditor extends SettingsPreferenceFragment String[] mReadOnlyApnTypes; @VisibleForTesting String[] mDefaultApnTypes; @VisibleForTesting String mDefaultApnProtocol; @VisibleForTesting String mDefaultApnRoamingProtocol; private String[] mReadOnlyApnFields; private boolean mReadOnlyApn; private Uri mCarrierUri; Loading Loading @@ -241,12 +245,14 @@ public class ApnEditor extends SettingsPreferenceFragment private static final int AUTH_TYPE_INDEX = 14; @VisibleForTesting static final int TYPE_INDEX = 15; private static final int PROTOCOL_INDEX = 16; @VisibleForTesting static final int PROTOCOL_INDEX = 16; @VisibleForTesting static final int CARRIER_ENABLED_INDEX = 17; private static final int BEARER_INDEX = 18; private static final int BEARER_BITMASK_INDEX = 19; private static final int ROAMING_PROTOCOL_INDEX = 20; @VisibleForTesting static final int ROAMING_PROTOCOL_INDEX = 20; private static final int MVNO_TYPE_INDEX = 21; private static final int MVNO_MATCH_DATA_INDEX = 22; private static final int EDITED_INDEX = 23; Loading Loading @@ -317,6 +323,19 @@ public class ApnEditor extends SettingsPreferenceFragment if (!ArrayUtils.isEmpty(mDefaultApnTypes)) { Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes)); } mDefaultApnProtocol = b.getString( CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_PROTOCOL_STRING); if (!TextUtils.isEmpty(mDefaultApnProtocol)) { Log.d(TAG, "onCreate: default apn protocol: " + mDefaultApnProtocol); } mDefaultApnRoamingProtocol = b.getString( CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING); if (!TextUtils.isEmpty(mDefaultApnRoamingProtocol)) { Log.d(TAG, "onCreate: default apn roaming protocol: " + mDefaultApnRoamingProtocol); } } } Loading Loading @@ -1029,13 +1048,13 @@ public class ApnEditor extends SettingsPreferenceFragment callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.PROTOCOL, checkNotSet(mProtocol.getValue()), getUserEnteredApnProtocol(mProtocol, mDefaultApnProtocol), callUpdate, PROTOCOL_INDEX); callUpdate = setStringValueAndCheckIfDiff(values, Telephony.Carriers.ROAMING_PROTOCOL, checkNotSet(mRoamingProtocol.getValue()), getUserEnteredApnProtocol(mRoamingProtocol, mDefaultApnRoamingProtocol), callUpdate, ROAMING_PROTOCOL_INDEX); Loading Loading @@ -1231,6 +1250,17 @@ 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
tests/robotests/src/com/android/settings/network/ApnEditorTest.java +41 −35 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ContentResolver; import android.content.ContentValues; Loading Loading @@ -57,7 +56,6 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; Loading Loading @@ -246,7 +244,6 @@ public class ApnEditorTest { @Test public void testValidateApnData_validData_shouldReturnNull() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -259,9 +256,7 @@ public class ApnEditorTest { @Test public void testValidateApn_apnNameNotSet_shouldReturnErrorMessage() { // GIVEN a apn data without the apn name final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN validate the apn data Loading @@ -274,9 +269,7 @@ public class ApnEditorTest { @Test public void testValidateApnData_apnNotSet_shouldReturnErrorMessage() { // GIVEN a apn data without the apn final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.APN_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.APN_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN validate the apn data Loading @@ -288,11 +281,8 @@ public class ApnEditorTest { @Test public void testValidateApnData_mccInvalid_shouldReturnErrorMessage() { // GIVEN a apn data with invalid mcc final FakeApnData apnData = new FakeApnData(APN_DATA); // The length of the mcc should be 3 apnData.mData[ApnEditor.MCC_INDEX] = "1324"; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.MCC_INDEX] = "1324"; mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -305,10 +295,8 @@ public class ApnEditorTest { @Test public void testValidateApnData_mncInvalid_shouldReturnErrorMessage() { // GIVEN an apn data with invalid mnc final FakeApnData apnData = new FakeApnData(APN_DATA); // The length of the mnc should be 2 or 3 apnData.mData[ApnEditor.MNC_INDEX] = "1324"; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.MNC_INDEX] = "1324"; mApnEditorUT.fillUI(true /* firstTime */); // WHEN validate the apn data Loading @@ -321,7 +309,6 @@ public class ApnEditorTest { @Test public void testSaveApnData_pressBackButtonWithValidApnData_shouldSaveApnData() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the back button Loading @@ -336,7 +323,6 @@ public class ApnEditorTest { @Test public void testSaveApnData_pressSaveButtonWithValidApnData_shouldSaveApnData() { // GIVEN a valid apn data mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the save button Loading @@ -353,10 +339,8 @@ public class ApnEditorTest { @Test public void testSaveApnData_apnDataInvalid_shouldNotSaveApnData() { // GIVEN an invalid apn data final FakeApnData apnData = new FakeApnData(APN_DATA); // The valid apn data should contains a non-empty apn name apnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // WHEN press the save button Loading Loading @@ -474,20 +458,46 @@ public class ApnEditorTest { verify(mApnEditorUT).finish(); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIPv4v6() { // GIVEN read default APN protocol with IPV4V6 mApnEditorUT.mDefaultApnProtocol = "IPV4V6"; // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IPV4V6"); } @Test public void getUserEnteredApnProtocol_emptyApnProtocol_shouldReturnDefaultIP() { // GIVEN read default APN protocol with IP mApnEditorUT.mDefaultApnProtocol = "IP"; // Input empty in TYPE mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be IPV4V6 assertThat(mApnEditorUT.getUserEnteredApnProtocol( mApnEditorUT.mProtocol, mApnEditorUT.mDefaultApnProtocol)) .isEqualTo("IP"); } @Test public void getUserEnteredApnType_emptyApnType_shouldReturnDefault() { // case 1 // GIVEN read only APN types with DUN String[] readOnlyApnTypes = {"dun"}; mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypes; mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"}; // GIVEN read specificApnTypeForEmptyInput with DEFAULT,DUN String[] defaultApnTypes = {"default", "dun"}; mApnEditorUT.mDefaultApnTypes = defaultApnTypes; mApnEditorUT.mDefaultApnTypes = new String [] {"default", "dun"}; // Input empty in TYPE final FakeApnData apnData = new FakeApnData(APN_DATA); apnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.mApnData = apnData; mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be default Loading @@ -495,16 +505,12 @@ public class ApnEditorTest { // case 2 // GIVEN read only APN types with DUN String[] readOnlyApnTypesCase2 = {"dun"}; mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypesCase2; mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"}; // GIVEN read specificApnTypeForEmptyInput with DEFAULT String[] defaultApnTypesCase2 = {"default"}; mApnEditorUT.mDefaultApnTypes = defaultApnTypesCase2; mApnEditorUT.mDefaultApnTypes = new String [] {"default"}; // Input empty in TYPE final FakeApnData apnDataCase2 = new FakeApnData(APN_DATA); apnDataCase2.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.mApnData = apnDataCase2; mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = ""; mApnEditorUT.fillUI(true /* firstTime */); // THEN APN type should be default Loading