diff --git a/src/com/android/email/Utility.java b/src/com/android/email/Utility.java index b8162b73f..a80969560 100644 --- a/src/com/android/email/Utility.java +++ b/src/com/android/email/Utility.java @@ -129,6 +129,20 @@ public class Utility { return s != null && s.length() > 0; } + public static boolean isPortFieldValid(TextView view) { + CharSequence chars = view.getText(); + if (TextUtils.isEmpty(chars)) return false; + Integer port; + // In theory, we can't get an illegal value here, since the field is monitored for valid + // numeric input. But this might be used elsewhere without such a check. + try { + port = Integer.parseInt(chars.toString()); + } catch (NumberFormatException e) { + return false; + } + return port > 0 && port < 65536; + } + /** * Ensures that the given string starts and ends with the double quote character. The string is not modified in any way except to add the * double quote character to start and end if it's not already there. diff --git a/src/com/android/email/activity/setup/AccountSetupIncoming.java b/src/com/android/email/activity/setup/AccountSetupIncoming.java index 6dd765b18..3efc790a2 100644 --- a/src/com/android/email/activity/setup/AccountSetupIncoming.java +++ b/src/com/android/email/activity/setup/AccountSetupIncoming.java @@ -308,7 +308,7 @@ public class AccountSetupIncoming extends Activity implements OnClickListener { boolean enabled = Utility.requiredFieldValid(mUsernameView) && Utility.requiredFieldValid(mPasswordView) && Utility.requiredFieldValid(mServerView) - && Utility.requiredFieldValid(mPortView); + && Utility.isPortFieldValid(mPortView); if (enabled) { try { URI uri = getUri(); diff --git a/src/com/android/email/activity/setup/AccountSetupOutgoing.java b/src/com/android/email/activity/setup/AccountSetupOutgoing.java index c89f6e095..e647d5569 100644 --- a/src/com/android/email/activity/setup/AccountSetupOutgoing.java +++ b/src/com/android/email/activity/setup/AccountSetupOutgoing.java @@ -223,7 +223,8 @@ public class AccountSetupOutgoing extends Activity implements OnClickListener, */ private void validateFields() { boolean enabled = - Utility.requiredFieldValid(mServerView) && Utility.requiredFieldValid(mPortView); + Utility.requiredFieldValid(mServerView) + && Utility.isPortFieldValid(mPortView); if (enabled && mRequireLoginView.isChecked()) { enabled = (Utility.requiredFieldValid(mUsernameView) diff --git a/tests/src/com/android/email/UtilityUnitTests.java b/tests/src/com/android/email/UtilityUnitTests.java index f90b7e3c2..f7f276d8c 100644 --- a/tests/src/com/android/email/UtilityUnitTests.java +++ b/tests/src/com/android/email/UtilityUnitTests.java @@ -25,6 +25,7 @@ import android.test.AndroidTestCase; import android.test.MoreAsserts; import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; +import android.widget.TextView; import java.util.HashSet; import java.util.Set; @@ -223,4 +224,28 @@ public class UtilityUnitTests extends AndroidTestCase { assertEquals("Thu, 10 Dec 09 15:08:08 -0700", Utility.cleanUpMimeDate("Thu, 10 Dec 09 15:08:08 -0700")); } + + public void testIsPortFieldValid() { + TextView view = new TextView(getContext()); + // null, empty, negative, and non integer strings aren't valid + view.setText(null); + assertFalse(Utility.isPortFieldValid(view)); + view.setText(""); + assertFalse(Utility.isPortFieldValid(view)); + view.setText("-1"); + assertFalse(Utility.isPortFieldValid(view)); + view.setText("1403.75"); + assertFalse(Utility.isPortFieldValid(view)); + view.setText("0"); + assertFalse(Utility.isPortFieldValid(view)); + view.setText("65536"); + assertFalse(Utility.isPortFieldValid(view)); + view.setText("i'm not valid"); + assertFalse(Utility.isPortFieldValid(view)); + // These next values are valid + view.setText("1"); + assertTrue(Utility.isPortFieldValid(view)); + view.setText("65535"); + assertTrue(Utility.isPortFieldValid(view)); + } }