aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2015-09-23 17:16:26 -0700
committerScott Jackson <daneren2005@gmail.com>2015-09-23 17:16:26 -0700
commitf9dd3ded43829e883e747a96c8523e74b4ea8d17 (patch)
tree77537e7949a6b92ef526f296ef47e6e01cda7257 /app/src/main/java/github
parent133aa31b1d36b9d7a7885fede29f0d3501e2c9ab (diff)
downloaddsub-f9dd3ded43829e883e747a96c8523e74b4ea8d17.tar.gz
dsub-f9dd3ded43829e883e747a96c8523e74b4ea8d17.tar.bz2
dsub-f9dd3ded43829e883e747a96c8523e74b4ea8d17.zip
Put back a bunch of context menu options and make everything optional
Diffstat (limited to 'app/src/main/java/github')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java2
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java12
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectBookmarkFragment.java2
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java28
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java71
-rw-r--r--app/src/main/java/github/daneren2005/dsub/util/Constants.java5
-rw-r--r--app/src/main/java/github/daneren2005/dsub/util/MenuUtil.java76
7 files changed, 177 insertions, 19 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
index 38bd483d..75b1562f 100644
--- a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
@@ -401,7 +401,7 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
currentActionMode = mode;
onCreateActionModeMenu(menu, mode.getMenuInflater());
- MenuUtil.hideMenuItems(context, menu);
+ MenuUtil.hideMenuItems(context, menu, updateView);
T item = holder.getItem();
selected.add(item);
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
index 68ade3cc..f312675f 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
@@ -555,15 +555,20 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis
menu.findItem(R.id.menu_show_artist).setVisible(false);
}
- MenuUtil.hideMenuItems(context, menu);
+ MenuUtil.hideMenuItems(context, menu, updateView);
}
@Override
public boolean onContextItemSelected(MenuItem menuItem, UpdateView<DownloadFile> updateView, DownloadFile downloadFile) {
+ if(onContextItemSelected(menuItem, downloadFile)) {
+ return true;
+ }
+
return menuItemSelected(menuItem.getItemId(), downloadFile);
}
private boolean menuItemSelected(int menuItemId, final DownloadFile song) {
+ List<Entry> songs;
switch (menuItemId) {
case R.id.menu_show_album: case R.id.menu_show_artist:
Entry entry = song.getSong();
@@ -629,11 +634,6 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis
replaceFragment(fragment);
return true;
}
- case R.id.menu_delete:
- List<Entry> songs = new ArrayList<Entry>(1);
- songs.add(song.getSong());
- getDownloadService().delete(songs);
- return true;
case R.id.menu_remove_all:
Util.confirmDialog(context, R.string.download_menu_remove_all, "", new DialogInterface.OnClickListener() {
@Override
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectBookmarkFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectBookmarkFragment.java
index d992319b..ceca2bff 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectBookmarkFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectBookmarkFragment.java
@@ -48,7 +48,7 @@ public class SelectBookmarkFragment extends SelectRecyclerFragment<MusicDirector
@Override
public void onCreateContextMenu(Menu menu, MenuInflater menuInflater, UpdateView<MusicDirectory.Entry> updateView, MusicDirectory.Entry item) {
menuInflater.inflate(R.menu.select_bookmark_context, menu);
- MenuUtil.hideMenuItems(context, menu);
+ MenuUtil.hideMenuItems(context, menu, updateView);
}
@Override
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java
index 543dcb26..ab22c808 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectPlaylistFragment.java
@@ -76,13 +76,41 @@ public class SelectPlaylistFragment extends SelectRecyclerFragment<Playlist> {
@Override
public boolean onContextItemSelected(MenuItem menuItem, UpdateView<Playlist> updateView, Playlist playlist) {
+ SubsonicFragment fragment;
+ Bundle args;
+ FragmentTransaction trans;
+
switch (menuItem.getItemId()) {
+ case R.id.playlist_menu_download:
+ downloadPlaylist(playlist.getId(), playlist.getName(), false, true, false, false, true);
+ break;
case R.id.playlist_menu_sync:
syncPlaylist(playlist);
break;
case R.id.playlist_menu_stop_sync:
stopSyncPlaylist(playlist);
break;
+ case R.id.playlist_menu_play_now:
+ fragment = new SelectDirectoryFragment();
+ args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID, playlist.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME, playlist.getName());
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_AUTOPLAY, true);
+ fragment.setArguments(args);
+
+ replaceFragment(fragment);
+ break;
+ case R.id.playlist_menu_play_shuffled:
+ fragment = new SelectDirectoryFragment();
+ args = new Bundle();
+ args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_ID, playlist.getId());
+ args.putString(Constants.INTENT_EXTRA_NAME_PLAYLIST_NAME, playlist.getName());
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_SHUFFLE, true);
+ args.putBoolean(Constants.INTENT_EXTRA_NAME_AUTOPLAY, true);
+ fragment.setArguments(args);
+
+ replaceFragment(fragment);
+ break;
case R.id.playlist_menu_delete:
deletePlaylist(playlist);
break;
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
index 0a822483..f01ee44b 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
@@ -279,7 +279,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
}
}
- MenuUtil.hideMenuItems(context, menu);
+ MenuUtil.hideMenuItems(context, menu, updateView);
}
protected void recreateContextMenu(Menu menu) {
@@ -311,19 +311,33 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
case R.id.artist_menu_play_shuffled:
downloadRecursively(artist.getId(), false, false, true, true, false);
break;
+ case R.id.artist_menu_play_next:
+ downloadRecursively(artist.getId(), false, true, false, false, false, true);
+ break;
case R.id.artist_menu_play_last:
downloadRecursively(artist.getId(), false, true, false, false, false);
break;
case R.id.artist_menu_download:
downloadRecursively(artist.getId(), false, true, false, false, true);
break;
- case R.id.artist_menu_star:
- toggleStarred(artist);
+ case R.id.artist_menu_pin:
+ downloadRecursively(artist.getId(), true, true, false, false, true);
+ break;
+ case R.id.artist_menu_delete:
+ deleteRecursively(artist);
break;
case R.id.album_menu_play_now:
artistOverride = true;
downloadRecursively(entry.getId(), false, false, true, false, false);
break;
+ case R.id.album_menu_play_shuffled:
+ artistOverride = true;
+ downloadRecursively(entry.getId(), false, false, true, true, false);
+ break;
+ case R.id.album_menu_play_next:
+ artistOverride = true;
+ downloadRecursively(entry.getId(), false, true, false, false, false, true);
+ break;
case R.id.album_menu_play_last:
artistOverride = true;
downloadRecursively(entry.getId(), false, true, false, false, false);
@@ -332,9 +346,16 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
artistOverride = true;
downloadRecursively(entry.getId(), false, true, false, false, true);
break;
+ case R.id.album_menu_pin:
+ artistOverride = true;
+ downloadRecursively(entry.getId(), true, true, false, false, true);
+ break;
case R.id.album_menu_star:
toggleStarred(entry);
break;
+ case R.id.album_menu_delete:
+ deleteRecursively(entry);
+ break;
case R.id.album_menu_info:
displaySongInfo(entry);
break;
@@ -353,8 +374,11 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
case R.id.song_menu_download:
getDownloadService().downloadBackground(songs, false);
break;
+ case R.id.song_menu_pin:
+ getDownloadService().downloadBackground(songs, true);
+ break;
case R.id.song_menu_delete:
- getDownloadService().delete(songs);
+ deleteSongs(songs);
break;
case R.id.song_menu_add_playlist:
addToPlaylist(songs);
@@ -1419,15 +1443,14 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
}
public void deleteRecursively(Artist artist) {
- deleteRecursively(FileUtil.getArtistDirectory(context, artist));
+ deleteRecursively(artist, FileUtil.getArtistDirectory(context, artist));
}
public void deleteRecursively(Entry album) {
- deleteRecursively(FileUtil.getAlbumDirectory(context, album));
-
+ deleteRecursively(album, FileUtil.getAlbumDirectory(context, album));
}
- public void deleteRecursively(final File dir) {
+ public void deleteRecursively(final Object remove, final File dir) {
if(dir == null) {
return;
}
@@ -1443,7 +1466,37 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
@Override
protected void done(Void result) {
if(Util.isOffline(context)) {
- refresh();
+ SectionAdapter adapter = getCurrentAdapter();
+ if(adapter != null) {
+ adapter.removeItem(remove);
+ } else {
+ refresh();
+ }
+ } else {
+ UpdateView.triggerUpdate();
+ }
+ }
+ }.execute();
+ }
+ public void deleteSongs(final List<Entry> songs) {
+ new LoadingTask<Void>(context) {
+ @Override
+ protected Void doInBackground() throws Throwable {
+ getDownloadService().delete(songs);
+ return null;
+ }
+
+ @Override
+ protected void done(Void result) {
+ if(Util.isOffline(context)) {
+ SectionAdapter adapter = getCurrentAdapter();
+ if(adapter != null) {
+ for(Entry song: songs) {
+ adapter.removeItem(song);
+ }
+ } else {
+ refresh();
+ }
} else {
UpdateView.triggerUpdate();
}
diff --git a/app/src/main/java/github/daneren2005/dsub/util/Constants.java b/app/src/main/java/github/daneren2005/dsub/util/Constants.java
index cc02b709..22463d9d 100644
--- a/app/src/main/java/github/daneren2005/dsub/util/Constants.java
+++ b/app/src/main/java/github/daneren2005/dsub/util/Constants.java
@@ -133,8 +133,13 @@ public final class Constants {
public static final String PREFERENCES_KEY_PODCASTS_ENABLED = "podcastsEnabled";
public static final String PREFERENCES_KEY_BOOKMARKS_ENABLED = "bookmarksEnabled";
public static final String PREFERENCES_KEY_CUSTOM_SORT_ENABLED = "customSortEnabled";
+ public static final String PREFERENCES_KEY_MENU_PLAY_NOW = "showPlayNow";
+ public static final String PREFERENCES_KEY_MENU_PLAY_SHUFFLED = "showPlayShuffled";
public static final String PREFERENCES_KEY_MENU_PLAY_NEXT = "showPlayNext";
public static final String PREFERENCES_KEY_MENU_PLAY_LAST = "showPlayLast";
+ public static final String PREFERENCES_KEY_MENU_DOWNLOAD = "showDownload";
+ public static final String PREFERENCES_KEY_MENU_PIN = "showPin";
+ public static final String PREFERENCES_KEY_MENU_DELETE = "showDelete";
public static final String PREFERENCES_KEY_MENU_STAR = "showStar";
public static final String PREFERENCES_KEY_MENU_SHARED = "showShared";
public static final String PREFERENCES_KEY_SHARED_ENABLED = "sharedEnabled";
diff --git a/app/src/main/java/github/daneren2005/dsub/util/MenuUtil.java b/app/src/main/java/github/daneren2005/dsub/util/MenuUtil.java
index cd899bb4..1b613b9d 100644
--- a/app/src/main/java/github/daneren2005/dsub/util/MenuUtil.java
+++ b/app/src/main/java/github/daneren2005/dsub/util/MenuUtil.java
@@ -17,13 +17,24 @@ package github.daneren2005.dsub.util;
import android.content.Context;
import android.content.SharedPreferences;
+import android.util.Log;
import android.view.Menu;
+import java.io.File;
+
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.ServerInfo;
+import github.daneren2005.dsub.service.DownloadFile;
+import github.daneren2005.dsub.view.AlbumView;
+import github.daneren2005.dsub.view.ArtistEntryView;
+import github.daneren2005.dsub.view.ArtistView;
+import github.daneren2005.dsub.view.SongView;
+import github.daneren2005.dsub.view.UpdateView;
public final class MenuUtil {
- public static void hideMenuItems(Context context, Menu menu) {
+ private final static String TAG = MenuUtil.class.getSimpleName();
+
+ public static void hideMenuItems(Context context, Menu menu, UpdateView updateView) {
if(!ServerInfo.checkServerVersion(context, "1.8")) {
menu.setGroupVisible(R.id.server_1_8, false);
menu.setGroupVisible(R.id.hide_star, false);
@@ -36,12 +47,27 @@ public final class MenuUtil {
}
SharedPreferences prefs = Util.getPreferences(context);
- if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PLAY_NEXT, true)) {
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PLAY_NOW, true)) {
+ menu.setGroupVisible(R.id.hide_play_now, false);
+ }
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PLAY_SHUFFLED, true)) {
+ menu.setGroupVisible(R.id.hide_play_shuffled, false);
+ }
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PLAY_NEXT, false)) {
menu.setGroupVisible(R.id.hide_play_next, false);
}
if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PLAY_LAST, true)) {
menu.setGroupVisible(R.id.hide_play_last, false);
}
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_DOWNLOAD, false)) {
+ menu.setGroupVisible(R.id.hide_download, false);
+ }
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_PIN, false)) {
+ menu.setGroupVisible(R.id.hide_pin, false);
+ }
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_DELETE, false)) {
+ menu.setGroupVisible(R.id.hide_delete, false);
+ }
if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_STAR, true)) {
menu.setGroupVisible(R.id.hide_star, false);
}
@@ -51,5 +77,51 @@ public final class MenuUtil {
if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_RATING, true)) {
menu.setGroupVisible(R.id.hide_rating, false);
}
+
+ if(!Util.isOffline(context)) {
+ // If we are looking at a standard song view, get downloadFile to cache what options to show
+ if(updateView instanceof SongView) {
+ SongView songView = (SongView) updateView;
+ DownloadFile downloadFile = songView.getDownloadFile();
+
+ try {
+ if(downloadFile != null) {
+ if(downloadFile.isWorkDone()) {
+ // Remove permanent cache menu if already perma cached
+ if(downloadFile.isSaved()) {
+ menu.setGroupVisible(R.id.hide_pin, false);
+ }
+
+ // Remove cache option no matter what if already downloaded
+ menu.setGroupVisible(R.id.hide_download, false);
+ } else {
+ // Remove delete option if nothing to delete
+ menu.setGroupVisible(R.id.hide_delete, false);
+ }
+ }
+ } catch(Exception e) {
+ Log.w(TAG, "Failed to lookup downloadFile info", e);
+ }
+ }
+ // Apply similar logic to album views
+ else if(updateView instanceof AlbumView || updateView instanceof ArtistView || updateView instanceof ArtistEntryView) {
+ File folder = null;
+ if(updateView instanceof AlbumView) {
+ folder = ((AlbumView) updateView).getFile();
+ } else if(updateView instanceof ArtistView) {
+ folder = ((ArtistView) updateView).getFile();
+ } else if(updateView instanceof ArtistEntryView) {
+ folder = ((ArtistEntryView) updateView).getFile();
+ }
+
+ try {
+ if(folder != null && !folder.exists()) {
+ menu.setGroupVisible(R.id.hide_delete, false);
+ }
+ } catch(Exception e) {
+ Log.w(TAG, "Failed to lookup album directory info", e);
+ }
+ }
+ }
}
}