Allow calling wifiConnect with the connected network. (#28)
diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java
index 1dca048..617028f 100644
--- a/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java
+++ b/src/main/java/com/google/android/mobly/snippet/bundled/WifiManagerSnippet.java
@@ -133,6 +133,22 @@
}
/**
+ * Gets the {@link WifiConfiguration} of a Wi-Fi network that has already been configured.
+ *
+ * <p>If the network has not been configured, returns null.
+ *
+ * <p>A network is configured if a WifiConfiguration was created for it and added with {@link
+ * WifiManager#addNetwork(WifiConfiguration)}.
+ */
+ private WifiConfiguration getExistingConfiguredNetwork(String ssid) {
+ for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) {
+ if (config.SSID.equals(ssid)) {
+ return config;
+ }
+ }
+ return null;
+ }
+ /**
* Connect to a Wi-Fi network.
*
* @param wifiNetworkConfig A JSON object that contains the info required to connect to a Wi-Fi
@@ -147,6 +163,18 @@
throws InterruptedException, JSONException, WifiManagerSnippetException {
Log.d("Got network config: " + wifiNetworkConfig);
WifiConfiguration wifiConfig = JsonDeserializer.jsonToWifiConfig(wifiNetworkConfig);
+ // Return directly if network is already connected.
+ String connectedSsid = mWifiManager.getConnectionInfo().getSSID();
+ if (connectedSsid.equals(wifiConfig.SSID)) {
+ Log.d("Network " + connectedSsid + " is already connected.");
+ return;
+ }
+ // If the network is already added but not connected, update the configuration first.
+ WifiConfiguration existingConfig = getExistingConfiguredNetwork(wifiConfig.SSID);
+ if (existingConfig != null) {
+ Log.d("Update the configuration of network " + existingConfig.SSID + ".");
+ mWifiManager.removeNetwork(existingConfig.networkId);
+ }
int networkId = mWifiManager.addNetwork(wifiConfig);
mWifiManager.disconnect();
if (!mWifiManager.enableNetwork(networkId, true)) {
diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonSerializer.java b/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonSerializer.java
index 58f8bac..c1d4e81 100644
--- a/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonSerializer.java
+++ b/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonSerializer.java
@@ -51,7 +51,7 @@
*
* @param originalString
*/
- private String trimQuotationMarks(String originalString) {
+ private static String trimQuotationMarks(String originalString) {
String result = originalString;
if (originalString.charAt(0) == '"'
&& originalString.charAt(originalString.length() - 1) == '"') {