mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Fixed bottom sheets functionality
This commit is contained in:
parent
320e3b8678
commit
2e1c21e73c
15 changed files with 348 additions and 222 deletions
|
|
@ -10,6 +10,10 @@ import androidx.room.Ignore;
|
||||||
import androidx.room.PrimaryKey;
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
import com.cappielloantonio.play.subsonic.models.AlbumWithSongsID3;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Album implements Parcelable {
|
public class Album implements Parcelable {
|
||||||
private static final String TAG = "Album";
|
private static final String TAG = "Album";
|
||||||
|
|
@ -27,6 +31,7 @@ public class Album implements Parcelable {
|
||||||
public String primary;
|
public String primary;
|
||||||
public String blurHash;
|
public String blurHash;
|
||||||
public boolean favorite;
|
public boolean favorite;
|
||||||
|
public List<Song> songs;
|
||||||
|
|
||||||
public Album(AlbumID3 albumID3) {
|
public Album(AlbumID3 albumID3) {
|
||||||
this.id = albumID3.getId();
|
this.id = albumID3.getId();
|
||||||
|
|
@ -37,6 +42,18 @@ public class Album implements Parcelable {
|
||||||
this.primary = albumID3.getCoverArtId();
|
this.primary = albumID3.getCoverArtId();
|
||||||
this.favorite = albumID3.getStarred() != null;
|
this.favorite = albumID3.getStarred() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Album(AlbumWithSongsID3 albumWithSongsID3) {
|
||||||
|
this.id = albumWithSongsID3.getId();
|
||||||
|
this.title = albumWithSongsID3.getName();
|
||||||
|
this.year = albumWithSongsID3.getYear();
|
||||||
|
this.artistId = albumWithSongsID3.getArtistId();
|
||||||
|
this.artistName = albumWithSongsID3.getArtist();
|
||||||
|
this.primary = albumWithSongsID3.getCoverArtId();
|
||||||
|
this.favorite = albumWithSongsID3.getStarred() != null;
|
||||||
|
this.songs = MappingUtil.mapSong(albumWithSongsID3.getSongs());
|
||||||
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
@ -101,6 +118,14 @@ public class Album implements Parcelable {
|
||||||
this.favorite = favorite;
|
this.favorite = favorite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Song> getSongs() {
|
||||||
|
return songs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSongs(List<Song> songs) {
|
||||||
|
this.songs = songs;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,8 @@ package com.cappielloantonio.play.model;
|
||||||
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.text.Html;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.room.ColumnInfo;
|
|
||||||
import androidx.room.Entity;
|
|
||||||
import androidx.room.Ignore;
|
|
||||||
import androidx.room.PrimaryKey;
|
|
||||||
|
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistInfo2;
|
import com.cappielloantonio.play.subsonic.models.ArtistInfo2;
|
||||||
|
|
@ -55,6 +50,7 @@ public class Artist implements Parcelable {
|
||||||
this.albumCount = artistWithAlbumsID3.getAlbumCount();
|
this.albumCount = artistWithAlbumsID3.getAlbumCount();
|
||||||
this.albums = MappingUtil.mapAlbum(artistWithAlbumsID3.getAlbums());
|
this.albums = MappingUtil.mapAlbum(artistWithAlbumsID3.getAlbums());
|
||||||
this.favorite = artistWithAlbumsID3.getStarred() != null;
|
this.favorite = artistWithAlbumsID3.getStarred() != null;
|
||||||
|
this.albums = MappingUtil.mapAlbum(artistWithAlbumsID3.getAlbums());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Artist(ArtistInfo2 artistInfo2) {
|
public Artist(ArtistInfo2 artistInfo2) {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
|
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.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
||||||
|
|
@ -198,4 +200,47 @@ public class AlbumRepository {
|
||||||
|
|
||||||
return artistsAlbum;
|
return artistsAlbum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<Album> getAlbum(String id) {
|
||||||
|
MutableLiveData<Album> album = new MutableLiveData<>();
|
||||||
|
|
||||||
|
App.getSubsonicClientInstance(application, false)
|
||||||
|
.getBrowsingClient()
|
||||||
|
.getAlbum(id)
|
||||||
|
.enqueue(new Callback<SubsonicResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
|
||||||
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
|
album.setValue(MappingUtil.mapAlbum(response.body().getAlbum()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return album;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getInstantMix(Album album, int count, MediaCallback callback) {
|
||||||
|
App.getSubsonicClientInstance(application, false)
|
||||||
|
.getBrowsingClient()
|
||||||
|
.getSimilarSongs2(album.getId(), count)
|
||||||
|
.enqueue(new Callback<SubsonicResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
|
||||||
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
|
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs()));
|
||||||
|
callback.onLoadMedia(songs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
|
||||||
|
callback.onLoadMedia(new ArrayList<>());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,14 @@ package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
|
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.subsonic.models.ArtistWithAlbumsID3;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.subsonic.models.IndexID3;
|
import com.cappielloantonio.play.subsonic.models.IndexID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
||||||
|
|
@ -203,6 +205,85 @@ public class ArtistRepository {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<Artist> getArtist(String id) {
|
||||||
|
MutableLiveData<Artist> artist = new MutableLiveData<>();
|
||||||
|
|
||||||
|
App.getSubsonicClientInstance(application, false)
|
||||||
|
.getBrowsingClient()
|
||||||
|
.getArtist(id)
|
||||||
|
.enqueue(new Callback<SubsonicResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
|
||||||
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
|
artist.setValue(MappingUtil.mapArtist(response.body().getArtist()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getInstantMix(Artist artist, int count, MediaCallback callback) {
|
||||||
|
App.getSubsonicClientInstance(application, false)
|
||||||
|
.getBrowsingClient()
|
||||||
|
.getSimilarSongs2(artist.getId(), count)
|
||||||
|
.enqueue(new Callback<SubsonicResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
|
||||||
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
|
List<Song> songs = new ArrayList<>(MappingUtil.mapSong(response.body().getSimilarSongs2().getSongs()));
|
||||||
|
callback.onLoadMedia(songs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
|
||||||
|
callback.onLoadMedia(new ArrayList<>());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<ArrayList<Song>> getArtistRandomSong(FragmentActivity fragmentActivity, Artist artist, int count) {
|
||||||
|
MutableLiveData<ArrayList<Song>> randomSongs = new MutableLiveData<>(new ArrayList());
|
||||||
|
|
||||||
|
App.getSubsonicClientInstance(application, false)
|
||||||
|
.getBrowsingClient()
|
||||||
|
.getArtist(artist.getId())
|
||||||
|
.enqueue(new Callback<SubsonicResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
|
||||||
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
|
List<Album> albums = new ArrayList<>(MappingUtil.mapAlbum(response.body().getArtist().getAlbums()));
|
||||||
|
|
||||||
|
if(albums.size() > 0) {
|
||||||
|
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
||||||
|
|
||||||
|
for (int index = 0; index < albums.size(); index++) {
|
||||||
|
albumRepository.getAlbumTracks(albums.get(index).getId()).observe(fragmentActivity, songs -> {
|
||||||
|
ArrayList<Song> liveSongs = randomSongs.getValue();
|
||||||
|
Collections.shuffle(liveSongs);
|
||||||
|
liveSongs.addAll(songs);
|
||||||
|
randomSongs.setValue(liveSongs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<SubsonicResponse> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return randomSongs;
|
||||||
|
}
|
||||||
|
|
||||||
private void addToMutableLiveData(MutableLiveData<List<Artist>> liveData, Artist artist) {
|
private void addToMutableLiveData(MutableLiveData<List<Artist>> liveData, Artist artist) {
|
||||||
List<Artist> liveArtists = liveData.getValue();
|
List<Artist> liveArtists = liveData.getValue();
|
||||||
liveArtists.add(artist);
|
liveArtists.add(artist);
|
||||||
|
|
|
||||||
|
|
@ -47,32 +47,6 @@ public class QueueRepository {
|
||||||
return songs;
|
return songs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insertAll(List<Song> songs) {
|
|
||||||
InsertAllThreadSafe insertAll = new InsertAllThreadSafe(queueDao, songs);
|
|
||||||
Thread thread = new Thread(insertAll);
|
|
||||||
thread.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Song> insertMix(ArrayList<Song> media) {
|
|
||||||
List<String> IDs = QueueUtil.getIDsFromSongs(media);
|
|
||||||
List<Song> mix = new ArrayList<>();
|
|
||||||
|
|
||||||
/*GetSongsByIDThreadSafe getSongsByIDThreadSafe = new GetSongsByIDThreadSafe(songDao, IDs);
|
|
||||||
Thread thread = new Thread(getSongsByIDThreadSafe);
|
|
||||||
thread.start();
|
|
||||||
|
|
||||||
try {
|
|
||||||
thread.join();
|
|
||||||
mix = QueueUtil.orderSongByIdList(IDs, getSongsByIDThreadSafe.getSongs());
|
|
||||||
|
|
||||||
insertAllAndStartNew(mix);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
return mix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void insertAllAndStartNew(List<Song> songs) {
|
public void insertAllAndStartNew(List<Song> songs) {
|
||||||
try {
|
try {
|
||||||
final Thread delete = new Thread(new DeleteAllThreadSafe(queueDao));
|
final Thread delete = new Thread(new DeleteAllThreadSafe(queueDao));
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class SearchingRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MutableLiveData<List<String>> getSuggestions(String query) {
|
public MutableLiveData<List<String>> getSuggestions(String query) {
|
||||||
MutableLiveData<List<String>> suggestions = new MutableLiveData<>(new ArrayList());
|
MutableLiveData<List<String>> suggestions = new MutableLiveData<>(new ArrayList());
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(application, false)
|
||||||
.getSearchingClient()
|
.getSearchingClient()
|
||||||
|
|
@ -122,15 +122,15 @@ public class SearchingRepository {
|
||||||
List<String> newSuggestions = new ArrayList();
|
List<String> newSuggestions = new ArrayList();
|
||||||
|
|
||||||
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
|
||||||
for(ArtistID3 artistID3 : response.body().getSearchResult3().getArtists()) {
|
for (ArtistID3 artistID3 : response.body().getSearchResult3().getArtists()) {
|
||||||
newSuggestions.add(artistID3.getName());
|
newSuggestions.add(artistID3.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
for(AlbumID3 albumID3 : response.body().getSearchResult3().getAlbums()) {
|
for (AlbumID3 albumID3 : response.body().getSearchResult3().getAlbums()) {
|
||||||
newSuggestions.add(albumID3.getName());
|
newSuggestions.add(albumID3.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Child song : response.body().getSearchResult3().getSongs()) {
|
for (Child song : response.body().getSearchResult3().getSongs()) {
|
||||||
newSuggestions.add(song.getTitle());
|
newSuggestions.add(song.getTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import android.graphics.BlendMode;
|
||||||
import android.graphics.BlendModeColorFilter;
|
import android.graphics.BlendModeColorFilter;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
@ -27,6 +28,7 @@ import com.cappielloantonio.play.databinding.FragmentArtistPageBinding;
|
||||||
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.repository.ArtistRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
|
|
@ -39,6 +41,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ArtistPageFragment extends Fragment {
|
public class ArtistPageFragment extends Fragment {
|
||||||
|
private static final String TAG = "ArtistPageFragment";
|
||||||
|
|
||||||
private FragmentArtistPageBinding bind;
|
private FragmentArtistPageBinding bind;
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
|
|
@ -125,35 +128,44 @@ public class ArtistPageFragment extends Fragment {
|
||||||
|
|
||||||
private void initPlayButtons() {
|
private void initPlayButtons() {
|
||||||
bind.artistPageShuffleButton.setOnClickListener(v -> {
|
bind.artistPageShuffleButton.setOnClickListener(v -> {
|
||||||
List<Song> songs = artistPageViewModel.getArtistRandomSongList();
|
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
||||||
|
artistRepository.getArtistRandomSong(requireActivity(), artistPageViewModel.getArtist(), 20).observe(requireActivity(), songs -> {
|
||||||
|
if (songs.size() > 0) {
|
||||||
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
if(songs.size() > 0) {
|
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
activity.isBottomSheetInPeek(true);
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
} else {
|
||||||
|
Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
}
|
||||||
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
|
});
|
||||||
}
|
|
||||||
else Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bind.artistPageRadioButton.setOnClickListener(v -> SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
|
bind.artistPageRadioButton.setOnClickListener(v -> {
|
||||||
@Override
|
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
||||||
public void onError(Exception exception) {
|
artistRepository.getInstantMix(artistPageViewModel.getArtist(), 20, new MediaCallback() {
|
||||||
Toast.makeText(requireContext(), "Error retrieving artist's radio", Toast.LENGTH_SHORT).show();
|
@Override
|
||||||
}
|
public void onError(Exception exception) {
|
||||||
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
if (media.size() > 0) {
|
||||||
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
activity.isBottomSheetInPeek(true);
|
activity.isBottomSheetInPeek(true);
|
||||||
activity.setBottomSheetMusicInfo(mix.get(0));
|
activity.setBottomSheetMusicInfo((Song) media.get(0));
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(mix, 0, true);
|
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||||
}
|
} else {
|
||||||
}, SyncUtil.SONG, artistPageViewModel.getArtist().getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber()));
|
Toast.makeText(requireContext(), "Error retrieving artist's radio", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initTopSongsView() {
|
private void initTopSongsView() {
|
||||||
|
|
|
||||||
|
|
@ -17,28 +17,28 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||||
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.service.MusicPlayerRemote;
|
|
||||||
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.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
|
import com.cappielloantonio.play.repository.AlbumRepository;
|
||||||
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.service.MusicPlayerRemote;
|
||||||
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;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
|
||||||
import com.cappielloantonio.play.util.SyncUtil;
|
|
||||||
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
||||||
private static final String TAG = "AlbumBottomSheetDialog";
|
private static final String TAG = "AlbumBottomSheetDialog";
|
||||||
|
|
||||||
|
private MainActivity activity;
|
||||||
|
|
||||||
private AlbumBottomSheetViewModel albumBottomSheetViewModel;
|
private AlbumBottomSheetViewModel albumBottomSheetViewModel;
|
||||||
private SongRepository songRepository;
|
|
||||||
private Album album;
|
private Album album;
|
||||||
|
|
||||||
private ImageView coverAlbum;
|
private ImageView coverAlbum;
|
||||||
|
|
@ -51,7 +51,6 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
private TextView playNext;
|
private TextView playNext;
|
||||||
private TextView addToQueue;
|
private TextView addToQueue;
|
||||||
private TextView Download;
|
private TextView Download;
|
||||||
private TextView addToPlaylist;
|
|
||||||
private TextView goToArtist;
|
private TextView goToArtist;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -64,14 +63,14 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
albumBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(AlbumBottomSheetViewModel.class);
|
albumBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(AlbumBottomSheetViewModel.class);
|
||||||
albumBottomSheetViewModel.setAlbum(album);
|
albumBottomSheetViewModel.setAlbum(album);
|
||||||
|
|
||||||
songRepository = new SongRepository(App.getInstance());
|
|
||||||
|
|
||||||
init(view);
|
init(view);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(View view) {
|
private void init(View view) {
|
||||||
|
activity = (MainActivity) requireActivity();
|
||||||
|
|
||||||
coverAlbum = view.findViewById(R.id.album_cover_image_view);
|
coverAlbum = view.findViewById(R.id.album_cover_image_view);
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(requireContext(), albumBottomSheetViewModel.getAlbum().getPrimary(), albumBottomSheetViewModel.getAlbum().getBlurHash(), CustomGlideRequest.ALBUM_PIC)
|
.from(requireContext(), albumBottomSheetViewModel.getAlbum().getPrimary(), albumBottomSheetViewModel.getAlbum().getBlurHash(), CustomGlideRequest.ALBUM_PIC)
|
||||||
|
|
@ -94,79 +93,87 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
playRadio = view.findViewById(R.id.play_radio_text_view);
|
playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
|
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
||||||
MainActivity activity = (MainActivity) requireActivity();
|
albumRepository.getInstantMix(album, 20, new MediaCallback() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
|
|
||||||
|
dismissBottomSheet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
if(media.size() > 0) {
|
||||||
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
activity.isBottomSheetInPeek(true);
|
activity.isBottomSheetInPeek(true);
|
||||||
activity.setBottomSheetMusicInfo(mix.get(0));
|
activity.setBottomSheetMusicInfo((Song) media.get(0));
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(mix, 0, true);
|
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(requireContext(), "Error retrieving album's radio", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
dismissBottomSheet();
|
||||||
}
|
}
|
||||||
}, SyncUtil.SONG, album.getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber());
|
});
|
||||||
|
|
||||||
dismissBottomSheet();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
playRandom = view.findViewById(R.id.play_random_text_view);
|
playRandom = view.findViewById(R.id.play_random_text_view);
|
||||||
playRandom.setOnClickListener(v -> {
|
playRandom.setOnClickListener(v -> {
|
||||||
// List<Song> songs = songRepository.getAlbumListSong(album.getId(), true);
|
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
||||||
List<Song> songs = new ArrayList<>();
|
albumRepository.getAlbumTracks(album.getId()).observe(requireActivity(), songs -> {
|
||||||
|
Collections.shuffle(songs);
|
||||||
|
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
|
activity.isBottomSheetInPeek(true);
|
||||||
dismissBottomSheet();
|
|
||||||
|
dismissBottomSheet();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
playNext = view.findViewById(R.id.play_next_text_view);
|
playNext = view.findViewById(R.id.play_next_text_view);
|
||||||
playNext.setOnClickListener(v -> {
|
playNext.setOnClickListener(v -> {
|
||||||
// MusicPlayerRemote.playNext(songRepository.getAlbumListSong(album.getId(), false));
|
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
|
MusicPlayerRemote.playNext(songs);
|
||||||
dismissBottomSheet();
|
activity.isBottomSheetInPeek(true);
|
||||||
|
dismissBottomSheet();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
||||||
addToQueue.setOnClickListener(v -> {
|
addToQueue.setOnClickListener(v -> {
|
||||||
// MusicPlayerRemote.enqueue(songRepository.getAlbumListSong(album.getId(), false));
|
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
dismissBottomSheet();
|
MusicPlayerRemote.enqueue(songs);
|
||||||
|
dismissBottomSheet();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
Download = view.findViewById(R.id.download_text_view);
|
Download = view.findViewById(R.id.download_text_view);
|
||||||
Download.setOnClickListener(v -> {
|
Download.setOnClickListener(v -> {
|
||||||
// List<Song> songs = songRepository.getAlbumListSong(album.getId(), false);
|
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
// DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs);
|
DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view);
|
|
||||||
addToPlaylist.setOnClickListener(v -> {
|
|
||||||
Toast.makeText(requireContext(), "Add to playlist", Toast.LENGTH_SHORT).show();
|
|
||||||
dismissBottomSheet();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
||||||
goToArtist.setOnClickListener(v -> {
|
goToArtist.setOnClickListener(v -> {
|
||||||
Artist artist = albumBottomSheetViewModel.getArtist();
|
albumBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
|
||||||
if(artist != null) {
|
if (artist != null) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable("artist_object", artist);
|
bundle.putParcelable("artist_object", artist);
|
||||||
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
||||||
}
|
} else
|
||||||
else Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
|
Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,15 +16,13 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
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.service.MusicPlayerRemote;
|
|
||||||
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.Song;
|
||||||
|
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.service.MusicPlayerRemote;
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
|
||||||
import com.cappielloantonio.play.util.SyncUtil;
|
|
||||||
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
|
||||||
|
|
@ -34,8 +32,9 @@ import java.util.List;
|
||||||
public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
||||||
private static final String TAG = "AlbumBottomSheetDialog";
|
private static final String TAG = "AlbumBottomSheetDialog";
|
||||||
|
|
||||||
|
private MainActivity activity;
|
||||||
|
|
||||||
private ArtistBottomSheetViewModel artistBottomSheetViewModel;
|
private ArtistBottomSheetViewModel artistBottomSheetViewModel;
|
||||||
private SongRepository songRepository;
|
|
||||||
private Artist artist;
|
private Artist artist;
|
||||||
|
|
||||||
private ImageView coverArtist;
|
private ImageView coverArtist;
|
||||||
|
|
@ -55,14 +54,14 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
||||||
artistBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(ArtistBottomSheetViewModel.class);
|
artistBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(ArtistBottomSheetViewModel.class);
|
||||||
artistBottomSheetViewModel.setArtist(artist);
|
artistBottomSheetViewModel.setArtist(artist);
|
||||||
|
|
||||||
songRepository = new SongRepository(App.getInstance());
|
|
||||||
|
|
||||||
init(view);
|
init(view);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(View view) {
|
private void init(View view) {
|
||||||
|
activity = (MainActivity) requireActivity();
|
||||||
|
|
||||||
coverArtist = view.findViewById(R.id.artist_cover_image_view);
|
coverArtist = view.findViewById(R.id.artist_cover_image_view);
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(requireContext(), artistBottomSheetViewModel.getArtist().getPrimary(), artistBottomSheetViewModel.getArtist().getPrimaryBlurHash(), CustomGlideRequest.ARTIST_PIC)
|
.from(requireContext(), artistBottomSheetViewModel.getArtist().getPrimary(), artistBottomSheetViewModel.getArtist().getPrimaryBlurHash(), CustomGlideRequest.ARTIST_PIC)
|
||||||
|
|
@ -82,43 +81,50 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
||||||
|
|
||||||
playRadio = view.findViewById(R.id.play_radio_text_view);
|
playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
|
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
||||||
MainActivity activity = (MainActivity) requireActivity();
|
artistRepository.getInstantMix(artist, 20, new MediaCallback() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
|
|
||||||
|
dismissBottomSheet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
if (media.size() > 0) {
|
||||||
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
activity.isBottomSheetInPeek(true);
|
activity.isBottomSheetInPeek(true);
|
||||||
activity.setBottomSheetMusicInfo(mix.get(0));
|
activity.setBottomSheetMusicInfo((Song) media.get(0));
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(mix, 0, true);
|
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(requireContext(), "Error retrieving artist's radio", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
dismissBottomSheet();
|
||||||
}
|
}
|
||||||
}, SyncUtil.SONG, artist.getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber());
|
});
|
||||||
|
|
||||||
dismissBottomSheet();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
playRandom = view.findViewById(R.id.play_random_text_view);
|
playRandom = view.findViewById(R.id.play_random_text_view);
|
||||||
playRandom.setOnClickListener(v -> {
|
playRandom.setOnClickListener(v -> {
|
||||||
// List<Song> songs = songRepository.getArtistListLiveRandomSong(artist.getId());
|
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
||||||
List<Song> songs = new ArrayList<>();
|
artistRepository.getArtistRandomSong(requireActivity(), artist, 20).observe(requireActivity(), songs -> {
|
||||||
|
if (songs.size() > 0) {
|
||||||
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
if(songs.size() > 0) {
|
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
activity.isBottomSheetInPeek(true);
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
} else {
|
||||||
|
Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
|
||||||
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
|
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
}
|
});
|
||||||
else Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,16 +17,13 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||||
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.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||||
import com.cappielloantonio.play.model.Album;
|
|
||||||
import com.cappielloantonio.play.model.Artist;
|
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
|
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||||
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;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
|
||||||
import com.cappielloantonio.play.util.SyncUtil;
|
|
||||||
import com.cappielloantonio.play.viewmodel.SongBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.SongBottomSheetViewModel;
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||||
|
|
||||||
|
|
@ -49,7 +46,6 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
private TextView playNext;
|
private TextView playNext;
|
||||||
private TextView addToQueue;
|
private TextView addToQueue;
|
||||||
private TextView download;
|
private TextView download;
|
||||||
private TextView addToPlaylist;
|
|
||||||
private TextView goToAlbum;
|
private TextView goToAlbum;
|
||||||
private TextView goToArtist;
|
private TextView goToArtist;
|
||||||
|
|
||||||
|
|
@ -92,9 +88,18 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
playRadio = view.findViewById(R.id.play_radio_text_view);
|
playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
|
List<Song> opener = new ArrayList<>();
|
||||||
MainActivity activity = (MainActivity) requireActivity();
|
opener.add(song);
|
||||||
|
MusicPlayerRemote.openQueue(opener, 0, true);
|
||||||
|
|
||||||
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
|
queueRepository.insertAllAndStartNew(opener);
|
||||||
|
|
||||||
|
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
|
||||||
|
((MainActivity) requireActivity()).setBottomSheetMusicInfo(song);
|
||||||
|
|
||||||
|
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||||
|
songRepository.getInstantMix(song, 20, new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
|
|
@ -102,15 +107,9 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
MusicPlayerRemote.enqueue((List<Song>) media);
|
||||||
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
|
|
||||||
|
|
||||||
activity.isBottomSheetInPeek(true);
|
|
||||||
activity.setBottomSheetMusicInfo(mix.get(0));
|
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(mix, 0, true);
|
|
||||||
}
|
}
|
||||||
}, SyncUtil.SONG, song.getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber());
|
});
|
||||||
|
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
@ -135,37 +134,32 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view);
|
|
||||||
addToPlaylist.setOnClickListener(v -> {
|
|
||||||
Toast.makeText(requireContext(), "Add to playlist", Toast.LENGTH_SHORT).show();
|
|
||||||
dismissBottomSheet();
|
|
||||||
});
|
|
||||||
|
|
||||||
goToAlbum = view.findViewById(R.id.go_to_album_text_view);
|
goToAlbum = view.findViewById(R.id.go_to_album_text_view);
|
||||||
goToAlbum.setOnClickListener(v -> {
|
goToAlbum.setOnClickListener(v -> {
|
||||||
Album album = songBottomSheetViewModel.getAlbum();
|
songBottomSheetViewModel.getAlbum().observe(requireActivity(), album -> {
|
||||||
|
if (album != null) {
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putParcelable("album_object", album);
|
||||||
|
NavHostFragment.findNavController(this).navigate(R.id.albumPageFragment, bundle);
|
||||||
|
} else
|
||||||
|
Toast.makeText(requireContext(), "Error retrieving album", Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
if(album != null) {
|
dismissBottomSheet();
|
||||||
Bundle bundle = new Bundle();
|
});
|
||||||
bundle.putParcelable("album_object", album);
|
|
||||||
NavHostFragment.findNavController(this).navigate(R.id.albumPageFragment, bundle);
|
|
||||||
}
|
|
||||||
else Toast.makeText(requireContext(), "Error retrieving album", Toast.LENGTH_SHORT).show();
|
|
||||||
|
|
||||||
dismissBottomSheet();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
||||||
goToArtist.setOnClickListener(v -> {
|
goToArtist.setOnClickListener(v -> {
|
||||||
Artist artist = songBottomSheetViewModel.getArtist();
|
songBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
|
||||||
if(artist != null) {
|
if (artist != null) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable("artist_object", artist);
|
bundle.putParcelable("artist_object", artist);
|
||||||
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
||||||
}
|
} else
|
||||||
else Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
|
Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,11 @@ import com.cappielloantonio.play.model.Playlist;
|
||||||
import com.cappielloantonio.play.model.Queue;
|
import com.cappielloantonio.play.model.Queue;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
import com.cappielloantonio.play.subsonic.models.AlbumWithSongsID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistInfo2;
|
import com.cappielloantonio.play.subsonic.models.ArtistInfo2;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistWithAlbumsID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistWithAlbumsID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.subsonic.models.Playlists;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -20,7 +20,7 @@ public class MappingUtil {
|
||||||
public static ArrayList<Song> mapSong(List<Child> children) {
|
public static ArrayList<Song> mapSong(List<Child> children) {
|
||||||
ArrayList<Song> songs = new ArrayList();
|
ArrayList<Song> songs = new ArrayList();
|
||||||
|
|
||||||
for(Child child : children){
|
for (Child child : children) {
|
||||||
songs.add(new Song(child));
|
songs.add(new Song(child));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -30,17 +30,21 @@ public class MappingUtil {
|
||||||
public static ArrayList<Album> mapAlbum(List<AlbumID3> albumID3List) {
|
public static ArrayList<Album> mapAlbum(List<AlbumID3> albumID3List) {
|
||||||
ArrayList<Album> albums = new ArrayList();
|
ArrayList<Album> albums = new ArrayList();
|
||||||
|
|
||||||
for(AlbumID3 albumID3 : albumID3List){
|
for (AlbumID3 albumID3 : albumID3List) {
|
||||||
albums.add(new Album(albumID3));
|
albums.add(new Album(albumID3));
|
||||||
}
|
}
|
||||||
|
|
||||||
return albums;
|
return albums;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Album mapAlbum(AlbumWithSongsID3 albumWithSongsID3) {
|
||||||
|
return new Album(albumWithSongsID3);
|
||||||
|
}
|
||||||
|
|
||||||
public static ArrayList<Artist> mapArtist(List<ArtistID3> artistID3List) {
|
public static ArrayList<Artist> mapArtist(List<ArtistID3> artistID3List) {
|
||||||
ArrayList<Artist> artists = new ArrayList();
|
ArrayList<Artist> artists = new ArrayList();
|
||||||
|
|
||||||
for(ArtistID3 artistID3 : artistID3List){
|
for (ArtistID3 artistID3 : artistID3List) {
|
||||||
artists.add(new Artist(artistID3));
|
artists.add(new Artist(artistID3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,6 +55,10 @@ public class MappingUtil {
|
||||||
return new Artist(artistInfo2);
|
return new Artist(artistInfo2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Artist mapArtist(ArtistWithAlbumsID3 artistWithAlbumsID3) {
|
||||||
|
return new Artist(artistWithAlbumsID3);
|
||||||
|
}
|
||||||
|
|
||||||
public static Artist mapArtistWithAlbum(ArtistWithAlbumsID3 artistWithAlbumsID3) {
|
public static Artist mapArtistWithAlbum(ArtistWithAlbumsID3 artistWithAlbumsID3) {
|
||||||
return new Artist(artistWithAlbumsID3);
|
return new Artist(artistWithAlbumsID3);
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +66,7 @@ public class MappingUtil {
|
||||||
public static ArrayList<Song> mapQueue(List<Queue> queueList) {
|
public static ArrayList<Song> mapQueue(List<Queue> queueList) {
|
||||||
ArrayList<Song> songs = new ArrayList();
|
ArrayList<Song> songs = new ArrayList();
|
||||||
|
|
||||||
for(Queue item : queueList){
|
for (Queue item : queueList) {
|
||||||
songs.add(new Song(item));
|
songs.add(new Song(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -68,7 +76,7 @@ public class MappingUtil {
|
||||||
public static ArrayList<Playlist> mapPlaylist(List<com.cappielloantonio.play.subsonic.models.Playlist> playlists) {
|
public static ArrayList<Playlist> mapPlaylist(List<com.cappielloantonio.play.subsonic.models.Playlist> playlists) {
|
||||||
ArrayList<Playlist> playlist = new ArrayList();
|
ArrayList<Playlist> playlist = new ArrayList();
|
||||||
|
|
||||||
for(com.cappielloantonio.play.subsonic.models.Playlist item : playlists){
|
for (com.cappielloantonio.play.subsonic.models.Playlist item : playlists) {
|
||||||
playlist.add(new Playlist(item));
|
playlist.add(new Playlist(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,7 +86,7 @@ public class MappingUtil {
|
||||||
public static ArrayList<Song> mapDownload(List<Download> downloads) {
|
public static ArrayList<Song> mapDownload(List<Download> downloads) {
|
||||||
ArrayList<Song> songs = new ArrayList();
|
ArrayList<Song> songs = new ArrayList();
|
||||||
|
|
||||||
for(Download download : downloads){
|
for (Download download : downloads) {
|
||||||
songs.add(new Song(download));
|
songs.add(new Song(download));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -88,7 +96,7 @@ public class MappingUtil {
|
||||||
public static ArrayList<Download> mapToDownload(List<Song> songs) {
|
public static ArrayList<Download> mapToDownload(List<Song> songs) {
|
||||||
ArrayList<Download> downloads = new ArrayList();
|
ArrayList<Download> downloads = new ArrayList();
|
||||||
|
|
||||||
for(Song song : songs){
|
for (Song song : songs) {
|
||||||
downloads.add(new Download(song));
|
downloads.add(new Download(song));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,19 @@ import android.app.Application;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
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.repository.AlbumRepository;
|
||||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumBottomSheetViewModel extends AndroidViewModel {
|
public class AlbumBottomSheetViewModel extends AndroidViewModel {
|
||||||
|
private AlbumRepository albumRepository;
|
||||||
private ArtistRepository artistRepository;
|
private ArtistRepository artistRepository;
|
||||||
|
|
||||||
private Album album;
|
private Album album;
|
||||||
|
|
@ -17,6 +24,7 @@ public class AlbumBottomSheetViewModel extends AndroidViewModel {
|
||||||
public AlbumBottomSheetViewModel(@NonNull Application application) {
|
public AlbumBottomSheetViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
|
albumRepository = new AlbumRepository(application);
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -28,9 +36,12 @@ public class AlbumBottomSheetViewModel extends AndroidViewModel {
|
||||||
this.album = album;
|
this.album = album;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Artist getArtist() {
|
public LiveData<Artist> getArtist() {
|
||||||
// return artistRepository.getArtistByID(album.getArtistId());
|
return artistRepository.getArtist(album.getArtistId());
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<List<Song>> getAlbumTracks() {
|
||||||
|
return albumRepository.getAlbumTracks(album.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFavorite() {
|
public void setFavorite() {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import android.app.Application;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
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;
|
||||||
|
|
@ -45,13 +46,11 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Album getAlbum() {
|
public LiveData<Album> getAlbum() {
|
||||||
// return albumRepository.getAlbumByID(song.getAlbumId());
|
return albumRepository.getAlbum(song.getAlbumId());
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Artist getArtist() {
|
public LiveData<Artist> getArtist() {
|
||||||
// return artistRepository.getArtistByID(song.getArtistId());
|
return artistRepository.getArtist(song.getArtistId());
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,22 +167,6 @@
|
||||||
android:textFontWeight="700"
|
android:textFontWeight="700"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/add_to_playlist_text_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:fontFamily="@font/opensans"
|
|
||||||
android:paddingStart="20dp"
|
|
||||||
android:paddingTop="12dp"
|
|
||||||
android:paddingEnd="20dp"
|
|
||||||
android:paddingBottom="12dp"
|
|
||||||
android:text="Aggiungi alla playlist"
|
|
||||||
android:textColor="@color/titleTextColor"
|
|
||||||
android:textFontWeight="700"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/go_to_artist_text_view"
|
android:id="@+id/go_to_artist_text_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
||||||
|
|
@ -152,22 +152,6 @@
|
||||||
android:textFontWeight="700"
|
android:textFontWeight="700"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/add_to_playlist_text_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:fontFamily="@font/opensans"
|
|
||||||
android:paddingStart="20dp"
|
|
||||||
android:paddingTop="12dp"
|
|
||||||
android:paddingEnd="20dp"
|
|
||||||
android:paddingBottom="12dp"
|
|
||||||
android:text="Aggiungi alla playlist"
|
|
||||||
android:textColor="@color/titleTextColor"
|
|
||||||
android:textFontWeight="700"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/go_to_album_text_view"
|
android:id="@+id/go_to_album_text_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue