Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1606)

Unified Diff: talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java

Issue 1535943004: Multi-networking with Android L. Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java
diff --git a/talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java b/talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java
index 950dcdfa445a25ce6ecae9c7055045692703546d..d812c4287af4fd2cf73adb8b368cf1888e7cc885 100644
--- a/talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java
+++ b/talk/app/webrtc/java/android/org/webrtc/NetworkMonitorAutoDetect.java
@@ -37,14 +37,17 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
+import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
+import android.net.NetworkRequest;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.Log;
+import android.net.ConnectivityManager.NetworkCallback;
/**
* Borrowed from Chromium's
@@ -66,6 +69,18 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
CONNECTION_NONE
}
+ /** Java version of NetworkMonitor.NetworkInformation */
+ public static class NetworkInformation{
+ public String name;
+ public ConnectionType type;
+ public int handle;
+ public NetworkInformation(String name, ConnectionType type, int handle) {
+ this.name = name;
+ this.type = type;
+ this.handle = handle;
+ }
+ };
+
static class NetworkState {
private final boolean connected;
// Defined from ConnectivityManager.TYPE_XXX for non-mobile; for mobile, it is
@@ -101,6 +116,7 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
* gracefully below.
*/
private final ConnectivityManager connectivityManager;
+ private NetworkCallback networkCallback;
ConnectivityManagerDelegate(Context context) {
connectivityManager =
@@ -198,6 +214,25 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
return defaultNetId;
}
+ @SuppressLint("NewApi")
+ NetworkInformation[] getAllNetworkInfos() {
+ if (connectivityManager == null) {
+ return new NetworkInformation[0];
+ }
+ Network[] networks = getAllNetworks();
+ NetworkInformation[] netInfos = new NetworkInformation[networks.length];
+ for (int i = 0; i < networks.length; ++i) {
+ Network network = networks[i];
+ LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
+ NetworkInformation networkInformation = new NetworkInformation(
+ linkProperties.getInterfaceName(),
+ getConnectionType(getNetworkState(network)),
+ networkToNetId(network));
+ netInfos[i] = networkInformation;
+ }
+ return netInfos;
+ }
+
/**
* Returns true if {@code network} can provide Internet access. Can be used to
* ignore specialized networks (e.g. IMS, FOTA).
@@ -211,8 +246,59 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
connectivityManager.getNetworkCapabilities(network);
return capabilities != null && capabilities.hasCapability(NET_CAPABILITY_INTERNET);
}
+
+ @SuppressLint("NewApi")
+ public void requestMobileNetwork(final Observer observer) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ return;
+ }
+ networkCallback = new NetworkCallback() {
+ @Override
+ public void onAvailable(Network network) {
+ // Just keep it on.
+ LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
+ Log.d(TAG, "XXX Network become available: interface name: " +
+ linkProperties.getInterfaceName() + " link addresses: " +
+ linkProperties.getLinkAddresses().toString());
+ super.onAvailable(network);
+ int handle = networkToNetId(network);
+ Log.d(TAG, "XXX network handle = " + handle);
+ NetworkInformation networkInformation = new NetworkInformation(
+ linkProperties.getInterfaceName(),
+ getConnectionType(getNetworkState(network)),
+ networkToNetId(network));
+ observer.onNetworkAvailable(networkInformation);
+ }
+
+ @Override
+ public void onCapabilitiesChanged(Network network, NetworkCapabilities capabilities) {
+ Log.d(TAG, "XXX capabilities changed");
+ super.onCapabilitiesChanged(network, capabilities);
+ }
+ @Override
+ public void onLinkPropertiesChanged(Network network, LinkProperties properties) {
+ Log.d(TAG, "XXX properties changed");
+ super.onLinkPropertiesChanged(network, properties);
+ }
+ };
+ Log.d(TAG, "request network");
+ NetworkRequest.Builder builder = new NetworkRequest.Builder();
+ builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+ builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
+ NetworkRequest request = builder.build();
+ connectivityManager.requestNetwork(request, networkCallback);
+ }
+
+ public void releaseCallback() {
+ if (networkCallback != null) {
+ connectivityManager.unregisterNetworkCallback(networkCallback);
+ networkCallback = null;
+ }
+ }
+
}
+
/** Queries the WifiManager for SSID of the current Wifi connection. */
static class WifiManagerDelegate {
private final Context context;
@@ -280,6 +366,7 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
* Called when default network changes.
*/
public void onConnectionTypeChanged(ConnectionType newConnectionType);
+ public void onNetworkAvailable(NetworkInformation networkInfo);
}
/**
@@ -292,8 +379,8 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
wifiManagerDelegate = new WifiManagerDelegate(context);
final NetworkState networkState = connectivityManagerDelegate.getNetworkState();
- connectionType = getCurrentConnectionType(networkState);
- wifiSSID = getCurrentWifiSSID(networkState);
+ connectionType = getConnectionType(networkState);
+ wifiSSID = getWifiSSID(networkState);
intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver();
}
@@ -331,6 +418,7 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
if (!isRegistered) {
isRegistered = true;
context.registerReceiver(this, intentFilter);
+ connectivityManagerDelegate.requestMobileNetwork(observer);
}
}
@@ -341,6 +429,7 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
if (isRegistered) {
isRegistered = false;
context.unregisterReceiver(this);
+ connectivityManagerDelegate.releaseCallback();
}
}
@@ -361,7 +450,14 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
return connectivityManagerDelegate.getDefaultNetId();
}
- public ConnectionType getCurrentConnectionType(NetworkState networkState) {
+ public NetworkInformation[] getAllNetworkInfos() {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ return new NetworkInformation[0];
+ }
+ return connectivityManagerDelegate.getAllNetworkInfos();
+ }
+
+ public static ConnectionType getConnectionType(NetworkState networkState) {
if (!networkState.isConnected()) {
return ConnectionType.CONNECTION_NONE;
}
@@ -404,8 +500,8 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
}
}
- private String getCurrentWifiSSID(NetworkState networkState) {
- if (getCurrentConnectionType(networkState) != ConnectionType.CONNECTION_WIFI) return "";
+ private String getWifiSSID(NetworkState networkState) {
+ if (getConnectionType(networkState) != ConnectionType.CONNECTION_WIFI) return "";
return wifiManagerDelegate.getWifiSSID();
}
@@ -419,8 +515,8 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
}
private void connectionTypeChanged(NetworkState networkState) {
- ConnectionType newConnectionType = getCurrentConnectionType(networkState);
- String newWifiSSID = getCurrentWifiSSID(networkState);
+ ConnectionType newConnectionType = getConnectionType(networkState);
+ String newWifiSSID = getWifiSSID(networkState);
if (newConnectionType == connectionType && newWifiSSID.equals(wifiSSID)) return;
connectionType = newConnectionType;
@@ -439,4 +535,5 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver {
// TODO(honghaiz): When we update to Android M SDK, use Network.getNetworkHandle().
return Integer.parseInt(network.toString());
}
+
}
« no previous file with comments | « talk/app/webrtc/java/android/org/webrtc/NetworkMonitor.java ('k') | talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698