Throw IllegalStateException if native objects are used after dispose.

This makes it easier to debug issues related to double dispose /
use after dispose.

Bug: webrtc:7566, webrtc:8297
Change-Id: I07429b2b794deabb62b5f3ea1cf92eea6f66a149
Reviewed-on: https://webrtc-review.googlesource.com/102540
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Paulina Hensman <phensman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24894}
diff --git a/sdk/android/api/org/webrtc/MediaStreamTrack.java b/sdk/android/api/org/webrtc/MediaStreamTrack.java
index 198da1e..944c7ef 100644
--- a/sdk/android/api/org/webrtc/MediaStreamTrack.java
+++ b/sdk/android/api/org/webrtc/MediaStreamTrack.java
@@ -70,34 +70,52 @@
     }
   }
 
-  final long nativeTrack;
+  private long nativeTrack;
 
   public MediaStreamTrack(long nativeTrack) {
     this.nativeTrack = nativeTrack;
   }
 
   public String id() {
+    checkMediaStreamTrackExists();
     return nativeGetId(nativeTrack);
   }
 
   public String kind() {
+    checkMediaStreamTrackExists();
     return nativeGetKind(nativeTrack);
   }
 
   public boolean enabled() {
+    checkMediaStreamTrackExists();
     return nativeGetEnabled(nativeTrack);
   }
 
   public boolean setEnabled(boolean enable) {
+    checkMediaStreamTrackExists();
     return nativeSetEnabled(nativeTrack, enable);
   }
 
   public State state() {
+    checkMediaStreamTrackExists();
     return nativeGetState(nativeTrack);
   }
 
   public void dispose() {
+    checkMediaStreamTrackExists();
     JniCommon.nativeReleaseRef(nativeTrack);
+    nativeTrack = 0;
+  }
+
+  long getNativeMediaStreamTrack() {
+    checkMediaStreamTrackExists();
+    return nativeTrack;
+  }
+
+  private void checkMediaStreamTrackExists() {
+    if (nativeTrack == 0) {
+      throw new IllegalStateException("MediaStreamTrack has been disposed.");
+    }
   }
 
   private static native String nativeGetId(long track);