Make search work in all activities in the music app, enable the
music app itself as a media search provider, and fix some issues
surrounding searching items that have unknown artist or album.
diff --git a/src/com/android/music/AlbumBrowserActivity.java b/src/com/android/music/AlbumBrowserActivity.java
index 61fc495..e3ab3eb 100644
--- a/src/com/android/music/AlbumBrowserActivity.java
+++ b/src/com/android/music/AlbumBrowserActivity.java
@@ -37,6 +37,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.provider.MediaStore;
+import android.util.Log;
 import android.view.ContextMenu;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -64,6 +65,8 @@
     private String mCurrentAlbumId;
     private String mCurrentAlbumName;
     private String mCurrentArtistNameForAlbum;
+    boolean mIsUnknownArtist;
+    boolean mIsUnknownAlbum;
     private AlbumListAdapter mAdapter;
     private boolean mAdapterSent;
     private final static int SEARCH = CHILD_MENU_BASE;
@@ -231,14 +234,13 @@
         else
             setTitle(R.string.albums_title);
     }
-    
+
     @Override
     public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
         menu.add(0, PLAY_SELECTION, 0, R.string.play_selection);
         SubMenu sub = menu.addSubMenu(0, ADD_TO_PLAYLIST, 0, R.string.add_to_playlist);
         MusicUtils.makePlaylistMenu(this, sub);
         menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
-        menu.add(0, SEARCH, 0, R.string.search_title);
 
         AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfoIn;
         mAlbumCursor.moveToPosition(mi.position);
@@ -246,11 +248,18 @@
         mCurrentAlbumName = mAlbumCursor.getString(mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));
         mCurrentArtistNameForAlbum = mAlbumCursor.getString(
                 mAlbumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ARTIST));
-        if (mCurrentAlbumName == null || mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING)) {
+        mIsUnknownArtist = mCurrentArtistNameForAlbum == null ||
+                mCurrentArtistNameForAlbum.equals(MediaFile.UNKNOWN_STRING);
+        mIsUnknownAlbum = mCurrentAlbumName == null ||
+                mCurrentAlbumName.equals(MediaFile.UNKNOWN_STRING);
+        if (mIsUnknownAlbum) {
             menu.setHeaderTitle(getString(R.string.unknown_album_name));
         } else {
             menu.setHeaderTitle(mCurrentAlbumName);
         }
+        if (!mIsUnknownAlbum || !mIsUnknownArtist) {
+            menu.add(0, SEARCH, 0, R.string.search_title);
+        }
     }
 
     @Override
@@ -305,16 +314,25 @@
 
     void doSearch() {
         CharSequence title = null;
-        String query = null;
+        String query = "";
         
         Intent i = new Intent();
         i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         
-        title = mCurrentAlbumName;
-        query = mCurrentArtistNameForAlbum + " " + mCurrentAlbumName;
-        i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
-        i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+        title = "";
+        if (!mIsUnknownAlbum) {
+            query = mCurrentAlbumName;
+            i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, mCurrentAlbumName);
+            title = mCurrentAlbumName;
+        }
+        if(!mIsUnknownArtist) {
+            query = query + " " + mCurrentArtistNameForAlbum;
+            i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, mCurrentArtistNameForAlbum);
+            title = title + " " + mCurrentArtistNameForAlbum;
+        }
+        // Since we hide the 'search' menu item when both album and artist are
+        // unknown, the query and title strings will have at least one of those.
         i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE);
         title = getString(R.string.mediasearch, title);
         i.putExtra(SearchManager.QUERY, query);