Ensure wifi ssid cannot exceed 32 bytes.

Change-Id: I5c2c50ca8599f6843da47c01b9a0447e2c85d763
Fix: 36898746
Test: make RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-06-05 15:50:00 -07:00
parent 179645eecd
commit cc07043497
4 changed files with 68 additions and 7 deletions

View File

@@ -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" />
<LinearLayout android:id="@+id/ssid_too_long_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
style="@style/wifi_item" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/wifi_item_warning"
android:text="@string/wifi_ssid_too_long" />
</LinearLayout>
</LinearLayout>
<LinearLayout

View File

@@ -1882,6 +1882,8 @@
<string name="wifi_do_not_validate_eap_server">Do not validate</string>
<!-- Warning message displayed if user choses not to validate the EAP server -->
<string name="wifi_do_not_validate_eap_server_warning">No certificate specified. Your connection will not be private.</string>
<!-- Warning message displayed if network name (ssid) is too long -->
<string name="wifi_ssid_too_long">Network name is too long.</string>
<!-- Warning message displayed if user does not specify a domain for the CA certificate.
Only displayed if the user also chooses to use system certificates. -->
<string name="wifi_no_domain_warning">Must specify a domain.</string>

View File

@@ -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<String> 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();

View File

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