diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml index ba1f6fc10b0..cfb6d9a6a5b 100644 --- a/res/layout/wifi_dialog.xml +++ b/res/layout/wifi_dialog.xml @@ -53,9 +53,21 @@ android:layout_height="wrap_content" style="@style/wifi_item_edit_content" android:hint="@string/wifi_ssid_hint" - android:maxLength="32" android:singleLine="true" android:inputType="textNoSuggestions" /> + + + + + Do not validate No certificate specified. Your connection will not be private. + + Network name is too long. Must specify a domain. diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index fb01f1fb7cc..2a17dfcccc0 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -75,7 +75,7 @@ import java.util.Iterator; */ public class WifiConfigController implements TextWatcher, AdapterView.OnItemSelectedListener, OnCheckedChangeListener, - TextView.OnEditorActionListener, View.OnKeyListener{ + TextView.OnEditorActionListener, View.OnKeyListener { private static final String TAG = "WifiConfigController"; private static final String SYSTEM_CA_STORE_PATH = "/system/etc/security/cacerts"; @@ -110,6 +110,8 @@ public class WifiConfigController implements TextWatcher, public static final int WIFI_PEAP_PHASE2_AKA = 4; public static final int WIFI_PEAP_PHASE2_AKA_PRIME = 5; + private static final int SSID_ASCII_MAX_LENGTH = 32; + /* Phase2 methods supported by PEAP are limited */ private final ArrayAdapter mPhase2PeapAdapter; /* Full list of phase2 methods */ @@ -457,7 +459,14 @@ public class WifiConfigController implements TextWatcher, void showWarningMessagesIfAppropriate() { mView.findViewById(R.id.no_ca_cert_warning).setVisibility(View.GONE); mView.findViewById(R.id.no_domain_warning).setVisibility(View.GONE); + mView.findViewById(R.id.ssid_too_long_warning).setVisibility(View.GONE); + if (mSsidView != null) { + final String ssid = mSsidView.getText().toString(); + if (ssid.length() > SSID_ASCII_MAX_LENGTH) { + mView.findViewById(R.id.ssid_too_long_warning).setVisibility(View.VISIBLE); + } + } if (mEapCaCertSpinner != null && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) { String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem(); diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 2e577810114..020d5c6c701 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -44,10 +44,14 @@ import static org.mockito.Mockito.when; shadows = ShadowConnectivityManager.class) public class WifiConfigControllerTest { - @Mock private WifiConfigUiBase mConfigUiBase; - @Mock private Context mContext; - @Mock private View mView; - @Mock private AccessPoint mAccessPoint; + @Mock + private WifiConfigUiBase mConfigUiBase; + @Mock + private Context mContext; + @Mock + private View mView; + @Mock + private AccessPoint mAccessPoint; public WifiConfigController mController; @@ -73,6 +77,38 @@ public class WifiConfigControllerTest { mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, WifiConfigUiBase.MODE_CONNECT); } + + @Test + public void ssidExceeds32Bytes_shouldShowSsidTooLongWarning() { + mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, + WifiConfigUiBase.MODE_CONNECT); + final TextView ssid = mView.findViewById(R.id.ssid); + ssid.setText("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎"); + mController.showWarningMessagesIfAppropriate(); + + assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning() { + mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, + WifiConfigUiBase.MODE_CONNECT); + + final TextView ssid = mView.findViewById(R.id.ssid); + ssid.setText("123456789012345678901234567890"); + mController.showWarningMessagesIfAppropriate(); + + assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) + .isEqualTo(View.GONE); + + ssid.setText("123"); + mController.showWarningMessagesIfAppropriate(); + + assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) + .isEqualTo(View.GONE); + } + @Test public void isSubmittable_noSSID_shouldReturnFalse() { final TextView ssid = mView.findViewById(R.id.ssid); @@ -87,13 +123,14 @@ public class WifiConfigControllerTest { assertThat(mController.isSubmittable()).isFalse(); } + @Test public void isSubmittable_shortPsk_shouldReturnFalse() { final TextView password = mView.findViewById(R.id.password); password.setText(SHORT_PSK); assertThat(mController.isSubmittable()).isFalse(); - } + @Test public void isSubmittable_goodPsk_shouldReturnTrue() { final TextView password = mView.findViewById(R.id.password); @@ -101,6 +138,7 @@ public class WifiConfigControllerTest { assertThat(mController.isSubmittable()).isTrue(); } + @Test public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() { final TextView password = mView.findViewById(R.id.password);