Android: Generate JNI code for RtpReceiver and PeerConnection.Observer

Bug: webrtc:8278
Change-Id: Ief62c37dd6820c2eb1ce94e37e0a61dd8726caae
Reviewed-on: https://webrtc-review.googlesource.com/28621
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21035}
diff --git a/sdk/android/api/org/webrtc/PeerConnection.java b/sdk/android/api/org/webrtc/PeerConnection.java
index 9bc4ebf..24425f0 100644
--- a/sdk/android/api/org/webrtc/PeerConnection.java
+++ b/sdk/android/api/org/webrtc/PeerConnection.java
@@ -22,7 +22,16 @@
  */
 public class PeerConnection {
   /** Tracks PeerConnectionInterface::IceGatheringState */
-  public enum IceGatheringState { NEW, GATHERING, COMPLETE }
+  public enum IceGatheringState {
+    NEW,
+    GATHERING,
+    COMPLETE;
+
+    @CalledByNative("IceGatheringState")
+    static IceGatheringState fromNativeIndex(int nativeIndex) {
+      return values()[nativeIndex];
+    }
+  }
 
   /** Tracks PeerConnectionInterface::IceConnectionState */
   public enum IceConnectionState {
@@ -32,7 +41,12 @@
     COMPLETED,
     FAILED,
     DISCONNECTED,
-    CLOSED
+    CLOSED;
+
+    @CalledByNative("IceConnectionState")
+    static IceConnectionState fromNativeIndex(int nativeIndex) {
+      return values()[nativeIndex];
+    }
   }
 
   /** Tracks PeerConnectionInterface::TlsCertPolicy */
@@ -48,46 +62,51 @@
     HAVE_LOCAL_PRANSWER,
     HAVE_REMOTE_OFFER,
     HAVE_REMOTE_PRANSWER,
-    CLOSED
+    CLOSED;
+
+    @CalledByNative("SignalingState")
+    static SignalingState fromNativeIndex(int nativeIndex) {
+      return values()[nativeIndex];
+    }
   }
 
   /** Java version of PeerConnectionObserver. */
   public static interface Observer {
     /** Triggered when the SignalingState changes. */
-    public void onSignalingChange(SignalingState newState);
+    @CalledByNative("Observer") void onSignalingChange(SignalingState newState);
 
     /** Triggered when the IceConnectionState changes. */
-    public void onIceConnectionChange(IceConnectionState newState);
+    @CalledByNative("Observer") void onIceConnectionChange(IceConnectionState newState);
 
     /** Triggered when the ICE connection receiving status changes. */
-    public void onIceConnectionReceivingChange(boolean receiving);
+    @CalledByNative("Observer") void onIceConnectionReceivingChange(boolean receiving);
 
     /** Triggered when the IceGatheringState changes. */
-    public void onIceGatheringChange(IceGatheringState newState);
+    @CalledByNative("Observer") void onIceGatheringChange(IceGatheringState newState);
 
     /** Triggered when a new ICE candidate has been found. */
-    public void onIceCandidate(IceCandidate candidate);
+    @CalledByNative("Observer") void onIceCandidate(IceCandidate candidate);
 
     /** Triggered when some ICE candidates have been removed. */
-    public void onIceCandidatesRemoved(IceCandidate[] candidates);
+    @CalledByNative("Observer") void onIceCandidatesRemoved(IceCandidate[] candidates);
 
     /** Triggered when media is received on a new stream from remote peer. */
-    public void onAddStream(MediaStream stream);
+    @CalledByNative("Observer") void onAddStream(MediaStream stream);
 
     /** Triggered when a remote peer close a stream. */
-    public void onRemoveStream(MediaStream stream);
+    @CalledByNative("Observer") void onRemoveStream(MediaStream stream);
 
     /** Triggered when a remote peer opens a DataChannel. */
-    public void onDataChannel(DataChannel dataChannel);
+    @CalledByNative("Observer") void onDataChannel(DataChannel dataChannel);
 
     /** Triggered when renegotiation is necessary. */
-    public void onRenegotiationNeeded();
+    @CalledByNative("Observer") void onRenegotiationNeeded();
 
     /**
      * Triggered when a new track is signaled by the remote peer, as a result of
      * setRemoteDescription.
      */
-    public void onAddTrack(RtpReceiver receiver, MediaStream[] mediaStreams);
+    @CalledByNative("Observer") void onAddTrack(RtpReceiver receiver, MediaStream[] mediaStreams);
   }
 
   /** Java version of PeerConnectionInterface.IceServer. */
@@ -369,19 +388,19 @@
   public native void setAudioRecording(boolean recording);
 
   public boolean setConfiguration(RTCConfiguration config) {
-    return nativeSetConfiguration(config, nativeObserver);
+    return setNativeConfiguration(config, nativeObserver);
   }
 
   public boolean addIceCandidate(IceCandidate candidate) {
-    return nativeAddIceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
+    return addNativeIceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
   }
 
   public boolean removeIceCandidates(final IceCandidate[] candidates) {
-    return nativeRemoveIceCandidates(candidates);
+    return removeNativeIceCandidates(candidates);
   }
 
   public boolean addStream(MediaStream stream) {
-    boolean ret = nativeAddLocalStream(stream.nativeStream);
+    boolean ret = addNativeLocalStream(stream.nativeStream);
     if (!ret) {
       return false;
     }
@@ -390,7 +409,7 @@
   }
 
   public void removeStream(MediaStream stream) {
-    nativeRemoveLocalStream(stream.nativeStream);
+    removeNativeLocalStream(stream.nativeStream);
     localStreams.remove(stream);
   }
 
@@ -432,7 +451,7 @@
    * @return          A new RtpSender object if successful, or null otherwise.
    */
   public RtpSender createSender(String kind, String stream_id) {
-    RtpSender new_sender = nativeCreateSender(kind, stream_id);
+    RtpSender new_sender = createNativeSender(kind, stream_id);
     if (new_sender != null) {
       senders.add(new_sender);
     }
@@ -445,7 +464,7 @@
     for (RtpSender sender : senders) {
       sender.dispose();
     }
-    senders = nativeGetSenders();
+    senders = getNativeSenders();
     return Collections.unmodifiableList(senders);
   }
 
@@ -453,20 +472,20 @@
     for (RtpReceiver receiver : receivers) {
       receiver.dispose();
     }
-    receivers = nativeGetReceivers();
+    receivers = getNativeReceivers();
     return Collections.unmodifiableList(receivers);
   }
 
   // Older, non-standard implementation of getStats.
   @Deprecated
   public boolean getStats(StatsObserver observer, MediaStreamTrack track) {
-    return nativeOldGetStats(observer, (track == null) ? 0 : track.nativeTrack);
+    return oldGetNativeStats(observer, (track == null) ? 0 : track.nativeTrack);
   }
 
   // Gets stats using the new stats collection API, see webrtc/api/stats/. These
   // will replace old stats collection API when the new API has matured enough.
   public void getStats(RTCStatsCollectorCallback callback) {
-    nativeNewGetStats(callback);
+    newGetNativeStats(callback);
   }
 
   // Limits the bandwidth allocated for all RTP streams sent by this
@@ -479,13 +498,13 @@
   // continue until the stopRtcEventLog function is called. The max_size_bytes
   // argument is ignored, it is added for future use.
   public boolean startRtcEventLog(int file_descriptor, int max_size_bytes) {
-    return nativeStartRtcEventLog(file_descriptor, max_size_bytes);
+    return startNativeRtcEventLog(file_descriptor, max_size_bytes);
   }
 
   // Stops recording an RTC event log. If no RTC event log is currently being
   // recorded, this call will have no effect.
   public void stopRtcEventLog() {
-    nativeStopRtcEventLog();
+    stopNativeRtcEventLog();
   }
 
   // TODO(fischman): add support for DTMF-related methods once that API
@@ -517,7 +536,7 @@
   public void dispose() {
     close();
     for (MediaStream stream : localStreams) {
-      nativeRemoveLocalStream(stream.nativeStream);
+      removeNativeLocalStream(stream.nativeStream);
       stream.dispose();
     }
     localStreams.clear();
@@ -535,28 +554,28 @@
 
   private static native void freeObserver(long nativeObserver);
 
-  public native boolean nativeSetConfiguration(RTCConfiguration config, long nativeObserver);
+  private native boolean setNativeConfiguration(RTCConfiguration config, long nativeObserver);
 
-  private native boolean nativeAddIceCandidate(
+  private native boolean addNativeIceCandidate(
       String sdpMid, int sdpMLineIndex, String iceCandidateSdp);
 
-  private native boolean nativeRemoveIceCandidates(final IceCandidate[] candidates);
+  private native boolean removeNativeIceCandidates(final IceCandidate[] candidates);
 
-  private native boolean nativeAddLocalStream(long nativeStream);
+  private native boolean addNativeLocalStream(long nativeStream);
 
-  private native void nativeRemoveLocalStream(long nativeStream);
+  private native void removeNativeLocalStream(long nativeStream);
 
-  private native boolean nativeOldGetStats(StatsObserver observer, long nativeTrack);
+  private native boolean oldGetNativeStats(StatsObserver observer, long nativeTrack);
 
-  private native void nativeNewGetStats(RTCStatsCollectorCallback callback);
+  private native void newGetNativeStats(RTCStatsCollectorCallback callback);
 
-  private native RtpSender nativeCreateSender(String kind, String stream_id);
+  private native RtpSender createNativeSender(String kind, String stream_id);
 
-  private native List<RtpSender> nativeGetSenders();
+  private native List<RtpSender> getNativeSenders();
 
-  private native List<RtpReceiver> nativeGetReceivers();
+  private native List<RtpReceiver> getNativeReceivers();
 
-  private native boolean nativeStartRtcEventLog(int file_descriptor, int max_size_bytes);
+  private native boolean startNativeRtcEventLog(int file_descriptor, int max_size_bytes);
 
-  private native void nativeStopRtcEventLog();
+  private native void stopNativeRtcEventLog();
 }
diff --git a/sdk/android/api/org/webrtc/RtpReceiver.java b/sdk/android/api/org/webrtc/RtpReceiver.java
index 69dfd92..ac29695 100644
--- a/sdk/android/api/org/webrtc/RtpReceiver.java
+++ b/sdk/android/api/org/webrtc/RtpReceiver.java
@@ -10,11 +10,14 @@
 
 package org.webrtc;
 
+import org.webrtc.MediaStreamTrack;
+
 /** Java wrapper for a C++ RtpReceiverInterface. */
 public class RtpReceiver {
   /** Java wrapper for a C++ RtpReceiverObserverInterface*/
   public static interface Observer {
     // Called when the first audio or video packet is received.
+    @CalledByNative("Observer")
     public void onFirstPacketReceived(MediaStreamTrack.MediaType media_type);
   }
 
@@ -23,9 +26,10 @@
 
   private MediaStreamTrack cachedTrack;
 
+  @CalledByNative
   public RtpReceiver(long nativeRtpReceiver) {
     this.nativeRtpReceiver = nativeRtpReceiver;
-    long track = nativeGetTrack(nativeRtpReceiver);
+    long track = getNativeTrack(nativeRtpReceiver);
     // We can assume that an RtpReceiver always has an associated track.
     cachedTrack = new MediaStreamTrack(track);
   }
@@ -35,21 +39,22 @@
   }
 
   public boolean setParameters(RtpParameters parameters) {
-    return nativeSetParameters(nativeRtpReceiver, parameters);
+    return parameters == null ? false : setNativeParameters(nativeRtpReceiver, parameters);
   }
 
   public RtpParameters getParameters() {
-    return nativeGetParameters(nativeRtpReceiver);
+    return getNativeParameters(nativeRtpReceiver);
   }
 
   public String id() {
-    return nativeId(nativeRtpReceiver);
+    return getNativeId(nativeRtpReceiver);
   }
 
+  @CalledByNative
   public void dispose() {
     cachedTrack.dispose();
     if (nativeObserver != 0) {
-      nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
+      unsetNativeObserver(nativeRtpReceiver, nativeObserver);
       nativeObserver = 0;
     }
     JniCommon.nativeReleaseRef(nativeRtpReceiver);
@@ -58,23 +63,23 @@
   public void SetObserver(Observer observer) {
     // Unset the existing one before setting a new one.
     if (nativeObserver != 0) {
-      nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
+      unsetNativeObserver(nativeRtpReceiver, nativeObserver);
     }
-    nativeObserver = nativeSetObserver(nativeRtpReceiver, observer);
+    nativeObserver = setNativeObserver(nativeRtpReceiver, observer);
   }
 
   // This should increment the reference count of the track.
   // Will be released in dispose().
-  private static native long nativeGetTrack(long nativeRtpReceiver);
+  private static native long getNativeTrack(long nativeRtpReceiver);
 
-  private static native boolean nativeSetParameters(
+  private static native boolean setNativeParameters(
       long nativeRtpReceiver, RtpParameters parameters);
 
-  private static native RtpParameters nativeGetParameters(long nativeRtpReceiver);
+  private static native RtpParameters getNativeParameters(long nativeRtpReceiver);
 
-  private static native String nativeId(long nativeRtpReceiver);
+  private static native String getNativeId(long nativeRtpReceiver);
 
-  private static native long nativeSetObserver(long nativeRtpReceiver, Observer observer);
+  private static native long setNativeObserver(long nativeRtpReceiver, Observer observer);
 
-  private static native long nativeUnsetObserver(long nativeRtpReceiver, long nativeObserver);
+  private static native void unsetNativeObserver(long nativeRtpReceiver, long nativeObserver);
 };