diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2d0152c4..5597ce42 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + a:versionCode="32" + a:versionName="1.2.0.5" > diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java index 556dff6c..ccfe60c3 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/SelectAlbumActivity.java @@ -188,7 +188,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); - + boolean isArtist = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_ARTIST, false); String name = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_NAME); String playlistId = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID); String playlistName = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME); @@ -268,6 +268,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity { private void playAll(final boolean shuffle, final boolean append) { boolean hasSubFolders = false; + for (int i = 0; i < albumListView.getCount(); i++) { MusicDirectory.Entry entry = (MusicDirectory.Entry) albumListView.getItemAtPosition(i); if (entry != null && entry.isDirectory()) { @@ -276,9 +277,11 @@ public class SelectAlbumActivity extends SubsonicTabActivity { } } + boolean isArtist = getIntent().getBooleanExtra(Constants.INTENT_EXTRA_NAME_ARTIST, false); String id = getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID); + if (hasSubFolders && id != null) { - downloadRecursively(id, false, append, !append, shuffle, false, false, false, false); + downloadRecursively(id, false, append, !append, shuffle, false, false, false, isArtist); } else { selectAll(true, false); download(append, false, !append, false, shuffle, getSelectedSongs(albumListView)); @@ -565,18 +568,21 @@ public class SelectAlbumActivity extends SubsonicTabActivity { private void selectAllOrNone() { boolean someUnselected = false; int count = albumListView.getCount(); + for (int i = 0; i < count; i++) { if (!albumListView.isItemChecked(i) && albumListView.getItemAtPosition(i) instanceof MusicDirectory.Entry) { someUnselected = true; break; } } + selectAll(someUnselected, true); } private void selectAll(boolean selected, boolean toast) { int count = albumListView.getCount(); int selectedCount = 0; + for (int i = 0; i < count; i++) { MusicDirectory.Entry entry = (MusicDirectory.Entry) albumListView.getItemAtPosition(i); if (entry != null && !entry.isDirectory() && !entry.isVideo()) { @@ -630,7 +636,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity { private void downloadBackground(final boolean save) { List songs = getSelectedSongs(albumListView); - if(songs.isEmpty()) { + if (songs.isEmpty()) { selectAll(true, false); songs = getSelectedSongs(albumListView); } @@ -662,10 +668,12 @@ public class SelectAlbumActivity extends SubsonicTabActivity { private void delete() { List songs = getSelectedSongs(albumListView); - if(songs.isEmpty()) { + + if (songs.isEmpty()) { selectAll(true, false); songs = getSelectedSongs(albumListView); } + if (getDownloadService() != null) { getDownloadService().delete(songs); } diff --git a/src/com/thejoshwa/ultrasonic/androidapp/activity/SubsonicTabActivity.java b/src/com/thejoshwa/ultrasonic/androidapp/activity/SubsonicTabActivity.java index c7ee8567..60d6dc3c 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/activity/SubsonicTabActivity.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/activity/SubsonicTabActivity.java @@ -60,6 +60,7 @@ import com.thejoshwa.ultrasonic.androidapp.service.MusicServiceFactory; import com.thejoshwa.ultrasonic.androidapp.service.OfflineException; import com.thejoshwa.ultrasonic.androidapp.service.ServerTooOldException; import com.thejoshwa.ultrasonic.androidapp.util.Constants; +import com.thejoshwa.ultrasonic.androidapp.util.EntryByDiscAndTrackComparator; import com.thejoshwa.ultrasonic.androidapp.util.ImageLoader; import com.thejoshwa.ultrasonic.androidapp.util.ModalBackgroundTask; import com.thejoshwa.ultrasonic.androidapp.util.SilentBackgroundTask; @@ -71,6 +72,7 @@ import net.simonvt.menudrawer.Position; import java.io.File; import java.io.PrintWriter; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -659,11 +661,11 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ List songs = new LinkedList(); MusicDirectory root; - if (isArtist && Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { + if (!Util.isOffline(SubsonicTabActivity.this) && isArtist && Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { getSongsForArtist(id, songs); } else { if (isDirectory) { - if (Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { + if (!Util.isOffline(SubsonicTabActivity.this) && Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { root = musicService.getAlbum(id, name, false, SubsonicTabActivity.this, this); } else { root = musicService.getMusicDirectory(id, name, false, SubsonicTabActivity.this, this); @@ -694,7 +696,7 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ for (MusicDirectory.Entry dir : parent.getChildren(true, false)) { MusicDirectory root; - if (Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { + if (!Util.isOffline(SubsonicTabActivity.this) && Util.getShouldUseId3Tags(SubsonicTabActivity.this)) { root = musicService.getAlbum(dir.getId(), dir.getTitle(), false, SubsonicTabActivity.this, this); } else { root = musicService.getMusicDirectory(dir.getId(), dir.getTitle(), false, SubsonicTabActivity.this, this); @@ -725,7 +727,11 @@ public class SubsonicTabActivity extends Activity implements OnClickListener{ @Override protected void done(List songs) { - DownloadService downloadService = getDownloadService(); + if (Util.getShouldSortByDisc(SubsonicTabActivity.this)){ + Collections.sort(songs, new EntryByDiscAndTrackComparator()); + } + + DownloadService downloadService = getDownloadService(); if (!songs.isEmpty() && downloadService != null) { if (!append && !playNext && !unpin && !background) { downloadService.clear(); diff --git a/src/com/thejoshwa/ultrasonic/androidapp/util/EntryByDiscAndTrackComparator.java b/src/com/thejoshwa/ultrasonic/androidapp/util/EntryByDiscAndTrackComparator.java index bc7662ed..c4c38571 100644 --- a/src/com/thejoshwa/ultrasonic/androidapp/util/EntryByDiscAndTrackComparator.java +++ b/src/com/thejoshwa/ultrasonic/androidapp/util/EntryByDiscAndTrackComparator.java @@ -11,9 +11,30 @@ public class EntryByDiscAndTrackComparator implements Comparator b ? 1 : 0; } + + private int compare(String a, String b) { + if (a == null && b == null) { + return 0; + } + + if (a == null && b != null) { + return -1; + } + + if (a != null && b == null) { + return 1; + } + + return a.compareTo(b); + } } \ No newline at end of file