From f08e86682b4053b4d2069465f37dba4e6c744fd0 Mon Sep 17 00:00:00 2001 From: sante85 Date: Wed, 12 Jun 2019 09:43:36 +0200 Subject: [PATCH 01/17] Update ConnectivityPlugin.java add network info speed --- .../connectivity/ConnectivityPlugin.java | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index cb48c25bd396..05568ec3fe71 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -20,6 +20,8 @@ import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; +import android.net.NetworkInfo; +import android.telephony.TelephonyManager; /** ConnectivityPlugin */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { @@ -62,7 +64,7 @@ public void onCancel(Object arguments) { receiver = null; } - private static String getNetworkType(int type) { + private static String getNetworkType(int type, int subType) { switch (type) { case ConnectivityManager.TYPE_ETHERNET: case ConnectivityManager.TYPE_WIFI: @@ -71,7 +73,46 @@ private static String getNetworkType(int type) { case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_MOBILE_DUN: case ConnectivityManager.TYPE_MOBILE_HIPRI: - return "mobile"; + switch(subType){ + case TelephonyManager.NETWORK_TYPE_1xRTT: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_CDMA: + return "2G"; // ~ 14-64 kbps + case TelephonyManager.NETWORK_TYPE_EDGE: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_0: + return "3G"; // ~ 400-1000 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_A: + return "3G"; // ~ 600-1400 kbps + case TelephonyManager.NETWORK_TYPE_GPRS: + return "2G"; // ~ 100 kbps + case TelephonyManager.NETWORK_TYPE_HSDPA: + return "3G"; // ~ 2-14 Mbps + case TelephonyManager.NETWORK_TYPE_HSPA: + return "3G"; // ~ 700-1700 kbps + case TelephonyManager.NETWORK_TYPE_HSUPA: + return "3G"; // ~ 1-23 Mbps + case TelephonyManager.NETWORK_TYPE_UMTS: + return "3G"; // ~ 400-7000 kbps + /* + * Above API level 7, make sure to set android:targetSdkVersion + * to appropriate level to use these + */ + case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 + return "3G"; // ~ 1-2 Mbps + case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 + return "3G"; // ~ 5 Mbps + case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 + return "3G"; // ~ 10-20 Mbps + case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 + return "2G"; // ~25 kbps + case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 + return "4G"; // ~ 10+ Mbps + // Unknown + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + default: + return "none"; + } default: return "none"; } @@ -101,7 +142,7 @@ public void onMethodCall(MethodCall call, Result result) { private void handleCheck(MethodCall call, final Result result) { NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { - result.success(getNetworkType(info.getType())); + result.success(getNetworkType(info.getType(), info.getSubtype())); } else { result.success("none"); } From 3e9b146deba7929bb260f009b91382041e7f07f9 Mon Sep 17 00:00:00 2001 From: sante85 Date: Wed, 12 Jun 2019 09:46:44 +0200 Subject: [PATCH 02/17] Update ConnectivityPlugin.m add network speed info --- .../ios/Classes/ConnectivityPlugin.m | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index e92fff220a2e..e2a0398814a5 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -93,7 +93,32 @@ - (NSString*)statusFromReachability:(Reachability*)reachability { case ReachableViaWiFi: return @"wifi"; case ReachableViaWWAN: - return @"mobile"; + CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; + NSString * carrierType = netinfo.currentRadioAccessTechnology; + if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyEdge]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyWCDMA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSDPA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSUPA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMA1x]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyeHRPD]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { + return @"4G"; + } + return @"none"; } } From 68509b63e0d2db2e4fd34eb0b456d70dfa657aad Mon Sep 17 00:00:00 2001 From: sante85 Date: Wed, 12 Jun 2019 10:06:01 +0200 Subject: [PATCH 03/17] Update pubspec.yaml update version s.sante85@gmail.com --- packages/connectivity/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index ac6c8d090af8..51cd9ffe5b8f 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for discovering the state of the network (WiFi & mobile/cellular) connectivity on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity -version: 0.4.3+3 +version: 0.4.4+0 flutter: plugin: From b222a5af776778964e10795948ecc9b57fb88bca Mon Sep 17 00:00:00 2001 From: sante85 Date: Wed, 12 Jun 2019 10:07:19 +0200 Subject: [PATCH 04/17] Update CHANGELOG.md add version info --- packages/connectivity/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 6d5f53851f4d..2c8f9403f26c 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.4+0 + +* Return type of mobile connection based on speed (2G, 3G or 4G) + ## 0.4.3+3 * Support for TYPE_MOBILE_HIPRI on Android. From c32222b910af6006724af56035971a3ea37a4a14 Mon Sep 17 00:00:00 2001 From: sante85 Date: Wed, 12 Jun 2019 10:43:13 +0200 Subject: [PATCH 05/17] Update ConnectivityPlugin.java fix add parameter --- .../io/flutter/plugins/connectivity/ConnectivityPlugin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index 05568ec3fe71..04570cd300d8 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -202,7 +202,9 @@ public void onReceive(Context context, Intent intent) { } int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); - events.success(getNetworkType(type)); + TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + int subType = mTelephonyManager.getNetworkType(); + events.success(getNetworkType(type, subType)); } }; } From 9ccc51cfb5d21d802f9022b4aade6800b537e730 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 19 Jun 2019 00:30:44 +0200 Subject: [PATCH 06/17] format --- .../connectivity/ConnectivityPlugin.java | 362 +++++++++--------- 1 file changed, 184 insertions(+), 178 deletions(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index 04570cd300d8..a57ebdbebccb 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -12,6 +12,7 @@ import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; + import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.EventChannel.EventSink; import io.flutter.plugin.common.EventChannel.StreamHandler; @@ -20,192 +21,197 @@ import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; + import android.net.NetworkInfo; import android.telephony.TelephonyManager; -/** ConnectivityPlugin */ +/** + * ConnectivityPlugin + */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Registrar registrar; - private final ConnectivityManager manager; - private BroadcastReceiver receiver; - - /** Plugin registration. */ - public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = - new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityPlugin instance = new ConnectivityPlugin(registrar); - channel.setMethodCallHandler(instance); - eventChannel.setStreamHandler(instance); - } - - private ConnectivityPlugin(Registrar registrar) { - this.registrar = registrar; - this.manager = - (ConnectivityManager) - registrar + private final Registrar registrar; + private final ConnectivityManager manager; + private BroadcastReceiver receiver; + + /** + * Plugin registration. + */ + public static void registerWith(Registrar registrar) { + final MethodChannel channel = + new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = + new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); + ConnectivityPlugin instance = new ConnectivityPlugin(registrar); + channel.setMethodCallHandler(instance); + eventChannel.setStreamHandler(instance); + } + + private ConnectivityPlugin(Registrar registrar) { + this.registrar = registrar; + this.manager = + (ConnectivityManager) + registrar + .context() + .getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + } + + @Override + public void onListen(Object arguments, EventSink events) { + receiver = createReceiver(events); + registrar .context() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventSink events) { - receiver = createReceiver(events); - registrar - .context() - .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void onCancel(Object arguments) { - registrar.context().unregisterReceiver(receiver); - receiver = null; - } - - private static String getNetworkType(int type, int subType) { - switch (type) { - case ConnectivityManager.TYPE_ETHERNET: - case ConnectivityManager.TYPE_WIFI: - case ConnectivityManager.TYPE_WIMAX: - return "wifi"; - case ConnectivityManager.TYPE_MOBILE: - case ConnectivityManager.TYPE_MOBILE_DUN: - case ConnectivityManager.TYPE_MOBILE_HIPRI: - switch(subType){ - case TelephonyManager.NETWORK_TYPE_1xRTT: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_CDMA: - return "2G"; // ~ 14-64 kbps - case TelephonyManager.NETWORK_TYPE_EDGE: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_0: - return "3G"; // ~ 400-1000 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_A: - return "3G"; // ~ 600-1400 kbps - case TelephonyManager.NETWORK_TYPE_GPRS: - return "2G"; // ~ 100 kbps - case TelephonyManager.NETWORK_TYPE_HSDPA: - return "3G"; // ~ 2-14 Mbps - case TelephonyManager.NETWORK_TYPE_HSPA: - return "3G"; // ~ 700-1700 kbps - case TelephonyManager.NETWORK_TYPE_HSUPA: - return "3G"; // ~ 1-23 Mbps - case TelephonyManager.NETWORK_TYPE_UMTS: - return "3G"; // ~ 400-7000 kbps - /* - * Above API level 7, make sure to set android:targetSdkVersion - * to appropriate level to use these - */ - case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 - return "3G"; // ~ 1-2 Mbps - case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 - return "3G"; // ~ 5 Mbps - case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 - return "3G"; // ~ 10-20 Mbps - case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 - return "2G"; // ~25 kbps - case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 - return "4G"; // ~ 10+ Mbps - // Unknown - case TelephonyManager.NETWORK_TYPE_UNKNOWN: - default: - return "none"; - } - default: - return "none"; + .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } - } - - @Override - public void onMethodCall(MethodCall call, Result result) { - switch (call.method) { - case "check": - handleCheck(call, result); - break; - case "wifiName": - handleWifiName(call, result); - break; - case "wifiBSSID": - handleBSSID(call, result); - break; - case "wifiIPAddress": - handleWifiIPAddress(call, result); - break; - default: - result.notImplemented(); - break; + + @Override + public void onCancel(Object arguments) { + registrar.context().unregisterReceiver(receiver); + receiver = null; } - } - - private void handleCheck(MethodCall call, final Result result) { - NetworkInfo info = manager.getActiveNetworkInfo(); - if (info != null && info.isConnected()) { - result.success(getNetworkType(info.getType(), info.getSubtype())); - } else { - result.success("none"); + + private static String getNetworkType(int type, int subType) { + switch (type) { + case ConnectivityManager.TYPE_ETHERNET: + case ConnectivityManager.TYPE_WIFI: + case ConnectivityManager.TYPE_WIMAX: + return "wifi"; + case ConnectivityManager.TYPE_MOBILE: + case ConnectivityManager.TYPE_MOBILE_DUN: + case ConnectivityManager.TYPE_MOBILE_HIPRI: + switch (subType) { + case TelephonyManager.NETWORK_TYPE_1xRTT: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_CDMA: + return "2G"; // ~ 14-64 kbps + case TelephonyManager.NETWORK_TYPE_EDGE: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_0: + return "3G"; // ~ 400-1000 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_A: + return "3G"; // ~ 600-1400 kbps + case TelephonyManager.NETWORK_TYPE_GPRS: + return "2G"; // ~ 100 kbps + case TelephonyManager.NETWORK_TYPE_HSDPA: + return "3G"; // ~ 2-14 Mbps + case TelephonyManager.NETWORK_TYPE_HSPA: + return "3G"; // ~ 700-1700 kbps + case TelephonyManager.NETWORK_TYPE_HSUPA: + return "3G"; // ~ 1-23 Mbps + case TelephonyManager.NETWORK_TYPE_UMTS: + return "3G"; // ~ 400-7000 kbps + /* + * Above API level 7, make sure to set android:targetSdkVersion + * to appropriate level to use these + */ + case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 + return "3G"; // ~ 1-2 Mbps + case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 + return "3G"; // ~ 5 Mbps + case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 + return "3G"; // ~ 10-20 Mbps + case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 + return "2G"; // ~25 kbps + case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 + return "4G"; // ~ 10+ Mbps + // Unknown + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + default: + return "none"; + } + default: + return "none"; + } } - } - - private WifiInfo getWifiInfo() { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - return wifiManager == null ? null : wifiManager.getConnectionInfo(); - } - - private void handleWifiName(MethodCall call, final Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String ssid = null; - if (wifiInfo != null) ssid = wifiInfo.getSSID(); - if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" - result.success(ssid); - } - - private void handleBSSID(MethodCall call, MethodChannel.Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String bssid = null; - if (wifiInfo != null) bssid = wifiInfo.getBSSID(); - result.success(bssid); - } - - private void handleWifiIPAddress(MethodCall call, final Result result) { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - WifiInfo wifiInfo = null; - if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); - - String ip = null; - int i_ip = 0; - if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); - - if (i_ip != 0) - ip = - String.format( - "%d.%d.%d.%d", - (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); - - result.success(ip); - } - - private BroadcastReceiver createReceiver(final EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); - if (isLost) { - events.success("none"); - return; + + @Override + public void onMethodCall(MethodCall call, Result result) { + switch (call.method) { + case "check": + handleCheck(call, result); + break; + case "wifiName": + handleWifiName(call, result); + break; + case "wifiBSSID": + handleBSSID(call, result); + break; + case "wifiIPAddress": + handleWifiIPAddress(call, result); + break; + default: + result.notImplemented(); + break; } + } + + private void handleCheck(MethodCall call, final Result result) { + NetworkInfo info = manager.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + result.success(getNetworkType(info.getType(), info.getSubtype())); + } else { + result.success("none"); + } + } - int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); - TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - int subType = mTelephonyManager.getNetworkType(); - events.success(getNetworkType(type, subType)); - } - }; - } + private WifiInfo getWifiInfo() { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + return wifiManager == null ? null : wifiManager.getConnectionInfo(); + } + + private void handleWifiName(MethodCall call, final Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String ssid = null; + if (wifiInfo != null) ssid = wifiInfo.getSSID(); + if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" + result.success(ssid); + } + + private void handleBSSID(MethodCall call, MethodChannel.Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String bssid = null; + if (wifiInfo != null) bssid = wifiInfo.getBSSID(); + result.success(bssid); + } + + private void handleWifiIPAddress(MethodCall call, final Result result) { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + WifiInfo wifiInfo = null; + if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); + + String ip = null; + int i_ip = 0; + if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); + + if (i_ip != 0) + ip = + String.format( + "%d.%d.%d.%d", + (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); + + result.success(ip); + } + + private BroadcastReceiver createReceiver(final EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); + if (isLost) { + events.success("none"); + return; + } + + int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); + TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + int subType = mTelephonyManager.getNetworkType(); + events.success(getNetworkType(type, subType)); + } + }; + } } From 16a9a71f034ca84d5084c69cccbbc35365d23e77 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 19 Jun 2019 00:39:36 +0200 Subject: [PATCH 07/17] add m --- packages/connectivity/ios/Classes/ConnectivityPlugin.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index e2a0398814a5..67a464a7b9ac 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -17,7 +17,7 @@ @interface FLTConnectivityPlugin () @implementation FLTConnectivityPlugin { FlutterEventSink _eventSink; -} +}- + (void)registerWithRegistrar:(NSObject*)registrar { FLTConnectivityPlugin* instance = [[FLTConnectivityPlugin alloc] init]; @@ -93,7 +93,7 @@ - (NSString*)statusFromReachability:(Reachability*)reachability { case ReachableViaWiFi: return @"wifi"; case ReachableViaWWAN: - CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; + CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; NSString * carrierType = netinfo.currentRadioAccessTechnology; if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { return @"2G"; @@ -118,7 +118,7 @@ - (NSString*)statusFromReachability:(Reachability*)reachability { } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { return @"4G"; } - return @"none"; + return @"none"; } } From 596e5e4e692bdd72cb2eb186f72bfc9752567225 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 21 Jun 2019 14:12:37 -0700 Subject: [PATCH 08/17] Update pubspec.yaml --- packages/connectivity/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index 51cd9ffe5b8f..7ec5d31bcc42 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for discovering the state of the network (WiFi & mobile/cellular) connectivity on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity -version: 0.4.4+0 +version: 0.4.4 flutter: plugin: From 8ff7d9c9b66591fd9d71ca58457afbce5634927f Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 21 Jun 2019 14:12:48 -0700 Subject: [PATCH 09/17] Update CHANGELOG.md --- packages/connectivity/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 2c8f9403f26c..5db9bff2dadb 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.4.4+0 +## 0.4.4 * Return type of mobile connection based on speed (2G, 3G or 4G) From 1525456b09111c9ddb363a949bc9e3dae0c87c49 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Fri, 21 Jun 2019 14:14:56 -0700 Subject: [PATCH 10/17] Reformat --- .../connectivity/ConnectivityPlugin.java | 366 +++++++++--------- .../ios/Classes/ConnectivityPlugin.m | 57 +-- 2 files changed, 209 insertions(+), 214 deletions(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index a57ebdbebccb..4173c2134f3c 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -12,7 +12,7 @@ import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; - +import android.telephony.TelephonyManager; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.EventChannel.EventSink; import io.flutter.plugin.common.EventChannel.StreamHandler; @@ -22,196 +22,190 @@ import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; -import android.net.NetworkInfo; -import android.telephony.TelephonyManager; - -/** - * ConnectivityPlugin - */ +/** ConnectivityPlugin */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Registrar registrar; - private final ConnectivityManager manager; - private BroadcastReceiver receiver; - - /** - * Plugin registration. - */ - public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = - new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityPlugin instance = new ConnectivityPlugin(registrar); - channel.setMethodCallHandler(instance); - eventChannel.setStreamHandler(instance); - } - - private ConnectivityPlugin(Registrar registrar) { - this.registrar = registrar; - this.manager = - (ConnectivityManager) - registrar - .context() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventSink events) { - receiver = createReceiver(events); - registrar + private final Registrar registrar; + private final ConnectivityManager manager; + private BroadcastReceiver receiver; + + /** Plugin registration. */ + public static void registerWith(Registrar registrar) { + final MethodChannel channel = + new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = + new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); + ConnectivityPlugin instance = new ConnectivityPlugin(registrar); + channel.setMethodCallHandler(instance); + eventChannel.setStreamHandler(instance); + } + + private ConnectivityPlugin(Registrar registrar) { + this.registrar = registrar; + this.manager = + (ConnectivityManager) + registrar .context() - .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void onCancel(Object arguments) { - registrar.context().unregisterReceiver(receiver); - receiver = null; - } - - private static String getNetworkType(int type, int subType) { - switch (type) { - case ConnectivityManager.TYPE_ETHERNET: - case ConnectivityManager.TYPE_WIFI: - case ConnectivityManager.TYPE_WIMAX: - return "wifi"; - case ConnectivityManager.TYPE_MOBILE: - case ConnectivityManager.TYPE_MOBILE_DUN: - case ConnectivityManager.TYPE_MOBILE_HIPRI: - switch (subType) { - case TelephonyManager.NETWORK_TYPE_1xRTT: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_CDMA: - return "2G"; // ~ 14-64 kbps - case TelephonyManager.NETWORK_TYPE_EDGE: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_0: - return "3G"; // ~ 400-1000 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_A: - return "3G"; // ~ 600-1400 kbps - case TelephonyManager.NETWORK_TYPE_GPRS: - return "2G"; // ~ 100 kbps - case TelephonyManager.NETWORK_TYPE_HSDPA: - return "3G"; // ~ 2-14 Mbps - case TelephonyManager.NETWORK_TYPE_HSPA: - return "3G"; // ~ 700-1700 kbps - case TelephonyManager.NETWORK_TYPE_HSUPA: - return "3G"; // ~ 1-23 Mbps - case TelephonyManager.NETWORK_TYPE_UMTS: - return "3G"; // ~ 400-7000 kbps - /* - * Above API level 7, make sure to set android:targetSdkVersion - * to appropriate level to use these - */ - case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 - return "3G"; // ~ 1-2 Mbps - case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 - return "3G"; // ~ 5 Mbps - case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 - return "3G"; // ~ 10-20 Mbps - case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 - return "2G"; // ~25 kbps - case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 - return "4G"; // ~ 10+ Mbps - // Unknown - case TelephonyManager.NETWORK_TYPE_UNKNOWN: - default: - return "none"; - } - default: - return "none"; + .getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + } + + @Override + public void onListen(Object arguments, EventSink events) { + receiver = createReceiver(events); + registrar + .context() + .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + @Override + public void onCancel(Object arguments) { + registrar.context().unregisterReceiver(receiver); + receiver = null; + } + + private static String getNetworkType(int type, int subType) { + switch (type) { + case ConnectivityManager.TYPE_ETHERNET: + case ConnectivityManager.TYPE_WIFI: + case ConnectivityManager.TYPE_WIMAX: + return "wifi"; + case ConnectivityManager.TYPE_MOBILE: + case ConnectivityManager.TYPE_MOBILE_DUN: + case ConnectivityManager.TYPE_MOBILE_HIPRI: + switch (subType) { + case TelephonyManager.NETWORK_TYPE_1xRTT: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_CDMA: + return "2G"; // ~ 14-64 kbps + case TelephonyManager.NETWORK_TYPE_EDGE: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_0: + return "3G"; // ~ 400-1000 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_A: + return "3G"; // ~ 600-1400 kbps + case TelephonyManager.NETWORK_TYPE_GPRS: + return "2G"; // ~ 100 kbps + case TelephonyManager.NETWORK_TYPE_HSDPA: + return "3G"; // ~ 2-14 Mbps + case TelephonyManager.NETWORK_TYPE_HSPA: + return "3G"; // ~ 700-1700 kbps + case TelephonyManager.NETWORK_TYPE_HSUPA: + return "3G"; // ~ 1-23 Mbps + case TelephonyManager.NETWORK_TYPE_UMTS: + return "3G"; // ~ 400-7000 kbps + /* + * Above API level 7, make sure to set android:targetSdkVersion + * to appropriate level to use these + */ + case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 + return "3G"; // ~ 1-2 Mbps + case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 + return "3G"; // ~ 5 Mbps + case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 + return "3G"; // ~ 10-20 Mbps + case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 + return "2G"; // ~25 kbps + case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 + return "4G"; // ~ 10+ Mbps + // Unknown + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + default: + return "none"; } + default: + return "none"; } - - @Override - public void onMethodCall(MethodCall call, Result result) { - switch (call.method) { - case "check": - handleCheck(call, result); - break; - case "wifiName": - handleWifiName(call, result); - break; - case "wifiBSSID": - handleBSSID(call, result); - break; - case "wifiIPAddress": - handleWifiIPAddress(call, result); - break; - default: - result.notImplemented(); - break; - } + } + + @Override + public void onMethodCall(MethodCall call, Result result) { + switch (call.method) { + case "check": + handleCheck(call, result); + break; + case "wifiName": + handleWifiName(call, result); + break; + case "wifiBSSID": + handleBSSID(call, result); + break; + case "wifiIPAddress": + handleWifiIPAddress(call, result); + break; + default: + result.notImplemented(); + break; } - - private void handleCheck(MethodCall call, final Result result) { - NetworkInfo info = manager.getActiveNetworkInfo(); - if (info != null && info.isConnected()) { - result.success(getNetworkType(info.getType(), info.getSubtype())); - } else { - result.success("none"); - } - } - - private WifiInfo getWifiInfo() { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - return wifiManager == null ? null : wifiManager.getConnectionInfo(); - } - - private void handleWifiName(MethodCall call, final Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String ssid = null; - if (wifiInfo != null) ssid = wifiInfo.getSSID(); - if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" - result.success(ssid); - } - - private void handleBSSID(MethodCall call, MethodChannel.Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String bssid = null; - if (wifiInfo != null) bssid = wifiInfo.getBSSID(); - result.success(bssid); - } - - private void handleWifiIPAddress(MethodCall call, final Result result) { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - WifiInfo wifiInfo = null; - if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); - - String ip = null; - int i_ip = 0; - if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); - - if (i_ip != 0) - ip = - String.format( - "%d.%d.%d.%d", - (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); - - result.success(ip); + } + + private void handleCheck(MethodCall call, final Result result) { + NetworkInfo info = manager.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + result.success(getNetworkType(info.getType(), info.getSubtype())); + } else { + result.success("none"); } + } + + private WifiInfo getWifiInfo() { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + return wifiManager == null ? null : wifiManager.getConnectionInfo(); + } + + private void handleWifiName(MethodCall call, final Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String ssid = null; + if (wifiInfo != null) ssid = wifiInfo.getSSID(); + if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" + result.success(ssid); + } + + private void handleBSSID(MethodCall call, MethodChannel.Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String bssid = null; + if (wifiInfo != null) bssid = wifiInfo.getBSSID(); + result.success(bssid); + } + + private void handleWifiIPAddress(MethodCall call, final Result result) { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + WifiInfo wifiInfo = null; + if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); + + String ip = null; + int i_ip = 0; + if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); + + if (i_ip != 0) + ip = + String.format( + "%d.%d.%d.%d", + (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); + + result.success(ip); + } + + private BroadcastReceiver createReceiver(final EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); + if (isLost) { + events.success("none"); + return; + } - private BroadcastReceiver createReceiver(final EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); - if (isLost) { - events.success("none"); - return; - } - - int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); - TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - int subType = mTelephonyManager.getNetworkType(); - events.success(getNetworkType(type, subType)); - } - }; - } + int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); + TelephonyManager mTelephonyManager = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + int subType = mTelephonyManager.getNetworkType(); + events.success(getNetworkType(type, subType)); + } + }; + } } diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index 67a464a7b9ac..1bbc0ea89727 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -17,9 +17,10 @@ @interface FLTConnectivityPlugin () @implementation FLTConnectivityPlugin { FlutterEventSink _eventSink; -}- +} +- -+ (void)registerWithRegistrar:(NSObject*)registrar { + + (void)registerWithRegistrar:(NSObject*)registrar { FLTConnectivityPlugin* instance = [[FLTConnectivityPlugin alloc] init]; FlutterMethodChannel* channel = @@ -93,32 +94,32 @@ - (NSString*)statusFromReachability:(Reachability*)reachability { case ReachableViaWiFi: return @"wifi"; case ReachableViaWWAN: - CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; - NSString * carrierType = netinfo.currentRadioAccessTechnology; - if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { - return @"2G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyEdge]) { - return @"2G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyWCDMA]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSDPA]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSUPA]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMA1x]) { - return @"2G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyeHRPD]) { - return @"3G"; - } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { - return @"4G"; - } - return @"none"; + CTTelephonyNetworkInfo* netinfo = [[CTTelephonyNetworkInfo alloc] init]; + NSString* carrierType = netinfo.currentRadioAccessTechnology; + if ([carrierType isEqualToString:CTRadioAccessTechnologyGPRS]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyEdge]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyWCDMA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSDPA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyHSUPA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMA1x]) { + return @"2G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyeHRPD]) { + return @"3G"; + } else if ([carrierType isEqualToString:CTRadioAccessTechnologyLTE]) { + return @"4G"; + } + return @"none"; } } From 97636ef5f578a3eda0bf99565c43690a0b78bdd3 Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 8 Jul 2019 23:16:21 +0200 Subject: [PATCH 11/17] Update connectivity.dart add method getMobileConnectionType --- packages/connectivity/lib/connectivity.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/connectivity/lib/connectivity.dart b/packages/connectivity/lib/connectivity.dart index a1fd21cb1668..649c95e9e24c 100644 --- a/packages/connectivity/lib/connectivity.dart +++ b/packages/connectivity/lib/connectivity.dart @@ -93,6 +93,10 @@ class Connectivity { Future getWifiIP() async { return await methodChannel.invokeMethod('wifiIPAddress'); } + + Future getMobileConnectionType() async { + return await methodChannel.invokeMethod('getMobileConnectionType'); + } } ConnectivityResult _parseConnectivityResult(String state) { From 8f0c1cd6b4677112409151ebaa691933fba3d692 Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 8 Jul 2019 23:21:06 +0200 Subject: [PATCH 12/17] Update ConnectivityPlugin.java add call at getNetworkSubType --- .../connectivity/ConnectivityPlugin.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index 4173c2134f3c..2182aede89fb 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -63,7 +63,22 @@ public void onCancel(Object arguments) { receiver = null; } - private static String getNetworkType(int type, int subType) { + private static String getNetworkSubType(int type, int subType) { + switch (type) { + case ConnectivityManager.TYPE_ETHERNET: + case ConnectivityManager.TYPE_WIFI: + case ConnectivityManager.TYPE_WIMAX: + return "wifi"; + case ConnectivityManager.TYPE_MOBILE: + case ConnectivityManager.TYPE_MOBILE_DUN: + case ConnectivityManager.TYPE_MOBILE_HIPRI: + return "mobile"; + default: + return "none"; + } + } + + private static String getNetworkSubType(int type, int subType) { switch (type) { case ConnectivityManager.TYPE_ETHERNET: case ConnectivityManager.TYPE_WIFI: @@ -132,16 +147,28 @@ public void onMethodCall(MethodCall call, Result result) { case "wifiIPAddress": handleWifiIPAddress(call, result); break; + case "getMobileConnectionType" + handleMobileConnectionType(call, result); + break; default: result.notImplemented(); break; } } + private void handleMobileConnectionType(MethodCall call, final Result result) { + NetworkInfo info = manager.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + result.success(getNetworkSubType(info.getType(), info.getSubtype())); + } else { + result.success("none"); + } + } + private void handleCheck(MethodCall call, final Result result) { NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isConnected()) { - result.success(getNetworkType(info.getType(), info.getSubtype())); + result.success(getNetworkType(info.getType())); } else { result.success("none"); } From 56dc958fd9c51277e8524883e59fdf5c04dc499e Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 8 Jul 2019 23:24:59 +0200 Subject: [PATCH 13/17] Update ConnectivityPlugin.m add method getMobileConnectionType --- .../ios/Classes/ConnectivityPlugin.m | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index 1bbc0ea89727..ff4dd7ff7a1b 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -86,7 +86,7 @@ - (NSString*)getWifiIP { return address; } -- (NSString*)statusFromReachability:(Reachability*)reachability { +- (NSString*)getMobileConnectionType:(Reachability*)reachability { NetworkStatus status = [reachability currentReachabilityStatus]; switch (status) { case NotReachable: @@ -123,6 +123,18 @@ - (NSString*)statusFromReachability:(Reachability*)reachability { } } +- (NSString*)statusFromReachability:(Reachability*)reachability { + NetworkStatus status = [reachability currentReachabilityStatus]; + switch (status) { + case NotReachable: + return @"none"; + case ReachableViaWiFi: + return @"wifi"; + case ReachableViaWWAN: + return @"mobile"; + } +} + - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([call.method isEqualToString:@"check"]) { // This is supposed to be quick. Another way of doing this would be to @@ -137,6 +149,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { result([self getBSSID]); } else if ([call.method isEqualToString:@"wifiIPAddress"]) { result([self getWifiIP]); + } else if ([call.method isEqualToString:@"getMobileConnectionType"]) { + result([self getMobileConnectionType]); } else { result(FlutterMethodNotImplemented); } From 8ddf11f9a952a8cc6743eea8661f8e674a9284c9 Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 15 Jul 2019 22:17:13 +0200 Subject: [PATCH 14/17] Update pubspec.yaml --- packages/connectivity/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index 25853140e774..926cfd1bf364 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter plugin for discovering the state of the network (WiFi & author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity -version: 0.4.3+4 +version: 0.4.3+5 flutter: From 843f316f6ab25aeabb07864def031ad766866e4c Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 15 Jul 2019 22:18:37 +0200 Subject: [PATCH 15/17] Update CHANGELOG.md --- packages/connectivity/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 32effcde622c..12370ddaf7fd 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,3 +1,6 @@ +## 0.4.3+5 +* Get network info as (2G, 3G, 4G). + ## 0.4.3+4 * [Android] Updated logic to retrieve network info. From 12e2a4b2576a2be9f0d51da4e2e53744d2f8a867 Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 15 Jul 2019 22:39:20 +0200 Subject: [PATCH 16/17] Update ConnectivityPlugin.java --- .../connectivity/ConnectivityPlugin.java | 419 +++++++++--------- 1 file changed, 212 insertions(+), 207 deletions(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index c3174b4f968d..021e435ddfaa 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -13,6 +13,7 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.telephony.TelephonyManager; + import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.EventChannel.EventSink; import io.flutter.plugin.common.EventChannel.StreamHandler; @@ -22,221 +23,225 @@ import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; -/** ConnectivityPlugin */ +/** + * ConnectivityPlugin + */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Registrar registrar; - private final ConnectivityManager manager; - private BroadcastReceiver receiver; - - /** Plugin registration. */ - public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = - new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityPlugin instance = new ConnectivityPlugin(registrar); - channel.setMethodCallHandler(instance); - eventChannel.setStreamHandler(instance); - } - - private ConnectivityPlugin(Registrar registrar) { - this.registrar = registrar; - this.manager = - (ConnectivityManager) - registrar + private final Registrar registrar; + private final ConnectivityManager manager; + private BroadcastReceiver receiver; + + /** + * Plugin registration. + */ + public static void registerWith(Registrar registrar) { + final MethodChannel channel = + new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = + new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); + ConnectivityPlugin instance = new ConnectivityPlugin(registrar); + channel.setMethodCallHandler(instance); + eventChannel.setStreamHandler(instance); + } + + private ConnectivityPlugin(Registrar registrar) { + this.registrar = registrar; + this.manager = + (ConnectivityManager) + registrar + .context() + .getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + } + + @Override + public void onListen(Object arguments, EventSink events) { + receiver = createReceiver(events); + registrar .context() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventSink events) { - receiver = createReceiver(events); - registrar - .context() - .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void onCancel(Object arguments) { - registrar.context().unregisterReceiver(receiver); - receiver = null; - } - - private static String getNetworkType(int type) { - switch (type) { - case ConnectivityManager.TYPE_ETHERNET: - case ConnectivityManager.TYPE_WIFI: - case ConnectivityManager.TYPE_WIMAX: - return "wifi"; - case ConnectivityManager.TYPE_MOBILE: - case ConnectivityManager.TYPE_MOBILE_DUN: - case ConnectivityManager.TYPE_MOBILE_HIPRI: - return "mobile"; - default: - return "none"; + .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } - } - - private static String getNetworkSubType(int type, int subType) { - switch (type) { - case ConnectivityManager.TYPE_ETHERNET: - case ConnectivityManager.TYPE_WIFI: - case ConnectivityManager.TYPE_WIMAX: - return "wifi"; - case ConnectivityManager.TYPE_MOBILE: - case ConnectivityManager.TYPE_MOBILE_DUN: - case ConnectivityManager.TYPE_MOBILE_HIPRI: - switch (subType) { - case TelephonyManager.NETWORK_TYPE_1xRTT: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_CDMA: - return "2G"; // ~ 14-64 kbps - case TelephonyManager.NETWORK_TYPE_EDGE: - return "2G"; // ~ 50-100 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_0: - return "3G"; // ~ 400-1000 kbps - case TelephonyManager.NETWORK_TYPE_EVDO_A: - return "3G"; // ~ 600-1400 kbps - case TelephonyManager.NETWORK_TYPE_GPRS: - return "2G"; // ~ 100 kbps - case TelephonyManager.NETWORK_TYPE_HSDPA: - return "3G"; // ~ 2-14 Mbps - case TelephonyManager.NETWORK_TYPE_HSPA: - return "3G"; // ~ 700-1700 kbps - case TelephonyManager.NETWORK_TYPE_HSUPA: - return "3G"; // ~ 1-23 Mbps - case TelephonyManager.NETWORK_TYPE_UMTS: - return "3G"; // ~ 400-7000 kbps - /* - * Above API level 7, make sure to set android:targetSdkVersion - * to appropriate level to use these - */ - case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 - return "3G"; // ~ 1-2 Mbps - case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 - return "3G"; // ~ 5 Mbps - case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 - return "3G"; // ~ 10-20 Mbps - case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 - return "2G"; // ~25 kbps - case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 - return "4G"; // ~ 10+ Mbps - // Unknown - case TelephonyManager.NETWORK_TYPE_UNKNOWN: - default: - return "none"; + + @Override + public void onCancel(Object arguments) { + registrar.context().unregisterReceiver(receiver); + receiver = null; + } + + private static String getNetworkType(int type) { + switch (type) { + case ConnectivityManager.TYPE_ETHERNET: + case ConnectivityManager.TYPE_WIFI: + case ConnectivityManager.TYPE_WIMAX: + return "wifi"; + case ConnectivityManager.TYPE_MOBILE: + case ConnectivityManager.TYPE_MOBILE_DUN: + case ConnectivityManager.TYPE_MOBILE_HIPRI: + return "mobile"; + default: + return "none"; } - default: - return "none"; } - } - - @Override - public void onMethodCall(MethodCall call, Result result) { - switch (call.method) { - case "check": - handleCheck(call, result); - break; - case "wifiName": - handleWifiName(call, result); - break; - case "wifiBSSID": - handleBSSID(call, result); - break; - case "wifiIPAddress": - handleWifiIPAddress(call, result); - break; - case "getMobileConnectionType" - handleMobileConnectionType(call, result); - break; - default: - result.notImplemented(); - break; + + private static String getNetworkSubType(int type, int subType) { + switch (type) { + case ConnectivityManager.TYPE_ETHERNET: + case ConnectivityManager.TYPE_WIFI: + case ConnectivityManager.TYPE_WIMAX: + return "wifi"; + case ConnectivityManager.TYPE_MOBILE: + case ConnectivityManager.TYPE_MOBILE_DUN: + case ConnectivityManager.TYPE_MOBILE_HIPRI: + switch (subType) { + case TelephonyManager.NETWORK_TYPE_1xRTT: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_CDMA: + return "2G"; // ~ 14-64 kbps + case TelephonyManager.NETWORK_TYPE_EDGE: + return "2G"; // ~ 50-100 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_0: + return "3G"; // ~ 400-1000 kbps + case TelephonyManager.NETWORK_TYPE_EVDO_A: + return "3G"; // ~ 600-1400 kbps + case TelephonyManager.NETWORK_TYPE_GPRS: + return "2G"; // ~ 100 kbps + case TelephonyManager.NETWORK_TYPE_HSDPA: + return "3G"; // ~ 2-14 Mbps + case TelephonyManager.NETWORK_TYPE_HSPA: + return "3G"; // ~ 700-1700 kbps + case TelephonyManager.NETWORK_TYPE_HSUPA: + return "3G"; // ~ 1-23 Mbps + case TelephonyManager.NETWORK_TYPE_UMTS: + return "3G"; // ~ 400-7000 kbps + /* + * Above API level 7, make sure to set android:targetSdkVersion + * to appropriate level to use these + */ + case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 + return "3G"; // ~ 1-2 Mbps + case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 + return "3G"; // ~ 5 Mbps + case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 + return "3G"; // ~ 10-20 Mbps + case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 + return "2G"; // ~25 kbps + case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 + return "4G"; // ~ 10+ Mbps + // Unknown + case TelephonyManager.NETWORK_TYPE_UNKNOWN: + default: + return "none"; + } + default: + return "none"; + } + } + + @Override + public void onMethodCall(MethodCall call, Result result) { + switch (call.method) { + case "check": + handleCheck(call, result); + break; + case "wifiName": + handleWifiName(call, result); + break; + case "wifiBSSID": + handleBSSID(call, result); + break; + case "wifiIPAddress": + handleWifiIPAddress(call, result); + break; + case "getMobileConnectionType" + handleMobileConnectionType(call, result); + break; + default: + result.notImplemented(); + break; + } } - } - - private void handleMobileConnectionType(MethodCall call, final Result result) { - NetworkInfo info = manager.getActiveNetworkInfo(); - if (info != null && info.isConnected()) { - result.success(getNetworkSubType(info.getType(), info.getSubtype())); - } else { - result.success("none"); + + private void handleMobileConnectionType(MethodCall call, final Result result) { + NetworkInfo info = manager.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + result.success(getNetworkSubType(info.getType(), info.getSubtype())); + } else { + result.success("none"); + } } - } - - private void handleCheck(MethodCall call, final Result result) { - result.success(checkNetworkType()); - } - - private String checkNetworkType() { - NetworkInfo info = manager.getActiveNetworkInfo(); - if (info != null && info.isConnected()) { - return getNetworkType(info.getType()); - } else { - return "none"; + + private void handleCheck(MethodCall call, final Result result) { + result.success(checkNetworkType()); } - } - - private WifiInfo getWifiInfo() { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - return wifiManager == null ? null : wifiManager.getConnectionInfo(); - } - - private void handleWifiName(MethodCall call, final Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String ssid = null; - if (wifiInfo != null) ssid = wifiInfo.getSSID(); - if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" - result.success(ssid); - } - - private void handleBSSID(MethodCall call, MethodChannel.Result result) { - WifiInfo wifiInfo = getWifiInfo(); - String bssid = null; - if (wifiInfo != null) bssid = wifiInfo.getBSSID(); - result.success(bssid); - } - - private void handleWifiIPAddress(MethodCall call, final Result result) { - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - WifiInfo wifiInfo = null; - if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); - - String ip = null; - int i_ip = 0; - if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); - - if (i_ip != 0) - ip = - String.format( - "%d.%d.%d.%d", - (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); - - result.success(ip); - } - - private BroadcastReceiver createReceiver(final EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); - if (isLost) { - events.success("none"); - return; + + private String checkNetworkType() { + NetworkInfo info = manager.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + return getNetworkType(info.getType()); + } else { + return "none"; } + } + + private WifiInfo getWifiInfo() { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + return wifiManager == null ? null : wifiManager.getConnectionInfo(); + } + + private void handleWifiName(MethodCall call, final Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String ssid = null; + if (wifiInfo != null) ssid = wifiInfo.getSSID(); + if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" + result.success(ssid); + } + + private void handleBSSID(MethodCall call, MethodChannel.Result result) { + WifiInfo wifiInfo = getWifiInfo(); + String bssid = null; + if (wifiInfo != null) bssid = wifiInfo.getBSSID(); + result.success(bssid); + } + + private void handleWifiIPAddress(MethodCall call, final Result result) { + WifiManager wifiManager = + (WifiManager) + registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + WifiInfo wifiInfo = null; + if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); + + String ip = null; + int i_ip = 0; + if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); - int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); - TelephonyManager mTelephonyManager = - (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - int subType = mTelephonyManager.getNetworkType(); - events.success(checkNetworkType()); - } - }; - } + if (i_ip != 0) + ip = + String.format( + "%d.%d.%d.%d", + (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); + + result.success(ip); + } + + private BroadcastReceiver createReceiver(final EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + boolean isLost = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); + if (isLost) { + events.success("none"); + return; + } + + int type = intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, -1); + TelephonyManager mTelephonyManager = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + int subType = mTelephonyManager.getNetworkType(); + events.success(checkNetworkType()); + } + }; + } } From 8f34cd8beaf1284616b6ab508b1d97928e7cfd1c Mon Sep 17 00:00:00 2001 From: sante85 Date: Mon, 15 Jul 2019 22:45:43 +0200 Subject: [PATCH 17/17] Update ConnectivityPlugin.java --- .../io/flutter/plugins/connectivity/ConnectivityPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index 021e435ddfaa..d0b771078d59 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -152,7 +152,7 @@ public void onMethodCall(MethodCall call, Result result) { case "wifiIPAddress": handleWifiIPAddress(call, result); break; - case "getMobileConnectionType" + case "getMobileConnectionType": handleMobileConnectionType(call, result); break; default: