From 3afb899655782bb2c2ac2574abaaed0e7001afc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20Kalliom=C3=A4ki?= Date: Thu, 1 Jun 2017 12:25:36 +0200 Subject: [PATCH] Remove passing Android context to NetworkMonitor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead NetworkMonitor calls ContextUtils.getApplicationContext when needed. Bug: webrtc:7730 Change-Id: I312781da4222f7107ea1bf57099f17709fec2385 Reviewed-on: https://chromium-review.googlesource.com/517792 Commit-Queue: Sami Kalliomäki Reviewed-by: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#18382} --- .../api/org/webrtc/NetworkMonitor.java | 35 ++++++------------- .../src/org/webrtc/NetworkMonitorTest.java | 3 +- .../src/jni/androidnetworkmonitor_jni.cc | 20 +++-------- .../src/jni/androidnetworkmonitor_jni.h | 3 +- .../sdk/android/src/jni/peerconnection_jni.cc | 1 - 5 files changed, 19 insertions(+), 43 deletions(-) diff --git a/webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java b/webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java index 8b04676d1d..0b627dbf70 100644 --- a/webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java +++ b/webrtc/sdk/android/api/org/webrtc/NetworkMonitor.java @@ -39,9 +39,7 @@ public class NetworkMonitor { private static final String TAG = "NetworkMonitor"; // We are storing application context so it is okay. - @SuppressLint("StaticFieldLeak") private static NetworkMonitor instance; - - private final Context applicationContext; + private static NetworkMonitor instance; // Native observers of the connection type changes. private final ArrayList nativeNetworkObservers; @@ -53,33 +51,22 @@ public class NetworkMonitor { private ConnectionType currentConnectionType = ConnectionType.CONNECTION_UNKNOWN; - private NetworkMonitor(Context context) { - assertIsTrue(context != null); - applicationContext = context.getApplicationContext(); - + private NetworkMonitor() { nativeNetworkObservers = new ArrayList(); networkObservers = new ArrayList(); } - /** - * Initializes the singleton once. - * Called from the native code. - */ - public static NetworkMonitor init(Context context) { - if (!isInitialized()) { - instance = new NetworkMonitor(context); - } - return instance; - } - - public static boolean isInitialized() { - return instance != null; - } + // TODO(sakal): Remove once downstream dependencies have been updated. + @Deprecated + public static void init(Context context) {} /** * Returns the singleton instance. */ public static NetworkMonitor getInstance() { + if (instance == null) { + instance = new NetworkMonitor(); + } return instance; } @@ -163,7 +150,7 @@ public class NetworkMonitor { public void onNetworkDisconnect(long networkHandle) { notifyObserversOfNetworkDisconnect(networkHandle); } - }, applicationContext); + }, ContextUtils.getApplicationContext()); final NetworkMonitorAutoDetect.NetworkState networkState = autoDetector.getCurrentNetworkState(); updateCurrentConnectionType(NetworkMonitorAutoDetect.getConnectionType(networkState)); @@ -250,8 +237,8 @@ public class NetworkMonitor { long nativePtr, NetworkInformation[] networkInfos); // For testing only. - static void resetInstanceForTests(Context context) { - instance = new NetworkMonitor(context); + static void resetInstanceForTests() { + instance = new NetworkMonitor(); } // For testing only. diff --git a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/NetworkMonitorTest.java b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/NetworkMonitorTest.java index b70bb16b68..f8cdd08685 100644 --- a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/NetworkMonitorTest.java +++ b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/NetworkMonitorTest.java @@ -161,7 +161,7 @@ public class NetworkMonitorTest { */ private void createTestMonitor() { Context context = InstrumentationRegistry.getTargetContext(); - NetworkMonitor.resetInstanceForTests(context); + NetworkMonitor.resetInstanceForTests(); NetworkMonitor.setAutoDetectConnectivityState(true); receiver = NetworkMonitor.getAutoDetectorForTest(); assertNotNull(receiver); @@ -182,6 +182,7 @@ public class NetworkMonitorTest { @Before public void setUp() { + ContextUtils.initialize(InstrumentationRegistry.getTargetContext()); createTestMonitor(); } diff --git a/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc index 83caac2467..e2576ccba2 100644 --- a/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc +++ b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.cc @@ -27,7 +27,6 @@ enum AndroidSdkVersion { SDK_VERSION_MARSHMALLOW = 23 }; -jobject AndroidNetworkMonitor::application_context_ = nullptr; int AndroidNetworkMonitor::android_sdk_int_ = 0; static NetworkType GetNetworkTypeFromJava(JNIEnv* jni, jobject j_network_type) { @@ -163,14 +162,6 @@ std::string NetworkInformation::ToString() const { return ss.str(); } -// static -void AndroidNetworkMonitor::SetAndroidContext(JNIEnv* jni, jobject context) { - if (application_context_) { - jni->DeleteGlobalRef(application_context_); - } - application_context_ = NewGlobalRef(jni, context); -} - AndroidNetworkMonitor::AndroidNetworkMonitor() : j_network_monitor_class_(jni(), FindClass(jni(), "org/webrtc/NetworkMonitor")), @@ -178,13 +169,10 @@ AndroidNetworkMonitor::AndroidNetworkMonitor() jni(), jni()->CallStaticObjectMethod( *j_network_monitor_class_, - GetStaticMethodID( - jni(), - *j_network_monitor_class_, - "init", - "(Landroid/content/Context;)Lorg/webrtc/NetworkMonitor;"), - application_context_)) { - RTC_DCHECK(application_context_ != nullptr); + GetStaticMethodID(jni(), + *j_network_monitor_class_, + "getInstance", + "()Lorg/webrtc/NetworkMonitor;"))) { CHECK_EXCEPTION(jni()) << "Error during NetworkMonitor.init"; if (android_sdk_int_ <= 0) { jmethodID m = GetStaticMethodID(jni(), *j_network_monitor_class_, diff --git a/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h index 90e46c3885..0676e0ace3 100644 --- a/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h +++ b/webrtc/sdk/android/src/jni/androidnetworkmonitor_jni.h @@ -53,7 +53,8 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorBase, public: AndroidNetworkMonitor(); - static void SetAndroidContext(JNIEnv* jni, jobject context); + // TODO(sakal): Remove once down stream dependencies have been updated. + static void SetAndroidContext(JNIEnv* jni, jobject context) {} void Start() override; void Stop() override; diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index 8c20337179..55230bd63a 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -1145,7 +1145,6 @@ JOW(void, PeerConnectionFactory_nativeInitializeAndroidGlobals) jobject context, jboolean video_hw_acceleration) { video_hw_acceleration_enabled = video_hw_acceleration; - AndroidNetworkMonitor::SetAndroidContext(jni, context); if (!factory_static_initialized) { RTC_DCHECK(j_application_context == nullptr); j_application_context = NewGlobalRef(jni, context);