Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added changes for wifiModule.java #6

Merged
merged 1 commit into from
Nov 6, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 33 additions & 17 deletions android/src/main/java/com/tadasr/IOTWifi/IOTWifiModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@ class FailureCodes {
static int FAILED_TO_BIND_CONFIG = 4;
}

class IOTWifiCallback {
private Callback callback;

public IOTWifiCallback(Callback callback) {
this.callback = callback;
}

public void invoke(Object... args) {
if (callback == null) return;
callback.invoke(args);
callback = null;
}
}

public class IOTWifiModule extends ReactContextBaseJavaModule {
private WifiManager wifiManager;
private ConnectivityManager connectivityManager;
Expand Down Expand Up @@ -67,13 +81,10 @@ public void run() {
}).start();
}

private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolean bindNetwork, Callback callback) {
if (Build.VERSION.SDK_INT > 28) {
callback.invoke("Not supported on Android Q");
return;
}
private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolean bindNetwork, final Callback callback) {
IOTWifiCallback iotWifiCallback = new IOTWifiCallback(callback);
if (!removeSSID(ssid)) {
callback.invoke(errorFromCode(FailureCodes.SYSTEM_ADDED_CONFIG_EXISTS));
iotWifiCallback.invoke(errorFromCode(FailureCodes.SYSTEM_ADDED_CONFIG_EXISTS));
return;
}

Expand All @@ -85,31 +96,31 @@ private void connectToWifi(String ssid, String passphrase, Boolean isWEP, Boolea
wifiManager.disconnect();
boolean success = wifiManager.enableNetwork(networkId, true);
if (!success) {
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
return;
}
success = wifiManager.reconnect();
if (!success) {
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
return;
}
boolean connected = pollForValidSSSID(10, ssid);
if (!connected) {
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_CONNECT));
return;
}
if (!bindNetwork) {
callback.invoke();
iotWifiCallback.invoke();
return;
}
try {
bindToNetwork(ssid, callback);
bindToNetwork(ssid, iotWifiCallback);
} catch (Exception e) {
Log.d("IoTWifi", "Failed to bind to Wifi: " + ssid);
callback.invoke();
iotWifiCallback.invoke();
}
} else {
callback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
iotWifiCallback.invoke(errorFromCode(FailureCodes.FAILED_TO_ADD_CONFIG));
}
}

Expand Down Expand Up @@ -149,7 +160,7 @@ private boolean pollForValidSSSID(int maxSeconds, String expectedSSID) {
return false;
}

private void bindToNetwork(final String ssid, final Callback callback) {
private void bindToNetwork(final String ssid, final IOTWifiCallback callback) {
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
Expand Down Expand Up @@ -218,7 +229,10 @@ private boolean removeSSID(String ssid) {
if (existingNetworkId == -1) {
return success;
}
success = wifiManager.removeNetwork(existingNetworkId) && wifiManager.saveConfiguration();
success = wifiManager.removeNetwork(existingNetworkId);
if (success && Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
success = wifiManager.saveConfiguration();
}
//If not our config then success would be false
return success;
}
Expand Down Expand Up @@ -253,7 +267,9 @@ private WifiConfiguration getExistingNetworkConfig(String ssid) {
String comparableSSID = ('"' + ssid + '"'); // Add quotes because wifiConfig.SSID has them
if (configList != null) {
for (WifiConfiguration wifiConfig : configList) {
if (wifiConfig.SSID.equals(comparableSSID)) {
String savedSSID = wifiConfig.SSID;
if (savedSSID == null) continue; // In few cases SSID is found to be null, ignore those configs
if (savedSSID.equals(comparableSSID)) {
Log.d("IoTWifi", "Found Matching Wifi: "+ wifiConfig.toString());
existingNetworkConfigForSSID = wifiConfig;
break;
Expand All @@ -263,4 +279,4 @@ private WifiConfiguration getExistingNetworkConfig(String ssid) {
}
return existingNetworkConfigForSSID;
}
}
}