From 532fcd1ee6e2bee25a7b95ff37a10802f634c42e Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Tue, 27 Jul 2021 12:10:28 +0200 Subject: [PATCH] Added discover/recentryAddedAlbum/recentlyPlayedAlbum/mostPlayedAlbum data retrieval --- .../java/com/cappielloantonio/play/App.java | 2 +- .../play/adapter/AlbumAdapter.java | 4 +- .../AlbumArtistPageOrSimilarAdapter.java | 2 +- .../play/adapter/AlbumCatalogueAdapter.java | 2 +- .../play/adapter/ArtistAdapter.java | 2 +- .../play/adapter/ArtistCatalogueAdapter.java | 2 +- .../play/adapter/ArtistSimilarAdapter.java | 2 +- .../play/adapter/DiscoverSongAdapter.java | 2 +- .../adapter/PlayerNowPlayingSongAdapter.java | 2 +- .../play/adapter/PlayerSongQueueAdapter.java | 2 +- .../play/adapter/PlaylistAdapter.java | 2 +- .../adapter/PlaylistCatalogueAdapter.java | 2 +- .../play/adapter/RecentMusicAdapter.java | 2 +- .../play/adapter/SongResultSearchAdapter.java | 2 +- .../play/database/AppDatabase.java | 2 +- .../play/glide/CustomGlideRequest.java | 59 +-- .../cappielloantonio/play/model/Album.java | 56 +- .../com/cappielloantonio/play/model/Song.java | 18 +- .../play/repository/AlbumRepository.java | 34 +- .../play/repository/SongGenreRepository.java | 2 - .../play/repository/SongRepository.java | 62 ++- .../play/subsonic/models/Songs.java | 30 +- .../subsonic/models/SubsonicResponse.java | 1 + .../play/ui/activity/MainActivity.java | 32 +- .../play/ui/fragment/AlbumPageFragment.java | 2 +- .../play/ui/fragment/ArtistPageFragment.java | 2 +- .../play/ui/fragment/HomeFragment.java | 105 ++-- .../play/ui/fragment/LibraryFragment.java | 12 - .../fragment/PlayerBottomSheetFragment.java | 2 +- .../ui/fragment/PlaylistPageFragment.java | 2 +- .../play/ui/fragment/SettingsFragment.java | 31 -- .../play/ui/fragment/SyncFragment.java | 392 +------------- .../AlbumBottomSheetDialog.java | 2 +- .../ArtistBottomSheetDialog.java | 2 +- .../SongBottomSheetDialog.java | 2 +- .../ui/notification/PlayingNotification.java | 2 +- .../play/util/MappingUtil.java | 31 ++ .../cappielloantonio/play/util/SyncUtil.java | 28 +- .../viewmodel/AlbumCatalogueViewModel.java | 2 +- .../play/viewmodel/HomeViewModel.java | 38 +- .../play/viewmodel/SyncViewModel.java | 12 +- app/src/main/res/layout/fragment_home.xml | 24 +- app/src/main/res/layout/fragment_sync.xml | 481 ------------------ app/src/main/res/navigation/nav_graph.xml | 45 +- app/src/main/res/xml/global_preferences.xml | 13 - 45 files changed, 351 insertions(+), 1205 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java delete mode 100644 app/src/main/res/layout/fragment_sync.xml diff --git a/app/src/main/java/com/cappielloantonio/play/App.java b/app/src/main/java/com/cappielloantonio/play/App.java index eb98f083..293edc57 100644 --- a/app/src/main/java/com/cappielloantonio/play/App.java +++ b/app/src/main/java/com/cappielloantonio/play/App.java @@ -52,7 +52,7 @@ public class App extends Application { } private static ApiClient getApiClient(Context context) { - String server = PreferenceUtil.getInstance(context).getServer(); + String server = "http://192.168.1.81:8096"; JellyfinOptions.Builder options = new JellyfinOptions.Builder(); options.setLogger(new NullLogger()); diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java index 61b192bb..18de6c45 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java @@ -47,7 +47,7 @@ public class AlbumAdapter extends RecyclerView.Adapter holder.textArtistName.setText(album.getArtistName()); CustomGlideRequest.Builder - .from(context, album.getPrimary(), album.getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(context).getImageQuality(), CustomGlideRequest.ALBUM_PIC) + .from(context, album.getPrimary(), album.getBlurHash(), CustomGlideRequest.ALBUM_PIC) .build() .into(holder.cover); } @@ -93,6 +93,8 @@ public class AlbumAdapter extends RecyclerView.Adapter Navigation.findNavController(view).navigate(R.id.action_libraryFragment_to_albumPageFragment, bundle); } else if (Objects.requireNonNull(Navigation.findNavController(view).getCurrentDestination()).getId() == R.id.albumCatalogueFragment) { Navigation.findNavController(view).navigate(R.id.action_albumCatalogueFragment_to_albumPageFragment, bundle); + } else if (Objects.requireNonNull(Navigation.findNavController(view).getCurrentDestination()).getId() == R.id.homeFragment) { + Navigation.findNavController(view).navigate(R.id.action_homeFragment_to_albumPageFragment, bundle); } } diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java index 3fc54c62..f414b74b 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java @@ -46,7 +46,7 @@ public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter params = App.getSubsonicClientInstance(App.getInstance(), false).getParams(); - switch (itemType) { - case PRIMARY: { - options.setImageType(ImageType.Primary); - break; - } - case BACKDROP: { - options.setImageType(ImageType.Backdrop); - break; - } - } + String sb = url + "/rest/" + "getCoverArt" + + "?u=" + params.get("u") + + "&s=" + params.get("s") + + "&t=" + params.get("t") + + "&v=" + params.get("v") + + "&c=" + params.get("c") + + "&id=" + item; - switch (quality) { - case TOP_QUALITY: { - options.setQuality(100); - options.setMaxHeight(800); - options.setEnableImageEnhancers(true); - break; - } - case MEDIUM_QUALITY: { - options.setQuality(100); - options.setMaxHeight(600); - options.setEnableImageEnhancers(true); - break; - } - case LOW_QUALITY: { - options.setQuality(100); - options.setMaxHeight(400); - options.setEnableImageEnhancers(true); - break; - } - } - - return App.getApiClientInstance(App.getInstance()).GetImageUrl(item, options); + return sb; } public static class Builder { @@ -91,9 +66,9 @@ public class CustomGlideRequest { private final Object item; private final Context context; - private Builder(Context context, String item, String placeholder, String itemType, String quality, String category) { + private Builder(Context context, String item, String placeholder, String category) { this.requestManager = Glide.with(context); - this.item = item != null ? createUrl(item, itemType, quality) : MusicUtil.getDefaultPicPerCategory(category); + this.item = item != null ? createUrl(item) : MusicUtil.getDefaultPicPerCategory(category); this.context = context; if (placeholder != null) { @@ -106,8 +81,8 @@ public class CustomGlideRequest { } } - public static Builder from(Context context, String item, String placeholder, String itemType, String quality, String category) { - return new Builder(context, item, placeholder, itemType, quality, category); + public static Builder from(Context context, String item, String placeholder, String category) { + return new Builder(context, item, placeholder, category); } public BitmapBuilder bitmap() { diff --git a/app/src/main/java/com/cappielloantonio/play/model/Album.java b/app/src/main/java/com/cappielloantonio/play/model/Album.java index 94241e49..1dd2ed51 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Album.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Album.java @@ -10,6 +10,8 @@ import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.PrimaryKey; +import com.cappielloantonio.play.subsonic.models.AlbumID3; + import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.entities.ImageType; @@ -21,19 +23,6 @@ import java.util.UUID; public class Album implements Parcelable { private static final String TAG = "Album"; - @Ignore - public List songs; - - /* - * TODO: Da capire chi tra albumArtist e artistItems sono i compositori e suonatori dell'album, oppure le comparse - * In teoria AlbumArtist sono i creatori, mentre ArtistItems le comparse - */ - @Ignore - public List albumArtists; - - @Ignore - public List artistItems; - @NonNull @PrimaryKey @ColumnInfo(name = "id") @@ -68,37 +57,14 @@ public class Album implements Parcelable { } @Ignore - public Album(BaseItemDto itemDto) { - this.id = itemDto.getId(); - this.title = itemDto.getName(); - this.year = itemDto.getProductionYear() != null ? itemDto.getProductionYear() : 0; - - albumArtists = new ArrayList<>(); - artistItems = new ArrayList<>(); - - if (itemDto.getAlbumArtists().size() != 0) { - this.artistId = itemDto.getAlbumArtists().get(0).getId(); - this.artistName = itemDto.getAlbumArtists().get(0).getName(); - - itemDto.getAlbumArtists().forEach(artist -> { - albumArtists.add(new Artist(artist.getId(), artist.getName())); - }); - } - else if (itemDto.getArtistItems().size() != 0) { - this.artistId = itemDto.getArtistItems().get(0).getId(); - this.artistName = itemDto.getArtistItems().get(0).getName(); - - itemDto.getArtistItems().forEach(artist -> { - artistItems.add(new Artist(artist.getId(), artist.getName())); - }); - } - - this.primary = itemDto.getImageTags().containsKey(ImageType.Primary) ? id : null; - if (itemDto.getImageBlurHashes() != null && itemDto.getImageBlurHashes().get(ImageType.Primary) != null) { - this.blurHash = (String) itemDto.getImageBlurHashes().get(ImageType.Primary).values().toArray()[0]; - } - - this.songs = new ArrayList<>(); + public Album(AlbumID3 albumID3) { + this.id = albumID3.getId(); + this.title = albumID3.getName(); + this.year = albumID3.getYear(); + this.artistId = albumID3.getArtistId(); + this.artistName = albumID3.getArtist(); + this.primary = albumID3.getCoverArtId(); + this.blurHash = blurHash; } @NonNull @@ -195,8 +161,6 @@ public class Album implements Parcelable { } protected Album(Parcel in) { - this.songs = new ArrayList<>(); - this.id = in.readString(); this.title = in.readString(); this.year = in.readInt(); diff --git a/app/src/main/java/com/cappielloantonio/play/model/Song.java b/app/src/main/java/com/cappielloantonio/play/model/Song.java index e69f9553..207b4309 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Song.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Song.java @@ -93,6 +93,9 @@ public class Song implements Parcelable { @ColumnInfo(name = "primary") private String primary; + @ColumnInfo(name = "blurHash") + private String blurHash; + @ColumnInfo(name = "favorite") private boolean favorite; @@ -120,7 +123,7 @@ public class Song implements Parcelable { @ColumnInfo(name = "offline") private boolean offline; - public Song(@NonNull String id, String title, int trackNumber, int discNumber, int year, long duration, String albumId, String albumName, String artistId, String artistName, String primary, boolean favorite, String path, long size, String container, int bitRate, long added, int playCount, long lastPlay, boolean offline) { + public Song(@NonNull String id, String title, int trackNumber, int discNumber, int year, long duration, String albumId, String albumName, String artistId, String artistName, String primary, String blurHash, boolean favorite, String path, long size, String container, int bitRate, long added, int playCount, long lastPlay, boolean offline) { this.id = id; this.title = title; this.trackNumber = trackNumber; @@ -132,6 +135,7 @@ public class Song implements Parcelable { this.artistId = artistId; this.artistName = artistName; this.primary = primary; + this.blurHash = blurHash; this.favorite = favorite; this.path = path; this.size = size; @@ -154,7 +158,7 @@ public class Song implements Parcelable { this.title = child.getTitle(); this.trackNumber = child.getTrack(); this.discNumber = child.getDiscNumber(); - this.year = child.getYear(); + this.year = child.getYear() != null ? child.getYear() : 0; this.duration = child.getDuration(); this.albumId = child.getAlbumId(); this.albumName = child.getAlbum(); @@ -217,6 +221,10 @@ public class Song implements Parcelable { return primary; } + public String getBlurHash() { + return blurHash; + } + public boolean isFavorite() { return favorite; } @@ -297,6 +305,10 @@ public class Song implements Parcelable { this.primary = primary; } + public void setBlurHash(String blurHash) { + this.blurHash = blurHash; + } + public void setFavorite(boolean favorite) { this.favorite = favorite; } @@ -390,6 +402,7 @@ public class Song implements Parcelable { dest.writeString(this.artistName); dest.writeString(this.primary); dest.writeString(Boolean.toString(favorite)); + dest.writeString(this.blurHash); dest.writeString(this.path); dest.writeLong(this.size); dest.writeString(this.container); @@ -414,6 +427,7 @@ public class Song implements Parcelable { this.artistName = in.readString(); this.primary = in.readString(); this.favorite = Boolean.parseBoolean(in.readString()); + this.blurHash = in.readString(); this.path = in.readString(); this.size = in.readLong(); this.container = in.readString(); diff --git a/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java index 59e30042..d4e10afc 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java @@ -3,17 +3,29 @@ package com.cappielloantonio.play.repository; import android.app.Application; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import com.cappielloantonio.play.App; import com.cappielloantonio.play.database.AppDatabase; import com.cappielloantonio.play.database.dao.AlbumDao; import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.subsonic.api.albumsonglist.AlbumSongListClient; +import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.cappielloantonio.play.util.MappingUtil; import java.util.ArrayList; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class AlbumRepository { private static final String TAG = "AlbumRepository"; + private AlbumSongListClient albumSongListClient; + private AlbumDao albumDao; private LiveData> listLiveAlbums; private LiveData> artistListLiveAlbums; @@ -22,12 +34,30 @@ public class AlbumRepository { public AlbumRepository(Application application) { + albumSongListClient = App.getSubsonicClientInstance(application, false).getAlbumSongListClient(); + AppDatabase database = AppDatabase.getInstance(application); albumDao = database.albumDao(); } - public LiveData> getListLiveAlbums() { - listLiveAlbums = albumDao.getAll(); + public LiveData> getListLiveAlbums(String type, int size) { + MutableLiveData> listLiveAlbums = new MutableLiveData<>(); + + albumSongListClient + .getAlbumList2(type, size, 0) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + List albums = new ArrayList<>(MappingUtil.mapAlbum(response.body().getAlbumList2().getAlbums())); + listLiveAlbums.setValue(albums); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + return listLiveAlbums; } diff --git a/app/src/main/java/com/cappielloantonio/play/repository/SongGenreRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/SongGenreRepository.java index 15c58042..244fed92 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/SongGenreRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/SongGenreRepository.java @@ -3,9 +3,7 @@ package com.cappielloantonio.play.repository; import android.app.Application; import com.cappielloantonio.play.database.AppDatabase; -import com.cappielloantonio.play.database.dao.SongArtistCrossDao; import com.cappielloantonio.play.database.dao.SongGenreCrossDao; -import com.cappielloantonio.play.model.SongArtistCross; import com.cappielloantonio.play.model.SongGenreCross; import java.util.List; diff --git a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java index 0f81c2a5..72dff82a 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java @@ -3,20 +3,33 @@ package com.cappielloantonio.play.repository; import android.app.Application; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import com.cappielloantonio.play.App; import com.cappielloantonio.play.database.AppDatabase; import com.cappielloantonio.play.database.dao.SongDao; import com.cappielloantonio.play.database.dao.SongGenreCrossDao; +import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.SongGenreCross; +import com.cappielloantonio.play.subsonic.api.albumsonglist.AlbumSongListClient; +import com.cappielloantonio.play.subsonic.models.ResponseStatus; +import com.cappielloantonio.play.subsonic.models.SubsonicResponse; +import com.cappielloantonio.play.util.MappingUtil; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class SongRepository { private static final String TAG = "SongRepository"; + private AlbumSongListClient albumSongListClient; + private SongDao songDao; private SongGenreCrossDao songGenreCrossDao; private LiveData> searchListLiveSongs; @@ -36,11 +49,36 @@ public class SongRepository { private LiveData> listLiveDownloadedSong; public SongRepository(Application application) { + albumSongListClient = App.getSubsonicClientInstance(application, false).getAlbumSongListClient(); + AppDatabase database = AppDatabase.getInstance(application); songDao = database.songDao(); songGenreCrossDao = database.songGenreCrossDao(); } + public MutableLiveData> getSongs() { + MutableLiveData> liveSongs = new MutableLiveData<>(); + + albumSongListClient + .getRandomSongs(10) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) { + List songs = new ArrayList<>(MappingUtil.mapSong(response.body().getRandomSongs().getSongs())); + liveSongs.setValue(songs); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + + return liveSongs; + } + public LiveData> searchListLiveSong(String title, int limit) { searchListLiveSongs = songDao.searchSong(title, limit); return searchListLiveSongs; @@ -276,7 +314,7 @@ public class SongRepository { thread.start(); } - public List getRandomSample(int number) { + /*public List getRandomSample(int number) { List sample = new ArrayList<>(); PickRandomThreadSafe randomThread = new PickRandomThreadSafe(songDao, number); @@ -291,6 +329,28 @@ public class SongRepository { } return sample; + }*/ + + public void getRandomSample(int number, MediaCallback callback) { + albumSongListClient + .getRandomSongs(number) + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + List songs = new ArrayList<>(); + + if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) { + songs = new ArrayList<>(MappingUtil.mapSong(response.body().getRandomSongs().getSongs())); + } + + callback.onLoadMedia(songs); + } + + @Override + public void onFailure(Call call, Throwable t) { + callback.onError(new Exception(t.getMessage())); + } + }); } public List getPlaylistSong(String playlistID) { diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/Songs.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/Songs.java index 88dc81a0..75c8dfd0 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/models/Songs.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/Songs.java @@ -1,36 +1,24 @@ package com.cappielloantonio.play.subsonic.models; +import com.tickaroo.tikxml.annotation.Element; +import com.tickaroo.tikxml.annotation.Xml; + import java.util.ArrayList; import java.util.List; +@Xml public class Songs { + @Element(name = "song") protected List songs; - /** - * Gets the value of the songs property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the songs property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSongs().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Child } - */ public List getSongs() { if (songs == null) { - songs = new ArrayList(); + songs = new ArrayList<>(); } return this.songs; } + public void setSongs(List songs) { + this.songs = songs; + } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java index dfd137ab..d30cf28b 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/SubsonicResponse.java @@ -26,6 +26,7 @@ public class SubsonicResponse { private Podcasts podcasts; private Lyrics lyrics; private Songs songsByGenre; + @Element(name = "randomSongs") private Songs randomSongs; @Element private AlbumList2 albumList2; diff --git a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java index f5cdc68d..d0254f74 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java @@ -212,45 +212,19 @@ public class MainActivity extends BaseActivity { navController.navigate(R.id.action_landingFragment_to_loginFragment); } - public void goToSync() { - setBottomNavigationBarVisibility(false); - setBottomSheetVisibility(false); - - if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) { - Bundle bundle = SyncUtil.getSyncBundle(true, true, true, true, true); - navController.navigate(R.id.action_loginFragment_to_syncFragment, bundle); - } - else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) { - Bundle bundle = SyncUtil.getSyncBundle(true, true, true, true, true); - navController.navigate(R.id.action_landingFragment_to_syncFragment, bundle); - } - } - - public void goFromSettingsToSync(Bundle bundle) { - setBottomNavigationBarVisibility(false); - setBottomSheetVisibility(false); - - navController.navigate(R.id.action_settingsFragment_to_syncFragment, bundle); - } - public void goToHome() { bottomNavigationView.setVisibility(View.VISIBLE); if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) { navController.navigate(R.id.action_landingFragment_to_homeFragment); - } else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.syncFragment) { - navController.navigate(R.id.action_syncFragment_to_homeFragment); - } else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) { + } + else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) { navController.navigate(R.id.action_loginFragment_to_homeFragment); } } public void goFromLogin() { - if (PreferenceUtil.getInstance(getApplicationContext()).getSync()) { - goToHome(); - } else { - goToSync(); - } + goToHome(); } @Override diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java index 945694ea..b411ad06 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java @@ -180,7 +180,7 @@ public class AlbumPageFragment extends Fragment { private void initBackCover() { CustomGlideRequest.Builder - .from(requireContext(), albumPageViewModel.getAlbum().getPrimary(), albumPageViewModel.getAlbum().getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.ALBUM_PIC) + .from(requireContext(), albumPageViewModel.getAlbum().getPrimary(), albumPageViewModel.getAlbum().getBlurHash(), CustomGlideRequest.ALBUM_PIC) .build() .into(bind.albumCoverImageView); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java index 4cd28b44..ef85baef 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java @@ -114,7 +114,7 @@ public class ArtistPageFragment extends Fragment { private void initBackdrop() { CustomGlideRequest.Builder - .from(requireContext(), artistPageViewModel.getArtist().getBackdrop(), artistPageViewModel.getArtist().getBackdropBlurHash(), CustomGlideRequest.BACKDROP, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.ARTIST_PIC) + .from(requireContext(), artistPageViewModel.getArtist().getPrimary(), artistPageViewModel.getArtist().getPrimary(), CustomGlideRequest.ARTIST_PIC) .build() .into(bind.artistBackdropImageView); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java index 8f755353..7e27b6d8 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -16,16 +17,19 @@ import androidx.recyclerview.widget.PagerSnapHelper; import androidx.viewpager2.widget.ViewPager2; import com.cappielloantonio.play.R; +import com.cappielloantonio.play.adapter.AlbumAdapter; import com.cappielloantonio.play.adapter.DiscoverSongAdapter; import com.cappielloantonio.play.adapter.RecentMusicAdapter; import com.cappielloantonio.play.adapter.SongResultSearchAdapter; import com.cappielloantonio.play.adapter.YearAdapter; import com.cappielloantonio.play.databinding.FragmentHomeBinding; +import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.ui.activity.MainActivity; -import com.cappielloantonio.play.util.Util; import com.cappielloantonio.play.viewmodel.HomeViewModel; +import java.util.List; + public class HomeFragment extends Fragment { private static final String TAG = "CategoriesFragment"; @@ -33,14 +37,17 @@ public class HomeFragment extends Fragment { private MainActivity activity; private HomeViewModel homeViewModel; - private DiscoverSongAdapter discoverSongAdapter; - private RecentMusicAdapter recentlyAddedMusicAdapter; + private YearAdapter yearAdapter; private SongResultSearchAdapter favoriteSongAdapter; - private RecentMusicAdapter recentlyPlayedMusicAdapter; - private RecentMusicAdapter mostPlayedMusicAdapter; private RecentMusicAdapter dowanloadedMusicAdapter; + // ---------------------------------------------------- SUBSONIC ADAPTER + private DiscoverSongAdapter discoverSongAdapter; + private AlbumAdapter recentlyAddedAlbumAdapter; + private AlbumAdapter recentlyPlayedAlbumAdapter; + private AlbumAdapter mostPlayedAlbumAdapter; + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -60,11 +67,11 @@ public class HomeFragment extends Fragment { super.onViewCreated(view, savedInstanceState); initDiscoverSongSlideView(); - initMostPlayedSongView(); - initRecentPlayedSongView(); + initMostPlayedAlbumView(); + initRecentPlayedAlbumView(); initFavoritesSongView(); initYearSongView(); - initRecentAddedSongView(); + initRecentAddedAlbumView(); initDownloadedSongView(); } @@ -82,19 +89,19 @@ public class HomeFragment extends Fragment { } private void init() { - bind.recentlyAddedTracksTextViewClickable.setOnClickListener(v -> { + bind.recentlyAddedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); bundle.putString(Song.RECENTLY_ADDED, Song.RECENTLY_ADDED); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); }); - bind.recentlyPlayedTracksTextViewClickable.setOnClickListener(v -> { + bind.recentlyPlayedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); bundle.putString(Song.RECENTLY_PLAYED, Song.RECENTLY_PLAYED); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); }); - bind.mostPlayedTracksTextViewClickable.setOnClickListener(v -> { + bind.mostPlayedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); bundle.putString(Song.MOST_PLAYED, Song.MOST_PLAYED); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); @@ -118,34 +125,44 @@ public class HomeFragment extends Fragment { private void initDiscoverSongSlideView() { bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); - discoverSongAdapter = new DiscoverSongAdapter(activity, requireContext(), homeViewModel.getDiscoverSongList()); - bind.discoverSongViewPager.setAdapter(discoverSongAdapter); - bind.discoverSongViewPager.setOffscreenPageLimit(3); - setDiscoverSongSlideViewOffset(20, 16); - } + homeViewModel.getSongRepository().getRandomSample(10, new MediaCallback() { + @Override + public void onError(Exception exception) { + Toast.makeText(requireContext(), exception.getMessage(), Toast.LENGTH_SHORT).show(); + } - private void initMostPlayedSongView() { - bind.mostPlayedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); - bind.mostPlayedTracksRecyclerView.setHasFixedSize(true); - - mostPlayedMusicAdapter = new RecentMusicAdapter(activity, requireContext(), getChildFragmentManager()); - bind.mostPlayedTracksRecyclerView.setAdapter(mostPlayedMusicAdapter); - homeViewModel.getMostPlayedSongList().observe(requireActivity(), songs -> { - if(songs.size() < 10) reorder(); - if(bind != null) bind.homeMostPlayedTracksSector.setVisibility(!songs.isEmpty() ? View.VISIBLE : View.GONE); - mostPlayedMusicAdapter.setItems(songs); + @Override + public void onLoadMedia(List media) { + discoverSongAdapter = new DiscoverSongAdapter(activity, requireContext(), (List) media); + bind.discoverSongViewPager.setAdapter(discoverSongAdapter); + bind.discoverSongViewPager.setOffscreenPageLimit(3); + setDiscoverSongSlideViewOffset(20, 16); + } }); } - private void initRecentPlayedSongView() { - bind.recentlyPlayedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); - bind.recentlyPlayedTracksRecyclerView.setHasFixedSize(true); + private void initMostPlayedAlbumView() { + bind.mostPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); + bind.mostPlayedAlbumsRecyclerView.setHasFixedSize(true); - recentlyPlayedMusicAdapter = new RecentMusicAdapter(activity, requireContext(), getChildFragmentManager()); - bind.recentlyPlayedTracksRecyclerView.setAdapter(recentlyPlayedMusicAdapter); - homeViewModel.getRecentlyPlayedSongList().observe(requireActivity(), songs -> { - if(bind != null) bind.homeRecentlyPlayedTracksSector.setVisibility(!songs.isEmpty() ? View.VISIBLE : View.GONE); - recentlyPlayedMusicAdapter.setItems(songs); + mostPlayedAlbumAdapter = new AlbumAdapter(requireContext()); + bind.mostPlayedAlbumsRecyclerView.setAdapter(mostPlayedAlbumAdapter); + homeViewModel.getMostPlayedAlbums().observe(requireActivity(), albums -> { + if(albums.size() < 10) reorder(); + if(bind != null) bind.homeMostPlayedAlbumsSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE); + mostPlayedAlbumAdapter.setItems(albums); + }); + } + + private void initRecentPlayedAlbumView() { + bind.recentlyPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); + bind.recentlyPlayedAlbumsRecyclerView.setHasFixedSize(true); + + recentlyPlayedAlbumAdapter = new AlbumAdapter(requireContext()); + bind.recentlyPlayedAlbumsRecyclerView.setAdapter(recentlyPlayedAlbumAdapter); + homeViewModel.getRecentlyPlayedAlbumList().observe(requireActivity(), albums -> { + if(bind != null) bind.homeRecentlyPlayedAlbumsSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE); + recentlyPlayedAlbumAdapter.setItems(albums); }); } @@ -178,13 +195,15 @@ public class HomeFragment extends Fragment { pagerSnapHelper.attachToRecyclerView(bind.favoritesTracksRecyclerView); } - private void initRecentAddedSongView() { - bind.recentlyAddedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); - bind.recentlyAddedTracksRecyclerView.setHasFixedSize(true); + private void initRecentAddedAlbumView() { + bind.recentlyAddedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); + bind.recentlyAddedAlbumsRecyclerView.setHasFixedSize(true); - recentlyAddedMusicAdapter = new RecentMusicAdapter(activity, requireContext(), getChildFragmentManager()); - bind.recentlyAddedTracksRecyclerView.setAdapter(recentlyAddedMusicAdapter); - homeViewModel.getRecentlyAddedSongList().observe(requireActivity(), songs -> recentlyAddedMusicAdapter.setItems(songs)); + recentlyAddedAlbumAdapter = new AlbumAdapter(requireContext()); + bind.recentlyAddedAlbumsRecyclerView.setAdapter(recentlyAddedAlbumAdapter); + homeViewModel.getMostRecentlyAddedAlbums().observe(requireActivity(), albums -> { + recentlyAddedAlbumAdapter.setItems(albums); + }); } private void initDownloadedSongView() { @@ -225,12 +244,12 @@ public class HomeFragment extends Fragment { if(bind != null) { bind.homeLinearLayoutContainer.removeAllViews(); bind.homeLinearLayoutContainer.addView(bind.homeDiscoverSector); - bind.homeLinearLayoutContainer.addView(bind.homeRecentlyAddedTracksSector); + bind.homeLinearLayoutContainer.addView(bind.homeRecentlyAddedAlbumsSector); bind.homeLinearLayoutContainer.addView(bind.homeFlashbackSector); bind.homeLinearLayoutContainer.addView(bind.homeFavoriteTracksSector); bind.homeLinearLayoutContainer.addView(bind.homeDownloadedTracksSector); - bind.homeLinearLayoutContainer.addView(bind.homeMostPlayedTracksSector); - bind.homeLinearLayoutContainer.addView(bind.homeRecentlyPlayedTracksSector); + bind.homeLinearLayoutContainer.addView(bind.homeMostPlayedAlbumsSector); + bind.homeLinearLayoutContainer.addView(bind.homeRecentlyPlayedAlbumsSector); } } } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java index 88eefb1b..572e53ca 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java @@ -60,7 +60,6 @@ public class LibraryFragment extends Fragment { initArtistView(); initGenreView(); initPlaylistSlideView(); - initCatalogueSyncCheck(); } @Override @@ -126,17 +125,6 @@ public class LibraryFragment extends Fragment { setDiscoverSongSlideViewOffset(20, 16); } - private void initCatalogueSyncCheck() { - if (!PreferenceUtil.getInstance(requireContext()).getSongGenreSync()) { - 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") - .setNegativeButton(R.string.ignore, null) - .setPositiveButton("Sync", (dialog, id) -> activity.goToSync()) - .show(); - } - } - private void setDiscoverSongSlideViewOffset(float pageOffset, float pageMargin) { bind.playlistViewPager.setPageTransformer((page, position) -> { float myOffset = position * -(2 * pageOffset + pageMargin); 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 2e5cacb7..0a0ca692 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 @@ -263,7 +263,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE bind.playerHeaderLayout.playerHeaderSongArtistLabel.setText(song.getArtistName()); CustomGlideRequest.Builder - .from(requireContext(), song.getPrimary(), song.getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.SONG_PIC) + .from(requireContext(), song.getPrimary(), song.getBlurHash(), CustomGlideRequest.SONG_PIC) .build() .into(bind.playerHeaderLayout.playerHeaderSongCoverImage); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java index 8f4d5d72..ec670207 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java @@ -150,7 +150,7 @@ public class PlaylistPageFragment extends Fragment { private void initBackCover() { CustomGlideRequest.Builder - .from(requireContext(), playlistPageViewModel.getPlaylist().getPrimary(), playlistPageViewModel.getPlaylist().getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.ALBUM_PIC) + .from(requireContext(), playlistPageViewModel.getPlaylist().getPrimary(), playlistPageViewModel.getPlaylist().getBlurHash(), CustomGlideRequest.ALBUM_PIC) .build() .into(bind.albumBackCoverImageView); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SettingsFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SettingsFragment.java index 312554a1..5a3cf34b 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SettingsFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SettingsFragment.java @@ -53,36 +53,5 @@ public class SettingsFragment extends PreferenceFragmentCompat { return true; }); } - - Preference music_sync_button = findPreference(getString(R.string.music_sync)); - music_sync_button.setOnPreferenceClickListener(preference -> { - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - builder.setMessage("Force reload your entire music library") - .setTitle("Force sync") - .setNegativeButton(R.string.ignore, null) - .setPositiveButton("Sync", (dialog, id) -> { - PreferenceUtil.getInstance(requireContext()).setSync(false); - PreferenceUtil.getInstance(requireContext()).setSongGenreSync(false); - - Bundle bundle = SyncUtil.getSyncBundle(true, true, true, true, true); - activity.goFromSettingsToSync(bundle); - }) - .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); - activity.goFromSettingsToSync(bundle); - }) - .show(); - return true; - }); } } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java index b0a27b09..f51cc391 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java @@ -1,239 +1,94 @@ package com.cappielloantonio.play.ui.fragment; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; +import android.content.Context; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProvider; - -import com.cappielloantonio.play.R; -import com.cappielloantonio.play.databinding.FragmentSyncBinding; import com.cappielloantonio.play.interfaces.MediaCallback; -import com.cappielloantonio.play.model.Album; -import com.cappielloantonio.play.model.AlbumArtistCross; -import com.cappielloantonio.play.model.Artist; 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.repository.AlbumArtistRepository; -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.SongGenreRepository; -import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.subsonic.models.AlbumID3; import com.cappielloantonio.play.subsonic.models.ArtistID3; -import com.cappielloantonio.play.subsonic.models.Child; import com.cappielloantonio.play.subsonic.models.Genre; -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.util.Util; -import com.cappielloantonio.play.viewmodel.SyncViewModel; import java.util.ArrayList; import java.util.List; -public class SyncFragment extends Fragment { - private static final String TAG = "SyncFragment"; - - private MainActivity activity; - private FragmentSyncBinding bind; - private SyncViewModel syncViewModel; - - private SongRepository songRepository; - private AlbumRepository albumRepository; - private ArtistRepository artistRepository; - private PlaylistRepository playlistRepository; - private GenreRepository genreRepository; - private PlaylistSongRepository playlistSongRepository; - - private final int LIBRARIES = 0; - private final int ALBUMS = 1; - private final int ARTISTS = 2; - private final int GENRES = 3; - private final int PLAYLISTS = 4; - private final int SONGS = 5; - private final int SONG_X_PLAYLIST = 6; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - activity = (MainActivity) getActivity(); - - bind = FragmentSyncBinding.inflate(inflater, container, false); - View view = bind.getRoot(); - syncViewModel = new ViewModelProvider(requireActivity()).get(SyncViewModel.class); - - songRepository = new SongRepository(activity.getApplication()); - albumRepository = new AlbumRepository(activity.getApplication()); - artistRepository = new ArtistRepository(activity.getApplication()); - playlistRepository = new PlaylistRepository(activity.getApplication()); - genreRepository = new GenreRepository(activity.getApplication()); - playlistSongRepository = new PlaylistSongRepository(activity.getApplication()); - - init(); - initView(); - initButtonListeners(); - syncLibraries(); - - return view; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - bind = null; - } - - private void init() { - syncViewModel.setArguemnts(getArguments()); - bind.syncingDateLabel.setText(Util.getDate()); - } - - private void initView() { - if (!syncViewModel.isSyncAlbum()) bind.syncAlbumsSector.setVisibility(View.GONE); - if (!syncViewModel.isSyncArtist()) bind.syncArtistsSector.setVisibility(View.GONE); - if (!syncViewModel.isSyncGenres()) bind.syncGenresSector.setVisibility(View.GONE); - if (!syncViewModel.isSyncPlaylist()) bind.syncPlaylistsSector.setVisibility(View.GONE); - if (!syncViewModel.isSyncPlaylist()) bind.syncSongXPlaylistSector.setVisibility(View.GONE); - if (!syncViewModel.isSyncSong()) bind.syncSongsSector.setVisibility(View.GONE); - } - - private void initButtonListeners() { - bind.syncLibrariesRetryImageView.setOnClickListener(v -> { - resetSectorInfo(LIBRARIES); - syncLibraries(); - }); - bind.syncAlbumsRetryImageView.setOnClickListener(v -> { - resetSectorInfo(ALBUMS); - syncAlbums(500, 0, 0); - }); - bind.syncArtistsRetryImageView.setOnClickListener(v -> { - resetSectorInfo(ARTISTS); - syncArtists(); - }); - bind.syncGenresRetryImageView.setOnClickListener(v -> { - resetSectorInfo(GENRES); - syncGenres(); - }); - bind.syncPlaylistsRetryImageView.setOnClickListener(v -> { - resetSectorInfo(PLAYLISTS); - syncPlaylist(); - }); - bind.syncSongXPlaylistRetryImageView.setOnClickListener(v -> { - resetSectorInfo(SONG_X_PLAYLIST); - syncSongsPerPlaylist(syncViewModel.getPlaylistList()); - }); - bind.syncSongsRetryImageView.setOnClickListener(v -> { - resetSectorInfo(SONGS); - syncSongs(); - }); - bind.syncingGoHomeImageView.setOnClickListener(v -> { - AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); - builder.setMessage("Make sure each category has been properly synchronized") - .setTitle("Go home") - .setNegativeButton(R.string.ignore, null) - .setPositiveButton("Go", (dialog, id) -> { - PreferenceUtil.getInstance(requireContext()).setSync(true); - activity.goToHome(); - }) - .show(); - }); - } - +public class SyncFragment { + private Context context; + private void syncLibraries() { - SyncUtil.getLibraries(requireContext(), new MediaCallback() { + SyncUtil.getLibraries(context, new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(LIBRARIES, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - loadSectorInfo(LIBRARIES, "", true); } }); } private void syncAlbums(int size, int offset, int page) { - SyncUtil.getAlbums(requireContext(), new MediaCallback() { + SyncUtil.getAlbums(context, new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(ALBUMS, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - syncViewModel.addToAlbumList((List) media); + // syncViewModel.addToAlbumList((List) media); if (media.size() == size) { syncAlbums(size, size * (page + 1), page + 1); } else { - loadSectorInfo(ALBUMS, "Found " + syncViewModel.getAlbumList().size() + " elements", true); } } }, size, offset); } private void syncArtists() { - SyncUtil.getArtists(requireContext(), new MediaCallback() { + SyncUtil.getArtists(context, new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(ARTISTS, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - syncViewModel.setArtistList((ArrayList) media); - loadSectorInfo(ARTISTS, "Found " + syncViewModel.getArtistList().size() + " elements", true); + // syncViewModel.setArtistList((ArrayList) media); } }); } private void syncGenres() { - SyncUtil.getGenres(requireContext(), new MediaCallback() { + SyncUtil.getGenres(context, new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(GENRES, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - syncViewModel.setGenreList((ArrayList) media); - loadSectorInfo(GENRES, "Found " + syncViewModel.getGenreList().size() + " elements", true); + // syncViewModel.setGenreList((ArrayList) media); } }); } private void syncPlaylist() { - SyncUtil.getPlaylists(requireContext(), new MediaCallback() { + SyncUtil.getPlaylists(context, new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(PLAYLISTS, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - syncViewModel.setPlaylistList((ArrayList) media); - loadSectorInfo(PLAYLISTS, "Found " + syncViewModel.getPlaylistList().size() + " elements", true); + // syncViewModel.setPlaylistList((ArrayList) media); } }); } private void syncSongsPerPlaylist(List playlists) { /* for (Playlist playlist : playlists) { - SyncUtil.getSongsPerPlaylist(requireContext(), new MediaCallback() { + SyncUtil.getSongsPerPlaylist(context(), new MediaCallback() { @Override public void onError(Exception exception) { loadSectorInfo(SONG_X_PLAYLIST, exception.getMessage(), false); @@ -246,236 +101,31 @@ public class SyncFragment extends Fragment { } }, playlist.getId()); } */ - - loadSectorInfo(SONG_X_PLAYLIST, "Playlist processed: SEI BRAVO", true); - enableHomeButton(SONG_X_PLAYLIST); } private void syncSongs() { - enableHomeButton(SONGS); - - for (AlbumID3 album : syncViewModel.getAlbumList()) { - SyncUtil.getSongs(requireContext(), new MediaCallback() { + /* for (AlbumID3 album : syncViewModel.getAlbumList()) { + SyncUtil.getSongs(context, syncViewModel.getCatalogue(), new MediaCallback() { @Override public void onError(Exception exception) { - loadSectorInfo(SONGS, exception.getMessage(), false); } @Override public void onLoadMedia(List media) { - syncViewModel.addToChildList((ArrayList) media); - - loadSectorInfo(SONGS, "Found " + syncViewModel.getChildList().size() + " elements", true); + syncViewModel.addToSongList((ArrayList) media); } }, album); - } + }*/ } private void syncDownloadedSong() { - songRepository.getListLiveDownloadedSong().observe(requireActivity(), songs -> { + /*songRepository.getListLiveDownloadedSong().observe(requireActivity(), songs -> { for (Song song : songs) { - if (!DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) { + if (!DownloadUtil.getDownloadTracker(context()).isDownloaded(song)) { song.setOffline(false); songRepository.setOfflineStatus(song); } } - }); - } - - private void loadSectorInfo(int sector, String message, boolean isSuccess) { - switch (sector) { - case LIBRARIES: - if (isSuccess) { - if (bind != null) { - bind.syncLibrariesStatusLabel.setText("Status: SUCCESS"); - bind.syncLibrariesDetailLabel.setVisibility(View.GONE); - bind.syncLibrariesRetryImageView.setVisibility(View.GONE); - } - syncNextSector(LIBRARIES); - } else { - if (bind != null) { - bind.syncLibrariesStatusLabel.setText("Status: ERROR"); - bind.syncLibrariesDetailLabel.setText(message); - bind.syncLibrariesDetailLabel.setVisibility(View.VISIBLE); - bind.syncLibrariesRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case ALBUMS: - if (isSuccess) { - if (bind != null) { - bind.syncAlbumsStatusLabel.setText("Status: SUCCESS"); - bind.syncAlbumsDetailLabel.setText(message); - bind.syncAlbumsRetryImageView.setVisibility(View.GONE); - } - syncNextSector(ALBUMS); - } else { - if (bind != null) { - bind.syncLibrariesStatusLabel.setText("Status: ERROR"); - bind.syncAlbumsDetailLabel.setText(message); - bind.syncAlbumsRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case ARTISTS: - if (isSuccess) { - if (bind != null) { - bind.syncArtistsStatusLabel.setText("Status: SUCCESS"); - bind.syncArtistsDetailLabel.setText(message); - bind.syncArtistsRetryImageView.setVisibility(View.GONE); - } - syncNextSector(ARTISTS); - } else { - if (bind != null) { - bind.syncArtistsStatusLabel.setText("Status: ERROR"); - bind.syncArtistsDetailLabel.setText(message); - bind.syncArtistsRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case GENRES: - if (isSuccess) { - if (bind != null) { - bind.syncGenresStatusLabel.setText("Status: SUCCESS"); - bind.syncGenresDetailLabel.setText(message); - bind.syncGenresRetryImageView.setVisibility(View.GONE); - } - syncNextSector(GENRES); - } else { - if (bind != null) { - bind.syncGenresStatusLabel.setText("Status: ERROR"); - bind.syncGenresDetailLabel.setText(message); - bind.syncGenresRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case PLAYLISTS: - if (isSuccess) { - if (bind != null) { - bind.syncPlaylistsStatusLabel.setText("Status: SUCCESS"); - bind.syncPlaylistsDetailLabel.setText(message); - bind.syncPlaylistsRetryImageView.setVisibility(View.GONE); - } - syncNextSector(PLAYLISTS); - } else { - if (bind != null) { - bind.syncPlaylistsStatusLabel.setText("Status: ERROR"); - bind.syncPlaylistsDetailLabel.setText(message); - bind.syncPlaylistsRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case SONG_X_PLAYLIST: - if (isSuccess) { - if (bind != null) { - bind.syncSongXPlaylistStatusLabel.setText("Status: SUCCESS"); - bind.syncSongXPlaylistDetailLabel.setText(message); - bind.syncSongXPlaylistRetryImageView.setVisibility(View.GONE); - } - syncNextSector(SONG_X_PLAYLIST); - } else { - if (bind != null) { - bind.syncSongXPlaylistStatusLabel.setText("Status: ERROR"); - bind.syncSongXPlaylistDetailLabel.setText(message); - bind.syncSongXPlaylistRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - case SONGS: - if (isSuccess) { - if (bind != null) { - bind.syncSongsStatusLabel.setText("Status: SUCCESS"); - bind.syncSongsDetailLabel.setText(message); - bind.syncSongsRetryImageView.setVisibility(View.GONE); - } - } else { - if (bind != null) { - bind.syncSongsStatusLabel.setText("Status: ERROR"); - bind.syncSongsDetailLabel.setText(message); - bind.syncSongsRetryImageView.setVisibility(View.VISIBLE); - } - } - break; - } - } - - private void resetSectorInfo(int sector) { - if (bind != null) { - switch (sector) { - case LIBRARIES: - bind.syncLibrariesStatusLabel.setText("Loading..."); - bind.syncLibrariesDetailLabel.setText(R.string.label_placeholder); - bind.syncLibrariesDetailLabel.setVisibility(View.GONE); - bind.syncLibrariesRetryImageView.setVisibility(View.GONE); - break; - case ALBUMS: - bind.syncAlbumsStatusLabel.setText("Loading..."); - bind.syncAlbumsDetailLabel.setText(R.string.label_placeholder); - bind.syncAlbumsRetryImageView.setVisibility(View.GONE); - break; - case ARTISTS: - bind.syncArtistsStatusLabel.setText("Loading..."); - bind.syncArtistsDetailLabel.setText(R.string.label_placeholder); - bind.syncArtistsRetryImageView.setVisibility(View.GONE); - break; - case GENRES: - bind.syncGenresStatusLabel.setText("Loading..."); - bind.syncGenresDetailLabel.setText(R.string.label_placeholder); - bind.syncGenresRetryImageView.setVisibility(View.GONE); - break; - case PLAYLISTS: - bind.syncPlaylistsStatusLabel.setText("Loading..."); - bind.syncPlaylistsDetailLabel.setText(R.string.label_placeholder); - bind.syncPlaylistsRetryImageView.setVisibility(View.GONE); - break; - case SONG_X_PLAYLIST: - bind.syncSongXPlaylistStatusLabel.setText("Loading..."); - bind.syncSongXPlaylistDetailLabel.setText(R.string.label_placeholder); - bind.syncSongXPlaylistRetryImageView.setVisibility(View.GONE); - break; - case SONGS: - bind.syncSongsStatusLabel.setText("Loading..."); - bind.syncSongsDetailLabel.setText(R.string.label_placeholder); - bind.syncSongsRetryImageView.setVisibility(View.GONE); - break; - } - } - } - - private void syncNextSector(int sector) { - switch (sector) { - case LIBRARIES: - if (syncViewModel.isSyncAlbum()) syncAlbums(500, 0, 0); - else syncPlaylist(); - break; - case ALBUMS: - syncArtists(); - break; - case ARTISTS: - syncGenres(); - break; - case GENRES: - syncPlaylist(); - break; - case PLAYLISTS: - syncSongsPerPlaylist(syncViewModel.getPlaylistList()); - break; - case SONG_X_PLAYLIST: - if (syncViewModel.isSyncSong()) syncSongs(); - break; - case SONGS: - break; - } - } - - private void enableHomeButton(int sector) { - switch (sector) { - case SONG_X_PLAYLIST: - if (!syncViewModel.isSyncSong()) bind.syncingGoHomeImageView.setVisibility(View.VISIBLE); - break; - case SONGS: - bind.syncingGoHomeImageView.setVisibility(View.VISIBLE); - break; - } + });*/ } } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java index 669b06fc..9d2ecf97 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java @@ -72,7 +72,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements private void init(View view) { coverAlbum = view.findViewById(R.id.album_cover_image_view); CustomGlideRequest.Builder - .from(requireContext(), albumBottomSheetViewModel.getAlbum().getPrimary(), albumBottomSheetViewModel.getAlbum().getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.ALBUM_PIC) + .from(requireContext(), albumBottomSheetViewModel.getAlbum().getPrimary(), albumBottomSheetViewModel.getAlbum().getBlurHash(), CustomGlideRequest.ALBUM_PIC) .build() .into(coverAlbum); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java index 0d410b85..c7bb5368 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java @@ -63,7 +63,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement private void init(View view) { coverArtist = view.findViewById(R.id.artist_cover_image_view); CustomGlideRequest.Builder - .from(requireContext(), artistBottomSheetViewModel.getArtist().getPrimary(), artistBottomSheetViewModel.getArtist().getPrimaryBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.ARTIST_PIC) + .from(requireContext(), artistBottomSheetViewModel.getArtist().getPrimary(), artistBottomSheetViewModel.getArtist().getPrimaryBlurHash(), CustomGlideRequest.ARTIST_PIC) .build() .into(coverArtist); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java index 5a65f087..286fab78 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java @@ -72,7 +72,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements private void init(View view) { coverSong = view.findViewById(R.id.song_cover_image_view); CustomGlideRequest.Builder - .from(requireContext(), songBottomSheetViewModel.getSong().getPrimary(), songBottomSheetViewModel.getSong().getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(requireContext()).getImageQuality(), CustomGlideRequest.SONG_PIC) + .from(requireContext(), songBottomSheetViewModel.getSong().getPrimary(), songBottomSheetViewModel.getSong().getBlurHash(), CustomGlideRequest.SONG_PIC) .build() .into(coverSong); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/notification/PlayingNotification.java b/app/src/main/java/com/cappielloantonio/play/ui/notification/PlayingNotification.java index 50d985a7..8e723105 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/notification/PlayingNotification.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/notification/PlayingNotification.java @@ -67,7 +67,7 @@ public class PlayingNotification { final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size); service.runOnUiThread(() -> CustomGlideRequest.Builder - .from(service, song.getPrimary(), song.getBlurHash(), CustomGlideRequest.PRIMARY, PreferenceUtil.getInstance(service.getApplicationContext()).getImageQuality(), CustomGlideRequest.SONG_PIC) + .from(service, song.getPrimary(), song.getBlurHash(), CustomGlideRequest.SONG_PIC) .bitmap() .build() .into(new CustomTarget(bigNotificationImageSize, bigNotificationImageSize) { diff --git a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java new file mode 100644 index 00000000..1452ce9d --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -0,0 +1,31 @@ +package com.cappielloantonio.play.util; + +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.subsonic.models.AlbumID3; +import com.cappielloantonio.play.subsonic.models.Child; + +import java.util.ArrayList; +import java.util.List; + +public class MappingUtil { + public static ArrayList mapSong(List children) { + ArrayList songs = new ArrayList(); + + for(Child child : children){ + songs.add(new Song(child)); + } + + return songs; + } + + public static ArrayList mapAlbum(List albumID3List) { + ArrayList albums = new ArrayList(); + + for(AlbumID3 albumID3 : albumID3List){ + albums.add(new Album(albumID3)); + } + + return albums; + } +} diff --git a/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java b/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java index 1b81aa9d..98a2239e 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java @@ -68,7 +68,7 @@ public class SyncUtil { }); } - public static void getSongs(Context context, MediaCallback callback, AlbumID3 album) { + public static void getSongs(Context context, Map currentCatalogue, MediaCallback callback, AlbumID3 album) { App.getSubsonicClientInstance(context, false) .getBrowsingClient() .getAlbum(album.getId()) @@ -79,9 +79,9 @@ public class SyncUtil { String errorMessage = response.body().getError().getCode().getValue() + " - " + response.body().getError().getMessage(); callback.onError(new Exception(errorMessage)); } else if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) { - List childList = new ArrayList<>(); - childList.addAll(response.body().getAlbum().getSongs()); - callback.onLoadMedia(childList); + List songList = new ArrayList<>(MappingUtil.mapSong(response.body().getAlbum().getSongs())); + updateSongData(currentCatalogue, songList); + callback.onLoadMedia(songList); } else { callback.onError(new Exception("Empty response")); } @@ -307,16 +307,16 @@ public class SyncUtil { return bundle; } - private static Song updateSongData(Map library, Song newSong) { - if (library.containsKey(newSong.hashCode())) { - Song oldSong = library.get(newSong.hashCode()); - newSong.setFavorite(oldSong.isFavorite()); - newSong.setAdded(oldSong.getAdded()); - newSong.setLastPlay(oldSong.getLastPlay()); - newSong.setPlayCount(oldSong.getPlayCount()); - newSong.setOffline(oldSong.isOffline()); + private static void updateSongData(Map library, List songs) { + for (Song song: songs) { + if (library.containsKey(song.hashCode())) { + Song oldSong = library.get(song.hashCode()); + song.setFavorite(oldSong.isFavorite()); + song.setAdded(oldSong.getAdded()); + song.setLastPlay(oldSong.getLastPlay()); + song.setPlayCount(oldSong.getPlayCount()); + song.setOffline(oldSong.isOffline()); + } } - - return newSong; } } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java index 44671256..cf265842 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java @@ -23,7 +23,7 @@ public class AlbumCatalogueViewModel extends AndroidViewModel { } public LiveData> getAlbumList() { - albumList = albumRepository.getListLiveAlbums(); + // albumList = albumRepository.getListLiveAlbums(); return albumList; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java index c3b8e9be..f52c14a0 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java @@ -6,16 +6,21 @@ import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; +import com.cappielloantonio.play.interfaces.MediaCallback; +import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.SongRepository; +import java.util.ArrayList; import java.util.List; public class HomeViewModel extends AndroidViewModel { private static final String TAG = "HomeViewModel"; private SongRepository songRepository; + private AlbumRepository albumRepository; - private List dicoverSongSample; + private List dicoverSongSample = new ArrayList<>(); private LiveData> recentlyPlayedSongSample; private LiveData> recentlyAddedSongSample; private LiveData> mostPlayedSongSample; @@ -23,27 +28,30 @@ public class HomeViewModel extends AndroidViewModel { private LiveData> downloadedSongSample; private List years; + private LiveData> mostPlayedAlbumSample; + private LiveData> recentlyAddedAlbumSample; + private LiveData> recentlyPlayedAlbumSample; + public HomeViewModel(@NonNull Application application) { super(application); songRepository = new SongRepository(application); + albumRepository = new AlbumRepository(application); - dicoverSongSample = songRepository.getRandomSample(10); recentlyPlayedSongSample = songRepository.getListLiveRecentlyPlayedSampleSong(20); recentlyAddedSongSample = songRepository.getListLiveRecentlyAddedSampleSong(20); mostPlayedSongSample = songRepository.getListLiveMostPlayedSampleSong(20); favoritesSongSample = songRepository.getListLiveFavoritesSampleSong(20); downloadedSongSample = songRepository.getListLiveDownloadedSampleSong(20); years = songRepository.getYearList(); + + mostPlayedAlbumSample = albumRepository.getListLiveAlbums("frequent", 20); + recentlyAddedAlbumSample = albumRepository.getListLiveAlbums("newest", 20); + recentlyPlayedAlbumSample = albumRepository.getListLiveAlbums("recent", 20); } - - public List getDiscoverSongList() { - if (dicoverSongSample.isEmpty()) { - dicoverSongSample = songRepository.getRandomSample(10); - } - - return dicoverSongSample; + public SongRepository getSongRepository() { + return songRepository; } public LiveData> getRecentlyAddedSongList() { @@ -69,4 +77,16 @@ public class HomeViewModel extends AndroidViewModel { public LiveData> getDownloaded() { return downloadedSongSample; } + + public LiveData> getMostPlayedAlbums() { + return mostPlayedAlbumSample; + } + + public LiveData> getMostRecentlyAddedAlbums() { + return recentlyAddedAlbumSample; + } + + public LiveData> getRecentlyPlayedAlbumList() { + return recentlyPlayedAlbumSample; + } } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/SyncViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/SyncViewModel.java index a75194e3..4867687a 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SyncViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SyncViewModel.java @@ -18,6 +18,7 @@ import com.cappielloantonio.play.subsonic.models.AlbumID3; import com.cappielloantonio.play.subsonic.models.ArtistID3; import com.cappielloantonio.play.subsonic.models.Child; import com.cappielloantonio.play.subsonic.models.Genre; +import com.cappielloantonio.play.util.MappingUtil; import java.util.ArrayList; import java.util.HashMap; @@ -40,9 +41,8 @@ public class SyncViewModel extends AndroidViewModel { private ArrayList genreList = new ArrayList<>(); private ArrayList playlistList = new ArrayList<>(); private ArrayList songList = new ArrayList<>(); - private ArrayList childList = new ArrayList<>(); - private SongRepository songRepository; + private final SongRepository songRepository; private AlbumRepository albumRepository; private ArtistRepository artistRepository; private PlaylistRepository playlistRepository; @@ -128,12 +128,8 @@ public class SyncViewModel extends AndroidViewModel { this.songList = songList; } - public ArrayList getChildList() { - return childList; - } - - public void addToChildList(ArrayList childList) { - this.childList.addAll(childList); + public void addToSongList(ArrayList songList) { + this.songList.addAll(songList); } public Map getCatalogue() { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index bfe0ca63..87b59cf2 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -65,9 +65,9 @@ android:paddingBottom="8dp" /> - + @@ -93,7 +93,7 @@ - + @@ -145,7 +145,7 @@ - + @@ -329,7 +329,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index e2ca58a8..90c90318 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -20,11 +20,6 @@ app:destination="@id/homeFragment" app:popUpTo="@id/landingFragment" app:popUpToInclusive="true" /> - - - - - - - - + - @@ -118,11 +84,6 @@ android:name="com.cappielloantonio.play.ui.fragment.SettingsFragment" android:label="SettingsFragment" tools:layout="@layout/fragment_settings"> - - - - - - - -