From 8452876c1b4318f3b0701a5732cb57d2f9795f47 Mon Sep 17 00:00:00 2001 From: Richirisu Date: Tue, 27 Dec 2022 14:40:28 +0900 Subject: [PATCH 01/12] Fix for method registerWifiNetwork for deprecated API on Android 10 (solves flutternetwork/WiFiFlutter #315) --- .../com/alternadom/wifiiot/WifiIotPlugin.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 4e6f3791..416300e9 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -934,8 +934,9 @@ private static MacAddress macAddressFromBssid(String bssid) { } /** - * Registers a wifi network in the device wireless networks For API >= 30 uses intent to - * permanently store such network in user configuration For API <= 29 uses deprecated functions + * Registers a wifi network in the device wireless networks. For API >= 30 uses intent to + * permanently store such network in user configuration. For API == 29 adds network as suggestion + * in the notification area. For API <= 28 uses deprecated functions * that manipulate directly *** registerWifiNetwork : param ssid, SSID to register param password, * passphrase to use param security, security mode (WPA or null) to use return {@code true} if the * operation succeeds, {@code false} otherwise @@ -947,7 +948,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) String security = poCall.argument("security"); Boolean isHidden = poCall.argument("is_hidden"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { final WifiNetworkSuggestion.Builder suggestedNet = new WifiNetworkSuggestion.Builder(); suggestedNet.setSsid(ssid); suggestedNet.setIsHiddenSsid(isHidden != null ? isHidden : false); @@ -976,10 +977,16 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) Bundle bundle = new Bundle(); bundle.putParcelableArrayList( android.provider.Settings.EXTRA_WIFI_NETWORK_LIST, suggestionsList); - Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); - intent.putExtras(bundle); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - moContext.startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); + intent.putExtras(bundle); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + moContext.startActivity(intent); + } else { + // on Android 10 the intent is not available yet; instead, a message is shown in the + // notification area + moWiFi.addNetworkSuggestions(suggestionsList); + } poResult.success(null); } else { From 5497acd88b56c02a2d02894f0df05c1ed6390aba Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 11:45:00 +0530 Subject: [PATCH 02/12] formatting --- .../main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 416300e9..5b8e115d 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -936,10 +936,10 @@ private static MacAddress macAddressFromBssid(String bssid) { /** * Registers a wifi network in the device wireless networks. For API >= 30 uses intent to * permanently store such network in user configuration. For API == 29 adds network as suggestion - * in the notification area. For API <= 28 uses deprecated functions - * that manipulate directly *** registerWifiNetwork : param ssid, SSID to register param password, - * passphrase to use param security, security mode (WPA or null) to use return {@code true} if the - * operation succeeds, {@code false} otherwise + * in the notification area. For API <= 28 uses deprecated functions that manipulate directly *** + * registerWifiNetwork : param ssid, SSID to register param password, passphrase to use param + * security, security mode (WPA or null) to use return {@code true} if the operation succeeds, + * {@code false} otherwise */ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) { String ssid = poCall.argument("ssid"); From 1e2c25d75e64cf26e0840f59789b8c829607bd6b Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:16:34 +0530 Subject: [PATCH 03/12] proper reuslt for registerAcitivity --- .../com/alternadom/wifiiot/WifiIotPlugin.java | 34 +++++++++++++++---- packages/wifi_iot/lib/wifi_iot.dart | 2 +- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 5b8e115d..b5f42834 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -40,12 +40,15 @@ import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.PluginRegistry.ActivityResultListener; import io.flutter.plugin.common.PluginRegistry.Registrar; import io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener; import io.flutter.plugin.common.PluginRegistry.ViewDestroyListener; import io.flutter.view.FlutterNativeView; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -56,7 +59,8 @@ public class WifiIotPlugin ActivityAware, MethodCallHandler, EventChannel.StreamHandler, - RequestPermissionsResultListener { + RequestPermissionsResultListener, + ActivityResultListener { /// This local reference serves to register the plugin with the Flutter Engine and unregister it /// when the Flutter Engine is detached from the Activity private MethodChannel channel; @@ -85,6 +89,10 @@ public class WifiIotPlugin 65655437; private static final int PERMISSIONS_REQUEST_CODE_ACCESS_NETWORK_STATE_IS_CONNECTED = 65655438; + // Acitivity results + private static final Map resultMap = new HashMap(); + private static final int ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS = 66778899; + // initialize members of this class with Context private void initWithContext(Context context) { moContext = context; @@ -242,6 +250,18 @@ public boolean onRequestPermissionsResult( return false; } + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultMap.containsKey(requestCode)) { + result = resultMap.get(requestCode); + if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { + result.success(resultCode == Acitivity.RESULT_OK); + } + resultMap.remove(requestCode) + return true; + } + } + @Override public void onMethodCall(MethodCall poCall, Result poResult) { switch (poCall.method) { @@ -981,14 +1001,16 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - moContext.startActivity(intent); + moContext.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); + // listen for acitivty result + resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); } else { // on Android 10 the intent is not available yet; instead, a message is shown in the // notification area - moWiFi.addNetworkSuggestions(suggestionsList); + final int status = moWiFi.addNetworkSuggestions(networkSuggestions); + Log.e(WifiIotPlugin.class.getSimpleName(), "status: " + status); + poResult.success(status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS); } - - poResult.success(null); } else { // Deprecated version android.net.wifi.WifiConfiguration conf = @@ -999,7 +1021,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) if (updateNetwork == -1) { poResult.error("Error", "Error updating network configuration", ""); } else { - poResult.success(null); + poResult.success(true); } } } diff --git a/packages/wifi_iot/lib/wifi_iot.dart b/packages/wifi_iot/lib/wifi_iot.dart index 3cda5388..6c435fb6 100755 --- a/packages/wifi_iot/lib/wifi_iot.dart +++ b/packages/wifi_iot/lib/wifi_iot.dart @@ -415,7 +415,7 @@ class WiFiForIoTPlugin { if (!Platform.isIOS && !await isEnabled()) await setEnabled(true); bool? bResult; try { - await _channel.invokeMethod('registerWifiNetwork', { + bResult = await _channel.invokeMethod('registerWifiNetwork', { "ssid": ssid.toString(), "bssid": bssid?.toString(), "password": password?.toString(), From 21551d106aabd21df1d6a9a50165516625b1c602 Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:19:51 +0530 Subject: [PATCH 04/12] fix: semicolon --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index b5f42834..b3266092 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -257,7 +257,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { result.success(resultCode == Acitivity.RESULT_OK); } - resultMap.remove(requestCode) + resultMap.remove(requestCode); return true; } } From 5a9bfe6ec11465dce384ac1b8004feb9ad3519d2 Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:24:53 +0530 Subject: [PATCH 05/12] fix: type --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index b3266092..5cc4622b 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -90,7 +90,7 @@ public class WifiIotPlugin private static final int PERMISSIONS_REQUEST_CODE_ACCESS_NETWORK_STATE_IS_CONNECTED = 65655438; // Acitivity results - private static final Map resultMap = new HashMap(); + private static final Map resultMap = new HashMap(); private static final int ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS = 66778899; // initialize members of this class with Context From 0537930e1a826557f527bb785ec741991eab6484 Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:33:35 +0530 Subject: [PATCH 06/12] fix: build error --- .../java/com/alternadom/wifiiot/WifiIotPlugin.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 5cc4622b..f0ea08e3 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -253,7 +253,7 @@ public boolean onRequestPermissionsResult( @Override public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (resultMap.containsKey(requestCode)) { - result = resultMap.get(requestCode); + final Result result = resultMap.get(requestCode); if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { result.success(resultCode == Acitivity.RESULT_OK); } @@ -1001,9 +1001,13 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - moContext.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); - // listen for acitivty result - resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); + if (moActivity != null) { + moActivity.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); + // listen for acitivty result + resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); + } else { + poResult.error("Activity object is null, are you running this from background?"); + } } else { // on Android 10 the intent is not available yet; instead, a message is shown in the // notification area From e7589bcf55a6755763c06f4f8f807239df0bd41d Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:38:16 +0530 Subject: [PATCH 07/12] fix: build error --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index f0ea08e3..28cedc66 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -255,7 +255,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (resultMap.containsKey(requestCode)) { final Result result = resultMap.get(requestCode); if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { - result.success(resultCode == Acitivity.RESULT_OK); + result.success(resultCode == Activity.RESULT_OK); } resultMap.remove(requestCode); return true; @@ -1006,7 +1006,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) // listen for acitivty result resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); } else { - poResult.error("Activity object is null, are you running this from background?"); + poResult.error("NoActivityError", "Activity object is null, are you running this from background?", ""); } } else { // on Android 10 the intent is not available yet; instead, a message is shown in the From 0fc524193dca9a47be610143c0233299b3f72f46 Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Mon, 4 Sep 2023 12:42:33 +0530 Subject: [PATCH 08/12] build: fix --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 28cedc66..20c9ba58 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -260,6 +260,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { resultMap.remove(requestCode); return true; } + return false; } @Override @@ -1006,7 +1007,10 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) // listen for acitivty result resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); } else { - poResult.error("NoActivityError", "Activity object is null, are you running this from background?", ""); + poResult.error( + "NoActivityError", + "Activity object is null, are you running this from background?", + ""); } } else { // on Android 10 the intent is not available yet; instead, a message is shown in the From 080c0ef02e5558c632342a4adcb565ea7c4c43e3 Mon Sep 17 00:00:00 2001 From: Richirisu Date: Wed, 11 Oct 2023 23:52:14 +0900 Subject: [PATCH 09/12] fix: spelling --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 20c9ba58..e38fa2b6 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -89,7 +89,7 @@ public class WifiIotPlugin 65655437; private static final int PERMISSIONS_REQUEST_CODE_ACCESS_NETWORK_STATE_IS_CONNECTED = 65655438; - // Acitivity results + // Activity results private static final Map resultMap = new HashMap(); private static final int ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS = 66778899; @@ -1004,7 +1004,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (moActivity != null) { moActivity.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); - // listen for acitivty result + // listen for activity result resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); } else { poResult.error( From 7cf4047cb5f96f9a61f395b30d1f6a3eb50b5b70 Mon Sep 17 00:00:00 2001 From: Harsh Bhikadia Date: Tue, 31 Oct 2023 15:44:23 +0530 Subject: [PATCH 10/12] [android] fix: add listener to binding --- .../src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java | 3 +++ packages/wifi_iot/example/android/build.gradle | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index 402f8f7b..a8708511 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -149,6 +149,7 @@ public boolean onViewDestroy(FlutterNativeView view) { } }); registrar.addRequestPermissionsResultListener(wifiIotPlugin); + registrar.addActivityResultListener(wifiIotPlugin); } @Override @@ -179,6 +180,7 @@ public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) { // init with activity initWithActivity(binding.getActivity()); binding.addRequestPermissionsResultListener(this); + binding.addActivityResultListener(this); } @Override @@ -192,6 +194,7 @@ public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBindin // init with activity initWithActivity(binding.getActivity()); binding.addRequestPermissionsResultListener(this); + binding.addActivityResultListener(this); } @Override diff --git a/packages/wifi_iot/example/android/build.gradle b/packages/wifi_iot/example/android/build.gradle index c9e3db0a..cab8f601 100644 --- a/packages/wifi_iot/example/android/build.gradle +++ b/packages/wifi_iot/example/android/build.gradle @@ -24,6 +24,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } From adea46a90fd490ba868a68995bd70488a27c8ac1 Mon Sep 17 00:00:00 2001 From: Amine BAGGA Date: Thu, 7 Dec 2023 08:15:52 +0100 Subject: [PATCH 11/12] Return register operation result as int instead of boolean with 3 possible values. Handle wifi dialog notifications. --- .../com/alternadom/wifiiot/WifiIotPlugin.java | 35 ++++++++++++++++--- packages/wifi_iot/lib/wifi_iot.dart | 28 +++++++++++---- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index a8708511..dd1f9d24 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -93,6 +93,11 @@ public class WifiIotPlugin private static final Map resultMap = new HashMap(); private static final int ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS = 66778899; + // Register network reuslts + private static final int WIFI_REGISTER_NETWORK_RESULT_SUCCESS = 0; + private static final int WIFI_REGISTER_NETWORK_RESULT_FAILED = 1; + private static final int WIFI_REGISTER_NETWORK_RESULT_ALREADY_EXISTS = 2; + // initialize members of this class with Context private void initWithContext(Context context) { moContext = context; @@ -258,7 +263,25 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (resultMap.containsKey(requestCode)) { final Result result = resultMap.get(requestCode); if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { - result.success(resultCode == Activity.RESULT_OK); + if ((data != null) && data.hasExtra(android.provider.Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { + for (int code : data.getIntegerArrayListExtra(android.provider.Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { + if (code == android.provider.Settings.ADD_WIFI_RESULT_SUCCESS) { + result.success(WIFI_REGISTER_NETWORK_RESULT_SUCCESS); + break; + } + else if (code == android.provider.Settings.ADD_WIFI_RESULT_ALREADY_EXISTS) { + result.success(WIFI_REGISTER_NETWORK_RESULT_ALREADY_EXISTS); + break; + } + else { + result.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); + break; + } + } + } + else { + result.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); + } } resultMap.remove(requestCode); return true; @@ -1004,11 +1027,10 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); intent.putExtras(bundle); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (moActivity != null) { - moActivity.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); // listen for activity result resultMap.put(ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS, poResult); + moActivity.startActivityForResult(intent, ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS); } else { poResult.error( "NoActivityError", @@ -1020,7 +1042,10 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) // notification area final int status = moWiFi.addNetworkSuggestions(networkSuggestions); Log.e(WifiIotPlugin.class.getSimpleName(), "status: " + status); - poResult.success(status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS); + if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) + poResult.success(WIFI_REGISTER_NETWORK_RESULT_SUCCESS); + else + poResult.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); } } else { // Deprecated version @@ -1032,7 +1057,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) if (updateNetwork == -1) { poResult.error("Error", "Error updating network configuration", ""); } else { - poResult.success(true); + poResult.success(WIFI_REGISTER_NETWORK_RESULT_SUCCESS); } } } diff --git a/packages/wifi_iot/lib/wifi_iot.dart b/packages/wifi_iot/lib/wifi_iot.dart index 6c435fb6..d34f0275 100755 --- a/packages/wifi_iot/lib/wifi_iot.dart +++ b/packages/wifi_iot/lib/wifi_iot.dart @@ -15,6 +15,12 @@ enum WIFI_AP_STATE { enum NetworkSecurity { WPA, WEP, NONE } +enum RegisterWifiNetworkResult { + success, + failed, + alreadyRegistered +} + const serializeNetworkSecurityMap = { NetworkSecurity.WPA: "WPA", NetworkSecurity.WEP: "WEP", @@ -391,9 +397,11 @@ class WiFiForIoTPlugin { /// /// @param [isHidden] Whether the SSID is hidden (not broadcasted by the AP). /// - /// @returns True in case the requested network could be registered, false - /// otherwise. - static Future registerWifiNetwork( + /// @returns : + /// success = in case the requested network could be registered. + /// failed = if failed to register. + /// alreadyRegistered = if the network is already registered. + static Future registerWifiNetwork( String ssid, { String? bssid, String? password, @@ -409,13 +417,13 @@ class WiFiForIoTPlugin { // TODO: support any binary sequence as required instead of just strings. if (ssid.length == 0 || ssid.length > 32) { print("Invalid SSID"); - return false; + return RegisterWifiNetworkResult.failed; } if (!Platform.isIOS && !await isEnabled()) await setEnabled(true); - bool? bResult; + int? iResult; try { - bResult = await _channel.invokeMethod('registerWifiNetwork', { + iResult = await _channel.invokeMethod('registerWifiNetwork', { "ssid": ssid.toString(), "bssid": bssid?.toString(), "password": password?.toString(), @@ -425,7 +433,13 @@ class WiFiForIoTPlugin { } on MissingPluginException catch (e) { print("MissingPluginException : ${e.toString()}"); } - return bResult ?? false; + + if (iResult == 0) + return RegisterWifiNetworkResult.success; + else if (iResult == 2) + return RegisterWifiNetworkResult.alreadyRegistered; + else + return RegisterWifiNetworkResult.failed; } /// Scan for Wi-Fi networks and connect to the requested AP Wi-Fi network if From 188ba026c7c5e1ec49450a919a6a68efc59dd940 Mon Sep 17 00:00:00 2001 From: Amine BAGGA Date: Thu, 18 Jan 2024 12:15:14 +0100 Subject: [PATCH 12/12] To be squashed : PR review fix --- .../com/alternadom/wifiiot/WifiIotPlugin.java | 35 ++++++++++--------- packages/wifi_iot/lib/wifi_iot.dart | 18 ++++++---- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java index dd1f9d24..d74e69e5 100644 --- a/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java +++ b/packages/wifi_iot/android/src/main/java/com/alternadom/wifiiot/WifiIotPlugin.java @@ -93,7 +93,7 @@ public class WifiIotPlugin private static final Map resultMap = new HashMap(); private static final int ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS = 66778899; - // Register network reuslts + // Register network result flags private static final int WIFI_REGISTER_NETWORK_RESULT_SUCCESS = 0; private static final int WIFI_REGISTER_NETWORK_RESULT_FAILED = 1; private static final int WIFI_REGISTER_NETWORK_RESULT_ALREADY_EXISTS = 2; @@ -263,21 +263,28 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (resultMap.containsKey(requestCode)) { final Result result = resultMap.get(requestCode); if (requestCode == ACTIVITY_RESULT_REQUEST_CODE_ADD_NETWORKS) { - if ((data != null) && data.hasExtra(android.provider.Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { - for (int code : data.getIntegerArrayListExtra(android.provider.Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { - if (code == android.provider.Settings.ADD_WIFI_RESULT_SUCCESS) { - result.success(WIFI_REGISTER_NETWORK_RESULT_SUCCESS); + int resultValue = -1; + if ((data != null) && data.hasExtra(Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { + for (int code : data.getIntegerArrayListExtra(Settings.EXTRA_WIFI_NETWORK_RESULT_LIST)) { + if (code == Settings.ADD_WIFI_RESULT_SUCCESS) { + resultValue = WIFI_REGISTER_NETWORK_RESULT_SUCCESS; break; } - else if (code == android.provider.Settings.ADD_WIFI_RESULT_ALREADY_EXISTS) { - result.success(WIFI_REGISTER_NETWORK_RESULT_ALREADY_EXISTS); + else if (code == Settings.ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED) { + resultValue = WIFI_REGISTER_NETWORK_RESULT_FAILED; break; } - else { - result.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); + else if (code == Settings.ADD_WIFI_RESULT_ALREADY_EXISTS) { + resultValue = WIFI_REGISTER_NETWORK_RESULT_ALREADY_EXISTS; break; } } + if (resultValue == -1) { + result.error("Error", "Unknown return value for ADD_WIFI_RESULT", ""); + } + else { + result.success(resultValue); + } } else { result.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); @@ -1022,10 +1029,9 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) suggestionsList.add(suggestedNet.build()); Bundle bundle = new Bundle(); - bundle.putParcelableArrayList( - android.provider.Settings.EXTRA_WIFI_NETWORK_LIST, suggestionsList); + bundle.putParcelableArrayList(Settings.EXTRA_WIFI_NETWORK_LIST, suggestionsList); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_ADD_NETWORKS); + Intent intent = new Intent(Settings.ACTION_WIFI_ADD_NETWORKS); intent.putExtras(bundle); if (moActivity != null) { // listen for activity result @@ -1042,10 +1048,7 @@ private void registerWifiNetwork(final MethodCall poCall, final Result poResult) // notification area final int status = moWiFi.addNetworkSuggestions(networkSuggestions); Log.e(WifiIotPlugin.class.getSimpleName(), "status: " + status); - if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) - poResult.success(WIFI_REGISTER_NETWORK_RESULT_SUCCESS); - else - poResult.success(WIFI_REGISTER_NETWORK_RESULT_FAILED); + poResult.success(status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS ? WIFI_REGISTER_NETWORK_RESULT_SUCCESS : WIFI_REGISTER_NETWORK_RESULT_FAILED); } } else { // Deprecated version diff --git a/packages/wifi_iot/lib/wifi_iot.dart b/packages/wifi_iot/lib/wifi_iot.dart index d34f0275..12badbf2 100755 --- a/packages/wifi_iot/lib/wifi_iot.dart +++ b/packages/wifi_iot/lib/wifi_iot.dart @@ -397,10 +397,8 @@ class WiFiForIoTPlugin { /// /// @param [isHidden] Whether the SSID is hidden (not broadcasted by the AP). /// - /// @returns : - /// success = in case the requested network could be registered. - /// failed = if failed to register. - /// alreadyRegistered = if the network is already registered. + /// @returns Whether the network could be registered, the network failed to register, + /// or the network is already registered. static Future registerWifiNetwork( String ssid, { String? bssid, @@ -434,12 +432,18 @@ class WiFiForIoTPlugin { print("MissingPluginException : ${e.toString()}"); } - if (iResult == 0) + if (iResult == 0) { return RegisterWifiNetworkResult.success; - else if (iResult == 2) + } + else if (iResult == 1) { + return RegisterWifiNetworkResult.failed; + } + else if (iResult == 2) { return RegisterWifiNetworkResult.alreadyRegistered; - else + } + else { return RegisterWifiNetworkResult.failed; + } } /// Scan for Wi-Fi networks and connect to the requested AP Wi-Fi network if