implement batch downloads for most media types
This commit is contained in:
parent
589f966655
commit
404a0a28d2
12 changed files with 56 additions and 21 deletions
|
|
@ -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);
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ public class PlaylistMenuHelper {
|
|||
DeletePlaylistDialog.create(playlist).show(activity.getSupportFragmentManager(), DeletePlaylistDialog.TAG);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<Song> 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
|
||||
|
|
|
|||
|
|
@ -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<Song> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,4 +42,9 @@
|
|||
android:title="@string/action_details"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -37,4 +37,9 @@
|
|||
android:title="@string/action_details"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -27,4 +27,9 @@
|
|||
android:title="@string/select_all_title"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -33,4 +33,9 @@
|
|||
android:title="@string/select_all_title"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -32,4 +32,9 @@
|
|||
android:title="@string/select_all_title"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue