auto import from //branches/cupcake/...@137197
diff --git a/src/com/android/music/AlbumBrowserActivity.java b/src/com/android/music/AlbumBrowserActivity.java
index c28b7da..020c0a6 100644
--- a/src/com/android/music/AlbumBrowserActivity.java
+++ b/src/com/android/music/AlbumBrowserActivity.java
@@ -217,7 +217,7 @@
         if (mAlbumCursor != null && mAlbumCursor.getCount() > 0) {
             mAlbumCursor.moveToFirst();
             fancyName = mAlbumCursor.getString(3);
-            if (MediaFile.UNKNOWN_STRING.equals(fancyName))
+            if (fancyName == null || fancyName.equals(MediaFile.UNKNOWN_STRING))
                 fancyName = getText(R.string.unknown_artist_name);
         }
 
@@ -338,9 +338,6 @@
     @Override
     protected void onListItemClick(ListView l, View v, int position, long id)
     {
-        if (mHasHeader) {
-            position --;
-        }
         Intent intent = new Intent(Intent.ACTION_PICK);
         intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
         intent.putExtra("album", Long.valueOf(id).toString());
@@ -560,7 +557,7 @@
 
             String name = cursor.getString(mAlbumIdx);
             String displayname = name;
-            boolean unknown = name.equals(MediaFile.UNKNOWN_STRING); 
+            boolean unknown = name == null || name.equals(MediaFile.UNKNOWN_STRING); 
             if (unknown) {
                 displayname = mUnknownAlbum;
             }
@@ -568,7 +565,7 @@
             
             name = cursor.getString(mArtistIdx);
             displayname = name;
-            if (MediaFile.UNKNOWN_STRING.equals(name)) {
+            if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                 displayname = mUnknownArtist;
             }
             vh.line2.setText(displayname);
@@ -633,6 +630,5 @@
 
     private Cursor mAlbumCursor;
     private String mArtistId;
-    private boolean mHasHeader = false;
 }
 
diff --git a/src/com/android/music/ArtistAlbumBrowserActivity.java b/src/com/android/music/ArtistAlbumBrowserActivity.java
index 2ed367b..8486672 100644
--- a/src/com/android/music/ArtistAlbumBrowserActivity.java
+++ b/src/com/android/music/ArtistAlbumBrowserActivity.java
@@ -234,7 +234,7 @@
         intent.putExtra("album", mCurrentAlbumId);
         Cursor c = (Cursor) getExpandableListAdapter().getChild(groupPosition, childPosition);
         String album = c.getString(c.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
-        if (album.equals(MediaFile.UNKNOWN_STRING)) {
+        if (album == null || album.equals(MediaFile.UNKNOWN_STRING)) {
             // unknown album, so we should include the artist ID to limit the songs to songs only by that artist 
             mArtistCursor.moveToPosition(groupPosition);
             mCurrentArtistId = mArtistCursor.getString(mArtistCursor.getColumnIndex(MediaStore.Audio.Artists._ID));
@@ -621,7 +621,7 @@
 
             String artist = cursor.getString(mGroupArtistIdx);
             String displayartist = artist;
-            boolean unknown = MediaFile.UNKNOWN_STRING.equals(artist);
+            boolean unknown = artist == null || artist.equals(MediaFile.UNKNOWN_STRING);
             if (unknown) {
                 displayartist = mUnknownArtist;
             }
@@ -651,7 +651,7 @@
 
             String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));
             String displayname = name;
-            boolean unknown = name.equals(MediaFile.UNKNOWN_STRING); 
+            boolean unknown = name == null || name.equals(MediaFile.UNKNOWN_STRING); 
             if (unknown) {
                 displayname = mUnknownAlbum;
             }
@@ -738,7 +738,7 @@
                 MyCursorWrapper(Cursor c, String artist) {
                     super(c);
                     mArtistName = artist;
-                    if (MediaFile.UNKNOWN_STRING.equals(mArtistName)) {
+                    if (mArtistName == null || mArtistName.equals(MediaFile.UNKNOWN_STRING)) {
                         mArtistName = mUnknownArtist;
                     }
                     mMagicColumnIdx = c.getColumnCount();
@@ -754,7 +754,7 @@
                 
                 @Override
                 public int getColumnIndexOrThrow(String name) {
-                    if (name.equals(MediaStore.Audio.Albums.ARTIST)) {
+                    if (MediaStore.Audio.Albums.ARTIST.equals(name)) {
                         return mMagicColumnIdx;
                     }
                     return super.getColumnIndexOrThrow(name); 
diff --git a/src/com/android/music/QueryBrowserActivity.java b/src/com/android/music/QueryBrowserActivity.java
index 2a482ae..9e91ba6 100644
--- a/src/com/android/music/QueryBrowserActivity.java
+++ b/src/com/android/music/QueryBrowserActivity.java
@@ -344,8 +344,10 @@
                 String name = cursor.getString(cursor.getColumnIndexOrThrow(
                         SearchManager.SUGGEST_COLUMN_TEXT_1));
                 String displayname = name;
-                if (name.equals(MediaFile.UNKNOWN_STRING)) {
+                boolean isunknown = false;
+                if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                     displayname = context.getString(R.string.unknown_artist_name);
+                    isunknown = true;
                 }
                 tv1.setText(displayname);
 
@@ -353,7 +355,7 @@
                 int numsongs = cursor.getInt(cursor.getColumnIndexOrThrow("data2"));
                 
                 String songs_albums = MusicUtils.makeAlbumsSongsLabel(context,
-                        numalbums, numsongs, name.equals(MediaFile.UNKNOWN_STRING));
+                        numalbums, numsongs, isunknown);
                 
                 tv2.setText(songs_albums);
             
@@ -362,14 +364,14 @@
                 String name = cursor.getString(cursor.getColumnIndexOrThrow(
                         SearchManager.SUGGEST_COLUMN_TEXT_1));
                 String displayname = name;
-                if (name.equals(MediaFile.UNKNOWN_STRING)) {
+                if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                     displayname = context.getString(R.string.unknown_album_name);
                 }
                 tv1.setText(displayname);
                 
                 name = cursor.getString(cursor.getColumnIndexOrThrow("data1"));
                 displayname = name;
-                if (name.equals(MediaFile.UNKNOWN_STRING)) {
+                if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                     displayname = context.getString(R.string.unknown_artist_name);
                 }
                 tv2.setText(displayname);
@@ -383,11 +385,11 @@
                 tv1.setText(name);
 
                 String displayname = cursor.getString(cursor.getColumnIndexOrThrow("data1"));
-                if (name.equals(MediaFile.UNKNOWN_STRING)) {
+                if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                     displayname = context.getString(R.string.unknown_artist_name);
                 }
                 name = cursor.getString(cursor.getColumnIndexOrThrow("data2"));
-                if (name.equals(MediaFile.UNKNOWN_STRING)) {
+                if (name == null || name.equals(MediaFile.UNKNOWN_STRING)) {
                     name = context.getString(R.string.unknown_artist_name);
                 }
                 tv2.setText(displayname + " - " + name);
diff --git a/src/com/android/music/TrackBrowserActivity.java b/src/com/android/music/TrackBrowserActivity.java
index 58f556c..dd3da3e 100644
--- a/src/com/android/music/TrackBrowserActivity.java
+++ b/src/com/android/music/TrackBrowserActivity.java
@@ -225,9 +225,9 @@
         MusicUtils.unbindFromService(this);
         try {
             if ("nowplaying".equals(mPlaylist)) {
-                unregisterReceiver(mNowPlayingListener);
+                unregisterReceiverSafe(mNowPlayingListener);
             } else {
-                unregisterReceiver(mTrackListListener);
+                unregisterReceiverSafe(mTrackListListener);
             }
         } catch (IllegalArgumentException ex) {
             // we end up here in case we never registered the listeners
@@ -241,9 +241,23 @@
                 c.close();
             }
         }
-        unregisterReceiver(mScanListener);
+        unregisterReceiverSafe(mScanListener);
         super.onDestroy();
-   }
+    }
+    
+    /**
+     * Unregister a receiver, but eat the exception that is thrown if the
+     * receiver was never registered to begin with. This is a little easier
+     * than keeping track of whether the receivers have actually been
+     * registered by the time onDestroy() is called.
+     */
+    private void unregisterReceiverSafe(BroadcastReceiver receiver) {
+        try {
+            unregisterReceiver(receiver);
+        } catch (IllegalArgumentException e) {
+            // ignore
+        }
+    }
     
     @Override
     public void onResume() {
@@ -372,7 +386,7 @@
                     }    
                     cursor.deactivate();
                 }
-                if (fancyName.equals(MediaFile.UNKNOWN_STRING)) {
+                if (fancyName == null || fancyName.equals(MediaFile.UNKNOWN_STRING)) {
                     fancyName = getString(R.string.unknown_album_name);
                 }
             }