Refactor Song to Media

This commit is contained in:
CappielloAntonio 2022-02-07 09:47:46 +01:00
parent 62f2723014
commit d1d341ff9b
43 changed files with 242 additions and 274 deletions

View file

@ -21,7 +21,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
@ -130,7 +130,7 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
if (media.size() > 0) { if (media.size() > 0) {
MediaManager.startQueue(mediaBrowserListenableFuture, context, (ArrayList<Song>) media, 0); MediaManager.startQueue(mediaBrowserListenableFuture, context, (ArrayList<Media>) media, 0);
mainActivity.setBottomSheetInPeek(true); mainActivity.setBottomSheetInPeek(true);
} else { } else {
Toast.makeText(context, context.getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show(); Toast.makeText(context, context.getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();

View file

@ -17,8 +17,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
@ -36,7 +35,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
private final MainActivity activity; private final MainActivity activity;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Media> songs;
public DiscoverSongAdapter(MainActivity activity, Context context) { public DiscoverSongAdapter(MainActivity activity, Context context) {
this.activity = activity; this.activity = activity;
@ -54,7 +53,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Song song = songs.get(position); Media song = songs.get(position);
holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle())); holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle()));
holder.textAlbum.setText(MusicUtil.getReadableString(song.getAlbumName())); holder.textAlbum.setText(MusicUtil.getReadableString(song.getAlbumName()));
@ -76,7 +75,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
return songs.size(); return songs.size();
} }
public void setItems(List<Song> songs) { public void setItems(List<Media> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -114,7 +113,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Song>) media,false); MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Media>) media,false);
} }
}); });
} }

View file

@ -14,9 +14,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@ -30,7 +29,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
private final Context context; private final Context context;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Media> songs;
public PlayerSongQueueAdapter(Context context) { public PlayerSongQueueAdapter(Context context) {
this.context = context; this.context = context;
@ -47,7 +46,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Song song = songs.get(position); Media song = songs.get(position);
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle())); holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtistName()), MusicUtil.getReadableDurationString(song.getDuration(), false))); holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtistName()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
@ -71,11 +70,11 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
return songs.size(); return songs.size();
} }
public List<Song> getItems() { public List<Media> getItems() {
return this.songs; return this.songs;
} }
public void setItems(List<Song> songs) { public void setItems(List<Media> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -84,7 +83,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
this.mediaBrowserListenableFuture = mediaBrowserListenableFuture; this.mediaBrowserListenableFuture = mediaBrowserListenableFuture;
} }
public Song getItem(int id) { public Media getItem(int id) {
return songs.get(id); return songs.get(id);
} }

View file

@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import java.util.ArrayList; import java.util.ArrayList;
@ -22,7 +22,7 @@ import java.util.List;
public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogSongHorizontalAdapter.ViewHolder> { public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogSongHorizontalAdapter.ViewHolder> {
private static final String TAG = "PlaylistDialogSongHorizontalAdapter"; private static final String TAG = "PlaylistDialogSongHorizontalAdapter";
private List<Song> songs; private List<Media> songs;
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private final Context context; private final Context context;
@ -41,7 +41,7 @@ public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<Pl
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Song song = songs.get(position); Media song = songs.get(position);
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle())); holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
holder.songArtist.setText(MusicUtil.getReadableString(song.getArtistName())); holder.songArtist.setText(MusicUtil.getReadableString(song.getArtistName()));
@ -59,16 +59,16 @@ public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<Pl
return songs.size(); return songs.size();
} }
public List<Song> getItems() { public List<Media> getItems() {
return this.songs; return this.songs;
} }
public void setItems(List<Song> songs) { public void setItems(List<Media> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
public Song getItem(int id) { public Media getItem(int id) {
return songs.get(id); return songs.get(id);
} }

View file

@ -19,7 +19,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
@ -37,7 +37,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Media> songs;
public SimilarTrackAdapter(MainActivity activity, Context context) { public SimilarTrackAdapter(MainActivity activity, Context context) {
this.activity = activity; this.activity = activity;
@ -55,7 +55,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Song song = songs.get(position); Media song = songs.get(position);
holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle())); holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle()));
@ -71,11 +71,11 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
return songs.size(); return songs.size();
} }
public Song getItem(int position) { public Media getItem(int position) {
return songs.get(position); return songs.get(position);
} }
public void setItems(List<Song> songs) { public void setItems(List<Media> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -112,7 +112,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Song>) media, false); MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Media>) media, false);
} }
}); });
} }

View file

@ -16,7 +16,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.DownloadUtil; import com.cappielloantonio.play.util.DownloadUtil;
@ -36,7 +36,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
private final boolean isCoverVisible; private final boolean isCoverVisible;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Media> songs;
public SongHorizontalAdapter(MainActivity mainActivity, Context context, boolean isCoverVisible) { public SongHorizontalAdapter(MainActivity mainActivity, Context context, boolean isCoverVisible) {
this.mainActivity = mainActivity; this.mainActivity = mainActivity;
@ -55,7 +55,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public void onBindViewHolder(ViewHolder holder, int position) {
Song song = songs.get(position); Media song = songs.get(position);
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle())); holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtistName()), MusicUtil.getReadableDurationString(song.getDuration(), false))); holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtistName()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
@ -83,7 +83,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
return songs.size(); return songs.size();
} }
public void setItems(List<Song> songs) { public void setItems(List<Media> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -92,7 +92,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
this.mediaBrowserListenableFuture = mediaBrowserListenableFuture; this.mediaBrowserListenableFuture = mediaBrowserListenableFuture;
} }
public Song getItem(int id) { public Media getItem(int id) {
return songs.get(id); return songs.get(id);
} }

View file

@ -32,7 +32,7 @@ public class Album implements Parcelable {
private String primary; private String primary;
private String blurHash; private String blurHash;
private boolean favorite; private boolean favorite;
private List<Song> songs; private List<Media> songs;
private String notes; private String notes;
private Date created; private Date created;
@ -135,11 +135,11 @@ public class Album implements Parcelable {
this.favorite = favorite; this.favorite = favorite;
} }
public List<Song> getSongs() { public List<Media> getSongs() {
return songs; return songs;
} }
public void setSongs(List<Song> songs) { public void setSongs(List<Media> songs) {
this.songs = songs; this.songs = songs;
} }

View file

@ -70,7 +70,7 @@ public class Download {
this.playlistName = playlistName; this.playlistName = playlistName;
} }
public Download(Song song, String playlistId, String playlistName) { public Download(Media song, String playlistId, String playlistName) {
this.id = UUID.randomUUID().toString(); this.id = UUID.randomUUID().toString();
this.songID = song.getId(); this.songID = song.getId();
this.title = song.getTitle(); this.title = song.getTitle();

View file

@ -7,11 +7,11 @@ import androidx.annotation.NonNull;
import com.cappielloantonio.play.subsonic.models.Child; import com.cappielloantonio.play.subsonic.models.Child;
import java.time.Instant; import java.util.Date;
import java.util.UUID; import java.util.UUID;
public class Song implements Parcelable { public class Media implements Parcelable {
private static final String TAG = "SongClass"; private static final String TAG = "Media";
public static final String RECENTLY_PLAYED = "RECENTLY_PLAYED"; public static final String RECENTLY_PLAYED = "RECENTLY_PLAYED";
public static final String MOST_PLAYED = "MOST_PLAYED"; public static final String MOST_PLAYED = "MOST_PLAYED";
@ -42,15 +42,16 @@ public class Song implements Parcelable {
private String container; private String container;
private int bitRate; private int bitRate;
private long added; private long added;
private String type;
private int playCount; private int playCount;
private long lastPlay; private long lastPlay;
private int rating; private int rating;
public Song() { public Media() {
this.id = UUID.randomUUID().toString(); this.id = UUID.randomUUID().toString();
} }
public Song(Child child) { public Media(Child child) {
this.id = child.getId(); this.id = child.getId();
this.title = child.getTitle(); this.title = child.getTitle();
this.trackNumber = child.getTrack() != null ? child.getTrack() : 0; this.trackNumber = child.getTrack() != null ? child.getTrack() : 0;
@ -73,7 +74,7 @@ public class Song implements Parcelable {
this.rating = child.getUserRating() != null ? child.getUserRating() : 0; this.rating = child.getUserRating() != null ? child.getUserRating() : 0;
} }
public Song(Queue queue) { public Media(Queue queue) {
this.id = queue.getSongID(); this.id = queue.getSongID();
this.title = queue.getTitle(); this.title = queue.getTitle();
this.albumId = queue.getAlbumId(); this.albumId = queue.getAlbumId();
@ -84,7 +85,7 @@ public class Song implements Parcelable {
this.duration = queue.getDuration(); this.duration = queue.getDuration();
} }
public Song(Download download) { public Media(Download download) {
this.id = download.getSongID(); this.id = download.getSongID();
this.title = download.getTitle(); this.title = download.getTitle();
this.albumId = download.getAlbumId(); this.albumId = download.getAlbumId();
@ -269,7 +270,7 @@ public class Song implements Parcelable {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
Song song = (Song) o; Media song = (Media) o;
return id.equals(song.id); return id.equals(song.id);
} }
@ -313,7 +314,7 @@ public class Song implements Parcelable {
dest.writeLong(this.lastPlay); dest.writeLong(this.lastPlay);
} }
protected Song(Parcel in) { protected Media(Parcel in) {
this.id = in.readString(); this.id = in.readString();
this.title = in.readString(); this.title = in.readString();
this.trackNumber = in.readInt(); this.trackNumber = in.readInt();
@ -336,13 +337,13 @@ public class Song implements Parcelable {
this.lastPlay = in.readLong(); this.lastPlay = in.readLong();
} }
public static final Creator<Song> CREATOR = new Creator<Song>() { public static final Creator<Media> CREATOR = new Creator<Media>() {
public Song createFromParcel(Parcel source) { public Media createFromParcel(Parcel source) {
return new Song(source); return new Media(source);
} }
public Song[] newArray(int size) { public Media[] newArray(int size) {
return new Song[size]; return new Media[size];
} }
}; };
} }

View file

@ -9,7 +9,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.DecadesCallback; import com.cappielloantonio.play.interfaces.DecadesCallback;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -140,8 +140,8 @@ public class AlbumRepository {
}); });
} }
public MutableLiveData<List<Song>> getAlbumTracks(String id) { public MutableLiveData<List<Media>> getAlbumTracks(String id) {
MutableLiveData<List<Song>> albumTracks = new MutableLiveData<>(); MutableLiveData<List<Media>> albumTracks = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getBrowsingClient() .getBrowsingClient()
@ -149,7 +149,7 @@ public class AlbumRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> tracks = new ArrayList<>(); List<Media> tracks = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getAlbum() != null) { if (response.isSuccessful() && response.body() != null && response.body().getAlbum() != null) {
tracks.addAll(MappingUtil.mapSong(response.body().getAlbum().getSongs())); tracks.addAll(MappingUtil.mapSong(response.body().getAlbum().getSongs()));
@ -248,7 +248,7 @@ public class AlbumRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) {
songs.addAll(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs())); songs.addAll(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs()));

View file

@ -10,7 +10,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.subsonic.models.IndexID3; import com.cappielloantonio.play.subsonic.models.IndexID3;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -251,7 +251,7 @@ public class ArtistRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) {
songs.addAll(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs())); songs.addAll(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs()));
@ -267,8 +267,8 @@ public class ArtistRepository {
}); });
} }
public MutableLiveData<ArrayList<Song>> getArtistRandomSong(FragmentActivity fragmentActivity, Artist artist, int count) { public MutableLiveData<ArrayList<Media>> getArtistRandomSong(FragmentActivity fragmentActivity, Artist artist, int count) {
MutableLiveData<ArrayList<Song>> randomSongs = new MutableLiveData<>(); MutableLiveData<ArrayList<Media>> randomSongs = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getBrowsingClient() .getBrowsingClient()
@ -284,7 +284,7 @@ public class ArtistRepository {
for (int index = 0; index < albums.size(); index++) { for (int index = 0; index < albums.size(); index++) {
albumRepository.getAlbumTracks(albums.get(index).getId()).observe(fragmentActivity, songs -> { albumRepository.getAlbumTracks(albums.get(index).getId()).observe(fragmentActivity, songs -> {
ArrayList<Song> liveSongs = randomSongs.getValue(); ArrayList<Media> liveSongs = randomSongs.getValue();
if (liveSongs == null) liveSongs = new ArrayList<>(); if (liveSongs == null) liveSongs = new ArrayList<>();
Collections.shuffle(liveSongs); Collections.shuffle(liveSongs);
liveSongs.addAll(songs); liveSongs.addAll(songs);
@ -304,8 +304,8 @@ public class ArtistRepository {
return randomSongs; return randomSongs;
} }
public MutableLiveData<List<Song>> getTopSongs(String artistName, int count) { public MutableLiveData<List<Media>> getTopSongs(String artistName, int count) {
MutableLiveData<List<Song>> topSongs = new MutableLiveData<>(); MutableLiveData<List<Media>> topSongs = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getBrowsingClient() .getBrowsingClient()

View file

@ -9,10 +9,8 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.database.AppDatabase; import com.cappielloantonio.play.database.AppDatabase;
import com.cappielloantonio.play.database.dao.PlaylistDao; import com.cappielloantonio.play.database.dao.PlaylistDao;
import com.cappielloantonio.play.database.dao.ServerDao;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Server; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -63,8 +61,8 @@ public class PlaylistRepository {
return listLivePlaylists; return listLivePlaylists;
} }
public MutableLiveData<List<Song>> getPlaylistSongs(String id) { public MutableLiveData<List<Media>> getPlaylistSongs(String id) {
MutableLiveData<List<Song>> listLivePlaylistSongs = new MutableLiveData<>(); MutableLiveData<List<Media>> listLivePlaylistSongs = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getPlaylistClient() .getPlaylistClient()
@ -73,7 +71,7 @@ public class PlaylistRepository {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
if (response.isSuccessful() && response.body() != null && response.body().getPlaylist() != null) { if (response.isSuccessful() && response.body() != null && response.body().getPlaylist() != null) {
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getPlaylist().getEntries())); List<Media> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getPlaylist().getEntries()));
listLivePlaylistSongs.setValue(songs); listLivePlaylistSongs.setValue(songs);
} }
} }

View file

@ -7,7 +7,7 @@ import androidx.lifecycle.LiveData;
import com.cappielloantonio.play.database.AppDatabase; import com.cappielloantonio.play.database.AppDatabase;
import com.cappielloantonio.play.database.dao.QueueDao; import com.cappielloantonio.play.database.dao.QueueDao;
import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
import java.time.Instant; import java.time.Instant;
@ -28,8 +28,8 @@ public class QueueRepository {
return queueDao.getAll(); return queueDao.getAll();
} }
public List<Song> getSongs() { public List<Media> getSongs() {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
GetSongsThreadSafe getSongs = new GetSongsThreadSafe(queueDao); GetSongsThreadSafe getSongs = new GetSongsThreadSafe(queueDao);
Thread thread = new Thread(getSongs); Thread thread = new Thread(getSongs);
@ -45,9 +45,9 @@ public class QueueRepository {
return songs; return songs;
} }
public void insert(Song song, boolean reset, int afterIndex) { public void insert(Media song, boolean reset, int afterIndex) {
try { try {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (!reset) { if (!reset) {
GetSongsThreadSafe getSongsThreadSafe = new GetSongsThreadSafe(queueDao); GetSongsThreadSafe getSongsThreadSafe = new GetSongsThreadSafe(queueDao);
@ -72,9 +72,9 @@ public class QueueRepository {
} }
} }
public void insertAll(List<Song> toAdd, boolean reset, int afterIndex) { public void insertAll(List<Media> toAdd, boolean reset, int afterIndex) {
try { try {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (!reset) { if (!reset) {
GetSongsThreadSafe getSongsThreadSafe = new GetSongsThreadSafe(queueDao); GetSongsThreadSafe getSongsThreadSafe = new GetSongsThreadSafe(queueDao);
@ -176,7 +176,7 @@ public class QueueRepository {
private static class GetSongsThreadSafe implements Runnable { private static class GetSongsThreadSafe implements Runnable {
private final QueueDao queueDao; private final QueueDao queueDao;
private List<Song> songs; private List<Media> songs;
public GetSongsThreadSafe(QueueDao queueDao) { public GetSongsThreadSafe(QueueDao queueDao) {
this.queueDao = queueDao; this.queueDao = queueDao;
@ -187,16 +187,16 @@ public class QueueRepository {
songs = MappingUtil.mapQueue(queueDao.getAllSimple()); songs = MappingUtil.mapQueue(queueDao.getAllSimple());
} }
public List<Song> getSongs() { public List<Media> getSongs() {
return songs; return songs;
} }
} }
private static class InsertAllThreadSafe implements Runnable { private static class InsertAllThreadSafe implements Runnable {
private final QueueDao queueDao; private final QueueDao queueDao;
private final List<Song> songs; private final List<Media> songs;
public InsertAllThreadSafe(QueueDao queueDao, List<Song> songs) { public InsertAllThreadSafe(QueueDao queueDao, List<Media> songs) {
this.queueDao = queueDao; this.queueDao = queueDao;
this.songs = songs; this.songs = songs;
} }

View file

@ -11,7 +11,7 @@ import com.cappielloantonio.play.database.dao.RecentSearchDao;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.RecentSearch; import com.cappielloantonio.play.model.RecentSearch;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.subsonic.models.AlbumID3; import com.cappielloantonio.play.subsonic.models.AlbumID3;
import com.cappielloantonio.play.subsonic.models.ArtistID3; import com.cappielloantonio.play.subsonic.models.ArtistID3;
import com.cappielloantonio.play.subsonic.models.Child; import com.cappielloantonio.play.subsonic.models.Child;
@ -37,8 +37,8 @@ public class SearchingRepository {
recentSearchDao = database.recentSearchDao(); recentSearchDao = database.recentSearchDao();
} }
public MutableLiveData<List<Song>> getSearchedSongs(String query) { public MutableLiveData<List<Media>> getSearchedSongs(String query) {
MutableLiveData<List<Song>> searchedSongs = new MutableLiveData<>(); MutableLiveData<List<Media>> searchedSongs = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getSearchingClient() .getSearchingClient()
@ -46,7 +46,7 @@ public class SearchingRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getSearchResult3() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSearchResult3() != null) {
songs.addAll(MappingUtil.mapSong(response.body().getSearchResult3().getSongs())); songs.addAll(MappingUtil.mapSong(response.body().getSearchResult3().getSongs()));

View file

@ -7,7 +7,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.subsonic.models.SubsonicResponse; import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -29,8 +29,8 @@ public class SongRepository {
this.application = application; this.application = application;
} }
public MutableLiveData<List<Song>> getStarredSongs(boolean random, int size) { public MutableLiveData<List<Media>> getStarredSongs(boolean random, int size) {
MutableLiveData<List<Song>> starredSongs = new MutableLiveData<>(); MutableLiveData<List<Media>> starredSongs = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient() .getAlbumSongListClient()
@ -39,7 +39,7 @@ public class SongRepository {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
if (response.isSuccessful() && response.body() != null && response.body().getStarred2() != null) { if (response.isSuccessful() && response.body() != null && response.body().getStarred2() != null) {
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getStarred2().getSongs())); List<Media> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getStarred2().getSongs()));
if (!random) { if (!random) {
starredSongs.setValue(songs); starredSongs.setValue(songs);
@ -59,7 +59,7 @@ public class SongRepository {
return starredSongs; return starredSongs;
} }
public void getInstantMix(Song song, int count, MediaCallback callback) { public void getInstantMix(Media song, int count, MediaCallback callback) {
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getBrowsingClient() .getBrowsingClient()
.getSimilarSongs2(song.getId(), count) .getSimilarSongs2(song.getId(), count)
@ -67,7 +67,7 @@ public class SongRepository {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSimilarSongs2() != null) {
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs())); List<Media> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs()));
if (songs.size() <= 1) { if (songs.size() <= 1) {
songs.add(song); songs.add(song);
@ -79,15 +79,15 @@ public class SongRepository {
@Override @Override
public void onFailure(@NonNull Call<SubsonicResponse> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<SubsonicResponse> call, @NonNull Throwable t) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
songs.add(song); songs.add(song);
callback.onLoadMedia(songs); callback.onLoadMedia(songs);
} }
}); });
} }
public MutableLiveData<List<Song>> getRandomSample(int number, Integer fromYear, Integer toYear) { public MutableLiveData<List<Media>> getRandomSample(int number, Integer fromYear, Integer toYear) {
MutableLiveData<List<Song>> randomSongsSample = new MutableLiveData<>(); MutableLiveData<List<Media>> randomSongsSample = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient() .getAlbumSongListClient()
@ -95,7 +95,7 @@ public class SongRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getRandomSongs() != null) { if (response.isSuccessful() && response.body() != null && response.body().getRandomSongs() != null) {
songs.addAll(MappingUtil.mapSong(response.body().getRandomSongs().getSongs())); songs.addAll(MappingUtil.mapSong(response.body().getRandomSongs().getSongs()));
@ -181,8 +181,8 @@ public class SongRepository {
}); });
} }
public MutableLiveData<List<Song>> getSongsByGenre(String id) { public MutableLiveData<List<Media>> getSongsByGenre(String id) {
MutableLiveData<List<Song>> songsByGenre = new MutableLiveData<>(); MutableLiveData<List<Media>> songsByGenre = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient() .getAlbumSongListClient()
@ -191,15 +191,15 @@ public class SongRepository {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
if (response.isSuccessful() && response.body() != null && response.body().getSongsByGenre() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSongsByGenre() != null) {
List<Song> newSongs = new ArrayList<>(MappingUtil.mapSong(response.body().getSongsByGenre().getSongs())); List<Media> newSongs = new ArrayList<>(MappingUtil.mapSong(response.body().getSongsByGenre().getSongs()));
List<Song> songs = songsByGenre.getValue(); List<Media> songs = songsByGenre.getValue();
if (songs == null) songs = new ArrayList<>(); if (songs == null) songs = new ArrayList<>();
songs.addAll(newSongs); songs.addAll(newSongs);
Collections.shuffle(songs); Collections.shuffle(songs);
LinkedHashSet<Song> hashSet = new LinkedHashSet<>(songs); LinkedHashSet<Media> hashSet = new LinkedHashSet<>(songs);
ArrayList<Song> songsWithoutDuplicates = new ArrayList<>(hashSet); ArrayList<Media> songsWithoutDuplicates = new ArrayList<>(hashSet);
songsByGenre.setValue(songsWithoutDuplicates); songsByGenre.setValue(songsWithoutDuplicates);
} }
@ -214,8 +214,8 @@ public class SongRepository {
return songsByGenre; return songsByGenre;
} }
public MutableLiveData<List<Song>> getSongsByGenres(ArrayList<String> genresId) { public MutableLiveData<List<Media>> getSongsByGenres(ArrayList<String> genresId) {
MutableLiveData<List<Song>> songsByGenre = new MutableLiveData<>(); MutableLiveData<List<Media>> songsByGenre = new MutableLiveData<>();
for (String id : genresId) for (String id : genresId)
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
@ -224,7 +224,7 @@ public class SongRepository {
.enqueue(new Callback<SubsonicResponse>() { .enqueue(new Callback<SubsonicResponse>() {
@Override @Override
public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) { public void onResponse(@NonNull Call<SubsonicResponse> call, @NonNull Response<SubsonicResponse> response) {
List<Song> songs = new ArrayList<>(); List<Media> songs = new ArrayList<>();
if (response.isSuccessful() && response.body() != null && response.body().getSongsByGenre() != null) { if (response.isSuccessful() && response.body() != null && response.body().getSongsByGenre() != null) {
songs.addAll(MappingUtil.mapSong(response.body().getSongsByGenre().getSongs())); songs.addAll(MappingUtil.mapSong(response.body().getSongsByGenre().getSongs()));
@ -242,8 +242,8 @@ public class SongRepository {
return songsByGenre; return songsByGenre;
} }
public MutableLiveData<Song> getSong(String id) { public MutableLiveData<Media> getSong(String id) {
MutableLiveData<Song> song = new MutableLiveData<>(); MutableLiveData<Media> song = new MutableLiveData<>();
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)
.getBrowsingClient() .getBrowsingClient()
@ -265,7 +265,7 @@ public class SongRepository {
return song; return song;
} }
public MutableLiveData<String> getSongLyrics(Song song) { public MutableLiveData<String> getSongLyrics(Media song) {
MutableLiveData<String> lyrics = new MutableLiveData<>(null); MutableLiveData<String> lyrics = new MutableLiveData<>(null);
App.getSubsonicClientInstance(application, false) App.getSubsonicClientInstance(application, false)

View file

@ -9,7 +9,7 @@ import androidx.media3.session.MediaBrowser;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.interfaces.MediaIndexCallback; import com.cappielloantonio.play.interfaces.MediaIndexCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -64,7 +64,7 @@ public class MediaManager {
try { try {
if (mediaBrowserListenableFuture.isDone()) { if (mediaBrowserListenableFuture.isDone()) {
if (mediaBrowserListenableFuture.get().getMediaItemCount() < 1) { if (mediaBrowserListenableFuture.get().getMediaItemCount() < 1) {
List<Song> songs = getQueueRepository().getSongs(); List<Media> songs = getQueueRepository().getSongs();
if (songs != null && songs.size() >= 1) { if (songs != null && songs.size() >= 1) {
init(mediaBrowserListenableFuture, context, songs); init(mediaBrowserListenableFuture, context, songs);
} }
@ -77,7 +77,7 @@ public class MediaManager {
} }
} }
public static void init(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Song> songs) { public static void init(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Media> songs) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -164,7 +164,7 @@ public class MediaManager {
} }
} }
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Song> songs, int startIndex) { public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Media> songs, int startIndex) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -183,7 +183,7 @@ public class MediaManager {
} }
} }
public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Song song) { public static void startQueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Media song) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -201,7 +201,7 @@ public class MediaManager {
} }
} }
public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Song> songs, boolean playImmediatelyAfter) { public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, List<Media> songs, boolean playImmediatelyAfter) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -221,7 +221,7 @@ public class MediaManager {
} }
} }
public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Song song, boolean playImmediatelyAfter) { public static void enqueue(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, Context context, Media song, boolean playImmediatelyAfter) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -241,7 +241,7 @@ public class MediaManager {
} }
} }
public static void swap(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Song> songs, int from, int to) { public static void swap(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Media> songs, int from, int to) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -256,7 +256,7 @@ public class MediaManager {
} }
} }
public static void remove(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Song> songs, int toRemove) { public static void remove(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture, List<Media> songs, int toRemove) {
if (mediaBrowserListenableFuture != null) { if (mediaBrowserListenableFuture != null) {
mediaBrowserListenableFuture.addListener(() -> { mediaBrowserListenableFuture.addListener(() -> {
try { try {
@ -312,19 +312,19 @@ public class MediaManager {
return new SongRepository(App.getInstance()); return new SongRepository(App.getInstance());
} }
private static void enqueueDatabase(List<Song> songs, boolean reset, int afterIndex) { private static void enqueueDatabase(List<Media> songs, boolean reset, int afterIndex) {
getQueueRepository().insertAll(songs, reset, afterIndex); getQueueRepository().insertAll(songs, reset, afterIndex);
} }
private static void enqueueDatabase(Song song, boolean reset, int afterIndex) { private static void enqueueDatabase(Media song, boolean reset, int afterIndex) {
getQueueRepository().insert(song, reset, afterIndex); getQueueRepository().insert(song, reset, afterIndex);
} }
private static void swapDatabase(List<Song> songs) { private static void swapDatabase(List<Media> songs) {
getQueueRepository().insertAll(songs, true, 0); getQueueRepository().insertAll(songs, true, 0);
} }
private static void removeDatabase(List<Song> songs, int toRemove) { private static void removeDatabase(List<Media> songs, int toRemove) {
if (toRemove != -1) { if (toRemove != -1) {
songs.remove(toRemove); songs.remove(toRemove);
getQueueRepository().insertAll(songs, true, 0); getQueueRepository().insertAll(songs, true, 0);

View file

@ -3,8 +3,6 @@ package com.cappielloantonio.play.ui.fragment;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.graphics.BlendMode;
import android.graphics.BlendModeColorFilter;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
@ -14,7 +12,6 @@ import android.view.ViewGroup;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.session.MediaBrowser; import androidx.media3.session.MediaBrowser;
@ -30,7 +27,7 @@ import com.cappielloantonio.play.databinding.FragmentArtistPageBinding;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper; import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
@ -41,7 +38,6 @@ import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
public class ArtistPageFragment extends Fragment { public class ArtistPageFragment extends Fragment {
private static final String TAG = "ArtistPageFragment"; private static final String TAG = "ArtistPageFragment";
@ -102,7 +98,7 @@ public class ArtistPageFragment extends Fragment {
bind.mostStreamedSongTextViewClickable.setOnClickListener(v -> { bind.mostStreamedSongTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.BY_ARTIST, Song.BY_ARTIST); bundle.putString(Media.BY_ARTIST, Media.BY_ARTIST);
bundle.putParcelable("artist_object", artistPageViewModel.getArtist()); bundle.putParcelable("artist_object", artistPageViewModel.getArtist());
activity.navController.navigate(R.id.action_artistPageFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_artistPageFragment_to_songListPageFragment, bundle);
}); });
@ -170,7 +166,7 @@ public class ArtistPageFragment extends Fragment {
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
if (media.size() > 0) { if (media.size() > 0) {
MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Song>) media, 0); MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Media>) media, 0);
activity.setBottomSheetInPeek(true); activity.setBottomSheetInPeek(true);
} else { } else {
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show(); Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();

View file

@ -12,7 +12,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.session.MediaBrowser; import androidx.media3.session.MediaBrowser;
@ -21,12 +20,10 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.SnapHelper; import androidx.recyclerview.widget.SnapHelper;
import androidx.viewpager2.widget.ViewPager2;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter; import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter;
import com.cappielloantonio.play.adapter.ArtistHorizontalAdapter; import com.cappielloantonio.play.adapter.ArtistHorizontalAdapter;
import com.cappielloantonio.play.adapter.PlaylistAdapter;
import com.cappielloantonio.play.adapter.PlaylistHorizontalAdapter; import com.cappielloantonio.play.adapter.PlaylistHorizontalAdapter;
import com.cappielloantonio.play.adapter.SongHorizontalAdapter; import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
import com.cappielloantonio.play.databinding.FragmentDownloadBinding; import com.cappielloantonio.play.databinding.FragmentDownloadBinding;
@ -34,7 +31,7 @@ import com.cappielloantonio.play.helper.recyclerview.DotsIndicatorDecoration;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.UIUtil; import com.cappielloantonio.play.util.UIUtil;
@ -153,7 +150,7 @@ public class DownloadFragment extends Fragment {
bind.downloadedTracksTextViewClickable.setOnClickListener(v -> { bind.downloadedTracksTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.DOWNLOADED, Song.DOWNLOADED); bundle.putString(Media.DOWNLOADED, Media.DOWNLOADED);
activity.navController.navigate(R.id.action_downloadFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_downloadFragment_to_songListPageFragment, bundle);
}); });

View file

@ -15,7 +15,7 @@ import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.FragmentFilterBinding; import com.cappielloantonio.play.databinding.FragmentFilterBinding;
import com.cappielloantonio.play.model.Genre; import com.cappielloantonio.play.model.Genre;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.viewmodel.FilterViewModel; import com.cappielloantonio.play.viewmodel.FilterViewModel;
@ -57,7 +57,7 @@ public class FilterFragment extends Fragment {
private void init() { private void init() {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.BY_GENRES, Song.BY_GENRES); bundle.putString(Media.BY_GENRES, Media.BY_GENRES);
bundle.putStringArrayList("filters_list", filterViewModel.getFilters()); bundle.putStringArrayList("filters_list", filterViewModel.getFilters());
bundle.putStringArrayList("filter_name_list", filterViewModel.getFilterNames()); bundle.putStringArrayList("filter_name_list", filterViewModel.getFilterNames());
bind.finishFilteringTextViewClickable.setOnClickListener(v -> { bind.finishFilteringTextViewClickable.setOnClickListener(v -> {

View file

@ -25,7 +25,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.GenreCatalogueAdapter; import com.cappielloantonio.play.adapter.GenreCatalogueAdapter;
import com.cappielloantonio.play.databinding.FragmentGenreCatalogueBinding; import com.cappielloantonio.play.databinding.FragmentGenreCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration; import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.GenreCatalogueViewModel; import com.cappielloantonio.play.viewmodel.GenreCatalogueViewModel;
@ -109,7 +109,7 @@ public class GenreCatalogueFragment extends Fragment {
bind.genreCatalogueRecyclerView.setAdapter(genreCatalogueAdapter); bind.genreCatalogueRecyclerView.setAdapter(genreCatalogueAdapter);
genreCatalogueAdapter.setClickListener((view, position) -> { genreCatalogueAdapter.setClickListener((view, position) -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.BY_GENRE, Song.BY_GENRE); bundle.putString(Media.BY_GENRE, Media.BY_GENRE);
bundle.putParcelable("genre_object", genreCatalogueAdapter.getItem(position)); bundle.putParcelable("genre_object", genreCatalogueAdapter.getItem(position));
activity.navController.navigate(R.id.action_genreCatalogueFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_genreCatalogueFragment_to_songListPageFragment, bundle);
}); });

View file

@ -3,7 +3,6 @@ package com.cappielloantonio.play.ui.fragment;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.ComponentName; import android.content.ComponentName;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -42,7 +41,7 @@ import com.cappielloantonio.play.helper.recyclerview.DotsIndicatorDecoration;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
@ -181,7 +180,7 @@ public class HomeFragment extends Fragment {
bind.starredTracksTextViewClickable.setOnClickListener(v -> { bind.starredTracksTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.STARRED, Song.STARRED); bundle.putString(Media.STARRED, Media.STARRED);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
}); });
@ -451,7 +450,7 @@ public class HomeFragment extends Fragment {
yearAdapter = new YearAdapter(requireContext()); yearAdapter = new YearAdapter(requireContext());
yearAdapter.setClickListener((view, position) -> { yearAdapter.setClickListener((view, position) -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.BY_YEAR, Song.BY_YEAR); bundle.putString(Media.BY_YEAR, Media.BY_YEAR);
bundle.putInt("year_object", yearAdapter.getItem(position)); bundle.putInt("year_object", yearAdapter.getItem(position));
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
}); });

View file

@ -10,32 +10,21 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.SnapHelper;
import androidx.viewpager2.widget.ViewPager2;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumAdapter; import com.cappielloantonio.play.adapter.AlbumAdapter;
import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter;
import com.cappielloantonio.play.adapter.ArtistAdapter; import com.cappielloantonio.play.adapter.ArtistAdapter;
import com.cappielloantonio.play.adapter.GenreAdapter; import com.cappielloantonio.play.adapter.GenreAdapter;
import com.cappielloantonio.play.adapter.PlaylistAdapter;
import com.cappielloantonio.play.adapter.PlaylistDialogHorizontalAdapter;
import com.cappielloantonio.play.adapter.PlaylistHorizontalAdapter; import com.cappielloantonio.play.adapter.PlaylistHorizontalAdapter;
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
import com.cappielloantonio.play.databinding.FragmentLibraryBinding; import com.cappielloantonio.play.databinding.FragmentLibraryBinding;
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper; import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
import com.cappielloantonio.play.helper.recyclerview.DotsIndicatorDecoration;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.UIUtil;
import com.cappielloantonio.play.viewmodel.LibraryViewModel; import com.cappielloantonio.play.viewmodel.LibraryViewModel;
import com.google.android.gms.cast.framework.CastButtonFactory; import com.google.android.gms.cast.framework.CastButtonFactory;
@ -201,7 +190,7 @@ public class LibraryFragment extends Fragment {
genreAdapter = new GenreAdapter(requireContext()); genreAdapter = new GenreAdapter(requireContext());
genreAdapter.setClickListener((view, position) -> { genreAdapter.setClickListener((view, position) -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(Song.BY_GENRE, Song.BY_GENRE); bundle.putString(Media.BY_GENRE, Media.BY_GENRE);
bundle.putParcelable("genre_object", genreAdapter.getItem(position)); bundle.putParcelable("genre_object", genreAdapter.getItem(position));
activity.navController.navigate(R.id.action_libraryFragment_to_songListPageFragment, bundle); activity.navController.navigate(R.id.action_libraryFragment_to_songListPageFragment, bundle);
}); });

View file

@ -24,7 +24,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.databinding.InnerFragmentPlayerCoverBinding; import com.cappielloantonio.play.databinding.InnerFragmentPlayerCoverBinding;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
@ -121,7 +121,7 @@ public class PlayerCoverFragment extends Fragment {
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List<Song>) media, true); MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List<Media>) media, true);
} }
}); });
}); });

View file

@ -18,7 +18,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.SongHorizontalAdapter; import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
import com.cappielloantonio.play.databinding.FragmentSongListPageBinding; import com.cappielloantonio.play.databinding.FragmentSongListPageBinding;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
@ -80,50 +80,50 @@ public class SongListPageFragment extends Fragment {
} }
private void init() { private void init() {
if (requireArguments().getString(Song.RECENTLY_PLAYED) != null) { if (requireArguments().getString(Media.RECENTLY_PLAYED) != null) {
songListPageViewModel.title = Song.RECENTLY_PLAYED; songListPageViewModel.title = Media.RECENTLY_PLAYED;
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_recently_played); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_recently_played);
bind.pageTitleLabel.setText(R.string.song_list_page_recently_played); bind.pageTitleLabel.setText(R.string.song_list_page_recently_played);
} else if (requireArguments().getString(Song.MOST_PLAYED) != null) { } else if (requireArguments().getString(Media.MOST_PLAYED) != null) {
songListPageViewModel.title = Song.MOST_PLAYED; songListPageViewModel.title = Media.MOST_PLAYED;
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_most_played); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_most_played);
bind.pageTitleLabel.setText(R.string.song_list_page_most_played); bind.pageTitleLabel.setText(R.string.song_list_page_most_played);
} else if (requireArguments().getString(Song.RECENTLY_ADDED) != null) { } else if (requireArguments().getString(Media.RECENTLY_ADDED) != null) {
songListPageViewModel.title = Song.RECENTLY_ADDED; songListPageViewModel.title = Media.RECENTLY_ADDED;
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_recently_added); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_recently_added);
bind.pageTitleLabel.setText(R.string.song_list_page_recently_added); bind.pageTitleLabel.setText(R.string.song_list_page_recently_added);
} else if (requireArguments().getString(Song.BY_GENRE) != null) { } else if (requireArguments().getString(Media.BY_GENRE) != null) {
songListPageViewModel.title = Song.BY_GENRE; songListPageViewModel.title = Media.BY_GENRE;
songListPageViewModel.genre = requireArguments().getParcelable("genre_object"); songListPageViewModel.genre = requireArguments().getParcelable("genre_object");
songListPageViewModel.toolbarTitle = MusicUtil.getReadableString(songListPageViewModel.genre.getName()); songListPageViewModel.toolbarTitle = MusicUtil.getReadableString(songListPageViewModel.genre.getName());
bind.pageTitleLabel.setText(MusicUtil.getReadableString(songListPageViewModel.genre.getName())); bind.pageTitleLabel.setText(MusicUtil.getReadableString(songListPageViewModel.genre.getName()));
} else if (requireArguments().getString(Song.BY_ARTIST) != null) { } else if (requireArguments().getString(Media.BY_ARTIST) != null) {
songListPageViewModel.title = Song.BY_ARTIST; songListPageViewModel.title = Media.BY_ARTIST;
songListPageViewModel.artist = requireArguments().getParcelable("artist_object"); songListPageViewModel.artist = requireArguments().getParcelable("artist_object");
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_top, MusicUtil.getReadableString(songListPageViewModel.artist.getName())); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_top, MusicUtil.getReadableString(songListPageViewModel.artist.getName()));
bind.pageTitleLabel.setText(getString(R.string.song_list_page_top, MusicUtil.getReadableString(songListPageViewModel.artist.getName()))); bind.pageTitleLabel.setText(getString(R.string.song_list_page_top, MusicUtil.getReadableString(songListPageViewModel.artist.getName())));
} else if (requireArguments().getString(Song.BY_GENRES) != null) { } else if (requireArguments().getString(Media.BY_GENRES) != null) {
songListPageViewModel.title = Song.BY_GENRES; songListPageViewModel.title = Media.BY_GENRES;
songListPageViewModel.filters = requireArguments().getStringArrayList("filters_list"); songListPageViewModel.filters = requireArguments().getStringArrayList("filters_list");
songListPageViewModel.filterNames = requireArguments().getStringArrayList("filter_name_list"); songListPageViewModel.filterNames = requireArguments().getStringArrayList("filter_name_list");
songListPageViewModel.toolbarTitle = songListPageViewModel.getFiltersTitle(); songListPageViewModel.toolbarTitle = songListPageViewModel.getFiltersTitle();
bind.pageTitleLabel.setText(songListPageViewModel.getFiltersTitle()); bind.pageTitleLabel.setText(songListPageViewModel.getFiltersTitle());
} else if (requireArguments().getString(Song.BY_YEAR) != null) { } else if (requireArguments().getString(Media.BY_YEAR) != null) {
songListPageViewModel.title = Song.BY_YEAR; songListPageViewModel.title = Media.BY_YEAR;
songListPageViewModel.year = requireArguments().getInt("year_object"); songListPageViewModel.year = requireArguments().getInt("year_object");
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_year, songListPageViewModel.year); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_year, songListPageViewModel.year);
bind.pageTitleLabel.setText(getString(R.string.song_list_page_year, songListPageViewModel.year)); bind.pageTitleLabel.setText(getString(R.string.song_list_page_year, songListPageViewModel.year));
} else if (requireArguments().getString(Song.STARRED) != null) { } else if (requireArguments().getString(Media.STARRED) != null) {
songListPageViewModel.title = Song.STARRED; songListPageViewModel.title = Media.STARRED;
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_starred); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_starred);
bind.pageTitleLabel.setText(R.string.song_list_page_starred); bind.pageTitleLabel.setText(R.string.song_list_page_starred);
} else if (requireArguments().getString(Song.DOWNLOADED) != null) { } else if (requireArguments().getString(Media.DOWNLOADED) != null) {
songListPageViewModel.title = Song.DOWNLOADED; songListPageViewModel.title = Media.DOWNLOADED;
songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_downloaded); songListPageViewModel.toolbarTitle = getString(R.string.song_list_page_downloaded);
bind.pageTitleLabel.setText(getString(R.string.song_list_page_downloaded)); bind.pageTitleLabel.setText(getString(R.string.song_list_page_downloaded));
} else if (requireArguments().getParcelable("album_object") != null) { } else if (requireArguments().getParcelable("album_object") != null) {
songListPageViewModel.album = requireArguments().getParcelable("album_object"); songListPageViewModel.album = requireArguments().getParcelable("album_object");
songListPageViewModel.title = Song.FROM_ALBUM; songListPageViewModel.title = Media.FROM_ALBUM;
songListPageViewModel.toolbarTitle = MusicUtil.getReadableString(songListPageViewModel.album.getTitle()); songListPageViewModel.toolbarTitle = MusicUtil.getReadableString(songListPageViewModel.album.getTitle());
bind.pageTitleLabel.setText(MusicUtil.getReadableString(songListPageViewModel.album.getTitle())); bind.pageTitleLabel.setText(MusicUtil.getReadableString(songListPageViewModel.album.getTitle()));
} }

View file

@ -26,7 +26,7 @@ import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Download; import com.cappielloantonio.play.model.Download;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
@ -113,7 +113,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
if (media.size() > 0) { if (media.size() > 0) {
MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Song>) media, 0); MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Media>) media, 0);
((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetInPeek(true);
} else { } else {
Toast.makeText(requireContext(), getString(R.string.album_error_retrieving_radio), Toast.LENGTH_SHORT).show(); Toast.makeText(requireContext(), getString(R.string.album_error_retrieving_radio), Toast.LENGTH_SHORT).show();

View file

@ -23,7 +23,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
@ -104,7 +104,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
if (media.size() > 0) { if (media.size() > 0) {
MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Song>) media, 0); MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), (ArrayList<Media>) media, 0);
((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetInPeek(true);
} else { } else {
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show(); Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();

View file

@ -23,7 +23,7 @@ import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.service.MediaService;
@ -43,7 +43,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
private static final String TAG = "SongBottomSheetDialog"; private static final String TAG = "SongBottomSheetDialog";
private SongBottomSheetViewModel songBottomSheetViewModel; private SongBottomSheetViewModel songBottomSheetViewModel;
private Song song; private Media song;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
@ -123,7 +123,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List<Song>) media, true); MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List<Media>) media, true);
dismissBottomSheet(); dismissBottomSheet();
} }
}); });

View file

@ -15,7 +15,7 @@ import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.PodcastChannel; import com.cappielloantonio.play.model.PodcastChannel;
import com.cappielloantonio.play.model.PodcastEpisode; import com.cappielloantonio.play.model.PodcastEpisode;
import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.subsonic.models.AlbumID3; import com.cappielloantonio.play.subsonic.models.AlbumID3;
import com.cappielloantonio.play.subsonic.models.AlbumInfo; import com.cappielloantonio.play.subsonic.models.AlbumInfo;
import com.cappielloantonio.play.subsonic.models.AlbumWithSongsID3; import com.cappielloantonio.play.subsonic.models.AlbumWithSongsID3;
@ -30,18 +30,18 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class MappingUtil { public class MappingUtil {
public static ArrayList<Song> mapSong(List<Child> children) { public static ArrayList<Media> mapSong(List<Child> children) {
ArrayList<Song> songs = new ArrayList(); ArrayList<Media> songs = new ArrayList();
for (Child child : children) { for (Child child : children) {
songs.add(new Song(child)); songs.add(new Media(child));
} }
return songs; return songs;
} }
public static Song mapSong(Child child) { public static Media mapSong(Child child) {
return new Song(child); return new Media(child);
} }
public static ArrayList<Album> mapAlbum(List<AlbumID3> albumID3List) { public static ArrayList<Album> mapAlbum(List<AlbumID3> albumID3List) {
@ -94,21 +94,21 @@ public class MappingUtil {
return artists; return artists;
} }
public static ArrayList<Song> mapQueue(List<Queue> queueList) { public static ArrayList<Media> mapQueue(List<Queue> queueList) {
ArrayList<Song> songs = new ArrayList(); ArrayList<Media> songs = new ArrayList();
for (Queue item : queueList) { for (Queue item : queueList) {
songs.add(new Song(item)); songs.add(new Media(item));
} }
return songs; return songs;
} }
public static Queue mapSongToQueue(Song song, int trackOrder) { public static Queue mapSongToQueue(Media song, int trackOrder) {
return new Queue(trackOrder, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration(), 0, 0); return new Queue(trackOrder, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration(), 0, 0);
} }
public static List<Queue> mapSongsToQueue(List<Song> songs) { public static List<Queue> mapSongsToQueue(List<Media> songs) {
List<Queue> queue = new ArrayList<>(); List<Queue> queue = new ArrayList<>();
for (int counter = 0; counter < songs.size(); counter++) { for (int counter = 0; counter < songs.size(); counter++) {
@ -128,11 +128,11 @@ public class MappingUtil {
return playlist; return playlist;
} }
public static ArrayList<Song> mapDownloadToSong(List<Download> downloads) { public static ArrayList<Media> mapDownloadToSong(List<Download> downloads) {
ArrayList<Song> songs = new ArrayList(); ArrayList<Media> songs = new ArrayList();
for (Download download : downloads) { for (Download download : downloads) {
Song song = new Song(download); Media song = new Media(download);
if (!songs.contains(song)) { if (!songs.contains(song)) {
songs.add(song); songs.add(song);
} }
@ -177,17 +177,17 @@ public class MappingUtil {
return playlists; return playlists;
} }
public static ArrayList<Download> mapDownload(List<Song> songs, String playlistId, String playlistName) { public static ArrayList<Download> mapDownload(List<Media> songs, String playlistId, String playlistName) {
ArrayList<Download> downloads = new ArrayList(); ArrayList<Download> downloads = new ArrayList();
for (Song song : songs) { for (Media song : songs) {
downloads.add(new Download(song, playlistId, playlistName)); downloads.add(new Download(song, playlistId, playlistName));
} }
return downloads; return downloads;
} }
public static Download mapDownload(Song song, String playlistId, String playlistName) { public static Download mapDownload(Media song, String playlistId, String playlistName) {
return new Download(song, playlistId, playlistName); return new Download(song, playlistId, playlistName);
} }
@ -202,7 +202,7 @@ public class MappingUtil {
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
public static MediaItem mapMediaItem(Context context, Song song, boolean stream) { public static MediaItem mapMediaItem(Context context, Media song, boolean stream) {
boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getDownloadUri(song.getId())); boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getDownloadUri(song.getId()));
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@ -258,8 +258,8 @@ public class MappingUtil {
ArrayList<MediaItem> mediaItems = new ArrayList(); ArrayList<MediaItem> mediaItems = new ArrayList();
for(int i = 0; i < items.size(); i++) { for(int i = 0; i < items.size(); i++) {
if(items.get(i) instanceof Song) { if(items.get(i) instanceof Media) {
mediaItems.add(mapMediaItem(context, (Song) items.get(i), stream)); mediaItems.add(mapMediaItem(context, (Media) items.get(i), stream));
} }
if(items.get(i) instanceof PodcastEpisode) { if(items.get(i) instanceof PodcastEpisode) {

View file

@ -10,7 +10,6 @@ import android.util.Log;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R; import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.model.Song;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -9,7 +9,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
@ -40,7 +40,7 @@ public class AlbumBottomSheetViewModel extends AndroidViewModel {
return artistRepository.getArtist(album.getArtistId()); return artistRepository.getArtist(album.getArtistId());
} }
public MutableLiveData<List<Song>> getAlbumTracks() { public MutableLiveData<List<Media>> getAlbumTracks() {
return albumRepository.getAlbumTracks(album.getId()); return albumRepository.getAlbumTracks(album.getId());
} }

View file

@ -3,7 +3,6 @@ package com.cappielloantonio.play.viewmodel;
import android.app.Application; import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
@ -11,7 +10,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.DownloadRepository;
@ -24,7 +23,7 @@ public class AlbumPageViewModel extends AndroidViewModel {
private final ArtistRepository artistRepository; private final ArtistRepository artistRepository;
private final DownloadRepository downloadRepository; private final DownloadRepository downloadRepository;
private MutableLiveData<List<Song>> songLiveList = new MutableLiveData<>(); private MutableLiveData<List<Media>> songLiveList = new MutableLiveData<>();
private Album album; private Album album;
private boolean isOffline; private boolean isOffline;
@ -37,7 +36,7 @@ public class AlbumPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getAlbumSongLiveList(LifecycleOwner owner) { public LiveData<List<Media>> getAlbumSongLiveList(LifecycleOwner owner) {
if (isOffline) { if (isOffline) {
downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songLiveList.postValue(MappingUtil.mapDownloadToSong(downloads)));
} else { } else {

View file

@ -8,7 +8,7 @@ import androidx.lifecycle.LiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
@ -35,7 +35,7 @@ public class ArtistPageViewModel extends AndroidViewModel {
return artistRepository.getArtistFullInfo(id); return artistRepository.getArtistFullInfo(id);
} }
public LiveData<List<Song>> getArtistTopSongList(int count) { public LiveData<List<Media>> getArtistTopSongList(int count) {
return artistRepository.getTopSongs(artist.getName(), count); return artistRepository.getTopSongs(artist.getName(), count);
} }

View file

@ -11,7 +11,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.DownloadRepository;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -24,7 +24,7 @@ public class DownloadViewModel extends AndroidViewModel {
private final MutableLiveData<List<Artist>> downloadedArtistSample = new MutableLiveData<>(null); private final MutableLiveData<List<Artist>> downloadedArtistSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Album>> downloadedAlbumSample = new MutableLiveData<>(null); private final MutableLiveData<List<Album>> downloadedAlbumSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Song>> downloadedTrackSample = new MutableLiveData<>(null); private final MutableLiveData<List<Media>> downloadedTrackSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Playlist>> downloadedPlaylistSample = new MutableLiveData<>(null); private final MutableLiveData<List<Playlist>> downloadedPlaylistSample = new MutableLiveData<>(null);
public DownloadViewModel(@NonNull Application application) { public DownloadViewModel(@NonNull Application application) {
@ -43,7 +43,7 @@ public class DownloadViewModel extends AndroidViewModel {
return downloadedAlbumSample; return downloadedAlbumSample;
} }
public LiveData<List<Song>> getDownloadedTracks(LifecycleOwner owner, int size) { public LiveData<List<Media>> getDownloadedTracks(LifecycleOwner owner, int size) {
downloadRepository.getLiveDownloadSample(size, false, false, true, false).observe(owner, downloads -> downloadedTrackSample.postValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownloadSample(size, false, false, true, false).observe(owner, downloads -> downloadedTrackSample.postValue(MappingUtil.mapDownloadToSong(downloads)));
return downloadedTrackSample; return downloadedTrackSample;
} }

View file

@ -13,13 +13,12 @@ import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.PodcastEpisode; import com.cappielloantonio.play.model.PodcastEpisode;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.PlaylistRepository; import com.cappielloantonio.play.repository.PlaylistRepository;
import com.cappielloantonio.play.repository.PodcastRepository; import com.cappielloantonio.play.repository.PodcastRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.subsonic.models.NewestPodcasts;
import com.cappielloantonio.play.util.PreferenceUtil; import com.cappielloantonio.play.util.PreferenceUtil;
import java.util.Calendar; import java.util.Calendar;
@ -36,11 +35,11 @@ public class HomeViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private final PodcastRepository podcastRepository; private final PodcastRepository podcastRepository;
private final MutableLiveData<List<Song>> dicoverSongSample = new MutableLiveData<>(null); private final MutableLiveData<List<Media>> dicoverSongSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Album>> newReleasedAlbum = new MutableLiveData<>(null); private final MutableLiveData<List<Album>> newReleasedAlbum = new MutableLiveData<>(null);
private final MutableLiveData<List<Song>> starredTracksSample = new MutableLiveData<>(null); private final MutableLiveData<List<Media>> starredTracksSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Artist>> starredArtistsSample = new MutableLiveData<>(null); private final MutableLiveData<List<Artist>> starredArtistsSample = new MutableLiveData<>(null);
private final MutableLiveData<List<Song>> starredTracks = new MutableLiveData<>(null); private final MutableLiveData<List<Media>> starredTracks = new MutableLiveData<>(null);
private final MutableLiveData<List<Album>> starredAlbums = new MutableLiveData<>(null); private final MutableLiveData<List<Album>> starredAlbums = new MutableLiveData<>(null);
private final MutableLiveData<List<Artist>> starredArtists = new MutableLiveData<>(null); private final MutableLiveData<List<Artist>> starredArtists = new MutableLiveData<>(null);
private final MutableLiveData<List<Album>> mostPlayedAlbumSample = new MutableLiveData<>(null); private final MutableLiveData<List<Album>> mostPlayedAlbumSample = new MutableLiveData<>(null);
@ -64,7 +63,7 @@ public class HomeViewModel extends AndroidViewModel {
artistRepository.getStarredArtists(true, 10).observeForever(starredArtistsSample::postValue); artistRepository.getStarredArtists(true, 10).observeForever(starredArtistsSample::postValue);
} }
public LiveData<List<Song>> getDiscoverSongSample() { public LiveData<List<Media>> getDiscoverSongSample() {
return dicoverSongSample; return dicoverSongSample;
} }
@ -79,7 +78,7 @@ public class HomeViewModel extends AndroidViewModel {
return newReleasedAlbum; return newReleasedAlbum;
} }
public LiveData<List<Song>> getStarredTracksSample() { public LiveData<List<Media>> getStarredTracksSample() {
return starredTracksSample; return starredTracksSample;
} }
@ -87,7 +86,7 @@ public class HomeViewModel extends AndroidViewModel {
return starredArtistsSample; return starredArtistsSample;
} }
public LiveData<List<Song>> getStarredTracks(LifecycleOwner owner) { public LiveData<List<Media>> getStarredTracks(LifecycleOwner owner) {
songRepository.getStarredSongs(true, 20).observe(owner, starredTracks::postValue); songRepository.getStarredSongs(true, 20).observe(owner, starredTracks::postValue);
return starredTracks; return starredTracks;
} }
@ -131,7 +130,7 @@ public class HomeViewModel extends AndroidViewModel {
return pinnedPlaylists; return pinnedPlaylists;
} }
public LiveData<List<Song>> getPlaylistSongLiveList(String playlistId) { public LiveData<List<Media>> getPlaylistSongLiveList(String playlistId) {
return playlistRepository.getPlaylistSongs(playlistId); return playlistRepository.getPlaylistSongs(playlistId);
} }

View file

@ -12,7 +12,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
@ -31,7 +31,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
private final MutableLiveData<String> lyricsLiveData = new MutableLiveData<>(null); private final MutableLiveData<String> lyricsLiveData = new MutableLiveData<>(null);
private final MutableLiveData<Song> liveSong = new MutableLiveData<>(null); private final MutableLiveData<Media> liveSong = new MutableLiveData<>(null);
private final MutableLiveData<Album> liveAlbum = new MutableLiveData<>(null); private final MutableLiveData<Album> liveAlbum = new MutableLiveData<>(null);
private final MutableLiveData<Artist> liveArtist = new MutableLiveData<>(null); private final MutableLiveData<Artist> liveArtist = new MutableLiveData<>(null);
@ -47,7 +47,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
return queueRepository.getLiveQueue(); return queueRepository.getLiveQueue();
} }
public void setFavorite(Context context, Song song) { public void setFavorite(Context context, Media song) {
if (song != null) { if (song != null) {
if (song.isFavorite()) { if (song.isFavorite()) {
songRepository.unstar(song.getId()); songRepository.unstar(song.getId());
@ -70,11 +70,11 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
return lyricsLiveData; return lyricsLiveData;
} }
public void refreshSongInfo(LifecycleOwner owner, Song song) { public void refreshSongInfo(LifecycleOwner owner, Media song) {
songRepository.getSongLyrics(song).observe(owner, lyricsLiveData::postValue); songRepository.getSongLyrics(song).observe(owner, lyricsLiveData::postValue);
} }
public LiveData<Song> getLiveSong() { public LiveData<Media> getLiveSong() {
return liveSong; return liveSong;
} }

View file

@ -8,7 +8,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.PlaylistRepository; import com.cappielloantonio.play.repository.PlaylistRepository;
import java.util.ArrayList; import java.util.ArrayList;
@ -19,7 +19,7 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private final MutableLiveData<List<Playlist>> playlists = new MutableLiveData<>(null); private final MutableLiveData<List<Playlist>> playlists = new MutableLiveData<>(null);
private Song toAdd; private Media toAdd;
public PlaylistChooserViewModel(@NonNull Application application) { public PlaylistChooserViewModel(@NonNull Application application) {
super(application); super(application);
@ -38,11 +38,11 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
playlistRepository.addSongToPlaylist(playlistId, new ArrayList(Collections.singletonList(toAdd.getId()))); playlistRepository.addSongToPlaylist(playlistId, new ArrayList(Collections.singletonList(toAdd.getId())));
} }
public void setSongToAdd(Song song) { public void setSongToAdd(Media song) {
toAdd = song; toAdd = song;
} }
public Song getSongToAdd() { public Media getSongToAdd() {
return toAdd; return toAdd;
} }
} }

View file

@ -1,7 +1,6 @@
package com.cappielloantonio.play.viewmodel; package com.cappielloantonio.play.viewmodel;
import android.app.Application; import android.app.Application;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
@ -9,7 +8,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.PlaylistRepository; import com.cappielloantonio.play.repository.PlaylistRepository;
import java.util.ArrayList; import java.util.ArrayList;
@ -22,10 +21,10 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private Song toAdd; private Media toAdd;
private Playlist toEdit; private Playlist toEdit;
private MutableLiveData<List<Song>> songLiveList = new MutableLiveData<>(); private MutableLiveData<List<Media>> songLiveList = new MutableLiveData<>();
public PlaylistEditorViewModel(@NonNull Application application) { public PlaylistEditorViewModel(@NonNull Application application) {
super(application); super(application);
@ -46,11 +45,11 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId()); if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId());
} }
public Song getSongToAdd() { public Media getSongToAdd() {
return toAdd; return toAdd;
} }
public void setSongToAdd(Song song) { public void setSongToAdd(Media song) {
this.toAdd = song; this.toAdd = song;
} }
@ -68,26 +67,26 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
} }
} }
public LiveData<List<Song>> getPlaylistSongLiveList() { public LiveData<List<Media>> getPlaylistSongLiveList() {
return songLiveList; return songLiveList;
} }
public void removeFromPlaylistSongLiveList(int position) { public void removeFromPlaylistSongLiveList(int position) {
List<Song> songs = songLiveList.getValue(); List<Media> songs = songLiveList.getValue();
Objects.requireNonNull(songs).remove(position); Objects.requireNonNull(songs).remove(position);
songLiveList.postValue(songs); songLiveList.postValue(songs);
} }
public void orderPlaylistSongLiveListAfterSwap(List<Song> songs) { public void orderPlaylistSongLiveListAfterSwap(List<Media> songs) {
songLiveList.postValue(songs); songLiveList.postValue(songs);
} }
private ArrayList<String> getPlaylistSongIds() { private ArrayList<String> getPlaylistSongIds() {
List<Song> songs = songLiveList.getValue(); List<Media> songs = songLiveList.getValue();
ArrayList<String> ids = new ArrayList<>(); ArrayList<String> ids = new ArrayList<>();
if (songs != null && !songs.isEmpty()) { if (songs != null && !songs.isEmpty()) {
for (Song song : songs) { for (Media song : songs) {
ids.add(song.getId()); ids.add(song.getId());
} }
} }

View file

@ -3,7 +3,6 @@ package com.cappielloantonio.play.viewmodel;
import android.app.Application; import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
@ -11,7 +10,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App; import com.cappielloantonio.play.App;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.DownloadRepository;
import com.cappielloantonio.play.repository.PlaylistRepository; import com.cappielloantonio.play.repository.PlaylistRepository;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
@ -23,7 +22,7 @@ public class PlaylistPageViewModel extends AndroidViewModel {
private final PlaylistRepository playlistRepository; private final PlaylistRepository playlistRepository;
private final DownloadRepository downloadRepository; private final DownloadRepository downloadRepository;
private MutableLiveData<List<Song>> playlistSongLiveList = new MutableLiveData<>(); private MutableLiveData<List<Media>> playlistSongLiveList = new MutableLiveData<>();
private Playlist playlist; private Playlist playlist;
private boolean isOffline; private boolean isOffline;
@ -35,7 +34,7 @@ public class PlaylistPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getPlaylistSongLiveList(LifecycleOwner owner) { public LiveData<List<Media>> getPlaylistSongLiveList(LifecycleOwner owner) {
if (isOffline) { if (isOffline) {
downloadRepository.getLiveDownloadFromPlaylist(playlist.getId()).observe(owner, downloads -> playlistSongLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownloadFromPlaylist(playlist.getId()).observe(owner, downloads -> playlistSongLiveList.postValue(MappingUtil.mapDownloadToSong(downloads)));
} else { } else {

View file

@ -8,7 +8,7 @@ import androidx.lifecycle.LiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
@ -18,7 +18,7 @@ public class RatingViewModel extends AndroidViewModel {
private final AlbumRepository albumRepository; private final AlbumRepository albumRepository;
private final ArtistRepository artistRepository; private final ArtistRepository artistRepository;
private Song song; private Media song;
private Album album; private Album album;
private Artist artist; private Artist artist;
@ -30,15 +30,15 @@ public class RatingViewModel extends AndroidViewModel {
artistRepository = new ArtistRepository(application); artistRepository = new ArtistRepository(application);
} }
public Song getSong() { public Media getSong() {
return song; return song;
} }
public LiveData<Song> getLiveSong() { public LiveData<Media> getLiveSong() {
return songRepository.getSong(song.getId()); return songRepository.getSong(song.getId());
} }
public void setSong(Song song) { public void setSong(Media song) {
this.song = song; this.song = song;
this.album = null; this.album = null;
this.artist = null; this.artist = null;

View file

@ -9,7 +9,7 @@ import androidx.lifecycle.LiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.RecentSearch; import com.cappielloantonio.play.model.RecentSearch;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.SearchingRepository; import com.cappielloantonio.play.repository.SearchingRepository;
import java.util.ArrayList; import java.util.ArrayList;
@ -40,7 +40,7 @@ public class SearchViewModel extends AndroidViewModel {
} }
} }
public LiveData<List<Song>> searchSong(String title) { public LiveData<List<Media>> searchSong(String title) {
return searchingRepository.getSearchedSongs(title); return searchingRepository.getSearchedSongs(title);
} }

View file

@ -9,7 +9,7 @@ import androidx.lifecycle.LiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
@ -22,7 +22,7 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
private final AlbumRepository albumRepository; private final AlbumRepository albumRepository;
private final ArtistRepository artistRepository; private final ArtistRepository artistRepository;
private Song song; private Media song;
public SongBottomSheetViewModel(@NonNull Application application) { public SongBottomSheetViewModel(@NonNull Application application) {
super(application); super(application);
@ -32,11 +32,11 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
artistRepository = new ArtistRepository(application); artistRepository = new ArtistRepository(application);
} }
public Song getSong() { public Media getSong() {
return song; return song;
} }
public void setSong(Song song) { public void setSong(Media song) {
this.song = song; this.song = song;
} }

View file

@ -4,7 +4,6 @@ import android.app.Application;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
@ -13,7 +12,7 @@ import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Genre; import com.cappielloantonio.play.model.Genre;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.DownloadRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
@ -33,7 +32,7 @@ public class SongListPageViewModel extends AndroidViewModel {
public Artist artist; public Artist artist;
public Album album; public Album album;
private MutableLiveData<List<Song>> songList; private MutableLiveData<List<Media>> songList;
public ArrayList<String> filters = new ArrayList<>(); public ArrayList<String> filters = new ArrayList<>();
public ArrayList<String> filterNames = new ArrayList<>(); public ArrayList<String> filterNames = new ArrayList<>();
@ -48,29 +47,29 @@ public class SongListPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getSongList(LifecycleOwner owner) { public LiveData<List<Media>> getSongList(LifecycleOwner owner) {
songList = new MutableLiveData<>(new ArrayList<>()); songList = new MutableLiveData<>(new ArrayList<>());
switch (title) { switch (title) {
case Song.BY_GENRE: case Media.BY_GENRE:
songList = songRepository.getSongsByGenre(genre.getId()); songList = songRepository.getSongsByGenre(genre.getId());
break; break;
case Song.BY_ARTIST: case Media.BY_ARTIST:
songList = artistRepository.getTopSongs(artist.getName(), 50); songList = artistRepository.getTopSongs(artist.getName(), 50);
break; break;
case Song.BY_GENRES: case Media.BY_GENRES:
songList = songRepository.getSongsByGenres(filters); songList = songRepository.getSongsByGenres(filters);
break; break;
case Song.BY_YEAR: case Media.BY_YEAR:
songList = songRepository.getRandomSample(500, year, year + 10); songList = songRepository.getRandomSample(500, year, year + 10);
break; break;
case Song.STARRED: case Media.STARRED:
songList = songRepository.getStarredSongs(false, -1); songList = songRepository.getStarredSongs(false, -1);
break; break;
case Song.DOWNLOADED: case Media.DOWNLOADED:
downloadRepository.getLiveDownload().observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownload().observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads)));
break; break;
case Song.FROM_ALBUM: case Media.FROM_ALBUM:
downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads)));
break; break;
} }

View file

@ -8,19 +8,15 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Media;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.PlaylistRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class StarredSyncViewModel extends AndroidViewModel { public class StarredSyncViewModel extends AndroidViewModel {
private final SongRepository songRepository; private final SongRepository songRepository;
private final MutableLiveData<List<Song>> starredTracks = new MutableLiveData<>(null); private final MutableLiveData<List<Media>> starredTracks = new MutableLiveData<>(null);
public StarredSyncViewModel(@NonNull Application application) { public StarredSyncViewModel(@NonNull Application application) {
super(application); super(application);
@ -28,7 +24,7 @@ public class StarredSyncViewModel extends AndroidViewModel {
songRepository = new SongRepository(application); songRepository = new SongRepository(application);
} }
public LiveData<List<Song>> getStarredTracks(LifecycleOwner owner) { public LiveData<List<Media>> getStarredTracks(LifecycleOwner owner) {
songRepository.getStarredSongs(false, -1).observe(owner, starredTracks::postValue); songRepository.getStarredSongs(false, -1).observe(owner, starredTracks::postValue);
return starredTracks; return starredTracks;
} }