aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2015-03-30 17:38:38 -0700
committerScott Jackson <daneren2005@gmail.com>2015-03-30 17:38:38 -0700
commitcf7c0e718ca45dc3fbf0cdfc4118122658e96776 (patch)
treed3cff64708dc403106f76ef4ef0503fbc5f206f4 /src
parent6bdfe3f1b2673389ebfd636b0513cc8e89fa030a (diff)
downloaddsub-cf7c0e718ca45dc3fbf0cdfc4118122658e96776.tar.gz
dsub-cf7c0e718ca45dc3fbf0cdfc4118122658e96776.tar.bz2
dsub-cf7c0e718ca45dc3fbf0cdfc4118122658e96776.zip
#451 Add option to treat first level as artist groups instead of artists themselves
Diffstat (limited to 'src')
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectArtistFragment.java138
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java6
-rw-r--r--src/github/daneren2005/dsub/util/Constants.java1
-rw-r--r--src/github/daneren2005/dsub/util/Util.java17
4 files changed, 130 insertions, 32 deletions
diff --git a/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java b/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java
index 6477f6cc..9b6e86d3 100644
--- a/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SelectArtistFragment.java
@@ -1,8 +1,9 @@
package github.daneren2005.dsub.fragments;
+import android.annotation.TargetApi;
+import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
-import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
@@ -11,11 +12,9 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
-import android.widget.ListView;
import android.widget.TextView;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.Artist;
@@ -23,11 +22,8 @@ import github.daneren2005.dsub.domain.Indexes;
import github.daneren2005.dsub.domain.MusicDirectory;
import github.daneren2005.dsub.domain.MusicFolder;
import github.daneren2005.dsub.service.MusicService;
-import github.daneren2005.dsub.service.MusicServiceFactory;
-import github.daneren2005.dsub.util.BackgroundTask;
import github.daneren2005.dsub.util.Constants;
import github.daneren2005.dsub.util.ProgressListener;
-import github.daneren2005.dsub.util.TabBackgroundTask;
import github.daneren2005.dsub.util.Util;
import github.daneren2005.dsub.view.ArtistAdapter;
@@ -44,6 +40,12 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
private TextView folderName;
private List<MusicFolder> musicFolders = null;
private List<MusicDirectory.Entry> entries;
+ private String groupId;
+ private String groupName;
+
+ public SelectArtistFragment() {
+ super();
+ }
@Override
public void onCreate(Bundle bundle) {
@@ -61,8 +63,20 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
outState.putSerializable(Constants.FRAGMENT_LIST2, (Serializable) musicFolders);
}
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+ Bundle args = getArguments();
+ if(args != null) {
+ groupId = args.getString(Constants.INTENT_EXTRA_NAME_ID);
+ groupName = args.getString(Constants.INTENT_EXTRA_NAME_NAME);
+
+ if(groupName != null) {
+ setTitle(groupName);
+ context.invalidateOptionsMenu();
+ }
+ }
+
folderButton = null;
super.onCreateView(inflater, container, bundle);
@@ -71,7 +85,7 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
}
if(objects != null && currentTask == null) {
- if (Util.isOffline(context) || Util.isTagBrowsing(context)) {
+ if (Util.isOffline(context) || Util.isTagBrowsing(context) || groupId != null) {
folderButton.setVisibility(View.GONE);
}
setMusicFolders();
@@ -140,15 +154,25 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
selectFolder();
} else {
Artist artist = (Artist) parent.getItemAtPosition(position);
- SubsonicFragment 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);
+
+ SubsonicFragment fragment;
+ if(Util.isFirstLevelArtist(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);
+ }
+ 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());
+ fragment.setArguments(args);
}
- args.putBoolean(Constants.INTENT_EXTRA_NAME_ARTIST, true);
- fragment.setArguments(args);
replaceFragment(fragment);
}
@@ -160,11 +184,39 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
}
@Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
+ super.onCreateOptionsMenu(menu, menuInflater);
+
+ if(Util.isOffline(context) || Util.isTagBrowsing(context) || groupId != null) {
+ menu.removeItem(R.id.menu_first_level_artist);
+ } else {
+ if (Util.isFirstLevelArtist(context)) {
+ menu.findItem(R.id.menu_first_level_artist).setChecked(true);
+ }
+ }
+ }
+
+ @Override
public int getOptionsMenu() {
return R.menu.select_artist;
}
@Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if(super.onOptionsItemSelected(item)) {
+ return true;
+ }
+
+ switch (item.getItemId()) {
+ case R.id.menu_first_level_artist:
+ toggleFirstLevelArtist();
+ break;
+ }
+
+ return false;
+ }
+
+ @Override
public ArrayAdapter getAdapter(List<Artist> objects) {
createMusicFolderButton();
return new ArtistAdapter(context, objects);
@@ -172,29 +224,52 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
@Override
public List<Artist> getObjects(MusicService musicService, boolean refresh, ProgressListener listener) throws Exception {
- if(!Util.isOffline(context) && !Util.isTagBrowsing(context)) {
- musicFolders = musicService.getMusicFolders(refresh, context, listener);
+ List<Artist> artists;
+ if(groupId == null) {
+ if (!Util.isOffline(context) && !Util.isTagBrowsing(context)) {
+ musicFolders = musicService.getMusicFolders(refresh, context, listener);
+
+ // Hide folders option if there is only one
+ if (musicFolders.size() == 1) {
+ musicFolders = null;
+ Util.setSelectedMusicFolderId(context, null);
+ }
+ }
+ String musicFolderId = Util.getSelectedMusicFolderId(context);
+
+ Indexes indexes = musicService.getIndexes(musicFolderId, refresh, context, listener);
+ artists = new ArrayList<Artist>(indexes.getShortcuts().size() + indexes.getArtists().size());
+ artists.addAll(indexes.getShortcuts());
+ artists.addAll(indexes.getArtists());
+ entries = indexes.getEntries();
+ } else {
+ artists = new ArrayList<Artist>();
+ MusicDirectory dir = musicService.getMusicDirectory(groupId, groupName, refresh, context, listener);
+ for(MusicDirectory.Entry entry: dir.getChildren(true, false)) {
+ Artist artist = new Artist();
+ artist.setId(entry.getId());
+ artist.setName(entry.getTitle());
+ artist.setStarred(entry.isStarred());
+ artists.add(artist);
+ }
- // Hide folders option if there is only one
- if(musicFolders.size() == 1) {
- musicFolders = null;
- Util.setSelectedMusicFolderId(context, null);
+ entries = new ArrayList<MusicDirectory.Entry>();
+ entries.addAll(dir.getChildren(false, true));
+ if(!entries.isEmpty()) {
+ Artist root = new Artist();
+ root.setId("root");
+ root.setName("Root");
+ root.setIndex("#");
+ artists.add(root);
}
}
- String musicFolderId = Util.getSelectedMusicFolderId(context);
-
- Indexes indexes = musicService.getIndexes(musicFolderId, refresh, context, listener);
- List<Artist> artists = new ArrayList<Artist>(indexes.getShortcuts().size() + indexes.getArtists().size());
- artists.addAll(indexes.getShortcuts());
- artists.addAll(indexes.getArtists());
- entries = indexes.getEntries();
return artists;
}
@Override
public int getTitleResource() {
- return R.string.button_bar_browse;
+ return groupId == null ? R.string.button_bar_browse : 0;
}
private void createMusicFolderButton() {
@@ -252,4 +327,9 @@ public class SelectArtistFragment extends SelectListFragment<Artist> {
private void selectFolder() {
folderButton.showContextMenu();
}
+
+ private void toggleFirstLevelArtist() {
+ Util.toggleFirstLevelArtist(context);
+ context.invalidateOptionsMenu();
+ }
}
diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index aa34ca4b..327f1828 100644
--- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -520,7 +520,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
// Update the fragment pointers so other stuff works correctly
SelectDirectoryFragment.this.id = dir.getId();
SelectDirectoryFragment.this.name = dir.getName();
- } else if(id != null && directory == null && dir.getParent() != null) {
+ } else if(id != null && directory == null && dir.getParent() != null && !artist) {
// View Album, try to lookup parent to get a complete entry to use for starring
MusicDirectory parentDir = getMusicDirectory(dir.getParent(), name, refresh, true, service, this);
for(Entry child: parentDir.getChildren()) {
@@ -1514,7 +1514,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
}
final ImageButton starButton = (ImageButton) header.findViewById(R.id.select_album_star);
- if(directory != null && Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_STAR, true)) {
+ if(directory != null && Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_STAR, true) && artistInfo == null) {
starButton.setImageResource(directory.isStarred() ? android.R.drawable.btn_star_big_on : android.R.drawable.btn_star_big_off);
starButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -1533,7 +1533,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
View ratingBarWrapper = header.findViewById(R.id.select_album_rate_wrapper);
final RatingBar ratingBar = (RatingBar) header.findViewById(R.id.select_album_rate);
- if(directory != null && Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_RATING, true) && !Util.isOffline(context)) {
+ if(directory != null && Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_RATING, true) && !Util.isOffline(context) && artistInfo == null) {
ratingBar.setRating(directory.getRating());
ratingBarWrapper.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/src/github/daneren2005/dsub/util/Constants.java b/src/github/daneren2005/dsub/util/Constants.java
index 9622e84c..7ab2b736 100644
--- a/src/github/daneren2005/dsub/util/Constants.java
+++ b/src/github/daneren2005/dsub/util/Constants.java
@@ -155,6 +155,7 @@ public final class Constants {
public static final String PREFERENCES_KEY_CAST_PROXY = "castProxy";
public static final String PREFERENCES_KEY_DISABLE_EXIT_PROMPT = "disableExitPrompt";
public static final String PREFERENCES_KEY_RENAME_DUPLICATES = "renameDuplicates";
+ public static final String PREFERENCES_KEY_FIRST_LEVEL_ARTIST = "firstLevelArtist";
public static final String OFFLINE_SCROBBLE_COUNT = "scrobbleCount";
public static final String OFFLINE_SCROBBLE_ID = "scrobbleID";
diff --git a/src/github/daneren2005/dsub/util/Util.java b/src/github/daneren2005/dsub/util/Util.java
index 4d2a9a1a..20cca368 100644
--- a/src/github/daneren2005/dsub/util/Util.java
+++ b/src/github/daneren2005/dsub/util/Util.java
@@ -575,6 +575,23 @@ public final class Util {
return prefs.getBoolean(Constants.PREFERENCES_KEY_CAST_PROXY, false);
}
+ public static boolean isFirstLevelArtist(Context context) {
+ SharedPreferences prefs = getPreferences(context);
+ return prefs.getBoolean(Constants.PREFERENCES_KEY_FIRST_LEVEL_ARTIST + getActiveServer(context), true);
+ }
+ public static void toggleFirstLevelArtist(Context context) {
+ SharedPreferences prefs = Util.getPreferences(context);
+ SharedPreferences.Editor editor = prefs.edit();
+
+ if(prefs.getBoolean(Constants.PREFERENCES_KEY_FIRST_LEVEL_ARTIST + getActiveServer(context), true)) {
+ editor.putBoolean(Constants.PREFERENCES_KEY_FIRST_LEVEL_ARTIST + getActiveServer(context), false);
+ } else {
+ editor.putBoolean(Constants.PREFERENCES_KEY_FIRST_LEVEL_ARTIST + getActiveServer(context), true);
+ }
+
+ editor.commit();
+ }
+
/**
* Get the contents of an <code>InputStream</code> as a <code>byte[]</code>.
* <p/>