Add all show all songs by artist option

This commit is contained in:
Joshua Bahnsen 2013-12-29 23:15:22 -07:00
parent 02f17e8592
commit 3585390fa5
10 changed files with 284 additions and 97 deletions

View File

@ -359,6 +359,9 @@
<string name="settings.video_default">Défaut</string>
<string name="settings.video_flash">Flash</string>
<string name="menu.share">Partager</string>
<string name="select_album_all_songs">All Songs by %s</string>
<string name="settings.show_all_songs_by_artist">Show All Songs By Artist</string>
<string name="settings.show_all_songs_by_artist_summary">Add new entry in artist view to access all songs for an artist</string>
<plurals name="select_album_n_songs">
<item quantity="zero">Aucun titre</item>

View File

@ -20,12 +20,12 @@
<string name="common.comment">Megjegyzés</string>
<string name="common.confirm">Jóváhagyás</string>
<string name="common.delete">Törlés</string>
<string name="common.download">Letöltés</string>
<string name="common.download">Letöltés (Gyorsítótárba)</string>
<string name="common.info">Részletek</string>
<string name="common.multiple_genres">Többféle műfaj</string>
<string name="common.name">Név</string>
<string name="common.ok">OK</string>
<string name="common.pin">Tárolás</string>
<string name="common.pin">Tárolás (Megőrzés az eszközön)</string>
<string name="common.play_last">Lejátszás (Utolsóként)</string>
<string name="common.play_next">Lejátszás (Következőként)</string>
<string name="common.play_now">Lejátszás</string>
@ -37,22 +37,22 @@
<string name="delete_playlist">Biztos, hogy törölni akarja? %1$s</string>
<string name="download.bookmark_removed" formatted="false">Könyvjelző eltávolítva.</string>
<string name="download.bookmark_set_at_position" formatted="false">Könyvjelző beállítva %s.</string>
<string name="download.empty">A lejátszási lista üres!</string>
<string name="download.empty">A várólista üres!</string>
<string name="download.jukebox_not_authorized">A távvezérlés nem áll rendelkezésre. Kérjük, engedélyezze a Jukebox módot a <b>Felhasználók &gt; Beállítások</b> menüpontban, az Ön Subsonic kiszolgálóján!</string>
<string name="download.jukebox_off">Távvezérlés kikapcsolása. A zenelejátszás a telefonon történik.</string>
<string name="download.jukebox_offline">A távvezérlés nem lehetséges kapcsolat nélküli módban!</string>
<string name="download.jukebox_on">Távvezérlés bekapcsolása. A zenelejátszás a kiszolgálón történik.</string>
<string name="download.jukebox_server_too_old">A távvezérlés nem támogatott. Kérjük, frissítse a Subsonic kiszolgálót!</string>
<string name="download.jukebox_volume">Távoli hangerő</string>
<string name="download.jukebox_volume">Hangerő távvezérlése</string>
<string name="download.menu_equalizer">Equalizer</string>
<string name="download.menu_jukebox_off">Jukebox ki</string>
<string name="download.menu_jukebox_on">Jukebox be</string>
<string name="download.menu_lyrics">Dalszövegek</string>
<string name="download.menu_lyrics">Dalszöveg</string>
<string name="download.menu_remove">Dal eltávolítása</string>
<string name="download.menu_save">Lejátszási lista mentése</string>
<string name="download.menu_save">Mentés lejátszási listába</string>
<string name="download.menu_screen_off">Kijelző ki</string>
<string name="download.menu_screen_on">Kijelző be</string>
<string name="download.menu_show_album">Album megjelenítése</string>
<string name="download.menu_show_album">Ugrás az albumhoz</string>
<string name="download.menu_shuffle">Véletlen sorrendű</string>
<string name="download.menu_shuffle_notification">Véletlen sorrendű lejátszás</string>
<string name="download.menu_visualizer">Visualizer</string>
@ -74,16 +74,16 @@
<string name="equalizer.preset">Profil kiválasztása</string>
<string name="error.label">Hiba!</string>
<string name="help.url">file:///android_asset/html/en/index.html</string>
<string name="jukebox.is_default">Jukebox alapértelmezettként</string>
<string name="jukebox.is_default">Jukebox alapértelmezésként</string>
<string name="lyrics.nomatch">Dalszöveg nem található!</string>
<string name="main.albums_alphaByArtist">Előadónév szerint</string>
<string name="main.albums_alphaByName">Albumnév szerint</string>
<string name="main.albums_alphaByName">Albumcím szerint</string>
<string name="main.albums_frequent">Legtöbbször lejátszott</string>
<string name="main.albums_highest">Legjobbra értékelt</string>
<string name="main.albums_newest">Utoljára hozzáadott</string>
<string name="main.albums_random">Véletlenszerű</string>
<string name="main.albums_recent">Utoljára lejátszott</string>
<string name="main.albums_starred">Csillagozott</string>
<string name="main.albums_starred">Csillaggal megjelölt</string>
<string name="main.albums_title">Albumok</string>
<string name="main.artists_title">Előadók</string>
<string name="main.genres_title">Műfajok</string>
@ -92,10 +92,10 @@
<string name="main.select_server">Kiszolgáló kiválasztása</string>
<string name="main.shuffle">Véletlen sorrendű</string>
<string name="main.songs_random">Véletlenszerű</string>
<string name="main.songs_starred">Csillagozott</string>
<string name="main.songs_starred">Csillaggal megjelölt</string>
<string name="main.songs_title">Dalok</string>
<string name="main.videos">Videók</string>
<string name="main.welcome_text">Üdvözli az UltraSonic! Az alkalmazás még nincs beállítva. Miután konfigurálta saját kiszolgálóját (elérhető: <b>subsonic.org</b>), húzza jobbra a képernyőt, lépjen be a <b>Beállítások</b> menüpontba, és adja meg csatlakozási adatokat!</string>
<string name="main.welcome_text">Üdvözli az UltraSonic! Az alkalmazás még nincs beállítva. Miután konfigurálta saját kiszolgálóját (elérhető: <b>subsonic.org</b>), húzza balról jobbra az oldalsávot, lépjen be a <b>Beállítások</b> menüpontba, és adja meg csatlakozási adatokat!</string>
<string name="main.welcome_title">Üdvözlet!</string>
<string name="menu.about">Névjegy</string>
<string name="menu.common">Általános</string>
@ -127,7 +127,7 @@
<string name="search.search">Érintse meg a kereséshez</string>
<string name="search.songs">Dalok</string>
<string name="search.title">Keresés</string>
<string name="select_album.donate_dialog_0_trial_days_left">A próba időszak lejárt!</string>
<string name="select_album.donate_dialog_0_trial_days_left">A próbaidőszak lejárt!</string>
<string name="select_album.donate_dialog_later">Később</string>
<string name="select_album.donate_dialog_message">Korlátlan letöltéshez juthat a Subsonic támogatásával.</string>
<string name="select_album.donate_dialog_now">Most</string>
@ -143,19 +143,19 @@
<string name="select_genre.empty">Műfajok nem találhatók!</string>
<string name="select_playlist.empty">Nincs mentett lejátszási lista a kiszolgálón.</string>
<string name="service.connecting">Csatlakozás a kiszolgálóhoz, kérem várjon!</string>
<string name="settings.appearance_title">Megjelenítés</string>
<string name="settings.appearance_title">Megjelenés</string>
<string name="settings.buffer_length">Pufferméret</string>
<string name="settings.buffer_length_0">Letiltva</string>
<string name="settings.buffer_length_1">1 másodperc</string>
<string name="settings.buffer_length_10">10 másodperc</string>
<string name="settings.buffer_length_12">12 másodperc</string>
<string name="settings.buffer_length_120">2 minutes</string>
<string name="settings.buffer_length_120">2 perc</string>
<string name="settings.buffer_length_15">15 másodperc</string>
<string name="settings.buffer_length_2">2 másodperc</string>
<string name="settings.buffer_length_20">20 másodperc</string>
<string name="settings.buffer_length_30">30 másodperc</string>
<string name="settings.buffer_length_5">5 másodperc</string>
<string name="settings.buffer_length_60">60 másodperc</string>
<string name="settings.buffer_length_60">1 perc</string>
<string name="settings.buffer_length_8">8 másodperc</string>
<string name="settings.cache_location">Gyorsítótár helye</string>
<string name="settings.cache_location_error">Hibás gyorsítótár hely! Az alapértelmezett használata.</string>
@ -173,8 +173,8 @@
<string name="settings.chat_refresh">Csevegés frissítési gyakorisága</string>
<string name="settings.clear_bookmark">Könyvjelző törlése</string>
<string name="settings.clear_bookmark_summary">Könyvjelző törlése a dal lejátszása után.</string>
<string name="settings.clear_playlist">Lejátszási lista törlése</string>
<string name="settings.clear_playlist_summary">Lejátszási lista törlése az összes dal lejátszása után.</string>
<string name="settings.clear_playlist">Várólista törlése</string>
<string name="settings.clear_playlist_summary">Várólista törlése az összes dal lejátszása után.</string>
<string name="settings.clear_search_history">Keresési előzmények törlése</string>
<string name="settings.connection_failure">Csatlakozási hiba!</string>
<string name="settings.default_albums">Albumok találati száma</string>
@ -229,8 +229,8 @@
<string name="settings.network_timeout_60000">60 másodperc</string>
<string name="settings.network_timeout_75000">75 másodperc</string>
<string name="settings.network_timeout_90000">90 másodperc</string>
<string name="settings.network_title">Hálózat</string>
<string name="settings.notifications_title">Értesítések</string>
<string name="settings.network_title">Hálózat</string>
<string name="settings.other_title">Egyéb beállítások</string>
<string name="settings.playback_control_title">Lejátszás-vezérlés beállításai</string>
<string name="settings.preload">Dalok előolvasása</string>
@ -240,7 +240,7 @@
<string name="settings.preload_3">3 dal</string>
<string name="settings.preload_5">5 dal</string>
<string name="settings.preload_unlimited">Korlátlan</string>
<string name="settings.screen_lit_summary">Képernyő ébrentartása a letöltési sebesség növelése érdekében.</string>
<string name="settings.screen_lit_summary">Képernyő ébrentartása a letöltés alatt, a magasabb letöltési sebesség érdekében.</string>
<string name="settings.screen_lit_title">Képernyő ébrentartása</string>
<string name="settings.scrobble_summary">A Last.fm felhasználónevet és jelszót be kell állítani a Subsonic kiszolgálón!</string>
<string name="settings.scrobble_title">Továbbítás Last.fm-re (Scrobbling)</string>
@ -278,7 +278,7 @@
<string name="settings.show_lockscreen_controls_summary">Lejátszó-kezelőpanel megjelenítése a képernyőzáron.</string>
<string name="settings.show_notification">Értesítések megjelenítése</string>
<string name="settings.show_notification_always">Állandó kijelzés</string>
<string name="settings.show_notification_always_summary">Lejátszás jelzése az értesítési sávon, míg a lejátszási lista aktív.</string>
<string name="settings.show_notification_always_summary">Lejátszás jelzése az értesítési sávon, míg a várólista aktív.</string>
<string name="settings.show_notification_summary">Lejátszás jelzése az értesítési sávon.</string>
<string name="settings.show_now_playing">Lejátszó-kezelőpanel</string>
<string name="settings.show_now_playing_summary">Lejátszó-kezelőpanel megjelenítése minden oldalon.</string>
@ -292,24 +292,24 @@
<string name="settings.theme_light">Világos</string>
<string name="settings.theme_title">Téma</string>
<string name="settings.use_folder_for_album_artist">Mappanevek használata az előadók neveként</string>
<string name="settings.use_folder_for_album_artist_summary">Feltételezi, hogy a legfelső szintű mappa az elődó neve.</string>
<string name="settings.use_folder_for_album_artist_summary">Feltételezi, hogy a legfelső szintű mappa az előadó neve.</string>
<string name="settings.use_id3">Böngészés ID3 Tag használatával</string>
<string name="settings.use_id3_summary">ID3 Tag módszer használata a fájlredszer alapú mód helyett.</string>
<string name="settings.video_title">Videó</string>
<string name="settings.video_player">Videólejátszó</string>
<string name="settings.view_refresh">Megtekinté Frissítési</string>
<string name="settings.view_refresh_500">0,5 másodperc</string>
<string name="settings.view_refresh">Nézet frissítési gyakorisága</string>
<string name="settings.view_refresh_500">.5 másodperc</string>
<string name="settings.view_refresh_1000">1 másodperc</string>
<string name="settings.view_refresh_1500">1,5 másodperc</string>
<string name="settings.view_refresh_1500">1.5 másodperc</string>
<string name="settings.view_refresh_2000">2 másodperc</string>
<string name="settings.view_refresh_2500">2,5 másodperc</string>
<string name="settings.view_refresh_2500">2.5 másodperc</string>
<string name="settings.view_refresh_3000">3 másodperc</string>
<string name="settings.view_refresh_3500">3,5 másodperc</string>
<string name="settings.view_refresh_3500">3.5 másodperc</string>
<string name="settings.view_refresh_4000">4 másodperc</string>
<string name="settings.view_refresh_4500">4,5 másodperc</string>
<string name="settings.view_refresh_4500">4.5 másodperc</string>
<string name="settings.view_refresh_5000">5 másodperc</string>
<string name="settings.wifi_required_summary">Streaming, csak ha rendelkezésre áll Wi-Fi kapcsolat.</string>
<string name="settings.wifi_required_title">Csak Wi-Fi streaming</string>
<string name="settings.wifi_required_summary">Streaming csak Wi-Fi hálózaton keresztül.</string>
<string name="settings.wifi_required_title">Streaming csak Wi-Fivel</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -323,42 +323,45 @@
<string name="widget.initial_text">Érintse meg a zene kiválasztásához</string>
<string name="widget.sdcard_busy">Az SD kártya nem elérhető!</string>
<string name="widget.sdcard_missing">Nincs SD kártya!</string>
<string name="settings.share_description_default">Alapértelmezett share leírás</string>
<string name="settings.sharing_title">Megosztása</string>
<string name="settings.sharing_always_ask_for_details_summary">Mindig kérjen leírása és lejárati létrehozásakor a részvény</string>
<string name="settings.sharing_always_ask_for_details">Mindig kérjen részleteket</string>
<string name="settings.share_expiration_default">Alapértelmezett idő a lejárati</string>
<string name="do_not_show_dialog_again">Ne mutassa párbeszédablak többé</string>
<string name="share_set_share_options">Megosztási lehetőségek</string>
<string name="no_expiration">Nincs lejárati</string>
<string name="download.toggle_playlist">Kapcsoló lejátszási lista nézet</string>
<string name="download.bookmark_set">Beállított könyvjelző</string>
<string name="settings.share_description_default">Megosztás alapértelmezett leírása</string>
<string name="settings.sharing_title">Megosztás</string>
<string name="settings.sharing_always_ask_for_details_summary">Megosztás létrehozásakor mindig kérje be a leírást és a lejárati időt.</string>
<string name="settings.sharing_always_ask_for_details">Mindig kérdezzen rá a részletekre</string>
<string name="settings.share_expiration_default">Alapértelmezett lejárati idő</string>
<string name="do_not_show_dialog_again">A párbeszédablak ne jelenjen meg többé</string>
<string name="share_set_share_options">Megosztás beállításai</string>
<string name="no_expiration">Nincs lejárati idő</string>
<string name="download.toggle_playlist">Toggle Playlist</string>
<string name="download.bookmark_set">Könyvjelző létrehozása</string>
<string name="download.bookmark_delete">Könyvjelző törlése</string>
<string name="download.menu_star">Csillag</string>
<string name="download.menu_clear_playlist">Törölje a lejátszási lista</string>
<string name="button_bar.shares">Dalok osztani másokkal</string>
<string name="select_share.empty">Nincs dalok osztani másokkal elérhető a szerveren</string>
<string name="menu_deleted_share">Megosztani törölték %s</string>
<string name="menu_deleted_share_error">Nem törölheti megosztott dal másokkal %s</string>
<string name="settings.share_milliseconds">Milliszekundum</string>
<string name="download.menu_clear_playlist">Clear Playlist</string>
<string name="button_bar.shares">Megosztás</string>
<string name="select_share.empty">Nincs mentett megosztás a kiszolgálón.</string>
<string name="menu_deleted_share">%s megosztás törölve</string>
<string name="menu_deleted_share_error">%s megosztás törlése sikertelen!</string>
<string name="settings.share_milliseconds">Ezredmásodperc</string>
<string name="settings.share_seconds">Másodperc</string>
<string name="settings.share_minutes">Perc</string>
<string name="settings.share_hours">Óra</string>
<string name="settings.share_days">Nap</string>
<string name="time_span_disable">Tiltsa</string>
<string name="time_span_disabled">Rokkant</string>
<string name="save_as_defaults">Menteni az alapértelmezett</string>
<string name="time_span_disable">Letiltva</string>
<string name="time_span_disabled">Letiltva</string>
<string name="save_as_defaults">Mentés alapértelmezésként</string>
<string name="share_comment">Megjegyzés</string>
<string name="settings.share_expiration">Lejárati</string>
<string name="download_song_removed">\"%s\" ez a dal törölték</string>
<string name="download.share_playlist">Ossza meg ezt a lejátszási lista</string>
<string name="settings.share_greeting_default">Alapértelmezett megosztási üdvözlő</string>
<string name="share_default_greeting">Nézd meg ezt a zenét közös nektek %s</string>
<string name="share_via">Megosztani dalok</string>
<string name="settings.share_expiration">Lejárati idő</string>
<string name="download_song_removed">\"%s\" eltávolítva a várólistáról</string>
<string name="download.share_playlist">Várólista megosztása</string>
<string name="settings.share_greeting_default">Alapértelmezett megosztási üzenet</string>
<string name="share_default_greeting">Hallgasd meg ezt a zenét, megosztottam innen: %s</string>
<string name="share_via">Dalok megosztása ezzel</string>
<string name="settings.video_mx_player">MX Player</string>
<string name="settings.video_default">Alapértelmezett</string>
<string name="settings.video_flash">Flash</string>
<string name="menu.share">Megosztani</string>
<string name="menu.share">Megosztás</string>
<string name="select_album_all_songs">All Songs by %s</string>
<string name="settings.show_all_songs_by_artist">Show All Songs By Artist</string>
<string name="settings.show_all_songs_by_artist_summary">Add new entry in artist view to access all songs for an artist</string>
<plurals name="select_album_n_songs">
<item quantity="zero">Nincsenek dalok</item>
@ -378,16 +381,16 @@
<item quantity="other">%d dal tárolása visszavonva.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">1 dal hozzáadva a lejátszási sorhoz.</item>
<item quantity="other">%d dal hozzáadva a lejátszási sorhoz.</item>
<item quantity="one">1 dal hozzáadva a várólistához utolsóként.</item>
<item quantity="other">%d dal hozzáadva a várólistához utolsóként.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">1 dal hozzáadva következőként.</item>
<item quantity="other">%d dal hozzáadva következőként.</item>
<item quantity="one">1 dal hozzáadva a várólistához következőként.</item>
<item quantity="other">%d dal hozzáadva a várólistához következőként.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">1 nap van hátra a próba időszakból.</item>
<item quantity="other">%d nap van hátra a próba időszakból.</item>
</plurals>
</resources>
</resources>

View File

@ -359,6 +359,9 @@
<string name="settings.video_default">Default</string>
<string name="settings.video_flash">Flash</string>
<string name="menu.share">Share</string>
<string name="select_album_all_songs">All Songs by %s</string>
<string name="settings.show_all_songs_by_artist">Show All Songs By Artist</string>
<string name="settings.show_all_songs_by_artist_summary">Add new entry in artist view to access all songs for an artist</string>
<plurals name="select_album_n_songs">
<item quantity="zero">No songs</item>

View File

@ -56,6 +56,11 @@
a:key="mediaButtons"
a:summary="@string/settings.media_button_summary"
a:title="@string/settings.media_button_title" />
<CheckBoxPreference
a:defaultValue="false"
a:key="showAllSongsByArtist"
a:summary="@string/settings.show_all_songs_by_artist_summary"
a:title="@string/settings.show_all_songs_by_artist"/>
<CheckBoxPreference
a:defaultValue="true"
a:key="transitionToDownloadOnPlay"

View File

@ -49,7 +49,9 @@ import com.thejoshwa.ultrasonic.androidapp.util.Util;
import com.thejoshwa.ultrasonic.androidapp.view.EntryAdapter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
@ -58,6 +60,7 @@ import static com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshList
public class SelectAlbumActivity extends SubsonicTabActivity
{
public static final String allSongsId = "-1";
private PullToRefreshListView refreshAlbumListView;
private ListView albumListView;
private View header;
@ -77,7 +80,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
private MenuItem playAllButton;
private MenuItem shareButton;
private boolean showHeader = true;
private Random random = new Random();
private Random random = new java.security.SecureRandom();
/**
* Called when the activity is first created.
@ -119,6 +122,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
intent.putExtra(Constants.INTENT_EXTRA_NAME_ID, entry.getId());
intent.putExtra(Constants.INTENT_EXTRA_NAME_IS_ALBUM, entry.isDirectory());
intent.putExtra(Constants.INTENT_EXTRA_NAME_NAME, entry.getTitle());
intent.putExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID, entry.getParent());
Util.startActivityWithoutTransition(SelectAlbumActivity.this, intent);
}
else if (entry != null && entry.isVideo())
@ -221,6 +225,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
String id = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID);
boolean isAlbum = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_IS_ALBUM, false);
String name = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_NAME);
String parentId = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID);
String playlistId = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID);
String playlistName = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME);
String shareId = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_SHARE_ID);
@ -271,7 +276,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
{
if (isAlbum)
{
getAlbum(id, name);
getAlbum(id, name, parentId);
}
else
{
@ -280,7 +285,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
}
else
{
getMusicDirectory(id, name);
getMusicDirectory(id, name, parentId);
}
}
}
@ -320,7 +325,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
{
List<MusicDirectory.Entry> selectedSongs = getSelectedSongs(albumListView);
if (selectedSongs.size() > 0)
if (!selectedSongs.isEmpty())
{
download(append, false, !append, false, shuffle, selectedSongs);
selectAll(false, false);
@ -498,7 +503,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
return false;
}
private void getMusicDirectory(final String id, final String name)
private void getMusicDirectory(final String id, final String name, final String parentId)
{
setActionBarSubtitle(name);
@ -507,8 +512,80 @@ public class SelectAlbumActivity extends SubsonicTabActivity
@Override
protected MusicDirectory load(MusicService service) throws Exception
{
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
return service.getMusicDirectory(id, name, refresh, SelectAlbumActivity.this, this);
MusicDirectory root = new MusicDirectory();
if (allSongsId.equals(id))
{
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
MusicDirectory musicDirectory = service.getMusicDirectory(parentId, name, refresh, SelectAlbumActivity.this, this);
List<MusicDirectory.Entry> songs = new LinkedList<MusicDirectory.Entry>();
getSongsRecursively(musicDirectory, songs);
for (MusicDirectory.Entry song : songs)
{
if (!song.isDirectory())
{
root.addChild(song);
}
}
}
else
{
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
MusicDirectory musicDirectory = service.getMusicDirectory(id, name, refresh, SelectAlbumActivity.this, this);
if (Util.getShouldShowAllSongsByArtist(SelectAlbumActivity.this) && musicDirectory.findChild(allSongsId) == null && musicDirectory.getChildren(true, false).size() == musicDirectory.getChildren(true, true).size())
{
MusicDirectory.Entry allSongs = new MusicDirectory.Entry();
allSongs.setIsDirectory(true);
allSongs.setArtist(name);
allSongs.setParent(id);
allSongs.setId(allSongsId);
allSongs.setTitle(String.format(getResources().getString(R.string.select_album_all_songs), name));
root.addChild(allSongs);
List<MusicDirectory.Entry> children = musicDirectory.getChildren();
if (children != null)
{
root.addAll(children);
}
}
else
{
root = musicDirectory;
}
}
return root;
}
private void getSongsRecursively(MusicDirectory parent, List<MusicDirectory.Entry> songs) throws Exception
{
for (MusicDirectory.Entry song : parent.getChildren(false, true))
{
if (!song.isVideo() && !song.isDirectory())
{
songs.add(song);
}
}
MusicService musicService = MusicServiceFactory.getMusicService(SelectAlbumActivity.this);
for (MusicDirectory.Entry dir : parent.getChildren(true, false))
{
MusicDirectory root;
if (!allSongsId.equals(dir.getId()))
{
root = musicService.getMusicDirectory(dir.getId(), dir.getTitle(), false, SelectAlbumActivity.this, this);
getSongsRecursively(root, songs);
}
}
}
}.execute();
}
@ -522,13 +599,41 @@ public class SelectAlbumActivity extends SubsonicTabActivity
@Override
protected MusicDirectory load(MusicService service) throws Exception
{
MusicDirectory root = new MusicDirectory();
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
return service.getArtist(id, name, refresh, SelectAlbumActivity.this, this);
MusicDirectory musicDirectory = service.getArtist(id, name, refresh, SelectAlbumActivity.this, this);
if (Util.getShouldShowAllSongsByArtist(SelectAlbumActivity.this) && musicDirectory.findChild(allSongsId) == null && musicDirectory.getChildren(true, false).size() == musicDirectory.getChildren(true, true).size())
{
MusicDirectory.Entry allSongs = new MusicDirectory.Entry();
allSongs.setIsDirectory(true);
allSongs.setArtist(name);
allSongs.setParent(id);
allSongs.setId(allSongsId);
allSongs.setTitle(String.format(getResources().getString(R.string.select_album_all_songs), name));
root.addFirst(allSongs);
List<MusicDirectory.Entry> children = musicDirectory.getChildren();
if (children != null)
{
root.addAll(children);
}
}
else
{
root = musicDirectory;
}
return root;
}
}.execute();
}
private void getAlbum(final String id, final String name)
private void getAlbum(final String id, final String name, final String parentId)
{
setActionBarSubtitle(name);
@ -537,8 +642,55 @@ public class SelectAlbumActivity extends SubsonicTabActivity
@Override
protected MusicDirectory load(MusicService service) throws Exception
{
MusicDirectory musicDirectory;
boolean refresh = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_REFRESH, false);
return service.getAlbum(id, name, refresh, SelectAlbumActivity.this, this);
if (allSongsId.equals(id))
{
MusicDirectory root = new MusicDirectory();
Collection<MusicDirectory.Entry> songs = new LinkedList<MusicDirectory.Entry>();
getSongsForArtist(parentId, songs);
for (MusicDirectory.Entry song : songs)
{
if (!song.isDirectory())
{
root.addChild(song);
}
}
musicDirectory = root;
}
else
{
musicDirectory = service.getAlbum(id, name, refresh, SelectAlbumActivity.this, this);
}
return musicDirectory;
}
private void getSongsForArtist(String id, Collection<MusicDirectory.Entry> songs) throws Exception
{
MusicService musicService = MusicServiceFactory.getMusicService(SelectAlbumActivity.this);
MusicDirectory artist = musicService.getArtist(id, "", false, SelectAlbumActivity.this, this);
for (MusicDirectory.Entry album : artist.getChildren())
{
if (!allSongsId.equals(album.getId()))
{
MusicDirectory albumDirectory = musicService.getAlbum(album.getId(), "", false, SelectAlbumActivity.this, this);
for (MusicDirectory.Entry song : albumDirectory.getChildren())
{
if (!song.isVideo())
{
songs.add(song);
}
}
}
}
}
}.execute();
}
@ -649,7 +801,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
}.execute();
}
private void getShare(final String shareId, final String shareName)
private void getShare(final String shareId, final CharSequence shareName)
{
setActionBarSubtitle(shareName);

View File

@ -219,6 +219,7 @@ public class SelectArtistActivity extends SubsonicTabActivity implements Adapter
Intent intent = new Intent(this, SelectAlbumActivity.class);
intent.putExtra(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
intent.putExtra(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
intent.putExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID, artist.getId());
intent.putExtra(Constants.INTENT_EXTRA_NAME_ARTIST, true);
Util.startActivityWithoutTransition(this, intent);
}

View File

@ -18,13 +18,14 @@
*/
package com.thejoshwa.ultrasonic.androidapp.domain;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.io.Serializable;
/**
* @author Sindre Mehus
@ -45,6 +46,16 @@ public class MusicDirectory
this.name = name;
}
public void addAll(Collection<Entry> entries)
{
children.addAll(entries);
}
public void addFirst(Entry child)
{
children.add(0, child);
}
public void addChild(Entry child)
{
children.add(child);
@ -55,6 +66,21 @@ public class MusicDirectory
return getChildren(true, true);
}
public Entry findChild(String id)
{
Entry entry = null;
for (Entry song : getChildren())
{
if (song.getId().equals(id))
{
entry = song;
}
}
return entry;
}
public List<Entry> getChildren(boolean includeDirs, boolean includeFiles)
{
if (includeDirs && includeFiles)

View File

@ -41,6 +41,7 @@ public final class Constants
public static final String INTENT_EXTRA_NAME_AUTOPLAY = "subsonic.playall";
public static final String INTENT_EXTRA_NAME_QUERY = "subsonic.query";
public static final String INTENT_EXTRA_NAME_PLAYLIST_ID = "subsonic.playlist.id";
public static final String INTENT_EXTRA_NAME_PARENT_ID = "subsonic.parent.id";
public static final String INTENT_EXTRA_NAME_PLAYLIST_NAME = "subsonic.playlist.name";
public static final String INTENT_EXTRA_NAME_SHARE_ID = "subsonic.share.id";
public static final String INTENT_EXTRA_NAME_SHARE_NAME = "subsonic.share.name";
@ -124,6 +125,7 @@ public final class Constants
public static final String PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION = "sharingDefaultDescription";
public static final String PREFERENCES_KEY_DEFAULT_SHARE_GREETING = "sharingDefaultGreeting";
public static final String PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION = "sharingDefaultExpiration";
public static final String PREFERENCES_KEY_SHOW_ALL_SONGS_BY_ARTIST = "showAllSongsByArtist";
// Name of the preferences file.
public static final String PREFERENCES_FILE_NAME = "com.thejoshwa.ultrasonic.androidapp_preferences";

View File

@ -46,7 +46,6 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.widget.DatePicker;
import android.widget.RemoteViews;
import android.widget.Toast;
@ -81,8 +80,6 @@ import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -468,21 +465,20 @@ public class Util extends DownloadActivity
public static void atomicCopy(File from, File to) throws IOException
{
FileInputStream in = null;
FileOutputStream out = null;
File tmp = null;
File tmp = new File(String.format("%s.tmp", to.getPath()));
FileInputStream in = new FileInputStream(from);
FileOutputStream out = new FileOutputStream(tmp);
try
{
tmp = new File(String.format("%s.tmp", to.getPath()));
in = new FileInputStream(from);
out = new FileOutputStream(tmp);
in.getChannel().transferTo(0, from.length(), out.getChannel());
out.close();
if (!tmp.renameTo(to))
{
throw new IOException(String.format("Failed to rename %s to %s", tmp, to));
}
Log.i(TAG, String.format("Copied %s to %s", from, to));
}
catch (IOException x)
@ -714,12 +710,13 @@ public class Util extends DownloadActivity
{
int length = data.length;
char[] out = new char[length << 1];
int j = 0;
// two characters form the hex value.
for (int i = 0, j = 0; i < length; i++)
for (byte aData : data)
{
out[j++] = HEX_DIGITS[(0xF0 & data[i]) >>> 4];
out[j++] = HEX_DIGITS[0x0F & data[i]];
out[j++] = HEX_DIGITS[(0xF0 & aData) >>> 4];
out[j++] = HEX_DIGITS[0x0F & aData];
}
return new String(out);
@ -1574,17 +1571,6 @@ public class Util extends DownloadActivity
return Integer.parseInt(preferences.getString(Constants.PREFERENCES_KEY_VIEW_REFRESH, "1000"));
}
public static Date getDateFromDatePicker(DatePicker datePicker) {
int day = datePicker.getDayOfMonth();
int month = datePicker.getMonth();
int year = datePicker.getYear();
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
return calendar.getTime();
}
public static boolean getShouldAskForShareDetails(Context context)
{
SharedPreferences preferences = getPreferences(context);
@ -1652,4 +1638,10 @@ public class Util extends DownloadActivity
editor.putString(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION, defaultShareDescription);
editor.commit();
}
public static boolean getShouldShowAllSongsByArtist(Context context)
{
SharedPreferences preferences = getPreferences(context);
return preferences.getBoolean(Constants.PREFERENCES_KEY_SHOW_ALL_SONGS_BY_ARTIST, false);
}
}

View File

@ -99,7 +99,7 @@ public class AlbumView extends UpdateView
starImageView.setImageDrawable(starred ? starDrawable : starHollowDrawable);
imageLoader.loadImage(this.coverArtView, album, false, 0, false, true);
if (Util.isOffline(this.context))
if (Util.isOffline(this.context) || "-1".equals(album.getId()))
{
starImageView.setVisibility(View.GONE);
}