Implemented playlist

This commit is contained in:
CappielloAntonio 2021-04-18 19:06:07 +02:00
parent d72b37725c
commit 3addc3b561
14 changed files with 255 additions and 5 deletions

View file

@ -45,6 +45,7 @@ public class PlaylistPageFragment extends Fragment {
playlistPageViewModel = new ViewModelProvider(requireActivity()).get(PlaylistPageViewModel.class);
init();
initBackCover();
initSongsView();
return view;
@ -82,7 +83,13 @@ public class PlaylistPageFragment extends Fragment {
bind.animToolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.white, null), PorterDuff.Mode.SRC_ATOP);
}
});
}
private void initBackCover() {
CustomGlideRequest.Builder
.from(requireContext(), playlistPageViewModel.getPlaylist().getPrimary(), playlistPageViewModel.getPlaylist().getBlurHash(), CustomGlideRequest.PRIMARY, CustomGlideRequest.TOP_QUALITY, CustomGlideRequest.ALBUM_PIC)
.build()
.into(bind.albumBackCoverImageView);
}
private void initSongsView() {
@ -91,6 +98,8 @@ public class PlaylistPageFragment extends Fragment {
songResultSearchAdapter = new SongResultSearchAdapter(activity, requireContext(), getChildFragmentManager());
bind.songRecyclerView.setAdapter(songResultSearchAdapter);
playlistPageViewModel.getPlaylistSongList().observe(requireActivity(), songs -> songResultSearchAdapter.setItems(songs));
playlistPageViewModel.getPlaylistSongList().observe(requireActivity(), songs -> {
songResultSearchAdapter.setItems(songs);
});
}
}

View file

@ -74,8 +74,8 @@ public class SettingsFragment extends PreferenceFragmentCompat {
Preference cross_sync_button = findPreference(getString(R.string.genres_music_cross_sync));
cross_sync_button.setOnPreferenceClickListener(preference -> {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
builder.setMessage("Sync song's genres otherwise nothing will be shown in each genre category")
.setTitle("Song's genres not synchronized")
builder.setMessage("Force sync song's genres to display updated and correct songs in each genre category")
.setTitle("Force sync song's genres")
.setNegativeButton(R.string.ignore, null)
.setPositiveButton("Sync", (dialog, id) -> {
Bundle bundle = SyncUtil.getSyncBundle(false, false, true, false, false, true);
@ -84,6 +84,20 @@ public class SettingsFragment extends PreferenceFragmentCompat {
.show();
return true;
});
Preference playlist_sync_button = findPreference(getString(R.string.playlist_song_cross_sync));
playlist_sync_button.setOnPreferenceClickListener(preference -> {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
builder.setMessage("Sync playlists' songs")
.setTitle("Force sync playlist")
.setNegativeButton(R.string.ignore, null)
.setPositiveButton("Sync", (dialog, id) -> {
Bundle bundle = SyncUtil.getSyncBundle(false, false, false, true, false, false);
activity.goFromSettingsToSync(bundle);
})
.show();
return true;
});
}
}

View file

@ -20,6 +20,7 @@ import com.cappielloantonio.play.model.AlbumArtistCross;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Genre;
import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.PlaylistSongCross;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.model.SongArtistCross;
import com.cappielloantonio.play.model.SongGenreCross;
@ -28,6 +29,7 @@ import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.GenreRepository;
import com.cappielloantonio.play.repository.PlaylistRepository;
import com.cappielloantonio.play.repository.PlaylistSongRepository;
import com.cappielloantonio.play.repository.SongArtistRepository;
import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.ui.activities.MainActivity;
@ -54,6 +56,7 @@ public class SyncFragment extends Fragment {
private GenreRepository genreRepository;
private SongArtistRepository songArtistRepository;
private AlbumArtistRepository albumArtistRepository;
private PlaylistSongRepository playlistSongRepository;
@Nullable
@Override
@ -71,6 +74,7 @@ public class SyncFragment extends Fragment {
genreRepository = new GenreRepository(activity.getApplication());
songArtistRepository = new SongArtistRepository(activity.getApplication());
albumArtistRepository = new AlbumArtistRepository(activity.getApplication());
playlistSongRepository = new PlaylistSongRepository(activity.getApplication());
init();
syncLibraries();
@ -181,6 +185,7 @@ public class SyncFragment extends Fragment {
@Override
public void onLoadMedia(List<?> media) {
playlistRepository.insertAll((ArrayList<Playlist>) media);
syncSongsPerPlaylist((ArrayList<Playlist>) media);
animateProgressBar(true);
}
});
@ -223,6 +228,22 @@ public class SyncFragment extends Fragment {
PreferenceUtil.getInstance(requireContext()).setSongGenreSync(true);
}
private void syncSongsPerPlaylist(List<Playlist> playlists) {
for (Playlist playlist : playlists) {
SyncUtil.getSongsPerPlaylist(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
}
@Override
public void onLoadMedia(List<?> media) {
playlistSongRepository.insertAll((ArrayList<PlaylistSongCross>) media);
}
}, playlist.getId());
}
}
private void animateProgressBar(boolean step) {
syncViewModel.setProgress(step);