<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
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
@Override
public void changeCursor(Cursor cursor) {
+ if (mActivity.isFinishing() && cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
if (cursor != mActivity.mAlbumCursor) {
mActivity.mAlbumCursor = cursor;
getColumnIndices(cursor);
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
@Override
public void changeCursor(Cursor cursor) {
+ if (mActivity.isFinishing() && cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
if (cursor != mActivity.mArtistCursor) {
mActivity.mArtistCursor = cursor;
getColumnIndices(cursor);
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) &&
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)
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;
}
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) {
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.
@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);
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();
}
/*
}
@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);
mLowerBound = Math.max(y + touchSlop, mHeight * 2 /3);
return false;
}
- mDragView = null;
+ stopDragging();
break;
}
}
// 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
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);
}
}
};
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()) {
@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);