Skip to content

Commit 110bbb6

Browse files
committed
Allow android Q to use wifi api for now
tadasr#17
1 parent 164a5e1 commit 110bbb6

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

android/src/main/java/com/tadasr/IOTWifi/IOTWifiModule.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,21 @@ class FailureCodes {
2424
static int FAILED_TO_BIND_CONFIG = 4;
2525
}
2626

27+
class IOTWifiCallback {
28+
private Callback callback;
29+
30+
public IOTWifiCallback(Callback callback) {
31+
this.callback = callback;
32+
}
33+
34+
public void invoke(Object... args) {
35+
if (callback == null) return;
36+
callback.invoke(args);
37+
callback = null;
38+
}
39+
}
40+
41+
2742
public class IOTWifiModule extends ReactContextBaseJavaModule {
2843
private WifiManager wifiManager;
2944
private ConnectivityManager connectivityManager;
@@ -67,13 +82,10 @@ public void run() {
6782
}).start();
6883
}
6984

70-
private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolean bindNetwork, Callback callback) {
71-
if (Build.VERSION.SDK_INT > 28) {
72-
callback.invoke("Not supported on Android Q");
73-
return;
74-
}
85+
private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolean bindNetwork, final Callback callback) {
86+
IOTWifiCallback iotWifiCallback = new IOTWifiCallback(callback);
7587
if (!removeSSID(ssid)) {
76-
callback.invoke(errorFromCode(FailureCodes.SYSTEM_ADDED_CONFIG_EXISTS));
88+
iotWifiCallback.invoke(errorFromCode(FailureCodes.SYSTEM_ADDED_CONFIG_EXISTS));
7789
return;
7890
}
7991

@@ -85,7 +97,7 @@ private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolea
8597
wifiManager.disconnect();
8698
boolean success = wifiManager.enableNetwork(networkId, true);
8799
if (!success) {
88-
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
100+
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
89101
return;
90102
}
91103
success = wifiManager.reconnect();
@@ -95,21 +107,21 @@ private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolea
95107
}
96108
boolean connected = pollForValidSSSID(10, ssid);
97109
if (!connected) {
98-
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
110+
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
99111
return;
100112
}
101113
if (!bindNetwork) {
102-
callback.invoke();
114+
iotWifiCallback.invoke();
103115
return;
104116
}
105117
try {
106-
bindToNetwork(ssid, callback);
118+
bindToNetwork(ssid, iotWifiCallback);
107119
} catch (Exception e) {
108120
Log.d("IoTWifi", "Failed to bind to Wifi: " + ssid);
109-
callback.invoke();
121+
iotWifiCallback.invoke();
110122
}
111123
} else {
112-
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
124+
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
113125
}
114126
}
115127

@@ -149,7 +161,7 @@ private boolean pollForValidSSSID(int maxSeconds, String expectedSSID) {
149161
return false;
150162
}
151163

152-
private void bindToNetwork(final String ssid, final Callback callback) {
164+
private void bindToNetwork(final String ssid, final IOTWifiCallback callback) {
153165
NetworkRequest.Builder builder = new NetworkRequest.Builder();
154166
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
155167
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
@@ -218,7 +230,10 @@ private boolean removeSSID(String ssid) {
218230
if (existingNetworkId == -1) {
219231
return success;
220232
}
221-
success = wifiManager.removeNetwork(existingNetworkId) && wifiManager.saveConfiguration();
233+
success = wifiManager.removeNetwork(existingNetworkId);
234+
if (success && Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
235+
success = wifiManager.saveConfiguration();
236+
}
222237
//If not our config then success would be false
223238
return success;
224239
}
@@ -253,7 +268,9 @@ private WifiConfiguration getExistingNetworkConfig(String ssid) {
253268
String comparableSSID = ('"' + ssid + '"'); // Add quotes because wifiConfig.SSID has them
254269
if (configList != null) {
255270
for (WifiConfiguration wifiConfig : configList) {
256-
if (wifiConfig.SSID != null && wifiConfig.SSID.equals(comparableSSID)) {
271+
String savedSSID = wifiConfig.SSID;
272+
if (savedSSID == null) continue; // In few cases SSID is found to be null, ignore those configs
273+
if (savedSSID.equals(comparableSSID)) {
257274
Log.d("IoTWifi", "Found Matching Wifi: "+ wifiConfig.toString());
258275
existingNetworkConfigForSSID = wifiConfig;
259276
break;

0 commit comments

Comments
 (0)