Add a CTS test for replacing a surface at run time during video playback.
Fix for bug 5088614.

Change-Id: Ic22f919432579328b8bd282700b1020950e49a41
diff --git a/tests/res/layout/mediaplayer.xml b/tests/res/layout/mediaplayer.xml
index 31ef492..aa66e64 100644
--- a/tests/res/layout/mediaplayer.xml
+++ b/tests/res/layout/mediaplayer.xml
@@ -25,4 +25,16 @@
         android:layout_gravity="center">
     </SurfaceView>
 
+    <SurfaceView android:id="@+id/surface2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center">
+    </SurfaceView>
+
+    <SurfaceView android:id="@+id/surface3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center">
+    </SurfaceView>
+
 </LinearLayout>
diff --git a/tests/src/android/media/cts/MediaStubActivity.java b/tests/src/android/media/cts/MediaStubActivity.java
index e10e6fa..f0ca755 100644
--- a/tests/src/android/media/cts/MediaStubActivity.java
+++ b/tests/src/android/media/cts/MediaStubActivity.java
@@ -26,6 +26,7 @@
     public static final int WIDTH = 320;
     public static final int HEIGHT = 240;
     private SurfaceHolder mHolder;
+    private SurfaceHolder mHolder2;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -40,9 +41,28 @@
         mHolder = surfaceV.getHolder();
         mHolder.setFixedSize(WIDTH, HEIGHT);
         mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+        SurfaceView surfaceV2 = (SurfaceView)findViewById(R.id.surface2);
+        ViewGroup.LayoutParams lp2 = surfaceV2.getLayoutParams();
+        lp2.width = WIDTH;
+        lp2.height = HEIGHT;
+        surfaceV2.setLayoutParams(lp2);
+        mHolder2 = surfaceV2.getHolder();
+        mHolder2.setFixedSize(WIDTH, HEIGHT);
+        mHolder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
     }
 
     public SurfaceHolder getSurfaceHolder() {
         return mHolder;
     }
+
+    public SurfaceHolder getSurfaceHolder2() {
+        return mHolder2;
+    }
+
+    public SurfaceHolder generateSurfaceHolder() {
+        SurfaceView surface = (SurfaceView)findViewById(R.id.surface3);
+        return surface.getHolder();
+    }
 }
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index d18d684..7e5b4ca 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -389,6 +389,37 @@
             Thread.sleep(SLEEP_TIME);
         }
 
+        // Test for reseting a surface during video playback
+        // After reseting, the video should continue playing
+        // from the time setDisplay() was called
+        mp.start();
+        Thread.sleep(SLEEP_TIME);
+
+        int posBefore = mp.getCurrentPosition();
+        mp.setDisplay(getActivity().getSurfaceHolder2());
+        int posAfter = mp.getCurrentPosition();
+
+        assertEquals(posAfter, posBefore);
+        assertTrue(mp.isPlaying());
+
+        Thread.sleep(SLEEP_TIME);
+
+        posBefore = mp.getCurrentPosition();
+        mp.setDisplay(getActivity().generateSurfaceHolder());
+        posAfter = mp.getCurrentPosition();
+
+        assertEquals(posAfter, posBefore);
+        assertTrue(mp.isPlaying());
+
+        Thread.sleep(SLEEP_TIME);
+
+        posBefore = mp.getCurrentPosition();
+        mp.setDisplay(null);
+        posAfter = mp.getCurrentPosition();
+
+        assertEquals(posAfter, posBefore);
+        assertTrue(mp.isPlaying());
+
         mp.release();
     }