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

Unified Diff: talk/app/webrtc/java/jni/androidnetworkmonitor_jni.cc

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/jni/androidnetworkmonitor_jni.cc
diff --git a/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.cc b/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.cc
index f7a8c07c60a3e63926ec1914dabf3aae08cfbe69..64a9dc0ab51b57557f45056e77cfc8f0a7d0e81b 100644
--- a/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.cc
+++ b/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.cc
@@ -32,8 +32,62 @@
#include "talk/app/webrtc/java/jni/jni_helpers.h"
namespace webrtc_jni {
+
jobject AndroidNetworkMonitor::application_context_ = nullptr;
+static rtc::NetworkType GetNetworkTypeFromJava(
+ JNIEnv* jni, jobject j_network_type) {
+ std::string enum_name = GetJavaEnumName(
+ jni, "org/webrtc/NetworkMonitorAutoDetect$ConnectionType",
+ j_network_type);
+ if (enum_name == "CONNECTION_UNKNOWN") {
+ return rtc::NetworkType::NETWORK_UNKNOWN;
+ }
+ if (enum_name == "CONNECTION_ETHERNET") {
+ return rtc::NetworkType::NETWORK_ETHERNET;
+ }
+ if (enum_name == "CONNECTION_WIFI") {
+ return rtc::NetworkType::NETWORK_WIFI;
+ }
+ if (enum_name == "CONNECTION_4G") {
+ return rtc::NetworkType::NETWORK_4G;
+ }
+ if (enum_name == "CONNECTION_3G") {
+ return rtc::NetworkType::NETWORK_3G;
+ }
+ if (enum_name == "CONNECTION_2G") {
+ return rtc::NetworkType::NETWORK_2G;
+ }
+ if (enum_name == "CONNECTION_BLUETOOTH") {
+ return rtc::NetworkType::NETWORK_BLUETOOTH;
+ }
+ if (enum_name == "CONNECTION_NONE") {
+ return rtc::NetworkType::NETWORK_NONE;
+ }
+ return rtc::NetworkType::NETWORK_UNKNOWN;
+}
+
+static rtc::NetworkInformation GetNetworkInformationFromJava(
+ JNIEnv* jni, jobject j_network_info) {
+ rtc::NetworkInformation network_info;
+ jclass j_network_info_class = GetObjectClass(jni, j_network_info);
+ jfieldID j_interface_name_id =
+ GetFieldID(jni, j_network_info_class, "name", "Ljava/lang/String;");
+ jfieldID j_handle_id = GetFieldID(jni, j_network_info_class, "handle", "I");
+ jfieldID j_type_id =
+ GetFieldID(jni, j_network_info_class, "type",
+ "Lorg/webrtc/NetworkMonitorAutoDetect$ConnectionType;");
+
+ network_info.interface_name = JavaToStdString(
+ jni, GetStringField(jni, j_network_info, j_interface_name_id));
+ network_info.handle = static_cast<uint32_t>(GetIntField(jni, j_network_info, j_handle_id));
+ network_info.type =
+ GetNetworkTypeFromJava(jni, GetObjectField(jni, j_network_info, j_type_id));
+ CHECK_EXCEPTION(jni) << "Error during NetworkMonitor.GetNetworkInfoFromJava";
+ return network_info;
+}
+
+
// static
void AndroidNetworkMonitor::SetAndroidContext(JNIEnv* jni, jobject context) {
if (application_context_) {
@@ -75,6 +129,23 @@ void AndroidNetworkMonitor::Stop() {
CHECK_EXCEPTION(jni()) << "Error during NetworkMonitor.stopMonitoring";
}
+bool AndroidNetworkMonitor::GetAllNetworkInfos(
+ std::vector<rtc::NetworkInformation>* network_infos) {
+ RTC_CHECK(thread_checker_.CalledOnValidThread());
+ network_infos->clear();
+ jmethodID m = GetMethodID(jni(), *j_network_monitor_class_,
+ "getAllNetworkInfos",
+ "()[Lorg/webrtc/NetworkMonitorAutoDetect$NetworkInformation;");
+ jobjectArray j_network_infos = static_cast<jobjectArray>(
+ jni()->CallObjectMethod(*j_network_monitor_, m));
+ size_t num_infos = jni()->GetArrayLength(j_network_infos);
+ for (size_t i = 0; i < num_infos; ++i) {
+ jobject j_network_info = jni()->GetObjectArrayElement(j_network_infos, i);
+ network_infos->push_back(GetNetworkInformationFromJava(jni(), j_network_info));
+ }
+ return true;
+}
+
JOW(void, NetworkMonitor_nativeNotifyConnectionTypeChanged)(
JNIEnv* jni, jobject j_monitor, jlong j_native_monitor) {
rtc::NetworkMonitorInterface* network_monitor =
@@ -82,4 +153,12 @@ JOW(void, NetworkMonitor_nativeNotifyConnectionTypeChanged)(
network_monitor->OnNetworksChanged();
}
+JOW(void, NetworkMonitor_nativeUpdateNetworkInformation)(
+ JNIEnv* jni, jobject j_monitor, jlong j_native_monitor, jobject j_network_info) {
+ rtc::NetworkMonitorInterface* network_monitor =
+ reinterpret_cast<rtc::NetworkMonitorInterface*>(j_native_monitor);
+ rtc::NetworkInformation network_info = GetNetworkInformationFromJava(jni, j_network_info);
+ network_monitor->OnNetworkAvailable(network_info);
+}
+
} // namespace webrtc_jni
« no previous file with comments | « talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h ('k') | talk/app/webrtc/java/jni/classreferenceholder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698