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" android:layout_height="wrap_content"
style="@style/wifi_item_edit_content" style="@style/wifi_item_edit_content"
android:hint="@string/wifi_ssid_hint" android:hint="@string/wifi_ssid_hint"
android:maxLength="32"
android:singleLine="true" android:singleLine="true"
android:inputType="textNoSuggestions" /> 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>
<LinearLayout <LinearLayout

View File

@@ -1882,6 +1882,8 @@
<string name="wifi_do_not_validate_eap_server">Do not validate</string> <string name="wifi_do_not_validate_eap_server">Do not validate</string>
<!-- Warning message displayed if user choses not to validate the EAP server --> <!-- 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> <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. <!-- 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. --> Only displayed if the user also chooses to use system certificates. -->
<string name="wifi_no_domain_warning">Must specify a domain.</string> <string name="wifi_no_domain_warning">Must specify a domain.</string>

View File

@@ -75,7 +75,7 @@ import java.util.Iterator;
*/ */
public class WifiConfigController implements TextWatcher, public class WifiConfigController implements TextWatcher,
AdapterView.OnItemSelectedListener, OnCheckedChangeListener, AdapterView.OnItemSelectedListener, OnCheckedChangeListener,
TextView.OnEditorActionListener, View.OnKeyListener{ TextView.OnEditorActionListener, View.OnKeyListener {
private static final String TAG = "WifiConfigController"; private static final String TAG = "WifiConfigController";
private static final String SYSTEM_CA_STORE_PATH = "/system/etc/security/cacerts"; 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 = 4;
public static final int WIFI_PEAP_PHASE2_AKA_PRIME = 5; 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 */ /* Phase2 methods supported by PEAP are limited */
private final ArrayAdapter<String> mPhase2PeapAdapter; private final ArrayAdapter<String> mPhase2PeapAdapter;
/* Full list of phase2 methods */ /* Full list of phase2 methods */
@@ -457,7 +459,14 @@ public class WifiConfigController implements TextWatcher,
void showWarningMessagesIfAppropriate() { void showWarningMessagesIfAppropriate() {
mView.findViewById(R.id.no_ca_cert_warning).setVisibility(View.GONE); 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.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 if (mEapCaCertSpinner != null
&& mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) { && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) {
String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem(); String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem();

View File

@@ -44,10 +44,14 @@ import static org.mockito.Mockito.when;
shadows = ShadowConnectivityManager.class) shadows = ShadowConnectivityManager.class)
public class WifiConfigControllerTest { public class WifiConfigControllerTest {
@Mock private WifiConfigUiBase mConfigUiBase; @Mock
@Mock private Context mContext; private WifiConfigUiBase mConfigUiBase;
@Mock private View mView; @Mock
@Mock private AccessPoint mAccessPoint; private Context mContext;
@Mock
private View mView;
@Mock
private AccessPoint mAccessPoint;
public WifiConfigController mController; public WifiConfigController mController;
@@ -73,6 +77,38 @@ public class WifiConfigControllerTest {
mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint,
WifiConfigUiBase.MODE_CONNECT); 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 @Test
public void isSubmittable_noSSID_shouldReturnFalse() { public void isSubmittable_noSSID_shouldReturnFalse() {
final TextView ssid = mView.findViewById(R.id.ssid); final TextView ssid = mView.findViewById(R.id.ssid);
@@ -87,13 +123,14 @@ public class WifiConfigControllerTest {
assertThat(mController.isSubmittable()).isFalse(); assertThat(mController.isSubmittable()).isFalse();
} }
@Test @Test
public void isSubmittable_shortPsk_shouldReturnFalse() { public void isSubmittable_shortPsk_shouldReturnFalse() {
final TextView password = mView.findViewById(R.id.password); final TextView password = mView.findViewById(R.id.password);
password.setText(SHORT_PSK); password.setText(SHORT_PSK);
assertThat(mController.isSubmittable()).isFalse(); assertThat(mController.isSubmittable()).isFalse();
} }
@Test @Test
public void isSubmittable_goodPsk_shouldReturnTrue() { public void isSubmittable_goodPsk_shouldReturnTrue() {
final TextView password = mView.findViewById(R.id.password); final TextView password = mView.findViewById(R.id.password);
@@ -101,6 +138,7 @@ public class WifiConfigControllerTest {
assertThat(mController.isSubmittable()).isTrue(); assertThat(mController.isSubmittable()).isTrue();
} }
@Test @Test
public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() { public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() {
final TextView password = mView.findViewById(R.id.password); final TextView password = mView.findViewById(R.id.password);