Merge "Playback of test videos for TestCallVideoProvider." into lmp-dev
diff --git a/tests/res/raw/outgoing_video.mp4 b/tests/res/raw/outgoing_video.mp4
new file mode 100644
index 0000000..3e4f1cb
--- /dev/null
+++ b/tests/res/raw/outgoing_video.mp4
Binary files differ
diff --git a/tests/res/raw/test_video.mp4 b/tests/res/raw/test_video.mp4
new file mode 100644
index 0000000..1a454b3
--- /dev/null
+++ b/tests/res/raw/test_video.mp4
Binary files differ
diff --git a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java b/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
index 484871e..ccceedf 100644
--- a/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
+++ b/tests/src/com/android/telecomm/testapps/TestCallVideoProvider.java
@@ -17,6 +17,7 @@
 package com.android.telecomm.testapps;
 
 import android.content.Context;
+import android.media.MediaPlayer;
 import android.os.RemoteException;
 import android.telecomm.CallCameraCapabilities;
 import android.telecomm.CallVideoClient;
@@ -29,6 +30,8 @@
 
 import java.util.Random;
 
+import com.android.telecomm.tests.R;
+
 /**
  * Implements the CallVideoProvider.
  */
@@ -36,9 +39,16 @@
     private RemoteCallVideoClient mCallVideoClient;
     private CallCameraCapabilities mCapabilities;
     private Random random;
-
+    private Surface mDisplaySurface;
+    private Surface mPreviewSurface;
+    private Context mContext;
+    /** Used to play incoming video during a call. */
+    private MediaPlayer mIncomingMediaPlayer;
+    /** Used to play outgoing video during a call. */
+    private MediaPlayer mOutgoingMediaPlayer;
 
     public TestCallVideoProvider(Context context) {
+        mContext = context;
         mCapabilities = new CallCameraCapabilities(false /* zoomSupported */, 0 /* maxZoom */);
         random = new Random();
     }
@@ -58,12 +68,40 @@
 
     @Override
     public void onSetPreviewSurface(Surface surface) {
-        log("Set preview surface");
+        log("Set preview surface " + (surface == null ? "unset" : "set"));
+        mPreviewSurface = surface;
+
+        if (mPreviewSurface != null) {
+            if (mOutgoingMediaPlayer == null) {
+                mOutgoingMediaPlayer = createMediaPlayer(mPreviewSurface, R.raw.outgoing_video);
+            }
+            mOutgoingMediaPlayer.setSurface(mPreviewSurface);
+            if (!mOutgoingMediaPlayer.isPlaying()) {
+                mOutgoingMediaPlayer.start();
+            }
+        } else {
+            mOutgoingMediaPlayer.stop();
+            mOutgoingMediaPlayer.setSurface(null);
+        }
     }
 
     @Override
     public void onSetDisplaySurface(Surface surface) {
-        log("Set display surface");
+        log("Set display surface " + (surface == null ? "unset" : "set"));
+        mDisplaySurface = surface;
+
+        if (mDisplaySurface != null) {
+            if (mIncomingMediaPlayer == null) {
+                mIncomingMediaPlayer = createMediaPlayer(mDisplaySurface, R.raw.test_video);
+            }
+            mIncomingMediaPlayer.setSurface(mDisplaySurface);
+            if (!mIncomingMediaPlayer.isPlaying()) {
+                mIncomingMediaPlayer.start();
+            }
+        } else {
+            mIncomingMediaPlayer.stop();
+            mIncomingMediaPlayer.setSurface(null);
+        }
     }
 
     @Override
@@ -151,4 +189,18 @@
     private static void log(String msg) {
         Log.w("TestCallVideoProvider", "[TestCallServiceProvider] " + msg);
     }
+
+    /**
+     * Creates a media player to play a video resource on a surface.
+     * @param surface The surface.
+     * @param videoResource The video resource.
+     * @return The {@code MediaPlayer}.
+     */
+    private MediaPlayer createMediaPlayer(Surface surface, int videoResource) {
+        MediaPlayer mediaPlayer = MediaPlayer.create(mContext.getApplicationContext(),
+                videoResource);
+        mediaPlayer.setSurface(surface);
+        mediaPlayer.setLooping(true);
+        return mediaPlayer;
+    }
 }