This helps recognize more network types
and even if the "unknown" network type is not helpful for identifying the network type, it helps bind sockets to the network.
BUG=
R=glaznev@webrtc.org
Review URL: https://codereview.webrtc.org/2112963002 .
Cr-Original-Commit-Position: refs/heads/master@{#13351}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: e59122889fc6e480238613558c67de13747ae487
diff --git a/api/java/android/org/webrtc/NetworkMonitor.java b/api/java/android/org/webrtc/NetworkMonitor.java
index 3fcb1c5..cbe68d0 100644
--- a/api/java/android/org/webrtc/NetworkMonitor.java
+++ b/api/java/android/org/webrtc/NetworkMonitor.java
@@ -231,8 +231,7 @@
*/
public static boolean isOnline() {
ConnectionType connectionType = getInstance().getCurrentConnectionType();
- return connectionType != ConnectionType.CONNECTION_UNKNOWN
- && connectionType != ConnectionType.CONNECTION_NONE;
+ return connectionType != ConnectionType.CONNECTION_NONE;
}
private native void nativeNotifyConnectionTypeChanged(long nativePtr);
diff --git a/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java b/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java
index c4e3a90..4335e5c 100644
--- a/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java
+++ b/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java
@@ -55,6 +55,7 @@
CONNECTION_4G,
CONNECTION_3G,
CONNECTION_2G,
+ CONNECTION_UNKNOWN_CELLULAR,
CONNECTION_BLUETOOTH,
CONNECTION_NONE
}
@@ -292,17 +293,24 @@
return null;
}
- ConnectionType connectionType = getConnectionType(getNetworkState(network));
- if (connectionType == ConnectionType.CONNECTION_UNKNOWN
- || connectionType == ConnectionType.CONNECTION_NONE) {
+ NetworkState networkState = getNetworkState(network);
+ ConnectionType connectionType = getConnectionType(networkState);
+ if (connectionType == ConnectionType.CONNECTION_NONE) {
// This may not be an error. The OS may signal a network event with connection type
- // NONE when the network disconnects. But in some devices, the OS may incorrectly
- // report an UNKNOWN connection type. In either case, it won't benefit to send down
- // a network event with this connection type.
- Logging.d(TAG, "Network " + network.toString() + " has connection type " + connectionType);
+ // NONE when the network disconnects.
+ Logging.d(TAG, "Network " + network.toString() + " is disconnected");
return null;
}
+ // Some android device may return a CONNECTION_UNKNOWN_CELLULAR or CONNECTION_UNKNOWN type,
+ // which appears to be usable. Just log them here.
+ if (connectionType == ConnectionType.CONNECTION_UNKNOWN
+ || connectionType == ConnectionType.CONNECTION_UNKNOWN_CELLULAR) {
+ Logging.d(TAG, "Network " + network.toString() + " connection type is " + connectionType
+ + " because it has type " + networkState.getNetworkType()
+ + " and subtype " + networkState.getNetworkSubType());
+ }
+
NetworkInformation networkInformation = new NetworkInformation(
linkProperties.getInterfaceName(),
connectionType,
@@ -569,7 +577,7 @@
case TelephonyManager.NETWORK_TYPE_LTE:
return ConnectionType.CONNECTION_4G;
default:
- return ConnectionType.CONNECTION_UNKNOWN;
+ return ConnectionType.CONNECTION_UNKNOWN_CELLULAR;
}
default:
return ConnectionType.CONNECTION_UNKNOWN;
diff --git a/api/java/jni/androidnetworkmonitor_jni.cc b/api/java/jni/androidnetworkmonitor_jni.cc
index a815e27..c109298 100644
--- a/api/java/jni/androidnetworkmonitor_jni.cc
+++ b/api/java/jni/androidnetworkmonitor_jni.cc
@@ -44,6 +44,9 @@
if (enum_name == "CONNECTION_2G") {
return NetworkType::NETWORK_2G;
}
+ if (enum_name == "CONNECTION_UNKNOWN_CELLULAR") {
+ return NetworkType::NETWORK_UNKNOWN_CELLULAR;
+ }
if (enum_name == "CONNECTION_BLUETOOTH") {
return NetworkType::NETWORK_BLUETOOTH;
}
@@ -57,7 +60,6 @@
static rtc::AdapterType AdapterTypeFromNetworkType(NetworkType network_type) {
switch (network_type) {
case NETWORK_UNKNOWN:
- RTC_DCHECK(false) << "Unknown network type";
return rtc::ADAPTER_TYPE_UNKNOWN;
case NETWORK_ETHERNET:
return rtc::ADAPTER_TYPE_ETHERNET;
@@ -66,6 +68,7 @@
case NETWORK_4G:
case NETWORK_3G:
case NETWORK_2G:
+ case NETWORK_UNKNOWN_CELLULAR:
return rtc::ADAPTER_TYPE_CELLULAR;
case NETWORK_BLUETOOTH:
// There is no corresponding mapping for bluetooth networks.
diff --git a/api/java/jni/androidnetworkmonitor_jni.h b/api/java/jni/androidnetworkmonitor_jni.h
index 2537ce8..ff12abc 100644
--- a/api/java/jni/androidnetworkmonitor_jni.h
+++ b/api/java/jni/androidnetworkmonitor_jni.h
@@ -31,6 +31,7 @@
NETWORK_4G,
NETWORK_3G,
NETWORK_2G,
+ NETWORK_UNKNOWN_CELLULAR,
NETWORK_BLUETOOTH,
NETWORK_NONE
};