From 1bb63bb79351d061c454d69a49e92e907cc94105 Mon Sep 17 00:00:00 2001 From: Qingsi Wang Date: Wed, 3 Oct 2018 12:21:35 -0700 Subject: [PATCH] Add API level check for the use of ConnectivityManager.getActiveNetwork. This method is added in API level 23, and is currently used in NetworkMonitorAutoDetect to determine the underlying type of a VPN network. Bug: webrtc:9811 Change-Id: I7277cd9adb5b3d3d9b116f667bf533352f9b3bdf Reviewed-on: https://webrtc-review.googlesource.com/c/103560 Reviewed-by: Alex Glaznev Commit-Queue: Qingsi Wang Cr-Commit-Position: refs/heads/master@{#24961} --- .../org/webrtc/NetworkMonitorAutoDetect.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java b/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java index 491e6fa057..3d74f5fd7c 100644 --- a/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java +++ b/sdk/android/api/org/webrtc/NetworkMonitorAutoDetect.java @@ -289,17 +289,21 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver { // // Note that getActiveNetwork and getActiveNetworkInfo return null if no default network is // currently active. - if (networkInfo.getType() == ConnectivityManager.TYPE_VPN - && network.equals(connectivityManager.getActiveNetwork())) { - // If a VPN network is in place, we can find the underlying network type via querying the - // active network info thanks to - // https://android.googlesource.com/platform/frameworks/base/+/d6a7980d - NetworkInfo underlyingActiveNetworkInfo = connectivityManager.getActiveNetworkInfo(); - // We use the NetworkInfo of the underlying network if it is not of TYPE_VPN itself. - if (underlyingActiveNetworkInfo.getType() != ConnectivityManager.TYPE_VPN) { - return new NetworkState(networkInfo.isConnected(), ConnectivityManager.TYPE_VPN, -1, - underlyingActiveNetworkInfo.getType(), underlyingActiveNetworkInfo.getSubtype()); + if (networkInfo.getType() == ConnectivityManager.TYPE_VPN) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && network.equals(connectivityManager.getActiveNetwork())) { + // If a VPN network is in place, we can find the underlying network type via querying the + // active network info thanks to + // https://android.googlesource.com/platform/frameworks/base/+/d6a7980d + NetworkInfo underlyingActiveNetworkInfo = connectivityManager.getActiveNetworkInfo(); + // We use the NetworkInfo of the underlying network if it is not of TYPE_VPN itself. + if (underlyingActiveNetworkInfo.getType() != ConnectivityManager.TYPE_VPN) { + return new NetworkState(networkInfo.isConnected(), ConnectivityManager.TYPE_VPN, -1, + underlyingActiveNetworkInfo.getType(), underlyingActiveNetworkInfo.getSubtype()); + } } + return new NetworkState( + networkInfo.isConnected(), ConnectivityManager.TYPE_VPN, -1, -1, -1); } return getNetworkState(networkInfo);