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);