Unifying TimedTextDriver's resume() and start().

(cherry picked from gtv bb23a2b7e06c59f56e353fd4a2a66a9b8179d425)

Change-Id: If5f14549fa315c34e32d6fed7c1ea09deabceb63
diff --git a/include/media/stagefright/timedtext/TimedTextDriver.h b/include/media/stagefright/timedtext/TimedTextDriver.h
index e705a04..f23c337 100644
--- a/include/media/stagefright/timedtext/TimedTextDriver.h
+++ b/include/media/stagefright/timedtext/TimedTextDriver.h
@@ -40,7 +40,6 @@
 
     status_t start();
     status_t pause();
-    status_t resume();
     status_t selectTrack(size_t index);
     status_t unselectTrack(size_t index);
 
@@ -65,6 +64,7 @@
 
     enum State {
         UNINITIALIZED,
+        PREPARED,
         PLAYING,
         PAUSED,
     };
diff --git a/media/libstagefright/timedtext/TimedTextDriver.cpp b/media/libstagefright/timedtext/TimedTextDriver.cpp
index 71da803..54ce7ac 100644
--- a/media/libstagefright/timedtext/TimedTextDriver.cpp
+++ b/media/libstagefright/timedtext/TimedTextDriver.cpp
@@ -61,7 +61,7 @@
     source = mTextSourceVector.valueFor(index);
     mPlayer->setDataSource(source);
     if (mState == UNINITIALIZED) {
-        mState = PAUSED;
+        mState = PREPARED;
     }
     mCurrentTrackIndex = index;
     return OK;
@@ -74,44 +74,10 @@
             return INVALID_OPERATION;
         case PLAYING:
             return OK;
-        case PAUSED:
+        case PREPARED:
             mPlayer->start();
             mState = PLAYING;
             return OK;
-        default:
-            TRESPASS();
-    }
-    return UNKNOWN_ERROR;
-}
-
-// TODO: Test if pause() works properly.
-// Scenario 1: start - pause - resume
-// Scenario 2: start - seek
-// Scenario 3: start - pause - seek - resume
-status_t TimedTextDriver::pause() {
-    Mutex::Autolock autoLock(mLock);
-    switch (mState) {
-        case UNINITIALIZED:
-            return INVALID_OPERATION;
-        case PLAYING:
-            mPlayer->pause();
-            mState = PAUSED;
-            return OK;
-        case PAUSED:
-            return OK;
-        default:
-            TRESPASS();
-    }
-    return UNKNOWN_ERROR;
-}
-
-status_t TimedTextDriver::resume() {
-    Mutex::Autolock autoLock(mLock);
-    switch (mState) {
-        case UNINITIALIZED:
-            return INVALID_OPERATION;
-        case PLAYING:
-            return OK;
         case PAUSED:
             mPlayer->resume();
             mState = PLAYING;
@@ -122,11 +88,33 @@
     return UNKNOWN_ERROR;
 }
 
+status_t TimedTextDriver::pause() {
+    Mutex::Autolock autoLock(mLock);
+    ALOGV("%s() is called", __FUNCTION__);
+    switch (mState) {
+        case UNINITIALIZED:
+            return INVALID_OPERATION;
+        case PLAYING:
+            mPlayer->pause();
+            mState = PAUSED;
+            return OK;
+        case PREPARED:
+            return INVALID_OPERATION;
+        case PAUSED:
+            return OK;
+        default:
+            TRESPASS();
+    }
+    return UNKNOWN_ERROR;
+}
+
 status_t TimedTextDriver::selectTrack(size_t index) {
     status_t ret = OK;
     Mutex::Autolock autoLock(mLock);
+    ALOGV("%s() is called", __FUNCTION__);
     switch (mState) {
         case UNINITIALIZED:
+        case PREPARED:
         case PAUSED:
             ret = selectTrack_l(index);
             break;
@@ -146,6 +134,7 @@
 
 status_t TimedTextDriver::unselectTrack(size_t index) {
     Mutex::Autolock autoLock(mLock);
+    ALOGV("%s() is called", __FUNCTION__);
     if (mCurrentTrackIndex != index) {
         return INVALID_OPERATION;
     }
@@ -156,6 +145,7 @@
             mPlayer->pause();
             mState = UNINITIALIZED;
             return OK;
+        case PREPARED:
         case PAUSED:
             mState = UNINITIALIZED;
             return OK;
@@ -167,11 +157,18 @@
 
 status_t TimedTextDriver::seekToAsync(int64_t timeUs) {
     Mutex::Autolock autoLock(mLock);
+    ALOGV("%s() is called", __FUNCTION__);
     switch (mState) {
         case UNINITIALIZED:
             return INVALID_OPERATION;
+        case PREPARED:
+            mPlayer->seekToAsync(timeUs);
+            mPlayer->pause();
+            mState = PAUSED;
+            return OK;
         case PAUSED:
             mPlayer->seekToAsync(timeUs);
+            mPlayer->pause();
             return OK;
         case PLAYING:
             mPlayer->seekToAsync(timeUs);