diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 35739948..d501b365 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -7,11 +7,11 @@
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/YearAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/YearAdapter.java
index 8b1ae125..100695a4 100644
--- a/app/src/main/java/com/cappielloantonio/play/adapter/YearAdapter.java
+++ b/app/src/main/java/com/cappielloantonio/play/adapter/YearAdapter.java
@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.cappielloantonio.play.R;
+import java.util.ArrayList;
import java.util.List;
public class YearAdapter extends RecyclerView.Adapter {
@@ -19,10 +20,10 @@ public class YearAdapter extends RecyclerView.Adapter {
private Context context;
private ItemClickListener itemClickListener;
- public YearAdapter(Context context, List years) {
+ public YearAdapter(Context context) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
- this.years = years;
+ this.years = new ArrayList<>();
}
@Override
diff --git a/app/src/main/java/com/cappielloantonio/play/interfaces/DecadesCallback.java b/app/src/main/java/com/cappielloantonio/play/interfaces/DecadesCallback.java
new file mode 100644
index 00000000..36aad16d
--- /dev/null
+++ b/app/src/main/java/com/cappielloantonio/play/interfaces/DecadesCallback.java
@@ -0,0 +1,6 @@
+package com.cappielloantonio.play.interfaces;
+
+
+public interface DecadesCallback {
+ void onLoadYear(int year);
+}
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 7fd2b8a0..b4f0b303 100644
--- a/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java
+++ b/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java
@@ -6,6 +6,7 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.cappielloantonio.play.App;
+import com.cappielloantonio.play.interfaces.DecadesCallback;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Song;
@@ -14,7 +15,10 @@ import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
import com.cappielloantonio.play.util.MappingUtil;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import retrofit2.Call;
import retrofit2.Callback;
@@ -37,7 +41,7 @@ public class AlbumRepository {
public LiveData> getAlbums(String type, int size) {
App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient()
- .getAlbumList2(type, size, 0)
+ .getAlbumList2(type, size, 0, null, null)
.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
@@ -265,4 +269,68 @@ public class AlbumRepository {
}
});
}
+
+ public MutableLiveData> getDecades() {
+ MutableLiveData> decades = new MutableLiveData<>();
+
+ getFirstAlbum(first -> {
+ getLastAlbum(last -> {
+ List decadeList = new ArrayList();
+
+ int startDecade = first - (first % 10);
+ int lastDecade = last - (last % 10);
+
+ while (startDecade <= lastDecade) {
+ decadeList.add(startDecade);
+ startDecade = startDecade + 10;
+ }
+
+ decades.setValue(decadeList);
+ });
+ });
+
+ return decades;
+ }
+
+ private void getFirstAlbum(DecadesCallback callback) {
+ App.getSubsonicClientInstance(application, false)
+ .getAlbumSongListClient()
+ .getAlbumList2("byYear", 1, 0, 0, Calendar.getInstance().get(Calendar.YEAR))
+ .enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
+ if(response.body().getAlbumList2().getAlbums().get(0) != null){
+ callback.onLoadYear(response.body().getAlbumList2().getAlbums().get(0).getYear());
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+
+ private void getLastAlbum(DecadesCallback callback) {
+ App.getSubsonicClientInstance(application, false)
+ .getAlbumSongListClient()
+ .getAlbumList2("byYear", 1, 0, Calendar.getInstance().get(Calendar.YEAR), 0)
+ .enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) {
+ if(response.body().getAlbumList2().getAlbums().get(0) != null){
+ callback.onLoadYear(response.body().getAlbumList2().getAlbums().get(0).getYear());
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
}
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 9fa6154d..0bd913fd 100644
--- a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java
+++ b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java
@@ -25,13 +25,13 @@ public class SongRepository {
private Application application;
- private MutableLiveData> starredSongs = new MutableLiveData<>();
-
public SongRepository(Application application) {
this.application = application;
}
public MutableLiveData> getStarredSongs() {
+ MutableLiveData> starredSongs = new MutableLiveData<>();
+
App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient()
.getStarred2()
@@ -80,27 +80,29 @@ public class SongRepository {
});
}
- public void getRandomSample(int number, MediaCallback callback) {
+ public MutableLiveData> getRandomSample(int number, Integer fromYear, Integer toYear) {
+ MutableLiveData> randomSongsSample = new MutableLiveData<>(new ArrayList<>());
+
App.getSubsonicClientInstance(application, false)
.getAlbumSongListClient()
- .getRandomSongs(number)
+ .getRandomSongs(number, fromYear, toYear)
.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()));
+ List songs = new ArrayList<>(MappingUtil.mapSong(response.body().getRandomSongs().getSongs()));
+ randomSongsSample.setValue(songs);
}
- callback.onLoadMedia(songs);
}
@Override
public void onFailure(Call call, Throwable t) {
- callback.onError(new Exception(t.getMessage()));
+
}
});
+
+ return randomSongsSample;
}
public void scrobble(String id) {
diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java
index 61db7b05..cf4b0ef1 100644
--- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java
+++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListClient.java
@@ -35,14 +35,14 @@ public class AlbumSongListClient {
return albumSongListService.getAlbumList(subsonic.getParams(), type, size, offset);
}
- public Call getAlbumList2(String type, int size, int offset) {
+ public Call getAlbumList2(String type, int size, int offset, Integer fromYear, Integer toYear) {
Log.d(TAG, "getAlbumList2()");
- return albumSongListService.getAlbumList2(subsonic.getParams(), type, size, offset);
+ return albumSongListService.getAlbumList2(subsonic.getParams(), type, size, offset, fromYear, toYear);
}
- public Call getRandomSongs(int size) {
+ public Call getRandomSongs(int size, Integer fromYear, Integer toYear) {
Log.d(TAG, "getRandomSongs()");
- return albumSongListService.getRandomSongs(subsonic.getParams(), size);
+ return albumSongListService.getRandomSongs(subsonic.getParams(), size, fromYear, toYear);
}
public Call getSongsByGenre(String genre, int count, int offset) {
diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListService.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListService.java
index 74550987..7542431d 100644
--- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListService.java
+++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/albumsonglist/AlbumSongListService.java
@@ -14,10 +14,10 @@ public interface AlbumSongListService {
Call getAlbumList(@QueryMap Map params, @Query("type") String type, @Query("size") int size, @Query("offset") int offset);
@GET("getAlbumList2")
- Call getAlbumList2(@QueryMap Map params, @Query("type") String type, @Query("size") int size, @Query("offset") int offset);
+ Call getAlbumList2(@QueryMap Map params, @Query("type") String type, @Query("size") int size, @Query("offset") int offset, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear);
@GET("getRandomSongs")
- Call getRandomSongs(@QueryMap Map params, @Query("size") int size);
+ Call getRandomSongs(@QueryMap Map params, @Query("size") int size, @Query("fromYear") Integer fromYear, @Query("toYear") Integer toYear);
@GET("getSongsByGenre")
Call getSongsByGenre(@QueryMap Map params, @Query("genre") String genre, @Query("count") int count, @Query("offset") int offset);
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 4df76f17..ea92eb9e 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
@@ -179,13 +179,10 @@ public class HomeFragment extends Fragment {
}
private void initYearSongView() {
- if (bind != null)
- bind.homeFlashbackSector.setVisibility(!homeViewModel.getYearList().isEmpty() ? View.VISIBLE : View.GONE);
-
bind.yearsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.yearsRecyclerView.setHasFixedSize(true);
- yearAdapter = new YearAdapter(requireContext(), homeViewModel.getYearList());
+ yearAdapter = new YearAdapter(requireContext());
yearAdapter.setClickListener((view, position) -> {
Bundle bundle = new Bundle();
bundle.putString(Song.BY_YEAR, Song.BY_YEAR);
@@ -193,6 +190,10 @@ public class HomeFragment extends Fragment {
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
});
bind.yearsRecyclerView.setAdapter(yearAdapter);
+ homeViewModel.getYearList().observe(requireActivity(), years -> {
+ if (bind != null) bind.homeFlashbackSector.setVisibility(!years.isEmpty() ? View.VISIBLE : View.GONE);
+ yearAdapter.setItems(years);
+ });
}
private void initStarredTracksView() {
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 860bf408..2e5ec543 100644
--- a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumCatalogueViewModel.java
@@ -63,7 +63,7 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
private void retrieveAlbums(Context context, MediaCallback callback, int size, int offset) {
App.getSubsonicClientInstance(context, false)
.getAlbumSongListClient()
- .getAlbumList2("alphabeticalByName", size, offset)
+ .getAlbumList2("alphabeticalByName", size, offset, null, null)
.enqueue(new Callback() {
@Override
public void onResponse(Call call, retrofit2.Response response) {
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 f0b04e6c..965b23f3 100644
--- a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java
@@ -19,6 +19,7 @@ import com.cappielloantonio.play.repository.SongRepository;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class HomeViewModel extends AndroidViewModel {
private static final String TAG = "HomeViewModel";
@@ -27,13 +28,12 @@ public class HomeViewModel extends AndroidViewModel {
private ArtistRepository artistRepository;
private DownloadRepository downloadRepository;
- private LiveData> downloadedSongSample;
- private List years;
-
- private MutableLiveData> dicoverSongSample;
+ private LiveData> dicoverSongSample;
private LiveData> mostPlayedAlbumSample;
private LiveData> recentlyAddedAlbumSample;
private LiveData> recentlyPlayedAlbumSample;
+ private LiveData> downloadedSongSample;
+ private LiveData> years;
private LiveData> starredTracks;
private LiveData> starredAlbums;
@@ -47,18 +47,12 @@ public class HomeViewModel extends AndroidViewModel {
artistRepository = new ArtistRepository(application);
downloadRepository = new DownloadRepository(application);
- // favoritesSongSample = songRepository.getListLiveFavoritesSampleSong(20);
- // downloadedSongSample = songRepository.getListLiveDownloadedSampleSong(20);
- // years = songRepository.getYearList();
-
- setDicoverSongSample();
- dicoverSongSample = new MutableLiveData<>();
- downloadedSongSample = downloadRepository.getLiveDownloadSample(10);
- years = new ArrayList<>();
-
+ dicoverSongSample = songRepository.getRandomSample(10, null, null);
mostPlayedAlbumSample = albumRepository.getAlbums("frequent", 20);
recentlyAddedAlbumSample = albumRepository.getAlbums("newest", 20);
recentlyPlayedAlbumSample = albumRepository.getAlbums("recent", 20);
+ downloadedSongSample = downloadRepository.getLiveDownloadSample(10);
+ years = albumRepository.getDecades();
starredTracks = songRepository.getStarredSongs();
starredAlbums = albumRepository.getStarredAlbums();
@@ -73,7 +67,7 @@ public class HomeViewModel extends AndroidViewModel {
return dicoverSongSample;
}
- public List getYearList() {
+ public LiveData> getYearList() {
return years;
}
@@ -104,18 +98,4 @@ public class HomeViewModel extends AndroidViewModel {
public LiveData> getRecentlyPlayedAlbumList() {
return recentlyPlayedAlbumSample;
}
-
- private void setDicoverSongSample() {
- songRepository.getRandomSample(10, new MediaCallback() {
- @Override
- public void onError(Exception exception) {
-
- }
-
- @Override
- public void onLoadMedia(List> media) {
- dicoverSongSample.setValue((List) media);
- }
- });
- }
}
diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java
index 26497212..e74eabbc 100644
--- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java
@@ -66,7 +66,7 @@ public class SongListPageViewModel extends AndroidViewModel {
songList = songRepository.getSongsByGenres(filters);
break;
case Song.BY_YEAR:
- // songList = songRepository.getSongByYearListLive(year);
+ songList = songRepository.getRandomSample(500, year, year + 10);
break;
case Song.STARRED:
songList = songRepository.getStarredSongs();