Handle invalid voice search

Proper handle when the user makes a voice search that doesn't find any result.
The recommended way to handle it is to set a proper warning via PlaybackState
and stop playing.

Bug: 19946669
Change-Id: I9f0584ccb7ff66e9254ee99b9006916fffd77fb3
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
index 83606bd..3b3ec83 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
@@ -31,6 +31,7 @@
  import android.os.Message;
  import android.os.SystemClock;
  import android.service.media.MediaBrowserService;
+ import android.text.TextUtils;
 
  import com.example.android.mediabrowserservice.model.MusicProvider;
  import com.example.android.mediabrowserservice.utils.CarHelper;
@@ -454,15 +455,26 @@
          public void onPlayFromSearch(String query, Bundle extras) {
              LogHelper.d(TAG, "playFromSearch  query=", query);
 
-             mPlayingQueue = QueueHelper.getPlayingQueueFromSearch(query, mMusicProvider);
+             if (TextUtils.isEmpty(query)) {
+                 // A generic search like "Play music" sends an empty query
+                 // and it's expected that we start playing something. What will be played depends
+                 // on the app: favorite playlist, "I'm feeling lucky", most recent, etc.
+                 mPlayingQueue = QueueHelper.getRandomQueue(mMusicProvider);
+             } else {
+                 mPlayingQueue = QueueHelper.getPlayingQueueFromSearch(query, mMusicProvider);
+             }
+
              LogHelper.d(TAG, "playFromSearch  playqueue.length=" + mPlayingQueue.size());
              mSession.setQueue(mPlayingQueue);
 
              if (mPlayingQueue != null && !mPlayingQueue.isEmpty()) {
-                 // start playing from the beginning of the queue
+                 // immediately start playing from the beginning of the search results
                  mCurrentIndexOnQueue = 0;
 
                  handlePlayRequest();
+             } else {
+                 // if nothing was found, we need to warn the user and stop playing
+                 handleStopRequest(getString(R.string.no_search_results));
              }
          }
      }
diff --git a/media/MediaBrowserService/Application/src/main/res/values/strings.xml b/media/MediaBrowserService/Application/src/main/res/values/strings.xml
index 8c88fe3..9a4a50a 100644
--- a/media/MediaBrowserService/Application/src/main/res/values/strings.xml
+++ b/media/MediaBrowserService/Application/src/main/res/values/strings.xml
@@ -29,5 +29,6 @@
     <string name="skip_previous">Skip to previous</string>
     <string name="play_pause">play or pause</string>
     <string name="skip_next">Skip to next</string>
+    <string name="no_search_results">No search results.</string>
 
 </resources>