| 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
|
|
|