aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2016-05-30 17:41:21 -0500
committerScott Jackson <daneren2005@gmail.com>2016-05-30 17:41:21 -0500
commit2a2e6d5c57b45bba59dce6716fc01b1a1b0cc1a4 (patch)
tree8a16d2768a39e90aaa4234e0b9f6cbf111191df2 /app
parenteaca7e8c966cb085096486b7e1d27e349e7c7aa8 (diff)
downloaddsub-2a2e6d5c57b45bba59dce6716fc01b1a1b0cc1a4.tar.gz
dsub-2a2e6d5c57b45bba59dce6716fc01b1a1b0cc1a4.tar.bz2
dsub-2a2e6d5c57b45bba59dce6716fc01b1a1b0cc1a4.zip
Remove "Root" folder concept now that we can trivially display artists and songs side by side
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/ArtistAdapter.java39
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/Artist.java6
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/Indexes.java7
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectArtistFragment.java116
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java8
5 files changed, 101 insertions, 75 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/ArtistAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/ArtistAdapter.java
index 207dc0b2..5ed79e82 100644
--- a/app/src/main/java/github/daneren2005/dsub/adapter/ArtistAdapter.java
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/ArtistAdapter.java
@@ -23,27 +23,32 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import java.io.Serializable;
import java.util.List;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.Artist;
+import github.daneren2005.dsub.domain.MusicDirectory;
+import github.daneren2005.dsub.domain.MusicDirectory.Entry;
import github.daneren2005.dsub.domain.MusicFolder;
import github.daneren2005.dsub.util.Util;
import github.daneren2005.dsub.view.ArtistView;
import github.daneren2005.dsub.view.FastScroller;
+import github.daneren2005.dsub.view.SongView;
import github.daneren2005.dsub.view.UpdateView;
-public class ArtistAdapter extends SectionAdapter<Artist> implements FastScroller.BubbleTextGetter {
+public class ArtistAdapter extends SectionAdapter<Serializable> implements FastScroller.BubbleTextGetter {
+ public static int VIEW_TYPE_SONG = 3;
public static int VIEW_TYPE_ARTIST = 4;
private List<MusicFolder> musicFolders;
private OnMusicFolderChanged onMusicFolderChanged;
- public ArtistAdapter(Context context, List<Artist> artists, OnItemClickedListener listener) {
+ public ArtistAdapter(Context context, List<Serializable> artists, OnItemClickedListener listener) {
this(context, artists, null, listener, null);
}
- public ArtistAdapter(Context context, List<Artist> artists, List<MusicFolder> musicFolders, OnItemClickedListener onItemClickedListener, OnMusicFolderChanged onMusicFolderChanged) {
+ public ArtistAdapter(Context context, List<Serializable> artists, List<MusicFolder> musicFolders, OnItemClickedListener onItemClickedListener, OnMusicFolderChanged onMusicFolderChanged) {
super(context, artists);
this.musicFolders = musicFolders;
this.onItemClickedListener = onItemClickedListener;
@@ -110,17 +115,35 @@ public class ArtistAdapter extends SectionAdapter<Artist> implements FastScrolle
@Override
public UpdateView.UpdateViewHolder onCreateSectionViewHolder(ViewGroup parent, int viewType) {
- return new UpdateView.UpdateViewHolder(new ArtistView(context));
+ UpdateView updateView = null;
+ if(viewType == VIEW_TYPE_ARTIST) {
+ updateView = new ArtistView(context);
+ } else if(viewType == VIEW_TYPE_SONG) {
+ updateView = new SongView(context);
+ }
+
+ return new UpdateView.UpdateViewHolder(updateView);
}
@Override
- public void onBindViewHolder(UpdateView.UpdateViewHolder holder, Artist item, int viewType) {
- holder.getUpdateView().setObject(item);
+ public void onBindViewHolder(UpdateView.UpdateViewHolder holder, Serializable item, int viewType) {
+ UpdateView view = holder.getUpdateView();
+ if(viewType == VIEW_TYPE_ARTIST) {
+ view.setObject(item);
+ } else if(viewType == VIEW_TYPE_SONG) {
+ SongView songView = (SongView) view;
+ Entry entry = (Entry) item;
+ songView.setObject(entry, checkable && !entry.isVideo());
+ }
}
@Override
- public int getItemViewType(Artist item) {
- return VIEW_TYPE_ARTIST;
+ public int getItemViewType(Serializable item) {
+ if(item instanceof Artist) {
+ return VIEW_TYPE_ARTIST;
+ } else {
+ return VIEW_TYPE_SONG;
+ }
}
@Override
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/Artist.java b/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
index 5809146d..ff4d86ce 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/Artist.java
@@ -130,12 +130,6 @@ public class Artist implements Serializable {
}
public int compare(Artist lhsArtist, Artist rhsArtist) {
- if("root".equals(lhsArtist.getId())) {
- return 1;
- } else if("root".equals(rhsArtist.getId())) {
- return -1;
- }
-
String lhs = lhsArtist.getName().toLowerCase();
String rhs = rhsArtist.getName().toLowerCase();
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/Indexes.java b/app/src/main/java/github/daneren2005/dsub/domain/Indexes.java
index e15ccf9f..05e686ca 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/Indexes.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/Indexes.java
@@ -52,13 +52,6 @@ public class Indexes implements Serializable {
this.shortcuts = shortcuts;
this.artists = artists;
this.entries = entries;
- if(!entries.isEmpty()) {
- Artist root = new Artist();
- root.setId("root");
- root.setName("Root");
- root.setIndex("#");
- artists.add(root);
- }
}
public long getLastModified() {
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectArtistFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectArtistFragment.java
index 6890f572..be371dd3 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectArtistFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectArtistFragment.java
@@ -17,6 +17,7 @@ import github.daneren2005.dsub.adapter.SectionAdapter;
import github.daneren2005.dsub.domain.Artist;
import github.daneren2005.dsub.domain.Indexes;
import github.daneren2005.dsub.domain.MusicDirectory;
+import github.daneren2005.dsub.domain.MusicDirectory.Entry;
import github.daneren2005.dsub.domain.MusicFolder;
import github.daneren2005.dsub.domain.ServerInfo;
import github.daneren2005.dsub.service.MusicService;
@@ -29,12 +30,11 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-public class SelectArtistFragment extends SelectRecyclerFragment<Artist> implements ArtistAdapter.OnMusicFolderChanged {
+public class SelectArtistFragment extends SelectRecyclerFragment<Serializable> implements ArtistAdapter.OnMusicFolderChanged {
private static final String TAG = SelectArtistFragment.class.getSimpleName();
- private static final int MENU_GROUP_MUSIC_FOLDER = 10;
private List<MusicFolder> musicFolders = null;
- private List<MusicDirectory.Entry> entries;
+ private List<Entry> entries;
private String groupId;
private String groupName;
@@ -80,48 +80,68 @@ public class SelectArtistFragment extends SelectRecyclerFragment<Artist> impleme
}
@Override
- public void onCreateContextMenu(Menu menu, MenuInflater menuInflater, UpdateView<Artist> updateView, Artist item) {
+ public void onCreateContextMenu(Menu menu, MenuInflater menuInflater, UpdateView<Serializable> updateView, Serializable item) {
onCreateContextMenuSupport(menu, menuInflater, updateView, item);
recreateContextMenu(menu);
}
@Override
- public boolean onContextItemSelected(MenuItem menuItem, UpdateView<Artist> updateView, Artist item) {
+ public boolean onContextItemSelected(MenuItem menuItem, UpdateView<Serializable> updateView, Serializable item) {
return onContextItemSelected(menuItem, item);
}
@Override
- public void onItemClicked(UpdateView<Artist> updateView, Artist artist) {
+ public void onItemClicked(UpdateView<Serializable> updateView, Serializable item) {
SubsonicFragment fragment;
- if((Util.isFirstLevelArtist(context) || Util.isOffline(context) || Util.isTagBrowsing(context)) || "root".equals(artist.getId()) || groupId != null) {
- fragment = new SelectDirectoryFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
-
- if ("root".equals(artist.getId())) {
- args.putSerializable(Constants.FRAGMENT_LIST, (Serializable) entries);
- }
- if(ServerInfo.checkServerVersion(context, "1.13") && !Util.isOffline(context)) {
- args.putSerializable(Constants.INTENT_EXTRA_NAME_DIRECTORY, new MusicDirectory.Entry(artist));
+ if(item instanceof Artist) {
+ Artist artist = (Artist) item;
+
+ if ((Util.isFirstLevelArtist(context) || Util.isOffline(context) || Util.isTagBrowsing(context)) || groupId != null) {
+ fragment = new SelectDirectoryFragment();
+ Bundle args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
+
+ if (ServerInfo.checkServerVersion(context, "1.13") && !Util.isOffline(context)) {
+ args.putSerializable(Constants.INTENT_EXTRA_NAME_DIRECTORY, new Entry(artist));
+ }
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
+
+ fragment.setArguments(args);
+ } else {
+ fragment = new SelectArtistFragment();
+ Bundle args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
+ if (ServerInfo.checkServerVersion(context, "1.13") && !Util.isOffline(context)) {
+ args.putSerializable(Constants.INTENT_EXTRA_NAME_DIRECTORY, new Entry(artist));
+ }
+
+ fragment.setArguments(args);
}
- args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
- fragment.setArguments(args);
+ replaceFragment(fragment);
} else {
- fragment = new SelectArtistFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, artist.getId());
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, artist.getName());
- args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
- if(ServerInfo.checkServerVersion(context, "1.13") && !Util.isOffline(context)) {
- args.putSerializable(Constants.INTENT_EXTRA_NAME_DIRECTORY, new MusicDirectory.Entry(artist));
+ Entry entry = (Entry) item;
+ if (entry.isVideo()) {
+ playVideo(entry);
+ } else {
+ List<Entry> songs = new ArrayList<Entry>();
+
+ if (Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_PLAY_NOW_AFTER, true)) {
+ for (Entry song : entries) {
+ if (!song.isDirectory() && !song.isVideo()) {
+ songs.add(song);
+ }
+ }
+ playNow(songs, entry, 0);
+ } else {
+ songs.add(entry);
+ playNow(songs);
+ }
}
-
- fragment.setArguments(args);
}
-
- replaceFragment(fragment);
}
@Override
@@ -158,13 +178,13 @@ public class SelectArtistFragment extends SelectRecyclerFragment<Artist> impleme
}
@Override
- public SectionAdapter getAdapter(List<Artist> objects) {
+ public SectionAdapter getAdapter(List<Serializable> objects) {
return new ArtistAdapter(context, objects, musicFolders, this, this);
}
@Override
- public List<Artist> getObjects(MusicService musicService, boolean refresh, ProgressListener listener) throws Exception {
- List<Artist> artists;
+ public List<Serializable> getObjects(MusicService musicService, boolean refresh, ProgressListener listener) throws Exception {
+ List<Serializable> items;
if(groupId == null) {
if (!Util.isOffline(context) && (!Util.isTagBrowsing(context) || ServerInfo.checkServerVersion(context, "1.14"))) {
musicFolders = musicService.getMusicFolders(refresh, context, listener);
@@ -181,14 +201,16 @@ public class SelectArtistFragment extends SelectRecyclerFragment<Artist> impleme
Indexes indexes = musicService.getIndexes(musicFolderId, refresh, context, listener);
indexes.sortChildren(context);
- artists = new ArrayList<>(indexes.getShortcuts().size() + indexes.getArtists().size());
- artists.addAll(indexes.getShortcuts());
- artists.addAll(indexes.getArtists());
+ items = new ArrayList<>(indexes.getShortcuts().size() + indexes.getArtists().size());
+ items.addAll(indexes.getShortcuts());
+ items.addAll(indexes.getArtists());
entries = indexes.getEntries();
+ items.addAll(entries);
} else {
- artists = new ArrayList<>();
+ List<Artist> artists = new ArrayList<>();
+ items = new ArrayList<>();
MusicDirectory dir = musicService.getMusicDirectory(groupId, groupName, refresh, context, listener);
- for(MusicDirectory.Entry entry: dir.getChildren(true, false)) {
+ for(Entry entry: dir.getChildren(true, false)) {
Artist artist = new Artist();
artist.setId(entry.getId());
artist.setName(entry.getTitle());
@@ -196,21 +218,17 @@ public class SelectArtistFragment extends SelectRecyclerFragment<Artist> impleme
artists.add(artist);
}
- entries = new ArrayList<>();
- entries.addAll(dir.getChildren(false, true));
- if(!entries.isEmpty()) {
- Artist root = new Artist();
- root.setId("root");
- root.setName("Root");
- root.setIndex("#");
- artists.add(root);
- }
-
Indexes indexes = new Indexes(0, artists, new ArrayList<Artist>());
indexes.sortChildren(context);
+ items.addAll(indexes.getArtists());
+
+ entries = dir.getChildren(false, true);
+ for(Entry entry: entries) {
+ items.add(entry);
+ }
}
- return artists;
+ return items;
}
@Override
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index 67dcc6a2..67bc2565 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -234,7 +234,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
if(!ServerInfo.hasTopSongs(context)) {
menu.removeItem(R.id.menu_top_tracks);
}
- if(!ServerInfo.checkServerVersion(context, "1.11") || (id != null && "root".equals(id))) {
+ if(!ServerInfo.checkServerVersion(context, "1.11") || id != null) {
menu.removeItem(R.id.menu_radio);
menu.removeItem(R.id.menu_similar_artists);
} else if(!ServerInfo.hasSimilarArtists(context)) {
@@ -379,9 +379,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
@Override
protected void refresh(boolean refresh) {
- if(!"root".equals(id)) {
- load(refresh);
- }
+ load(refresh);
}
@Override
@@ -751,7 +749,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
// Show header if not album list type and not root and not artist
// For Subsonic 5.1+ display a header for artists with getArtistInfo data if it exists
boolean addedHeader = false;
- if(albumListType == null && !"root".equals(id) && (!artist || artistInfo != null || artistInfoDelayed != null) && (share == null || entries.size() != albums.size())) {
+ if(albumListType == null && (!artist || artistInfo != null || artistInfoDelayed != null) && (share == null || entries.size() != albums.size())) {
View header = createHeader();
if(header != null) {