From 664e654884281b0342d38b1f35d3029d02592693 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 30 May 2013 21:52:38 -0700 Subject: Show Album puts artist on back stack --- .../daneren2005/dsub/activity/MainActivity.java | 14 ++++++++++- .../daneren2005/dsub/domain/MusicDirectory.java | 27 ++++++++++++++++++++++ .../dsub/fragments/DownloadFragment.java | 11 +++++++-- .../dsub/service/parser/MusicDirectoryParser.java | 6 ++++- .../github/daneren2005/dsub/util/Constants.java | 2 ++ 5 files changed, 56 insertions(+), 4 deletions(-) diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java index 9a118e32..ba6d7230 100644 --- a/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java +++ b/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java @@ -197,13 +197,25 @@ public class MainActivity extends SubsonicActivity { if(getIntent().hasExtra(Constants.INTENT_EXTRA_VIEW_ALBUM)) { viewPager.setCurrentItem(1); + int fragmentID = R.id.select_artist_layout; + if(getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID)) { + SubsonicFragment fragment = new SelectDirectoryFragment(); + Bundle args = new Bundle(); + args.putString(Constants.INTENT_EXTRA_NAME_ID, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID)); + args.putString(Constants.INTENT_EXTRA_NAME_NAME, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PARENT_NAME)); + fragment.setArguments(args); + + pagerAdapter.queueFragment(fragment, R.id.select_artist_layout); + fragmentID = R.id.select_album_layout; + } + SubsonicFragment fragment = new SelectDirectoryFragment(); Bundle args = new Bundle(); args.putString(Constants.INTENT_EXTRA_NAME_ID, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID)); args.putString(Constants.INTENT_EXTRA_NAME_NAME, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_NAME)); fragment.setArguments(args); - pagerAdapter.queueFragment(fragment, R.id.select_artist_layout); + pagerAdapter.queueFragment(fragment, fragmentID); } executorService = Executors.newSingleThreadScheduledExecutor(); diff --git a/subsonic-android/src/github/daneren2005/dsub/domain/MusicDirectory.java b/subsonic-android/src/github/daneren2005/dsub/domain/MusicDirectory.java index 14cb6694..153c590e 100644 --- a/subsonic-android/src/github/daneren2005/dsub/domain/MusicDirectory.java +++ b/subsonic-android/src/github/daneren2005/dsub/domain/MusicDirectory.java @@ -30,6 +30,8 @@ import java.util.Comparator; public class MusicDirectory { private String name; + private String id; + private String parent; private List children = new ArrayList(); public String getName() { @@ -39,6 +41,22 @@ public class MusicDirectory { public void setName(String name) { this.name = name; } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } public void addChild(Entry child) { children.add(child); @@ -69,6 +87,7 @@ public class MusicDirectory { public static class Entry implements Serializable { private String id; private String parent; + private String grandParent; private boolean directory; private String title; private String album; @@ -105,6 +124,14 @@ public class MusicDirectory { public void setParent(String parent) { this.parent = parent; } + + public String getGrandParent() { + return grandParent; + } + + public void setGrandParent(String grandParent) { + this.grandParent = grandParent; + } public boolean isDirectory() { return directory; diff --git a/subsonic-android/src/github/daneren2005/dsub/fragments/DownloadFragment.java b/subsonic-android/src/github/daneren2005/dsub/fragments/DownloadFragment.java index 9ccc136f..9113cd74 100644 --- a/subsonic-android/src/github/daneren2005/dsub/fragments/DownloadFragment.java +++ b/subsonic-android/src/github/daneren2005/dsub/fragments/DownloadFragment.java @@ -519,10 +519,17 @@ public class DownloadFragment extends SubsonicFragment implements OnGestureListe private boolean menuItemSelected(int menuItemId, final DownloadFile song) { switch (menuItemId) { case R.id.menu_show_album: + MusicDirectory.Entry entry = song.getSong(); + Intent intent = new Intent(context, MainActivity.class); intent.putExtra(Constants.INTENT_EXTRA_VIEW_ALBUM, true); - intent.putExtra(Constants.INTENT_EXTRA_NAME_ID, song.getSong().getParent()); - intent.putExtra(Constants.INTENT_EXTRA_NAME_NAME, song.getSong().getAlbum()); + intent.putExtra(Constants.INTENT_EXTRA_NAME_ID, entry.getParent()); + intent.putExtra(Constants.INTENT_EXTRA_NAME_NAME, entry.getAlbum()); + + if(entry.getGrandParent() != null) { + intent.putExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID, entry.getGrandParent()); + intent.putExtra(Constants.INTENT_EXTRA_NAME_PARENT_NAME, entry.getArtist()); + } intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Util.startActivityWithoutTransition(context, intent); return true; diff --git a/subsonic-android/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java b/subsonic-android/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java index 0bf6ded1..ce1a70fc 100644 --- a/subsonic-android/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java +++ b/subsonic-android/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java @@ -51,9 +51,13 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { if (eventType == XmlPullParser.START_TAG) { String name = getElementName(); if ("child".equals(name)) { - dir.addChild(parseEntry(artist)); + MusicDirectory.Entry entry = parseEntry(artist); + entry.setGrandParent(dir.getParent()); + dir.addChild(entry); } else if ("directory".equals(name)) { dir.setName(get("name")); + dir.setId(get("id")); + dir.setParent(get("parent")); } else if ("error".equals(name)) { handleError(); } diff --git a/subsonic-android/src/github/daneren2005/dsub/util/Constants.java b/subsonic-android/src/github/daneren2005/dsub/util/Constants.java index 03213ce4..d5399017 100644 --- a/subsonic-android/src/github/daneren2005/dsub/util/Constants.java +++ b/subsonic-android/src/github/daneren2005/dsub/util/Constants.java @@ -36,6 +36,8 @@ public final class Constants { // Names for intent extras. public static final String INTENT_EXTRA_NAME_ID = "subsonic.id"; public static final String INTENT_EXTRA_NAME_NAME = "subsonic.name"; + public static final String INTENT_EXTRA_NAME_PARENT_ID = "subsonic.parent_id"; + public static final String INTENT_EXTRA_NAME_PARENT_NAME = "subsonic.parent_name"; public static final String INTENT_EXTRA_NAME_ARTIST = "subsonic.artist"; public static final String INTENT_EXTRA_NAME_TITLE = "subsonic.title"; public static final String INTENT_EXTRA_NAME_AUTOPLAY = "subsonic.playall"; -- cgit v1.2.3