From 1f6029bd6f45e98d8ba6b761ad5e08e3044f0fb5 Mon Sep 17 00:00:00 2001 From: Jeremy Joslin Date: Tue, 3 Oct 2017 12:25:43 -0700 Subject: [PATCH] Add isOpenNetwork() to WifiConfiguration. Bug: 65639900 Test: ./frameworks/base/wifi/tests/runtests.sh Change-Id: I6ebd09b348473f9aa0394de289fd77f279e878a8 --- .../android/net/wifi/WifiConfiguration.java | 22 ++++++ .../net/wifi/WifiConfigurationTest.java | 71 +++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index a145327807a7d..6438631cb8ed3 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -788,6 +788,28 @@ public class WifiConfiguration implements Parcelable { return metered; } + /** + * @hide + * Returns true if this WiFi config is for an open network. + */ + public boolean isOpenNetwork() { + final int cardinality = allowedKeyManagement.cardinality(); + final boolean hasNoKeyMgmt = cardinality == 0 + || (cardinality == 1 && allowedKeyManagement.get(KeyMgmt.NONE)); + + boolean hasNoWepKeys = true; + if (wepKeys != null) { + for (int i = 0; i < wepKeys.length; i++) { + if (wepKeys[i] != null) { + hasNoWepKeys = false; + break; + } + } + } + + return hasNoKeyMgmt && hasNoWepKeys; + } + /** * @hide * Setting this value will force scan results associated with this configuration to diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java index 632cfaf2155a7..622dce6edbd98 100644 --- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java +++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java @@ -18,6 +18,8 @@ package android.net.wifi; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import android.os.Parcel; import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; @@ -98,4 +100,73 @@ public class WifiConfigurationTest { assertEquals(networkSelectionStatus.isNotRecommended(), copy.isNotRecommended()); } + + @Test + public void testIsOpenNetwork_IsOpen_NullWepKeys() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.wepKeys = null; + + assertTrue(config.isOpenNetwork()); + } + + @Test + public void testIsOpenNetwork_IsOpen_ZeroLengthWepKeysArray() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.wepKeys = new String[0]; + + assertTrue(config.isOpenNetwork()); + } + + @Test + public void testIsOpenNetwork_IsOpen_NullWepKeysArray() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.wepKeys = new String[1]; + + assertTrue(config.isOpenNetwork()); + } + + @Test + public void testIsOpenNetwork_NotOpen_HasWepKeys() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.wepKeys = new String[] {"test"}; + + assertFalse(config.isOpenNetwork()); + } + + @Test + public void testIsOpenNetwork_NotOpen_HasNullWepKeyFollowedByNonNullKey() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.wepKeys = new String[] {null, null, "test"}; + + assertFalse(config.isOpenNetwork()); + } + + @Test + public void testIsOpenNetwork_NotOpen_HasAuthType() { + for (int keyMgmt = 0; keyMgmt < WifiConfiguration.KeyMgmt.strings.length; keyMgmt++) { + if (keyMgmt == WifiConfiguration.KeyMgmt.NONE) continue; + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.clear(); + config.allowedKeyManagement.set(keyMgmt); + config.wepKeys = null; + + assertFalse("Open network reported when key mgmt was set to " + + WifiConfiguration.KeyMgmt.strings[keyMgmt], config.isOpenNetwork()); + } + } + + @Test + public void testIsOpenNetwork_NotOpen_HasAuthTypeNoneAndMore() { + WifiConfiguration config = new WifiConfiguration(); + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); + config.wepKeys = null; + + assertFalse(config.isOpenNetwork()); + } }