@capgo/capacitor-wifi 8.0.5 → 8.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,7 +44,7 @@ import java.util.List;
44
44
  )
45
45
  public class CapacitorWifiPlugin extends Plugin {
46
46
 
47
- private final String pluginVersion = "8.0.5";
47
+ private final String pluginVersion = "8.0.6";
48
48
 
49
49
  private WifiManager wifiManager;
50
50
  private ConnectivityManager connectivityManager;
@@ -6,7 +6,7 @@ import CoreLocation
6
6
 
7
7
  @objc(CapacitorWifiPlugin)
8
8
  public class CapacitorWifiPlugin: CAPPlugin, CAPBridgedPlugin {
9
- private let pluginVersion: String = "8.0.5"
9
+ private let pluginVersion: String = "8.0.6"
10
10
  public let identifier = "CapacitorWifiPlugin"
11
11
  public let jsName = "CapacitorWifi"
12
12
  public let pluginMethods: [CAPPluginMethod] = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/capacitor-wifi",
3
- "version": "8.0.5",
3
+ "version": "8.0.6",
4
4
  "description": "Manage WiFi connectivity for your Capacitor app",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,439 +0,0 @@
1
- package app.capgo.capacitorwifi;
2
-
3
- import android.Manifest;
4
- import android.content.BroadcastReceiver;
5
- import android.content.Context;
6
- import android.content.Intent;
7
- import android.content.IntentFilter;
8
- import android.net.ConnectivityManager;
9
- import android.net.Network;
10
- import android.net.NetworkCapabilities;
11
- import android.net.NetworkRequest;
12
- import android.net.NetworkSpecifier;
13
- import android.net.wifi.ScanResult;
14
- import android.net.wifi.WifiConfiguration;
15
- import android.net.wifi.WifiManager;
16
- import android.net.wifi.WifiNetworkSpecifier;
17
- import android.os.Build;
18
- import android.provider.Settings;
19
- import androidx.annotation.NonNull;
20
- import androidx.annotation.RequiresApi;
21
- import com.getcapacitor.JSArray;
22
- import com.getcapacitor.JSObject;
23
- import com.getcapacitor.PermissionState;
24
- import com.getcapacitor.Plugin;
25
- import com.getcapacitor.PluginCall;
26
- import com.getcapacitor.PluginMethod;
27
- import com.getcapacitor.annotation.CapacitorPlugin;
28
- import com.getcapacitor.annotation.Permission;
29
- import com.getcapacitor.annotation.PermissionCallback;
30
- import java.net.InetAddress;
31
- import java.net.NetworkInterface;
32
- import java.util.Enumeration;
33
- import java.util.List;
34
-
35
- @CapacitorPlugin(
36
- name = "CapacitorWifi",
37
- permissions = {
38
- @Permission(
39
- alias = "location",
40
- strings = {
41
- Manifest.permission.ACCESS_FINE_LOCATION,
42
- Manifest.permission.ACCESS_COARSE_LOCATION,
43
- Manifest.permission.ACCESS_WIFI_STATE,
44
- Manifest.permission.CHANGE_WIFI_STATE
45
- }
46
- )
47
- }
48
- )
49
- public class CapacitorWifiPlugin extends Plugin {
50
-
51
- private final String pluginVersion = "7.0.0";
52
- private WifiManager wifiManager;
53
- private ConnectivityManager connectivityManager;
54
- private BroadcastReceiver scanResultsReceiver;
55
- private ConnectivityManager.NetworkCallback networkCallback;
56
-
57
- @Override
58
- public void load() {
59
- wifiManager = (WifiManager) getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
60
- connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
61
-
62
- // Set up scan results receiver
63
- scanResultsReceiver = new BroadcastReceiver() {
64
- @Override
65
- public void onReceive(Context context, Intent intent) {
66
- notifyListeners("networksScanned", new JSObject());
67
- }
68
- };
69
- }
70
-
71
- @PluginMethod
72
- public void addNetwork(PluginCall call) {
73
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
74
- // Android 10+ - use system dialog
75
- addNetworkModern(call);
76
- } else {
77
- // Pre-Android 10 - programmatic approach
78
- addNetworkLegacy(call);
79
- }
80
- }
81
-
82
- @RequiresApi(api = Build.VERSION_CODES.Q)
83
- private void addNetworkModern(PluginCall call) {
84
- String ssid = call.getString("ssid");
85
- if (ssid == null) {
86
- call.reject("SSID is required");
87
- return;
88
- }
89
-
90
- // Open WiFi settings with SSID
91
- Intent intent = new Intent(Settings.ACTION_WIFI_ADD_NETWORKS);
92
- intent.putExtra(Settings.EXTRA_WIFI_NETWORK_LIST, new String[] { ssid });
93
- getActivity().startActivity(intent);
94
- call.resolve();
95
- }
96
-
97
- private void addNetworkLegacy(PluginCall call) {
98
- String ssid = call.getString("ssid");
99
- String password = call.getString("password");
100
- Boolean isHidden = call.getBoolean("isHiddenSsid", false);
101
-
102
- if (ssid == null) {
103
- call.reject("SSID is required");
104
- return;
105
- }
106
-
107
- if (getPermissionState("location") != PermissionState.GRANTED) {
108
- requestPermissionForAlias("location", call, "addNetworkCallback");
109
- return;
110
- }
111
-
112
- WifiConfiguration config = new WifiConfiguration();
113
- config.SSID = "\"" + ssid + "\"";
114
- config.hiddenSSID = isHidden;
115
-
116
- if (password != null && !password.isEmpty()) {
117
- config.preSharedKey = "\"" + password + "\"";
118
- } else {
119
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
120
- }
121
-
122
- int netId = wifiManager.addNetwork(config);
123
- if (netId == -1) {
124
- call.reject("Failed to add network");
125
- return;
126
- }
127
-
128
- boolean enabled = wifiManager.enableNetwork(netId, true);
129
- if (!enabled) {
130
- call.reject("Failed to enable network");
131
- return;
132
- }
133
-
134
- call.resolve();
135
- }
136
-
137
- @PermissionCallback
138
- private void addNetworkCallback(PluginCall call) {
139
- if (getPermissionState("location") == PermissionState.GRANTED) {
140
- addNetworkLegacy(call);
141
- } else {
142
- call.reject("Location permission is required");
143
- }
144
- }
145
-
146
- @PluginMethod
147
- public void connect(PluginCall call) {
148
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
149
- connectModern(call);
150
- } else {
151
- connectLegacy(call);
152
- }
153
- }
154
-
155
- @RequiresApi(api = Build.VERSION_CODES.Q)
156
- private void connectModern(PluginCall call) {
157
- String ssid = call.getString("ssid");
158
- String password = call.getString("password");
159
-
160
- if (ssid == null) {
161
- call.reject("SSID is required");
162
- return;
163
- }
164
-
165
- WifiNetworkSpecifier.Builder specifierBuilder = new WifiNetworkSpecifier.Builder().setSsid(ssid);
166
-
167
- if (password != null && !password.isEmpty()) {
168
- specifierBuilder.setWpa2Passphrase(password);
169
- }
170
-
171
- NetworkSpecifier specifier = specifierBuilder.build();
172
-
173
- NetworkRequest request = new NetworkRequest.Builder()
174
- .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
175
- .setNetworkSpecifier(specifier)
176
- .build();
177
-
178
- networkCallback = new ConnectivityManager.NetworkCallback() {
179
- @Override
180
- public void onAvailable(@NonNull Network network) {
181
- super.onAvailable(network);
182
- call.resolve();
183
- }
184
-
185
- @Override
186
- public void onUnavailable() {
187
- super.onUnavailable();
188
- call.reject("Network unavailable");
189
- }
190
- };
191
-
192
- connectivityManager.requestNetwork(request, networkCallback);
193
- }
194
-
195
- private void connectLegacy(PluginCall call) {
196
- addNetworkLegacy(call);
197
- }
198
-
199
- @PluginMethod
200
- public void disconnect(PluginCall call) {
201
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
202
- if (networkCallback != null) {
203
- connectivityManager.unregisterNetworkCallback(networkCallback);
204
- networkCallback = null;
205
- }
206
- } else {
207
- wifiManager.disconnect();
208
- }
209
- call.resolve();
210
- }
211
-
212
- @PluginMethod
213
- public void getAvailableNetworks(PluginCall call) {
214
- if (getPermissionState("location") != PermissionState.GRANTED) {
215
- requestPermissionForAlias("location", call, "getAvailableNetworksCallback");
216
- return;
217
- }
218
-
219
- getAvailableNetworksWithPermission(call);
220
- }
221
-
222
- @PermissionCallback
223
- private void getAvailableNetworksCallback(PluginCall call) {
224
- if (getPermissionState("location") == PermissionState.GRANTED) {
225
- getAvailableNetworksWithPermission(call);
226
- } else {
227
- call.reject("Location permission is required");
228
- }
229
- }
230
-
231
- private void getAvailableNetworksWithPermission(PluginCall call) {
232
- List<ScanResult> results = wifiManager.getScanResults();
233
- JSArray networks = new JSArray();
234
-
235
- for (ScanResult result : results) {
236
- JSObject network = new JSObject();
237
- network.put("ssid", result.SSID);
238
- network.put("rssi", result.level);
239
-
240
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
241
- JSArray securityTypes = new JSArray();
242
- // Add security types based on capabilities
243
- String capabilities = result.capabilities;
244
- if (capabilities.contains("WPA3")) {
245
- securityTypes.put(4); // SAE
246
- } else if (capabilities.contains("WPA2")) {
247
- securityTypes.put(2); // WPA2_PSK
248
- } else if (capabilities.contains("WPA")) {
249
- securityTypes.put(2); // WPA2_PSK
250
- } else if (capabilities.contains("WEP")) {
251
- securityTypes.put(1); // WEP
252
- } else {
253
- securityTypes.put(0); // OPEN
254
- }
255
- network.put("securityTypes", securityTypes);
256
- }
257
-
258
- networks.put(network);
259
- }
260
-
261
- JSObject result = new JSObject();
262
- result.put("networks", networks);
263
- call.resolve(result);
264
- }
265
-
266
- @PluginMethod
267
- public void getIpAddress(PluginCall call) {
268
- try {
269
- for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
270
- NetworkInterface intf = en.nextElement();
271
- for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
272
- InetAddress inetAddress = enumIpAddr.nextElement();
273
- if (!inetAddress.isLoopbackAddress() && inetAddress.getAddress().length == 4) {
274
- String ip = inetAddress.getHostAddress();
275
- JSObject result = new JSObject();
276
- result.put("ipAddress", ip);
277
- call.resolve(result);
278
- return;
279
- }
280
- }
281
- }
282
- call.reject("No IP address found");
283
- } catch (Exception e) {
284
- call.reject("Failed to get IP address", e);
285
- }
286
- }
287
-
288
- @PluginMethod
289
- public void getRssi(PluginCall call) {
290
- if (getPermissionState("location") != PermissionState.GRANTED) {
291
- requestPermissionForAlias("location", call, "getRssiCallback");
292
- return;
293
- }
294
-
295
- getRssiWithPermission(call);
296
- }
297
-
298
- @PermissionCallback
299
- private void getRssiCallback(PluginCall call) {
300
- if (getPermissionState("location") == PermissionState.GRANTED) {
301
- getRssiWithPermission(call);
302
- } else {
303
- call.reject("Location permission is required");
304
- }
305
- }
306
-
307
- private void getRssiWithPermission(PluginCall call) {
308
- android.net.wifi.WifiInfo wifiInfo = wifiManager.getConnectionInfo();
309
- int rssi = wifiInfo.getRssi();
310
-
311
- JSObject result = new JSObject();
312
- result.put("rssi", rssi);
313
- call.resolve(result);
314
- }
315
-
316
- @PluginMethod
317
- public void getSsid(PluginCall call) {
318
- if (getPermissionState("location") != PermissionState.GRANTED) {
319
- requestPermissionForAlias("location", call, "getSsidCallback");
320
- return;
321
- }
322
-
323
- getSsidWithPermission(call);
324
- }
325
-
326
- @PermissionCallback
327
- private void getSsidCallback(PluginCall call) {
328
- if (getPermissionState("location") == PermissionState.GRANTED) {
329
- getSsidWithPermission(call);
330
- } else {
331
- call.reject("Location permission is required");
332
- }
333
- }
334
-
335
- private void getSsidWithPermission(PluginCall call) {
336
- android.net.wifi.WifiInfo wifiInfo = wifiManager.getConnectionInfo();
337
- String ssid = wifiInfo.getSSID();
338
-
339
- // Remove quotes if present
340
- if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
341
- ssid = ssid.substring(1, ssid.length() - 1);
342
- }
343
-
344
- JSObject result = new JSObject();
345
- result.put("ssid", ssid);
346
- call.resolve(result);
347
- }
348
-
349
- @PluginMethod
350
- public void isEnabled(PluginCall call) {
351
- boolean enabled = wifiManager.isWifiEnabled();
352
-
353
- JSObject result = new JSObject();
354
- result.put("enabled", enabled);
355
- call.resolve(result);
356
- }
357
-
358
- @PluginMethod
359
- public void startScan(PluginCall call) {
360
- if (getPermissionState("location") != PermissionState.GRANTED) {
361
- requestPermissionForAlias("location", call, "startScanCallback");
362
- return;
363
- }
364
-
365
- startScanWithPermission(call);
366
- }
367
-
368
- @PermissionCallback
369
- private void startScanCallback(PluginCall call) {
370
- if (getPermissionState("location") == PermissionState.GRANTED) {
371
- startScanWithPermission(call);
372
- } else {
373
- call.reject("Location permission is required");
374
- }
375
- }
376
-
377
- private void startScanWithPermission(PluginCall call) {
378
- // Register receiver
379
- getContext().registerReceiver(scanResultsReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
380
-
381
- boolean success = wifiManager.startScan();
382
- if (success) {
383
- call.resolve();
384
- } else {
385
- call.reject("Failed to start scan");
386
- }
387
- }
388
-
389
- @PluginMethod
390
- public void checkPermissions(PluginCall call) {
391
- JSObject result = new JSObject();
392
- result.put("location", getPermissionState("location").toString().toLowerCase());
393
- call.resolve(result);
394
- }
395
-
396
- @PluginMethod
397
- public void requestPermissions(PluginCall call) {
398
- if (getPermissionState("location") == PermissionState.GRANTED) {
399
- JSObject result = new JSObject();
400
- result.put("location", "granted");
401
- call.resolve(result);
402
- } else {
403
- requestPermissionForAlias("location", call, "permissionsCallback");
404
- }
405
- }
406
-
407
- @PermissionCallback
408
- private void permissionsCallback(PluginCall call) {
409
- JSObject result = new JSObject();
410
- result.put("location", getPermissionState("location").toString().toLowerCase());
411
- call.resolve(result);
412
- }
413
-
414
- @PluginMethod
415
- public void getPluginVersion(final PluginCall call) {
416
- try {
417
- final JSObject result = new JSObject();
418
- result.put("version", this.pluginVersion);
419
- call.resolve(result);
420
- } catch (final Exception e) {
421
- call.reject("Could not get plugin version", e);
422
- }
423
- }
424
-
425
- @Override
426
- protected void handleOnDestroy() {
427
- try {
428
- if (scanResultsReceiver != null) {
429
- getContext().unregisterReceiver(scanResultsReceiver);
430
- }
431
- if (networkCallback != null) {
432
- connectivityManager.unregisterNetworkCallback(networkCallback);
433
- }
434
- } catch (Exception e) {
435
- // Receiver might not be registered
436
- }
437
- super.handleOnDestroy();
438
- }
439
- }