From d526b3163f7553857596a1b604c068a1bcf36484 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Fri, 31 Dec 2021 16:08:19 +0100 Subject: [PATCH] Implemented lyrics loading logic --- .../fragment/PlayerBottomSheetFragment.java | 38 ++++++++++++------- .../viewmodel/PlayerBottomSheetViewModel.java | 36 +++++++++++------- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java index dac79dcc..ac9441b7 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java @@ -84,7 +84,7 @@ public class PlayerBottomSheetFragment extends Fragment { init(); initCoverLyricsSlideView(); initQueueRecyclerView(); - initFavoriteButtonClick(); + initMediaListenable(); initMusicCommandUnfoldButton(); initArtistLabelButton(); @@ -184,14 +184,17 @@ public class PlayerBottomSheetFragment extends Fragment { } private void setMetadata(MediaMetadata mediaMetadata) { + if (mediaMetadata.extras != null) playerBottomSheetViewModel.setLiveSong(requireActivity(), mediaMetadata.extras.getString("id")); + if (mediaMetadata.extras != null) playerBottomSheetViewModel.setLiveArtist(requireActivity(), mediaMetadata.extras.getString("artistId")); + bind.playerHeaderLayout.playerHeaderSongTitleLabel.setText(MusicUtil.getReadableString(String.valueOf(mediaMetadata.title))); bind.playerHeaderLayout.playerHeaderSongArtistLabel.setText(MusicUtil.getReadableString(String.valueOf(mediaMetadata.artist))); playerSongTitleLabel.setText(MusicUtil.getReadableString(String.valueOf(mediaMetadata.title))); playerArtistNameLabel.setText(MusicUtil.getReadableString(String.valueOf(mediaMetadata.artist))); - CustomGlideRequest.Builder - .from(requireContext(), mediaMetadata.extras != null ? mediaMetadata.extras.getString("id") : null, CustomGlideRequest.SONG_PIC, null) + if (mediaMetadata.extras != null) CustomGlideRequest.Builder + .from(requireContext(), mediaMetadata.extras.getString("id"), CustomGlideRequest.SONG_PIC, null) .build() .transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS)) .into(bind.playerHeaderLayout.playerHeaderSongCoverImage); @@ -305,17 +308,26 @@ public class PlayerBottomSheetFragment extends Fragment { }).attachToRecyclerView(playerQueueRecyclerView); } - private void initFavoriteButtonClick() { - buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext())); - buttonFavorite.setOnLongClickListener(v -> { - Bundle bundle = new Bundle(); - bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong()); + private void initMediaListenable() { + playerBottomSheetViewModel.getLiveSong().observe(requireActivity(), song -> { + if (song != null) { + buttonFavorite.setChecked(song.isFavorite()); - RatingDialog dialog = new RatingDialog(); - dialog.setArguments(bundle); - dialog.show(requireActivity().getSupportFragmentManager(), null); + buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext(), song)); - return true; + buttonFavorite.setOnLongClickListener(v -> { + Bundle bundle = new Bundle(); + bundle.putParcelable("song_object", song); + + RatingDialog dialog = new RatingDialog(); + dialog.setArguments(bundle); + dialog.show(requireActivity().getSupportFragmentManager(), null); + + return true; + }); + + playerBottomSheetViewModel.refreshSongInfo(requireActivity(), song); + } }); } @@ -330,7 +342,7 @@ public class PlayerBottomSheetFragment extends Fragment { } private void initArtistLabelButton() { - playerArtistNameLabel.setOnClickListener(view -> playerBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> { + playerArtistNameLabel.setOnClickListener(view -> playerBottomSheetViewModel.getLiveArtist().observe(requireActivity(), artist -> { Bundle bundle = new Bundle(); bundle.putParcelable("artist_object", artist); NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java index 2549a50f..6e75ea90 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java @@ -9,6 +9,7 @@ import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Song; @@ -27,7 +28,10 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { private final QueueRepository queueRepository; private final MutableLiveData lyricsLiveData = new MutableLiveData<>(null); - private final MutableLiveData songLiveData = new MutableLiveData<>(null); + + private final MutableLiveData liveSong = new MutableLiveData<>(null); + private final MutableLiveData liveAlbum = new MutableLiveData<>(null); + private final MutableLiveData liveArtist = new MutableLiveData<>(null); public PlayerBottomSheetViewModel(@NonNull Application application) { super(application); @@ -46,9 +50,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { return null; } - public void setFavorite(Context context) { - Song song = getCurrentSong(); - + public void setFavorite(Context context, Song song) { if (song != null) { if (song.isFavorite()) { songRepository.unstar(song.getId()); @@ -64,22 +66,28 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { } } - public LiveData getArtist() { - Song song = getCurrentSong(); - return artistRepository.getArtist(song.getArtistId()); - } - - public LiveData getLiveSong() { - return songLiveData; - } - public LiveData getLiveLyrics() { return lyricsLiveData; } public void refreshSongInfo(LifecycleOwner owner, Song song) { - songLiveData.postValue(song); + // songLiveData.postValue(song); songRepository.getSongLyrics(song).observe(owner, lyricsLiveData::postValue); } + public LiveData getLiveSong() { + return liveSong; + } + + public void setLiveSong(LifecycleOwner owner, String songId) { + songRepository.getSong(songId).observe(owner, liveSong::postValue); + } + + public LiveData getLiveArtist() { + return liveArtist; + } + + public void setLiveArtist(LifecycleOwner owner, String ArtistId) { + artistRepository.getArtist(ArtistId).observe(owner, liveArtist::postValue); + } }