Fixed bottom sheets functionality

This commit is contained in:
CappielloAntonio 2021-07-31 16:37:41 +02:00
parent 320e3b8678
commit 2e1c21e73c
15 changed files with 348 additions and 222 deletions

View file

@ -5,6 +5,7 @@ import android.graphics.BlendMode;
import android.graphics.BlendModeColorFilter;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -27,6 +28,7 @@ import com.cappielloantonio.play.databinding.FragmentArtistPageBinding;
import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.QueueRepository;
@ -39,6 +41,7 @@ import java.util.ArrayList;
import java.util.List;
public class ArtistPageFragment extends Fragment {
private static final String TAG = "ArtistPageFragment";
private FragmentArtistPageBinding bind;
private MainActivity activity;
@ -125,35 +128,44 @@ public class ArtistPageFragment extends Fragment {
private void initPlayButtons() {
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) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew(songs);
MusicPlayerRemote.openQueue(songs, 0, true);
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
}
else Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
MusicPlayerRemote.openQueue(songs, 0, true);
activity.isBottomSheetInPeek(true);
} else {
Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
}
});
});
bind.artistPageRadioButton.setOnClickListener(v -> SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Toast.makeText(requireContext(), "Error retrieving artist's radio", Toast.LENGTH_SHORT).show();
}
bind.artistPageRadioButton.setOnClickListener(v -> {
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
artistRepository.getInstantMix(artistPageViewModel.getArtist(), 20, new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
}
@Override
public void onLoadMedia(List<?> media) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
@Override
public void onLoadMedia(List<?> media) {
if (media.size() > 0) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
activity.isBottomSheetInPeek(true);
activity.setBottomSheetMusicInfo(mix.get(0));
activity.isBottomSheetInPeek(true);
activity.setBottomSheetMusicInfo((Song) media.get(0));
MusicPlayerRemote.openQueue(mix, 0, true);
}
}, SyncUtil.SONG, artistPageViewModel.getArtist().getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber()));
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
} else {
Toast.makeText(requireContext(), "Error retrieving artist's radio", Toast.LENGTH_SHORT).show();
}
}
});
});
}
private void initTopSongsView() {

View file

@ -17,28 +17,28 @@ import androidx.navigation.fragment.NavHostFragment;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.service.MusicPlayerRemote;
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.repository.AlbumRepository;
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.util.DownloadUtil;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.util.SyncUtil;
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
private static final String TAG = "AlbumBottomSheetDialog";
private MainActivity activity;
private AlbumBottomSheetViewModel albumBottomSheetViewModel;
private SongRepository songRepository;
private Album album;
private ImageView coverAlbum;
@ -51,7 +51,6 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
private TextView playNext;
private TextView addToQueue;
private TextView Download;
private TextView addToPlaylist;
private TextView goToArtist;
@Nullable
@ -64,14 +63,14 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
albumBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(AlbumBottomSheetViewModel.class);
albumBottomSheetViewModel.setAlbum(album);
songRepository = new SongRepository(App.getInstance());
init(view);
return view;
}
private void init(View view) {
activity = (MainActivity) requireActivity();
coverAlbum = view.findViewById(R.id.album_cover_image_view);
CustomGlideRequest.Builder
.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.setOnClickListener(v -> {
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
MainActivity activity = (MainActivity) requireActivity();
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
albumRepository.getInstantMix(album, 20, new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
dismissBottomSheet();
}
@Override
public void onLoadMedia(List<?> media) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
if(media.size() > 0) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
activity.isBottomSheetInPeek(true);
activity.setBottomSheetMusicInfo(mix.get(0));
activity.isBottomSheetInPeek(true);
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.setOnClickListener(v -> {
// List<Song> songs = songRepository.getAlbumListSong(album.getId(), true);
List<Song> songs = new ArrayList<>();
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
albumRepository.getAlbumTracks(album.getId()).observe(requireActivity(), songs -> {
Collections.shuffle(songs);
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew(songs);
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew(songs);
MusicPlayerRemote.openQueue(songs, 0, true);
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
dismissBottomSheet();
MusicPlayerRemote.openQueue(songs, 0, true);
activity.isBottomSheetInPeek(true);
dismissBottomSheet();
});
});
playNext = view.findViewById(R.id.play_next_text_view);
playNext.setOnClickListener(v -> {
// MusicPlayerRemote.playNext(songRepository.getAlbumListSong(album.getId(), false));
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
dismissBottomSheet();
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
MusicPlayerRemote.playNext(songs);
activity.isBottomSheetInPeek(true);
dismissBottomSheet();
});
});
addToQueue = view.findViewById(R.id.add_to_queue_text_view);
addToQueue.setOnClickListener(v -> {
// MusicPlayerRemote.enqueue(songRepository.getAlbumListSong(album.getId(), false));
dismissBottomSheet();
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
MusicPlayerRemote.enqueue(songs);
dismissBottomSheet();
});
});
Download = view.findViewById(R.id.download_text_view);
Download.setOnClickListener(v -> {
// List<Song> songs = songRepository.getAlbumListSong(album.getId(), false);
// DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs);
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();
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs);
dismissBottomSheet();
});
});
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
goToArtist.setOnClickListener(v -> {
Artist artist = albumBottomSheetViewModel.getArtist();
if(artist != null) {
Bundle bundle = new Bundle();
bundle.putParcelable("artist_object", artist);
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
}
else Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
albumBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
if (artist != null) {
Bundle bundle = new Bundle();
bundle.putParcelable("artist_object", artist);
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
} else
Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
dismissBottomSheet();
dismissBottomSheet();
});
});
}

View file

@ -16,15 +16,13 @@ import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.ArtistRepository;
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.util.PreferenceUtil;
import com.cappielloantonio.play.util.SyncUtil;
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
@ -34,8 +32,9 @@ import java.util.List;
public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
private static final String TAG = "AlbumBottomSheetDialog";
private MainActivity activity;
private ArtistBottomSheetViewModel artistBottomSheetViewModel;
private SongRepository songRepository;
private Artist artist;
private ImageView coverArtist;
@ -55,14 +54,14 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
artistBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(ArtistBottomSheetViewModel.class);
artistBottomSheetViewModel.setArtist(artist);
songRepository = new SongRepository(App.getInstance());
init(view);
return view;
}
private void init(View view) {
activity = (MainActivity) requireActivity();
coverArtist = view.findViewById(R.id.artist_cover_image_view);
CustomGlideRequest.Builder
.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.setOnClickListener(v -> {
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
MainActivity activity = (MainActivity) requireActivity();
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
artistRepository.getInstantMix(artist, 20, new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
dismissBottomSheet();
}
@Override
public void onLoadMedia(List<?> media) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
if (media.size() > 0) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
activity.isBottomSheetInPeek(true);
activity.setBottomSheetMusicInfo(mix.get(0));
activity.isBottomSheetInPeek(true);
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.setOnClickListener(v -> {
// List<Song> songs = songRepository.getArtistListLiveRandomSong(artist.getId());
List<Song> songs = new ArrayList<>();
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
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) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew(songs);
MusicPlayerRemote.openQueue(songs, 0, true);
activity.isBottomSheetInPeek(true);
} else {
Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
}
MusicPlayerRemote.openQueue(songs, 0, true);
((MainActivity) requireActivity()).isBottomSheetInPeek(true);
dismissBottomSheet();
}
else Toast.makeText(requireContext(), "Error retrieving artist's songs", Toast.LENGTH_SHORT).show();
});
});
}

View file

@ -17,16 +17,13 @@ import androidx.navigation.fragment.NavHostFragment;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.service.MusicPlayerRemote;
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.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.util.DownloadUtil;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.util.SyncUtil;
import com.cappielloantonio.play.viewmodel.SongBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
@ -49,7 +46,6 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
private TextView playNext;
private TextView addToQueue;
private TextView download;
private TextView addToPlaylist;
private TextView goToAlbum;
private TextView goToArtist;
@ -92,9 +88,18 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
playRadio = view.findViewById(R.id.play_radio_text_view);
playRadio.setOnClickListener(v -> {
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
MainActivity activity = (MainActivity) requireActivity();
List<Song> opener = new ArrayList<>();
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
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
@ -102,15 +107,9 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
@Override
public void onLoadMedia(List<?> media) {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
List<Song> mix = queueRepository.insertMix((ArrayList<Song>) media);
activity.isBottomSheetInPeek(true);
activity.setBottomSheetMusicInfo(mix.get(0));
MusicPlayerRemote.openQueue(mix, 0, true);
MusicPlayerRemote.enqueue((List<Song>) media);
}
}, SyncUtil.SONG, song.getId(), PreferenceUtil.getInstance(requireContext()).getInstantMixSongNumber());
});
dismissBottomSheet();
});
@ -135,37 +134,32 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
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.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) {
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();
dismissBottomSheet();
});
});
goToArtist = view.findViewById(R.id.go_to_artist_text_view);
goToArtist.setOnClickListener(v -> {
Artist artist = songBottomSheetViewModel.getArtist();
if(artist != null) {
Bundle bundle = new Bundle();
bundle.putParcelable("artist_object", artist);
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
}
else Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
songBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
if (artist != null) {
Bundle bundle = new Bundle();
bundle.putParcelable("artist_object", artist);
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
} else
Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show();
dismissBottomSheet();
dismissBottomSheet();
});
});
}