OSDN Git Service

am 5edd0cbd: Fix build.
authorMarco Nelissen <marcone@google.com>
Sun, 13 Dec 2009 20:25:52 +0000 (12:25 -0800)
committerAndroid Git Automerger <android-git-automerger@android.com>
Sun, 13 Dec 2009 20:25:52 +0000 (12:25 -0800)
Merge commit '5edd0cbd1ae954dc8e97daef1a99375246bf985c' into eclair-mr2

* commit '5edd0cbd1ae954dc8e97daef1a99375246bf985c':
  Fix build.

17 files changed:
res/values-da/strings.xml
res/values-de/strings.xml
res/values-es-rUS/strings.xml
res/values-fr/strings.xml
res/values-it/strings.xml
res/values-pt/strings.xml
res/values-ru/strings.xml
res/values-sv/strings.xml
res/values-tr/strings.xml
res/values-zh-rCN/strings.xml
src/com/android/music/AlbumBrowserActivity.java
src/com/android/music/ArtistAlbumBrowserActivity.java
src/com/android/music/MediaPlaybackActivity.java
src/com/android/music/PlaylistBrowserActivity.java
src/com/android/music/QueryBrowserActivity.java
src/com/android/music/TouchInterceptor.java
src/com/android/music/TrackBrowserActivity.java

index 6779d17..c76f19e 100644 (file)
@@ -63,8 +63,8 @@
     <string name="rename_playlist_menu" msgid="3133463747389494668">"Omdøb"</string>
     <string name="playlist_deleted_message" msgid="9008053828193961455">"Afspilningsliste slettet."</string>
     <string name="playlist_renamed_message" msgid="7187580192703005990">"Afspilningslisten er omdøbt."</string>
-    <string name="recentlyadded" msgid="110978416756366953">"Tilføjet for nylig"</string>
-    <string name="recentlyadded_title" msgid="3153322287249901914">"Tilføjet for nylig"</string>
+    <string name="recentlyadded" msgid="110978416756366953">"Tilføjet for nyligt"</string>
+    <string name="recentlyadded_title" msgid="3153322287249901914">"Tilføjet for nyligt"</string>
     <string name="podcasts_listitem" msgid="8657809279717670634">"Podcasts"</string>
     <string name="podcasts_title" msgid="4928414142496858304">"Podcasts"</string>
     <string name="sdcard_missing_title" msgid="9008284946643270850">"Der er intet SD-kort"</string>
     <string name="sdcard_error_message" msgid="4574563894036627855">"Der opstod en fejl på dit SD-kort."</string>
     <string name="unknown_artist_name" msgid="5567811106415855219">"Ukendt kunstner"</string>
     <string name="unknown_album_name" msgid="8525145988941244727">"Ukendt album"</string>
-    <string name="shuffle_on_notif" msgid="5453708337808483943">"Blanding er slået til."</string>
-    <string name="shuffle_off_notif" msgid="4251189610017886263">"Blanding er slået fra."</string>
+    <string name="shuffle_on_notif" msgid="5453708337808483943">"Bland er slået til."</string>
+    <string name="shuffle_off_notif" msgid="4251189610017886263">"Bland er slået fra."</string>
     <string name="repeat_off_notif" msgid="1149406899083479716">"Gentagelse er slået fra."</string>
     <string name="repeat_current_notif" msgid="1227153936360904196">"Den aktuelle sang gentages."</string>
     <string name="repeat_all_notif" msgid="6443293055987316642">"Gentager alle sange."</string>
-    <string name="ringtone_menu" msgid="2737472190159134599">"Brug som ringetone"</string>
+    <string name="ringtone_menu" msgid="2737472190159134599">"Brug som telefonringetone"</string>
     <string name="ringtone_menu_short" msgid="3367622038867238133">"Brug som ringetone"</string>
     <string name="ringtone_set" msgid="5325818347613843130">"\"<xliff:g id="NAME">%s</xliff:g>\" er indstillet som ringetone for telefonen."</string>
     <string name="play_selection" msgid="2854921021814550018">"Afspil"</string>
     <item msgid="2727959579637914171">"11 uger"</item>
     <item msgid="8708754966127584739">"12 uger"</item>
   </string-array>
-    <string name="weekpicker_set" msgid="7636608790418067496">"Udfør"</string>
-    <string name="weekpicker_title" msgid="699535378922101701">"Angiv tid"</string>
+    <string name="weekpicker_set" msgid="7636608790418067496">"Færdig"</string>
+    <string name="weekpicker_title" msgid="699535378922101701">"Indstil tid"</string>
     <string name="save_as_playlist" msgid="5180413608901885255">"Gem som afspilningsliste"</string>
     <string name="clear_playlist" msgid="4565515100924905315">"Ryd afspilningsliste"</string>
     <string name="musicbrowserlabel" msgid="3162022214114562892">"Musik"</string>
index c5d9996..be3b13b 100644 (file)
@@ -29,7 +29,7 @@
     <string name="goto_start" msgid="8979658707407220934">"Bibliothek"</string>
     <string name="goto_playback" msgid="4885216161312176550">"Wiedergeben"</string>
     <string name="party_shuffle" msgid="8213359225506006168">"Party-Shuffle"</string>
-    <string name="party_shuffle_off" msgid="1828744483354711679">"Party-Shuffle aus"</string>
+    <string name="party_shuffle_off" msgid="1828744483354711679">"Party-Shuffle deaktivieren"</string>
     <string name="delete_item" msgid="3363330144534750601">"Löschen"</string>
     <string name="shuffle_all" msgid="1388193611787878773">"Alle zufällig wiedergeben"</string>
     <string name="play_all" msgid="6309622568869321842">"Alle wiedergeben"</string>
@@ -80,7 +80,7 @@
     <string name="repeat_off_notif" msgid="1149406899083479716">"Wiederholung ist deaktiviert."</string>
     <string name="repeat_current_notif" msgid="1227153936360904196">"Aktueller Titel wird wiederholt."</string>
     <string name="repeat_all_notif" msgid="6443293055987316642">"Alle Titel werden wiederholt."</string>
-    <string name="ringtone_menu" msgid="2737472190159134599">"Als Klingelton verwenden"</string>
+    <string name="ringtone_menu" msgid="2737472190159134599">"Als Telefonklingelton verwenden"</string>
     <string name="ringtone_menu_short" msgid="3367622038867238133">"Als Klingelton verwenden"</string>
     <string name="ringtone_set" msgid="5325818347613843130">"\"<xliff:g id="NAME">%s</xliff:g>\" wurde als Telefonklingelton festgelegt."</string>
     <string name="play_selection" msgid="2854921021814550018">"Wiedergeben"</string>
     <item msgid="8708754966127584739">"12 Wochen"</item>
   </string-array>
     <string name="weekpicker_set" msgid="7636608790418067496">"Fertig"</string>
-    <string name="weekpicker_title" msgid="699535378922101701">"Zeit einstellen"</string>
+    <string name="weekpicker_title" msgid="699535378922101701">"Uhrzeit einstellen"</string>
     <string name="save_as_playlist" msgid="5180413608901885255">"Als Playlist speichern"</string>
     <string name="clear_playlist" msgid="4565515100924905315">"Playlist löschen"</string>
     <string name="musicbrowserlabel" msgid="3162022214114562892">"Musik"</string>
index f073f57..13c62f9 100644 (file)
@@ -49,7 +49,7 @@
     <string name="albums_title" msgid="8773880394961378035">"Álbumes"</string>
     <string name="tracks_menu" msgid="6942246568246092330">"Canciones"</string>
     <string name="tracks_title" msgid="3229389424532295124">"Canciones"</string>
-    <string name="playlists_menu" msgid="5382792649771928849">"Listas de rep."</string>
+    <string name="playlists_menu" msgid="5382792649771928849">"Listas de repr."</string>
     <string name="playlists_title" msgid="5094238486322957927">"Listas de reproducción"</string>
     <string name="videos_title" msgid="2066741954354129115">"Videos"</string>
     <string name="all_title" msgid="6880186414437237653">"Todos los medios"</string>
index c61ed96..03dd64c 100644 (file)
@@ -29,7 +29,7 @@
     <string name="goto_start" msgid="8979658707407220934">"Bibliothèque"</string>
     <string name="goto_playback" msgid="4885216161312176550">"Lecture"</string>
     <string name="party_shuffle" msgid="8213359225506006168">"Lecture aléatoire"</string>
-    <string name="party_shuffle_off" msgid="1828744483354711679">"Désactiver la lecture aléatoire"</string>
+    <string name="party_shuffle_off" msgid="1828744483354711679">"La lecture aléatoire est désactivée."</string>
     <string name="delete_item" msgid="3363330144534750601">"Supprimer"</string>
     <string name="shuffle_all" msgid="1388193611787878773">"Lecture aléatoire de toutes les chansons"</string>
     <string name="play_all" msgid="6309622568869321842">"Tout lire"</string>
@@ -86,7 +86,7 @@
     <string name="play_selection" msgid="2854921021814550018">"Lire"</string>
     <string name="add_to_playlist" msgid="7110273488645072783">"Ajouter à la playlist"</string>
     <string name="queue" msgid="2937629819482787704">"Playlist actuelle"</string>
-    <string name="new_playlist" msgid="7588112979692632867">"Nouvelle"</string>
+    <string name="new_playlist" msgid="7588112979692632867">"Nouveau"</string>
     <string name="new_playlist_name_template" msgid="905710296728900597">"Nouvelle playlist <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
     <item quantity="one" msgid="422388042993582235">"1 chanson a été ajoutée à la playlist."</item>
index 770089d..61a6113 100644 (file)
@@ -31,7 +31,7 @@
     <string name="party_shuffle" msgid="8213359225506006168">"Party shuffle"</string>
     <string name="party_shuffle_off" msgid="1828744483354711679">"Party shuffle non attiva"</string>
     <string name="delete_item" msgid="3363330144534750601">"Elimina"</string>
-    <string name="shuffle_all" msgid="1388193611787878773">"Casuale"</string>
+    <string name="shuffle_all" msgid="1388193611787878773">"Ripr. casuale"</string>
     <string name="play_all" msgid="6309622568869321842">"Riprod. tutti"</string>
     <string name="delete_artist_desc" msgid="1843750591006508005">"Tutti i brani di <xliff:g id="ARTIST">%s</xliff:g> verranno eliminati definitivamente dalla scheda SD."</string>
     <string name="delete_album_desc" msgid="535515999268177079">"L\'intero album \"<xliff:g id="ALBUM">%s</xliff:g>\" verrà eliminato definitivamente dalla scheda SD."</string>
@@ -83,7 +83,7 @@
     <string name="ringtone_menu" msgid="2737472190159134599">"Usa come suoneria"</string>
     <string name="ringtone_menu_short" msgid="3367622038867238133">"Usa come suoneria"</string>
     <string name="ringtone_set" msgid="5325818347613843130">"\"<xliff:g id="NAME">%s</xliff:g>\" impostato come suoneria del telefono."</string>
-    <string name="play_selection" msgid="2854921021814550018">"Riproduci"</string>
+    <string name="play_selection" msgid="2854921021814550018">"Riprod."</string>
     <string name="add_to_playlist" msgid="7110273488645072783">"Aggiungi a playlist"</string>
     <string name="queue" msgid="2937629819482787704">"Playlist corrente"</string>
     <string name="new_playlist" msgid="7588112979692632867">"Nuova"</string>
index eec54ee..a38af23 100644 (file)
@@ -49,7 +49,7 @@
     <string name="albums_title" msgid="8773880394961378035">"Álbuns"</string>
     <string name="tracks_menu" msgid="6942246568246092330">"Músicas"</string>
     <string name="tracks_title" msgid="3229389424532295124">"Músicas"</string>
-    <string name="playlists_menu" msgid="5382792649771928849">"Listas"</string>
+    <string name="playlists_menu" msgid="5382792649771928849">"Listas de reprodução"</string>
     <string name="playlists_title" msgid="5094238486322957927">"Listas de reprodução"</string>
     <string name="videos_title" msgid="2066741954354129115">"Vídeos"</string>
     <string name="all_title" msgid="6880186414437237653">"Todas as mídias"</string>
index 140671e..f9491b0 100644 (file)
@@ -80,8 +80,8 @@
     <string name="repeat_off_notif" msgid="1149406899083479716">"Режим повторного воспроизведения отключен."</string>
     <string name="repeat_current_notif" msgid="1227153936360904196">"Повторение текущей композиции."</string>
     <string name="repeat_all_notif" msgid="6443293055987316642">"Повтор всех композиций."</string>
-    <string name="ringtone_menu" msgid="2737472190159134599">"Ð\9fоÑ\81Ñ\82авиÑ\82Ñ\8c Ð½Ð° Ð·Ð²Ð¾Ð½Ð¾Ðº"</string>
-    <string name="ringtone_menu_short" msgid="3367622038867238133">"Ð\9fоÑ\81Ñ\82авиÑ\82Ñ\8c Ð½Ð° Ð·Ð²Ð¾Ð½Ð¾Ðº"</string>
+    <string name="ringtone_menu" msgid="2737472190159134599">"СделаÑ\82Ñ\8c Ð¼ÐµÐ»Ð¾Ð´Ð¸ÐµÐ¹ Ð·Ð²Ð¾Ð½ÐºÐ°"</string>
+    <string name="ringtone_menu_short" msgid="3367622038867238133">"СделаÑ\82Ñ\8c Ð¼ÐµÐ»Ð¾Ð´Ð¸ÐµÐ¹ Ð·Ð²Ð¾Ð½ÐºÐ°"</string>
     <string name="ringtone_set" msgid="5325818347613843130">"Композиция \"<xliff:g id="NAME">%s</xliff:g>\" установлена в качестве мелодии звонка."</string>
     <string name="play_selection" msgid="2854921021814550018">"Воспроизвести"</string>
     <string name="add_to_playlist" msgid="7110273488645072783">"Добавить в плейлист"</string>
     <string name="music_picker_title" msgid="1561623486324013570">"Выбрать музыкальную дорожку"</string>
     <string name="gadget_track" msgid="3186569295893300114">"Трек <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
     <string name="fail_to_start_stream" msgid="3605390187703912835">"Не удается выполнить совместный просмотр."</string>
-    <string name="search_settings_description" msgid="6520975349259883368">"Ð\98Ñ\81полниÑ\82ели, Ð°Ð»Ñ\8cбомÑ\8b Ð¸ ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ\86ии"</string>
+    <string name="search_settings_description" msgid="6520975349259883368">"Ð\98Ñ\81полниÑ\82ели, Ð°Ð»Ñ\8cбомÑ\8b Ð¸ Ð´Ð¾Ñ\80ожки"</string>
 </resources>
index c2e6d5c..5c81ea0 100644 (file)
@@ -29,7 +29,7 @@
     <string name="goto_start" msgid="8979658707407220934">"Bibliotek"</string>
     <string name="goto_playback" msgid="4885216161312176550">"Uppspelning"</string>
     <string name="party_shuffle" msgid="8213359225506006168">"Blanda alla spår"</string>
-    <string name="party_shuffle_off" msgid="1828744483354711679">"Blanda inte hela listan"</string>
+    <string name="party_shuffle_off" msgid="1828744483354711679">"Blandar inte hela listan"</string>
     <string name="delete_item" msgid="3363330144534750601">"Ta bort"</string>
     <string name="shuffle_all" msgid="1388193611787878773">"Blanda hela listan"</string>
     <string name="play_all" msgid="6309622568869321842">"Spela alla"</string>
index 3d4803c..f8d41f4 100644 (file)
@@ -82,7 +82,7 @@
     <string name="repeat_all_notif" msgid="6443293055987316642">"Tüm şarkılar tekrarlanıyor."</string>
     <string name="ringtone_menu" msgid="2737472190159134599">"Telefon zil sesi olarak kullan"</string>
     <string name="ringtone_menu_short" msgid="3367622038867238133">"Zil sesi olarak kullan"</string>
-    <string name="ringtone_set" msgid="5325818347613843130">"<xliff:g id="NAME">%s</xliff:g> telefon zil sesi olarak ayarlandı."</string>
+    <string name="ringtone_set" msgid="5325818347613843130">"\"<xliff:g id="NAME">%s</xliff:g>\" telefon zil sesi olarak ayarlanmış."</string>
     <string name="play_selection" msgid="2854921021814550018">"Yürüt"</string>
     <string name="add_to_playlist" msgid="7110273488645072783">"Şarkı listesine ekle"</string>
     <string name="queue" msgid="2937629819482787704">"Geçerli şarkı listesi"</string>
index acf550e..3b27017 100644 (file)
     <string name="delete_item" msgid="3363330144534750601">"删除"</string>
     <string name="shuffle_all" msgid="1388193611787878773">"全部随机播放"</string>
     <string name="play_all" msgid="6309622568869321842">"全部播放"</string>
-    <string name="delete_artist_desc" msgid="1843750591006508005">"<xliff:g id="ARTIST">%s</xliff:g>的所有歌曲会从 SD 卡中永久删除。"</string>
-    <string name="delete_album_desc" msgid="535515999268177079">"整张“<xliff:g id="ALBUM">%s</xliff:g>”专辑会从 SD 卡中永久删除。"</string>
-    <string name="delete_song_desc" msgid="1856800468541831408">"“<xliff:g id="SONG">%s</xliff:g>”会从 SD 卡中永久删除。"</string>
+    <string name="delete_artist_desc" msgid="1843750591006508005">"将会从 SD 卡上永久删除<xliff:g id="ARTIST">%s</xliff:g>的所有歌曲。"</string>
+    <string name="delete_album_desc" msgid="535515999268177079">"将会从 SD 卡上永久删除整张“<xliff:g id="ALBUM">%s</xliff:g>”专辑。"</string>
+    <string name="delete_song_desc" msgid="1856800468541831408">"将会从 SD 卡上永久删除“<xliff:g id="SONG">%s</xliff:g>”。"</string>
     <string name="delete_confirm_button_text" msgid="7008121194944357274">"确定"</string>
   <plurals name="NNNtracksdeleted">
     <item quantity="one" msgid="8560276109508404217">"已删除 1 首歌曲。"</item>
-    <item quantity="other" msgid="5156740163031225200">"已删除 <xliff:g id="SONGS_TO_DELETE">%d</xliff:g> 首歌曲。"</item>
+    <item quantity="other" msgid="5156740163031225200">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> 首歌曲已删除。"</item>
   </plurals>
     <string name="scanning" msgid="3529383847223198502">"正在扫描 SD 卡..."</string>
-    <string name="nowplaying_title" msgid="8342523844307751761">"正在播放"</string>
+    <string name="nowplaying_title" msgid="8342523844307751761">"当前播放列表"</string>
     <string name="partyshuffle_title" msgid="6582413231529992125">"派对随机播放"</string>
     <string name="artists_title" msgid="8490372367259160067">"艺术家"</string>
     <string name="albums_menu" msgid="5807982055590211900">"专辑"</string>
@@ -63,8 +63,8 @@
     <string name="rename_playlist_menu" msgid="3133463747389494668">"重命名"</string>
     <string name="playlist_deleted_message" msgid="9008053828193961455">"播放列表已删除。"</string>
     <string name="playlist_renamed_message" msgid="7187580192703005990">"播放列表已重命名。"</string>
-    <string name="recentlyadded" msgid="110978416756366953">"æ\9c\80è¿\91æ·»å\8a ç\9a\84æ­\8cæ\9b²"</string>
-    <string name="recentlyadded_title" msgid="3153322287249901914">"æ\96°å¢\9eæ­\8cæ\9b²"</string>
+    <string name="recentlyadded" msgid="110978416756366953">"æ\9c\80è¿\91æ·»å\8a ç\9a\84æ\96\87件"</string>
+    <string name="recentlyadded_title" msgid="3153322287249901914">"æ\9c\80è¿\91æ·»å\8a ç\9a\84æ\96\87件"</string>
     <string name="podcasts_listitem" msgid="8657809279717670634">"播客"</string>
     <string name="podcasts_title" msgid="4928414142496858304">"播客"</string>
     <string name="sdcard_missing_title" msgid="9008284946643270850">"无 SD 卡"</string>
@@ -72,7 +72,7 @@
     <string name="sdcard_busy_title" msgid="1162763571147174655">"SD 卡不可用"</string>
     <string name="sdcard_busy_message" msgid="8071868348072728830">"抱歉,SD 卡正忙。"</string>
     <string name="sdcard_error_title" msgid="165682155008600643">"SD 卡错误"</string>
-    <string name="sdcard_error_message" msgid="4574563894036627855">"SD 卡出现错误。"</string>
+    <string name="sdcard_error_message" msgid="4574563894036627855">"SD 卡出现错误。"</string>
     <string name="unknown_artist_name" msgid="5567811106415855219">"未知艺术家"</string>
     <string name="unknown_album_name" msgid="8525145988941244727">"未知专辑"</string>
     <string name="shuffle_on_notif" msgid="5453708337808483943">"随机播放已打开。"</string>
     <string name="repeat_all_notif" msgid="6443293055987316642">"重复播放所有歌曲。"</string>
     <string name="ringtone_menu" msgid="2737472190159134599">"用作手机铃声"</string>
     <string name="ringtone_menu_short" msgid="3367622038867238133">"用作铃声"</string>
-    <string name="ringtone_set" msgid="5325818347613843130">"已将“<xliff:g id="NAME">%s</xliff:g>”设为手机铃声。"</string>
+    <string name="ringtone_set" msgid="5325818347613843130">"已将“<xliff:g id="NAME">%s</xliff:g>”设为手机铃声。"</string>
     <string name="play_selection" msgid="2854921021814550018">"播放"</string>
     <string name="add_to_playlist" msgid="7110273488645072783">"添加到播放列表"</string>
-    <string name="queue" msgid="2937629819482787704">"当前播放列表"</string>
-    <string name="new_playlist" msgid="7588112979692632867">"新建播放列表"</string>
-    <string name="new_playlist_name_template" msgid="905710296728900597">"新播放列表 <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="queue" msgid="2937629819482787704">"当前播放列表"</string>
+    <string name="new_playlist" msgid="7588112979692632867">"新建"</string>
+    <string name="new_playlist_name_template" msgid="905710296728900597">"新播放列表 <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
     <item quantity="one" msgid="422388042993582235">"已将 1 首歌曲添加到播放列表。"</item>
     <item quantity="other" msgid="7662771987109627255">"<xliff:g id="NUMBER">%d</xliff:g> 首歌曲已添加到播放列表。"</item>
   </plurals>
-    <string name="emptyplaylist" msgid="6711555673997896344">"您选的播放列表是空的。"</string>
+    <string name="emptyplaylist" msgid="6711555673997896344">"选定的播放列表为空。"</string>
     <string name="create_playlist_create_text" msgid="8149755205483279143">"保存"</string>
     <string name="create_playlist_overwrite_text" msgid="2007808383561024706">"覆盖"</string>
     <string name="service_start_error_title" msgid="8649916852210198813">"播放问题"</string>
index fa6eeb4..8fe222d 100644 (file)
@@ -157,11 +157,12 @@ public class AlbumBrowserActivity extends ListActivity
         mLastListPosCourse = lv.getFirstVisiblePosition();
         mLastListPosFine = lv.getChildAt(0).getTop();
         MusicUtils.unbindFromService(this);
-        if (!mAdapterSent) {
-            Cursor c = mAdapter.getCursor();
-            if (c != null) {
-                c.close();
-            }
+        // If we have an adapter and didn't send it off to another activity yet, we should
+        // close its cursor, which we do by assigning a null cursor to it. Doing this
+        // instead of closing the cursor directly keeps the framework from accessing
+        // the closed cursor later.
+        if (!mAdapterSent && mAdapter != null) {
+            mAdapter.changeCursor(null);
         }
         // Because we pass the adapter to the next activity, we need to make
         // sure it doesn't keep a reference to this activity. We can do this
@@ -629,6 +630,10 @@ public class AlbumBrowserActivity extends ListActivity
         
         @Override
         public void changeCursor(Cursor cursor) {
+            if (mActivity.isFinishing() && cursor != null) {
+                cursor.close();
+                cursor = null;
+            }
             if (cursor != mActivity.mAlbumCursor) {
                 mActivity.mAlbumCursor = cursor;
                 getColumnIndices(cursor);
index cc793df..1ab0ee9 100644 (file)
@@ -164,11 +164,12 @@ public class ArtistAlbumBrowserActivity extends ExpandableListActivity
         mLastListPosFine = lv.getChildAt(0).getTop();
         
         MusicUtils.unbindFromService(this);
-        if (!mAdapterSent) {
-            Cursor c = mAdapter.getCursor();
-            if (c != null) {
-                c.close();
-            }
+        // If we have an adapter and didn't send it off to another activity yet, we should
+        // close its cursor, which we do by assigning a null cursor to it. Doing this
+        // instead of closing the cursor directly keeps the framework from accessing
+        // the closed cursor later.
+        if (!mAdapterSent && mAdapter != null) {
+            mAdapter.changeCursor(null);
         }
         // Because we pass the adapter to the next activity, we need to make
         // sure it doesn't keep a reference to this activity. We can do this
@@ -817,6 +818,10 @@ public class ArtistAlbumBrowserActivity extends ExpandableListActivity
 
         @Override
         public void changeCursor(Cursor cursor) {
+            if (mActivity.isFinishing() && cursor != null) {
+                cursor.close();
+                cursor = null;
+            }
             if (cursor != mActivity.mArtistCursor) {
                 mActivity.mArtistCursor = cursor;
                 getColumnIndices(cursor);
index 021a199..63271c9 100644 (file)
@@ -282,6 +282,9 @@ public class MediaPlaybackActivity extends Activity implements MusicUtils.Defs,
             audioid = mService.getAudioId();
         } catch (RemoteException ex) {
             return true;
+        } catch (NullPointerException ex) {
+            // we might not actually have the service yet
+            return true;
         }
 
         if (MediaFile.UNKNOWN_STRING.equals(album) &&
@@ -535,7 +538,6 @@ public class MediaPlaybackActivity extends Activity implements MusicUtils.Defs,
             menu.add(0, PARTY_SHUFFLE, 0, R.string.party_shuffle); // icon will be set in onPrepareOptionsMenu()
             SubMenu sub = menu.addSubMenu(0, ADD_TO_PLAYLIST, 0,
                     R.string.add_to_playlist).setIcon(android.R.drawable.ic_menu_add);
-            MusicUtils.makePlaylistMenu(this, sub);
             // these next two are in a separate group, so they can be shown/hidden as needed
             // based on the keyguard state
             menu.add(1, USE_AS_RINGTONE, 0, R.string.ringtone_menu_short)
@@ -560,8 +562,16 @@ public class MediaPlaybackActivity extends Activity implements MusicUtils.Defs,
                 item.setTitle(R.string.party_shuffle);
             }
         }
+
+        item = menu.findItem(ADD_TO_PLAYLIST);
+        if (item != null) {
+            SubMenu sub = item.getSubMenu();
+            MusicUtils.makePlaylistMenu(this, sub);
+        }
+
         KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
         menu.setGroupVisible(1, !km.inKeyguardRestrictedInputMode());
+
         return true;
     }
 
@@ -686,6 +696,7 @@ public class MediaPlaybackActivity extends Activity implements MusicUtils.Defs,
 
     private boolean seekMethod1(int keyCode)
     {
+        if (mService == null) return false;
         for(int x=0;x<10;x++) {
             for(int y=0;y<3;y++) {
                 if(keyboard[y][x] == keyCode) {
index fb719b2..de753d0 100644 (file)
@@ -178,12 +178,13 @@ public class PlaylistBrowserActivity extends ListActivity
         mLastListPosCourse = lv.getFirstVisiblePosition();
         mLastListPosFine = lv.getChildAt(0).getTop();
         MusicUtils.unbindFromService(this);
-        if (!mAdapterSent) {
-            Cursor c = mAdapter.getCursor();
-            if (c != null) {
-                c.close();
-            }
-        }        
+        // If we have an adapter and didn't send it off to another activity yet, we should
+        // close its cursor, which we do by assigning a null cursor to it. Doing this
+        // instead of closing the cursor directly keeps the framework from accessing
+        // the closed cursor later.
+        if (!mAdapterSent && mAdapter != null) {
+            mAdapter.changeCursor(null);
+        }
         // Because we pass the adapter to the next activity, we need to make
         // sure it doesn't keep a reference to this activity. We can do this
         // by clearing its DatasetObservers, which setListAdapter(null) does.
@@ -599,6 +600,10 @@ public class PlaylistBrowserActivity extends ListActivity
 
         @Override
         public void changeCursor(Cursor cursor) {
+            if (mActivity.isFinishing() && cursor != null) {
+                cursor.close();
+                cursor = null;
+            }
             if (cursor != mActivity.mPlaylistCursor) {
                 mActivity.mPlaylistCursor = cursor;
                 super.changeCursor(cursor);
index 14d4952..2b883a0 100644 (file)
@@ -198,18 +198,19 @@ implements MusicUtils.Defs, ServiceConnection
     public void onDestroy() {
         MusicUtils.unbindFromService(this);
         unregisterReceiver(mScanListener);
-        super.onDestroy();
+        // If we have an adapter and didn't send it off to another activity yet, we should
+        // close its cursor, which we do by assigning a null cursor to it. Doing this
+        // instead of closing the cursor directly keeps the framework from accessing
+        // the closed cursor later.
         if (!mAdapterSent && mAdapter != null) {
-            Cursor c = mAdapter.getCursor();
-            if (c != null) {
-                c.close();
-            }
+            mAdapter.changeCursor(null);
         }
         // Because we pass the adapter to the next activity, we need to make
         // sure it doesn't keep a reference to this activity. We can do this
         // by clearing its DatasetObservers, which setListAdapter(null) does.
         setListAdapter(null);
         mAdapter = null;
+        super.onDestroy();
     }
     
     /*
@@ -450,6 +451,10 @@ implements MusicUtils.Defs, ServiceConnection
         }
         @Override
         public void changeCursor(Cursor cursor) {
+            if (mActivity.isFinishing() && cursor != null) {
+                cursor.close();
+                cursor = null;
+            }
             if (cursor != mActivity.mQueryCursor) {
                 mActivity.mQueryCursor = cursor;
                 super.changeCursor(cursor);
index 6c22e72..d159fb8 100644 (file)
@@ -127,7 +127,7 @@ public class TouchInterceptor extends ListView {
                         mLowerBound = Math.max(y + touchSlop, mHeight * 2 /3);
                         return false;
                     }
-                    mDragView = null;
+                    stopDragging();
                     break;
             }
         }
index 52559cf..1d22ff4 100644 (file)
@@ -247,13 +247,12 @@ public class TrackBrowserActivity extends ListActivity
             // we end up here in case we never registered the listeners
         }
         
-        // if we didn't send the adapter off to another activity, we should
-        // close the cursor
-        if (!mAdapterSent) {
-            Cursor c = mAdapter.getCursor();
-            if (c != null) {
-                c.close();
-            }
+        // If we have an adapter and didn't send it off to another activity yet, we should
+        // close its cursor, which we do by assigning a null cursor to it. Doing this
+        // instead of closing the cursor directly keeps the framework from accessing
+        // the closed cursor later.
+        if (!mAdapterSent && mAdapter != null) {
+            mAdapter.changeCursor(null);
         }
         // Because we pass the adapter to the next activity, we need to make
         // sure it doesn't keep a reference to this activity. We can do this
@@ -487,44 +486,8 @@ public class TrackBrowserActivity extends ListActivity
                 mDeletedOneRow = true;
             } else {
                 // update a saved playlist
-                Uri baseUri = MediaStore.Audio.Playlists.Members.getContentUri("external",
-                        Long.valueOf(mPlaylist));
-                ContentValues values = new ContentValues();
-                String where = MediaStore.Audio.Playlists.Members._ID + "=?";
-                String [] wherearg = new String[1];
-                ContentResolver res = getContentResolver();
-                
-                int colidx = mTrackCursor.getColumnIndexOrThrow(
-                        MediaStore.Audio.Playlists.Members.PLAY_ORDER);
-                if (from < to) {
-                    // move the item to somewhere later in the list
-                    mTrackCursor.moveToPosition(to);
-                    long toidx = mTrackCursor.getLong(colidx);
-                    mTrackCursor.moveToPosition(from);
-                    values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, toidx);
-                    wherearg[0] = mTrackCursor.getString(0);
-                    res.update(baseUri, values, where, wherearg);
-                    for (int i = from + 1; i <= to; i++) {
-                        mTrackCursor.moveToPosition(i);
-                        values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, i - 1);
-                        wherearg[0] = mTrackCursor.getString(0);
-                        res.update(baseUri, values, where, wherearg);
-                    }
-                } else if (from > to) {
-                    // move the item to somewhere earlier in the list
-                    mTrackCursor.moveToPosition(to);
-                    long toidx = mTrackCursor.getLong(colidx);
-                    mTrackCursor.moveToPosition(from);
-                    values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, toidx);
-                    wherearg[0] = mTrackCursor.getString(0);
-                    res.update(baseUri, values, where, wherearg);
-                    for (int i = from - 1; i >= to; i--) {
-                        mTrackCursor.moveToPosition(i);
-                        values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, i + 1);
-                        wherearg[0] = mTrackCursor.getString(0);
-                        res.update(baseUri, values, where, wherearg);
-                    }
-                }
+                MediaStore.Audio.Playlists.Members.moveItem(getContentResolver(),
+                        Long.valueOf(mPlaylist), from, to);
             }
         }
     };
@@ -538,6 +501,10 @@ public class TrackBrowserActivity extends ListActivity
 
     private void removePlaylistItem(int which) {
         View v = mTrackList.getChildAt(which - mTrackList.getFirstVisiblePosition());
+        if (v == null) {
+            Log.d(LOGTAG, "No view when removing playlist item " + which);
+            return;
+        }
         try {
             if (MusicUtils.sService != null
                     && which != MusicUtils.sService.getQueuePosition()) {
@@ -1504,6 +1471,10 @@ public class TrackBrowserActivity extends ListActivity
         
         @Override
         public void changeCursor(Cursor cursor) {
+            if (mActivity.isFinishing() && cursor != null) {
+                cursor.close();
+                cursor = null;
+            }
             if (cursor != mActivity.mTrackCursor) {
                 mActivity.mTrackCursor = cursor;
                 super.changeCursor(cursor);