diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/RemoveFromPlaylistDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/RemoveFromPlaylistDialog.java index 3dad62e2..91253db1 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -58,8 +58,6 @@ public class RemoveFromPlaylistDialog extends DialogFragment { .positiveText(R.string.remove_action) .negativeText(android.R.string.cancel) .onPositive((dialog, which) -> { - if (getActivity() == null) return; - PlaylistSong song = songs.get(0); PlaylistUtil.deleteItems(songs, song.playlistId); }) diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java index f7146062..252c2dda 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/RenamePlaylistDialog.java @@ -13,14 +13,14 @@ import com.dkanada.gramophone.model.Playlist; import com.dkanada.gramophone.util.PlaylistUtil; public class RenamePlaylistDialog extends DialogFragment { - private static final String PLAYLIST_ID = "playlist_id"; + private static final String PLAYLIST = "playlist"; @NonNull public static RenamePlaylistDialog create(Playlist playlist) { RenamePlaylistDialog dialog = new RenamePlaylistDialog(); Bundle args = new Bundle(); - args.putString(PLAYLIST_ID, playlist.id); + args.putString(PLAYLIST, playlist.id); dialog.setArguments(args); return dialog; @@ -29,18 +29,16 @@ public class RenamePlaylistDialog extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - String playlistId = getArguments().getString(PLAYLIST_ID); return new MaterialDialog.Builder(requireContext()) .title(R.string.rename_playlist_title) .positiveText(R.string.rename_action) .negativeText(android.R.string.cancel) .inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME | InputType.TYPE_TEXT_FLAG_CAP_WORDS) - .input(getString(R.string.name), "", false, - (materialDialog, charSequence) -> { + .input(getString(R.string.name), "", false, (materialDialog, charSequence) -> { final String name = charSequence.toString().trim(); if (!name.isEmpty()) { - String id = getArguments().getString(PLAYLIST_ID); + String id = getArguments().getString(PLAYLIST); PlaylistUtil.renamePlaylist(id, name); } }) diff --git a/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java b/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java index a98a82e3..156bf8cf 100644 --- a/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java +++ b/app/src/main/java/com/dkanada/gramophone/helper/menu/PlaylistMenuHelper.java @@ -38,6 +38,7 @@ public class PlaylistMenuHelper { DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG); return true; } + return false; } diff --git a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongMenuHelper.java b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongMenuHelper.java index c9ec5fc6..00780957 100644 --- a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongMenuHelper.java +++ b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongMenuHelper.java @@ -4,7 +4,6 @@ import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.appcompat.app.AppCompatActivity; -import android.content.Intent; import android.view.MenuItem; import android.view.View; import android.widget.PopupMenu; @@ -17,9 +16,10 @@ import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Artist; import com.dkanada.gramophone.model.Song; -import com.dkanada.gramophone.service.DownloadService; import com.dkanada.gramophone.util.NavigationUtil; +import java.util.Collections; + public class SongMenuHelper { public static final int MENU_RES = R.menu.menu_item_song; @@ -41,7 +41,7 @@ public class SongMenuHelper { SongDetailDialog.create(song).show(activity.getSupportFragmentManager(), SongDetailDialog.TAG); return true; case R.id.action_download: - NavigationUtil.startDownload(activity, song); + NavigationUtil.startDownload(activity, Collections.singletonList(song)); return true; case R.id.action_go_to_album: NavigationUtil.startAlbum(activity, new Album(song), null); diff --git a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java index e711b5d6..2d86d92a 100644 --- a/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java +++ b/app/src/main/java/com/dkanada/gramophone/helper/menu/SongsMenuHelper.java @@ -7,6 +7,7 @@ import com.dkanada.gramophone.R; import com.dkanada.gramophone.dialogs.AddToPlaylistDialog; import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.model.Song; +import com.dkanada.gramophone.util.NavigationUtil; import java.util.List; @@ -22,6 +23,9 @@ public class SongsMenuHelper { case R.id.action_add_to_playlist: AddToPlaylistDialog.create(songs).show(activity.getSupportFragmentManager(), "ADD_PLAYLIST"); return true; + case R.id.action_download: + NavigationUtil.startDownload(activity, songs); + return true; } return false; diff --git a/app/src/main/java/com/dkanada/gramophone/service/DownloadService.java b/app/src/main/java/com/dkanada/gramophone/service/DownloadService.java index b347a41d..ccf286d3 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/DownloadService.java +++ b/app/src/main/java/com/dkanada/gramophone/service/DownloadService.java @@ -2,9 +2,7 @@ package com.dkanada.gramophone.service; import android.app.Service; import android.content.Intent; -import android.os.Handler; import android.os.IBinder; -import android.os.Looper; import com.dkanada.gramophone.App; import com.dkanada.gramophone.BuildConfig; @@ -21,13 +19,14 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; +import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @SuppressWarnings("ResultOfMethodCallIgnored") public class DownloadService extends Service { public static final String PACKAGE_NAME = BuildConfig.APPLICATION_ID; - public static final String EXTRA_SONG = PACKAGE_NAME + ".extra.song"; + public static final String EXTRA_SONGS = PACKAGE_NAME + ".extra.songs"; private Executor executor; private DownloadNotification notification; @@ -42,9 +41,19 @@ public class DownloadService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (intent == null) return super.onStartCommand(null, flags, startId); - Song song = intent.getParcelableExtra(EXTRA_SONG); + if (intent == null) { + return super.onStartCommand(null, flags, startId); + } + List songs = intent.getParcelableArrayListExtra(EXTRA_SONGS); + for (Song song : songs) { + download(song); + } + + return super.onStartCommand(intent, flags, startId); + } + + public void download(Song song) { executor.execute(() -> { try { URL url = new URL(MusicUtil.getDownloadUri(song)); @@ -93,8 +102,6 @@ public class DownloadService extends Service { e.printStackTrace(); } }); - - return super.onStartCommand(intent, flags, startId); } @Override diff --git a/app/src/main/java/com/dkanada/gramophone/util/NavigationUtil.java b/app/src/main/java/com/dkanada/gramophone/util/NavigationUtil.java index cf49b956..56ac70e1 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/NavigationUtil.java @@ -23,6 +23,9 @@ import com.dkanada.gramophone.activities.details.PlaylistDetailActivity; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.service.DownloadService; +import java.util.ArrayList; +import java.util.List; + public class NavigationUtil { public static void openUrl(Context context, String url) { final Intent intent = new Intent(Intent.ACTION_VIEW); @@ -93,17 +96,16 @@ public class NavigationUtil { public static void startActivitySharedElements(Activity activity, Intent intent, Pair sharedElements) { if (sharedElements != null) { - // noinspection unchecked activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } else { activity.startActivity(intent); } } - public static void startDownload(Activity activity, Song song) { + public static void startDownload(Activity activity, List songs) { Intent intent = new Intent(activity, DownloadService.class); - intent.putExtra(DownloadService.EXTRA_SONG, song); + intent.putExtra(DownloadService.EXTRA_SONGS, new ArrayList<>(songs)); activity.startService(intent); } } diff --git a/app/src/main/res/menu/menu_item_playlist_song.xml b/app/src/main/res/menu/menu_item_playlist_song.xml index db2e427f..e14f6d4a 100644 --- a/app/src/main/res/menu/menu_item_playlist_song.xml +++ b/app/src/main/res/menu/menu_item_playlist_song.xml @@ -42,4 +42,9 @@ android:title="@string/action_details" app:showAsAction="never" /> + + diff --git a/app/src/main/res/menu/menu_item_queue_song.xml b/app/src/main/res/menu/menu_item_queue_song.xml index f03ce98a..e600fd17 100644 --- a/app/src/main/res/menu/menu_item_queue_song.xml +++ b/app/src/main/res/menu/menu_item_queue_song.xml @@ -37,4 +37,9 @@ android:title="@string/action_details" app:showAsAction="never" /> + + diff --git a/app/src/main/res/menu/menu_select_media.xml b/app/src/main/res/menu/menu_select_media.xml index 4c763222..3fbb066b 100644 --- a/app/src/main/res/menu/menu_select_media.xml +++ b/app/src/main/res/menu/menu_select_media.xml @@ -27,4 +27,9 @@ android:title="@string/select_all_title" app:showAsAction="ifRoom" /> + + diff --git a/app/src/main/res/menu/menu_select_playlist.xml b/app/src/main/res/menu/menu_select_playlist.xml index f44fad6a..cf7e643e 100644 --- a/app/src/main/res/menu/menu_select_playlist.xml +++ b/app/src/main/res/menu/menu_select_playlist.xml @@ -33,4 +33,9 @@ android:title="@string/select_all_title" app:showAsAction="ifRoom" /> + + diff --git a/app/src/main/res/menu/menu_select_playlist_song.xml b/app/src/main/res/menu/menu_select_playlist_song.xml index 7274795e..daf701a6 100644 --- a/app/src/main/res/menu/menu_select_playlist_song.xml +++ b/app/src/main/res/menu/menu_select_playlist_song.xml @@ -32,4 +32,9 @@ android:title="@string/select_all_title" app:showAsAction="ifRoom" /> + +