am 017a9e98: am 32905800: Also show the error Toast in the preview activity when playback fails.

Merge commit '017a9e988b64bdaceda12421937c7d09a18d0084'

* commit '017a9e988b64bdaceda12421937c7d09a18d0084':
  Also show the error Toast in the preview activity when playback fails.
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7415296..acf90e4 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Vyhledat hudbu"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Dotykem vyberte hudbu."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index e4d8524..3003388 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Søg i Musik"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Tryk for at vælge musik."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index dd0975e..e674ef4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -24,7 +24,7 @@
     <item quantity="other" msgid="5798230388116542981">"<xliff:g id="COUNT">%d</xliff:g> Titel"</item>
   </plurals>
   <plurals name="Nsongscomp">
-    <item quantity="other" msgid="7162294486622945550">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> von <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> Liedern"</item>
+    <item quantity="other" msgid="7162294486622945550">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> von \n<xliff:g id="TOTAL_COUNT">%1$d</xliff:g> Liedern"</item>
   </plurals>
   <plurals name="Nalbums">
     <item quantity="one" msgid="3798955510439465932">"1 Album"</item>
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Musik durchsuchen"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Zur Musikauswahl berühren"</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 16fbf14..5931386 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Αναζήτηση μουσικής"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Αγγίξτε για να επιλέξετε μουσική."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 01f1f7b..6ffb96b 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Buscar música"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Toca para seleccionar música."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index d5f7e32..7b86616 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Buscar música"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Toca para selec música."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 0d67c98..afbdff2 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Rechercher dans la musique"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Touchez l\'écran pour sélectionner la musique."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 6fbbbe8..61f0790 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Cerca musica"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Tocca per selezionare musica."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index d6f0529..7307ebd 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"音楽を検索"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"タップで曲を選択します"</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f58e12f..54897e3 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"음악 검색"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"음악을 선택하려면 터치하세요."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 73ec0ea..c405147 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Søk i musikk"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Berør for å velge musikk."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7023beb..23ecd1e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Zoeken in muziek"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Raak aan om muziek te selecteren."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f4549c7..f99491c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Szukaj wśród muzyki"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Dotknij, aby włączyć muzykę."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index a10ad9b..a157b61 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Pesquisar música"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Toque para seleccionar música."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a3643ba..78c337a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Pesquisar música"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Toque para selecionar a música."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b485622..9ff8b04 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Поиск музыки"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Нажмите ,чтобы выбрать музыку."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index db6736a..74367ec 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Sök efter musik"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Tryck om du vill välja musik."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index d850e0c..fac87a7 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"Müzik Ara"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"Müzik seçmek için dokunun."</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8c6aca6..552c5f4 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"搜索音乐"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"轻触以选择音乐。"</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 70f76aa..f54d47b 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -145,6 +145,4 @@
     <string name="search_hint" msgid="3766854898072633001">"搜尋音樂"</string>
     <string name="fast_scroll_alphabet" msgid="5548732936480723311">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="widget_initial_text" msgid="6334545155963910952">"輕觸即可選取音樂。"</string>
-    <!-- no translation found for effectspanel (8804547581593509614) -->
-    <skip />
 </resources>
diff --git a/src/com/android/music/MediaPlaybackActivity.java b/src/com/android/music/MediaPlaybackActivity.java
index e86b536..c90c49b 100644
--- a/src/com/android/music/MediaPlaybackActivity.java
+++ b/src/com/android/music/MediaPlaybackActivity.java
@@ -1318,7 +1318,9 @@
                 Message numsg = mHandler.obtainMessage(ALBUM_ART_DECODED, null);
                 mHandler.removeMessages(ALBUM_ART_DECODED);
                 mHandler.sendMessageDelayed(numsg, 300);
-                Bitmap bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, songid, albumid);
+                // Don't allow default artwork here, because we want to fall back to song-specific
+                // album art if we can't find anything for the album.
+                Bitmap bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, songid, albumid, false);
                 if (bm == null) {
                     bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, songid, -1);
                     albumid = -1;
diff --git a/src/com/android/music/MediaPlaybackService.java b/src/com/android/music/MediaPlaybackService.java
index e4432be..c0bb7bd 100644
--- a/src/com/android/music/MediaPlaybackService.java
+++ b/src/com/android/music/MediaPlaybackService.java
@@ -98,7 +98,9 @@
     private static final int TRACK_ENDED = 1;
     private static final int RELEASE_WAKELOCK = 2;
     private static final int SERVER_DIED = 3;
-    private static final int FADEIN = 4;
+    private static final int FADEINFROMSTART = 4;
+    private static final int FADEDOWN = 5;
+    private static final int FADEUP = 6;
     private static final int MAX_HISTORY_SIZE = 100;
     
     private MultiPlayer mPlayer;
@@ -152,7 +154,7 @@
     private static final int IDLE_DELAY = 60000;
     
     private void startAndFadeIn() {
-        mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
+        mMediaplayerHandler.sendEmptyMessageDelayed(FADEINFROMSTART, 10);
     }
     
     private Handler mMediaplayerHandler = new Handler() {
@@ -161,21 +163,31 @@
         public void handleMessage(Message msg) {
             MusicUtils.debugLog("mMediaplayerHandler.handleMessage " + msg.what);
             switch (msg.what) {
-                case FADEIN:
+                case FADEINFROMSTART:
                     if (!isPlaying()) {
                         mCurrentVolume = 0f;
                         mPlayer.setVolume(mCurrentVolume);
                         play();
-                        mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
-                    } else {
-                        mCurrentVolume += 0.01f;
-                        if (mCurrentVolume < 1.0f) {
-                            mMediaplayerHandler.sendEmptyMessageDelayed(FADEIN, 10);
-                        } else {
-                            mCurrentVolume = 1.0f;
-                        }
-                        mPlayer.setVolume(mCurrentVolume);
                     }
+                    mMediaplayerHandler.sendEmptyMessageDelayed(FADEUP, 10);
+                    break;
+                case FADEDOWN:
+                    mCurrentVolume -= .05f;
+                    if (mCurrentVolume > .2f) {
+                        mMediaplayerHandler.sendEmptyMessageDelayed(FADEDOWN, 10);
+                    } else {
+                        mCurrentVolume = .2f;
+                    }
+                    mPlayer.setVolume(mCurrentVolume);
+                    break;
+                case FADEUP:
+                    mCurrentVolume += .01f;
+                    if (mCurrentVolume < 1.0f) {
+                        mMediaplayerHandler.sendEmptyMessageDelayed(FADEUP, 10);
+                    } else {
+                        mCurrentVolume = 1.0f;
+                    }
+                    mPlayer.setVolume(mCurrentVolume);
                     break;
                 case SERVER_DIED:
                     if (mIsSupposedToBePlaying) {
@@ -249,8 +261,10 @@
                         pause();
                     }
                     break;
-                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                 case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+                    mMediaplayerHandler.sendEmptyMessage(FADEDOWN);
+                    break;
+                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                     Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
                     if(isPlaying()) {
                         mPausedByTransientLossOfFocus = true;
@@ -262,6 +276,8 @@
                     if(!isPlaying() && mPausedByTransientLossOfFocus) {
                         mPausedByTransientLossOfFocus = false;
                         startAndFadeIn();
+                    } else {
+                        mMediaplayerHandler.sendEmptyMessage(FADEUP);
                     }
                     break;
                 default:
diff --git a/src/com/android/music/SortCursor.java b/src/com/android/music/SortCursor.java
index 9b17294..7482a3f 100644
--- a/src/com/android/music/SortCursor.java
+++ b/src/com/android/music/SortCursor.java
@@ -218,6 +218,11 @@
     }
 
     @Override
+    public int getType(int column) {
+        return mCursor.getType(column);
+    }
+
+    @Override
     public boolean isNull(int column)
     {
         return mCursor.isNull(column);
diff --git a/src/com/android/music/TrackBrowserActivity.java b/src/com/android/music/TrackBrowserActivity.java
index 20e3060..c586fde 100644
--- a/src/com/android/music/TrackBrowserActivity.java
+++ b/src/com/android/music/TrackBrowserActivity.java
@@ -1278,6 +1278,11 @@
         }
 
         @Override
+        public int getType(int column) {
+            return mCurrentPlaylistCursor.getType(column);
+        }
+
+        @Override
         public boolean isNull(int column)
         {
             return mCurrentPlaylistCursor.isNull(column);