Fix AppRTCDemo crash when room is connected after PC is destroyed.

Also move VideoRendererGui.dispose() to the section with public API.

BUG=4909
R=wzh@webrtc.org

Review URL: https://codereview.webrtc.org/1312523004 .

Cr-Commit-Position: refs/heads/master@{#9792}
diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java
index adee98b..5d186b8 100644
--- a/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java
+++ b/talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java
@@ -89,25 +89,6 @@
     yuvImageRenderers = new ArrayList<YuvImageRenderer>();
   }
 
-  public static synchronized void dispose() {
-    if (instance == null){
-      return;
-    }
-    synchronized (instance.yuvImageRenderers) {
-      for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) {
-        yuvImageRenderer.release();
-      }
-      instance.yuvImageRenderers.clear();
-      if (instance.drawer != null) {
-        instance.drawer.release();
-      }
-    }
-    instance.surface = null;
-    instance.eglContext = null;
-    instance.eglContextReady = null;
-    instance = null;
-  }
-
   /**
    * Class used to display stream of YUV420 frames at particular location
    * on a screen. New video frames are sent to display using renderFrame()
@@ -468,6 +449,27 @@
     return eglContext;
   }
 
+  /** Releases GLSurfaceView video renderer. */
+  public static synchronized void dispose() {
+    if (instance == null){
+      return;
+    }
+    Log.d(TAG, "VideoRendererGui.dispose");
+    synchronized (instance.yuvImageRenderers) {
+      for (YuvImageRenderer yuvImageRenderer : instance.yuvImageRenderers) {
+        yuvImageRenderer.release();
+      }
+      instance.yuvImageRenderers.clear();
+      if (instance.drawer != null) {
+        instance.drawer.release();
+      }
+    }
+    instance.surface = null;
+    eglContext = null;
+    eglContextReady = null;
+    instance = null;
+  }
+
   /**
    * Creates VideoRenderer with top left corner at (x, y) and resolution
    * (width, height). All parameters are in percentage of screen resolution.
diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
index e2fa7d1..3073c34 100644
--- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
+++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
@@ -369,7 +369,10 @@
   private void callConnected() {
     final long delta = System.currentTimeMillis() - callStartedTimeMs;
     Log.i(TAG, "Call connected: delay=" + delta + "ms");
-
+    if (peerConnectionClient == null || isError) {
+      Log.w(TAG, "Call is connected in closed or error state");
+      return;
+    }
     // Update video view.
     updateVideoView();
     // Enable statistics callback.