RTSP now properly publishes its "seekable" flags after connection

has successfully completed and only then signals that preparation is
complete.

Change-Id: I1a60f718e673fe1462c69369c40eafbed6a14326
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index ab7b4e8..3c63e80 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -31,6 +31,7 @@
 
 NuPlayerDriver::NuPlayerDriver()
     : mState(STATE_IDLE),
+      mIsAsyncPrepare(false),
       mAsyncResult(UNKNOWN_ERROR),
       mSetSurfaceInProgress(false),
       mDurationUs(-1),
@@ -160,6 +161,11 @@
     switch (mState) {
         case STATE_UNPREPARED:
             mState = STATE_PREPARING;
+
+            // Make sure we're not posting any notifications, success or
+            // failure information is only communicated through our result
+            // code.
+            mIsAsyncPrepare = false;
             mPlayer->prepareAsync();
             while (mState == STATE_PREPARING) {
                 mCondition.wait(mLock);
@@ -176,6 +182,7 @@
     switch (mState) {
         case STATE_UNPREPARED:
             mState = STATE_PREPARING;
+            mIsAsyncPrepare = true;
             mPlayer->prepareAsync();
             return OK;
         default:
@@ -500,9 +507,14 @@
     mAsyncResult = err;
 
     if (err == OK) {
-        notifyListener(MEDIA_PREPARED);
+        if (mIsAsyncPrepare) {
+            notifyListener(MEDIA_PREPARED);
+        }
         mState = STATE_PREPARED;
     } else {
+        if (mIsAsyncPrepare) {
+            notifyListener(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, err);
+        }
         mState = STATE_UNPREPARED;
     }