NuPlayer: do not send BUFFERING_START to client when paused by client.

Bug: 25727912
Change-Id: I5f82090352a3d6806f1f8fafbdb2a3bf0be48be7
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 5c13633..765ceff 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -191,7 +191,8 @@
       mResetting(false),
       mSourceStarted(false),
       mPaused(false),
-      mPausedByClient(false),
+      mPausedByClient(true),
+      mPendingBufferingFlag(PENDING_BUFFERING_FLAG_NONE),
       mPausedForBuffering(false) {
     clearFlushComplete();
 }
@@ -715,6 +716,10 @@
                 onStart();
             }
             mPausedByClient = false;
+            if (mPendingBufferingFlag != PENDING_BUFFERING_FLAG_NONE) {
+                notifyListener(MEDIA_INFO, mPendingBufferingFlag, 0);
+                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+            }
             break;
         }
 
@@ -2147,7 +2152,12 @@
 
         case Source::kWhatBufferingStart:
         {
-            notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_START, 0);
+            if (mPausedByClient) {
+                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_START;
+            } else {
+                notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_START, 0);
+                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+            }
             break;
         }
 
@@ -2169,7 +2179,12 @@
 
         case Source::kWhatBufferingEnd:
         {
-            notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_END, 0);
+            if (mPausedByClient) {
+                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_END;
+            } else {
+                notifyListener(MEDIA_INFO, MEDIA_INFO_BUFFERING_END, 0);
+                mPendingBufferingFlag = PENDING_BUFFERING_FLAG_NONE;
+            }
             break;
         }
 
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index 4cec1a1..cefbb19 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -182,6 +182,12 @@
         FLUSH_CMD_SHUTDOWN,
     };
 
+    enum PendingBufferingFlag {
+        PENDING_BUFFERING_FLAG_NONE = MEDIA_INFO_UNKNOWN,
+        PENDING_BUFFERING_FLAG_START = MEDIA_INFO_BUFFERING_START,
+        PENDING_BUFFERING_FLAG_END = MEDIA_INFO_BUFFERING_END,
+    };
+
     // Status of flush responses from the decoder and renderer.
     bool mFlushComplete[2][2];
 
@@ -208,6 +214,9 @@
     // still become true, when we pause internally due to buffering.
     bool mPausedByClient;
 
+    // Pending buffering flag which is not sent to client due to being paused.
+    PendingBufferingFlag mPendingBufferingFlag;
+
     // Pause state as requested by source (internally) due to buffering
     bool mPausedForBuffering;