Android: Use scoped java refs
We currently use raw jobject in our code mixed with sporadic
ScopedLocalRefFrame. This CL moves every jobject into a scoped object,
either local, global, or a parameter. Also, this CL uses the JNI
generation script to generate declaration stubs for the Java->C++
functions so that it no longer becomes possible to mistype them
without getting compilation errors.
TBR=brandt@webrtc.org
Bug: webrtc:8278,webrtc:6969
Change-Id: Ic7bac74a89c11180177d65041086d7db1cdfb516
Reviewed-on: https://webrtc-review.googlesource.com/34655
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21387}
diff --git a/sdk/android/api/org/webrtc/DataChannel.java b/sdk/android/api/org/webrtc/DataChannel.java
index 883025e..21873df 100644
--- a/sdk/android/api/org/webrtc/DataChannel.java
+++ b/sdk/android/api/org/webrtc/DataChannel.java
@@ -13,6 +13,7 @@
import java.nio.ByteBuffer;
/** Java wrapper for a C++ DataChannelInterface. */
+@JNINamespace("webrtc::jni")
public class DataChannel {
/** Java wrapper for WebIDL RTCDataChannel. */
public static class Init {
@@ -113,33 +114,41 @@
/** Register |observer|, replacing any previously-registered observer. */
public void registerObserver(Observer observer) {
if (nativeObserver != 0) {
- unregisterObserverNative(nativeObserver);
+ nativeUnregisterObserver(nativeObserver);
}
- nativeObserver = registerObserverNative(observer);
+ nativeObserver = nativeRegisterObserver(observer);
}
- private native long registerObserverNative(Observer observer);
/** Unregister the (only) observer. */
public void unregisterObserver() {
- unregisterObserverNative(nativeObserver);
+ nativeUnregisterObserver(nativeObserver);
}
- private native void unregisterObserverNative(long nativeObserver);
- public native String label();
+ public String label() {
+ return nativeLabel();
+ }
- public native int id();
+ public int id() {
+ return nativeId();
+ }
- public native State state();
+ public State state() {
+ return nativeState();
+ }
/**
* Return the number of bytes of application data (UTF-8 text and binary data)
* that have been queued using SendBuffer but have not yet been transmitted
* to the network.
*/
- public native long bufferedAmount();
+ public long bufferedAmount() {
+ return nativeBufferedAmount();
+ }
/** Close the channel. */
- public native void close();
+ public void close() {
+ nativeClose();
+ }
/** Send |data| to the remote peer; return success. */
public boolean send(Buffer buffer) {
@@ -147,9 +156,8 @@
// ByteBuffer is direct and/or is backed by an array.
byte[] data = new byte[buffer.data.remaining()];
buffer.data.get(data);
- return sendNative(data, buffer.binary);
+ return nativeSend(data, buffer.binary);
}
- private native boolean sendNative(byte[] data, boolean binary);
/** Dispose of native resources attached to this channel. */
public void dispose() {
@@ -160,4 +168,13 @@
long getNativeDataChannel() {
return nativeDataChannel;
}
+
+ private native long nativeRegisterObserver(Observer observer);
+ private native void nativeUnregisterObserver(long observer);
+ private native String nativeLabel();
+ private native int nativeId();
+ private native State nativeState();
+ private native long nativeBufferedAmount();
+ private native void nativeClose();
+ private native boolean nativeSend(byte[] data, boolean binary);
};