Implemented rating system for song, album and artist (album and artist do not retrieve rating from server)

This commit is contained in:
CappielloAntonio 2021-08-13 17:29:37 +02:00
parent 055ac44cf6
commit e2ddbdf6c9
15 changed files with 303 additions and 7 deletions

View file

@ -29,6 +29,7 @@ import com.cappielloantonio.play.interfaces.MusicServiceEventListener;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.fragment.dialog.RatingDialog;
import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.util.PreferenceUtil;
@ -212,6 +213,16 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
private void initFavoriteButtonClick() {
bind.playerBodyLayout.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite());
bind.playerBodyLayout.buttonFavorite.setOnLongClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
RatingDialog dialog = new RatingDialog();
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
return true;
});
}
private void initMusicCommandButton() {

View file

@ -26,6 +26,7 @@ import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.fragment.dialog.RatingDialog;
import com.cappielloantonio.play.util.DownloadUtil;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
@ -93,6 +94,17 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
albumBottomSheetViewModel.setFavorite();
dismissBottomSheet();
});
favoriteToggle.setOnLongClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putParcelable("album_object", album);
RatingDialog dialog = new RatingDialog();
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
dismissBottomSheet();
return true;
});
playRadio = view.findViewById(R.id.play_radio_text_view);
playRadio.setOnClickListener(v -> {

View file

@ -25,6 +25,7 @@ import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.fragment.dialog.RatingDialog;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
@ -82,6 +83,17 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
artistBottomSheetViewModel.setFavorite();
dismissBottomSheet();
});
favoriteToggle.setOnLongClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putParcelable("artist_object", artist);
RatingDialog dialog = new RatingDialog();
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
dismissBottomSheet();
return true;
});
playRadio = view.findViewById(R.id.play_radio_text_view);
playRadio.setOnClickListener(v -> {

View file

@ -26,6 +26,7 @@ import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.fragment.dialog.PlaylistChooserDialog;
import com.cappielloantonio.play.ui.fragment.dialog.RatingDialog;
import com.cappielloantonio.play.ui.fragment.dialog.ServerSignupDialog;
import com.cappielloantonio.play.util.DownloadUtil;
import com.cappielloantonio.play.util.MusicUtil;
@ -93,6 +94,17 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
songBottomSheetViewModel.setFavorite();
dismissBottomSheet();
});
favoriteToggle.setOnLongClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putParcelable("song_object", song);
RatingDialog dialog = new RatingDialog();
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
dismissBottomSheet();
return true;
});
playRadio = view.findViewById(R.id.play_radio_text_view);
playRadio.setOnClickListener(v -> {

View file

@ -0,0 +1,82 @@
package com.cappielloantonio.play.ui.fragment.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogRatingBinding;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.RatingViewModel;
import java.util.Objects;
public class RatingDialog extends DialogFragment {
private static final String TAG = "ServerSignupDialog";
private DialogRatingBinding bind;
private MainActivity activity;
private Context context;
private RatingViewModel ratingViewModel;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
context = requireContext();
bind = DialogRatingBinding.inflate(LayoutInflater.from(requireContext()));
ratingViewModel = new ViewModelProvider(requireActivity()).get(RatingViewModel.class);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle("Rate")
.setNegativeButton("Cancel", (dialog, id) -> dialog.cancel())
.setPositiveButton("Save", (dialog, id) -> {
ratingViewModel.rate((int) bind.ratingBar.getRating());
});
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setElementInfo();
setButtonColor();
setRating();
}
private void setElementInfo() {
if (getArguments() != null) {
if (getArguments().getParcelable("song_object") != null) {
ratingViewModel.setSong(getArguments().getParcelable("song_object"));
} else if (getArguments().getParcelable("album_object") != null) {
ratingViewModel.setAlbum(getArguments().getParcelable("album_object"));
} else if (getArguments().getParcelable("artist_object") != null) {
ratingViewModel.setArtist(getArguments().getParcelable("artist_object"));
}
}
}
private void setButtonColor() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
}
private void setRating() {
if (ratingViewModel.getSong() != null) {
ratingViewModel.getLiveSong().observe(requireActivity(), song -> bind.ratingBar.setRating(song.getRating()));
} else if (ratingViewModel.getAlbum() != null) {
ratingViewModel.getLiveAlbum().observe(requireActivity(), album -> bind.ratingBar.setRating(/*album.getRating()*/ 0));
} else if (ratingViewModel.getArtist() != null) {
ratingViewModel.getLiveArtist().observe(requireActivity(), artist -> bind.ratingBar.setRating(/*artist.getRating()*/ 0));
}
}
}