From 2712b73dac73d17df0daffa7fa0da9edc3f787bd Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sat, 16 Mar 2024 16:28:33 +0100 Subject: [PATCH] feat: added sorting by newest album added --- .../tempo/ui/adapter/AlbumCatalogueAdapter.java | 4 ++++ .../ui/fragment/AlbumCatalogueFragment.java | 16 ++++++++++++++++ .../com/cappielloantonio/tempo/util/Constants.kt | 1 + .../tempo/viewmodel/AlbumCatalogueViewModel.java | 8 ++++++++ .../main/res/layout/fragment_album_catalogue.xml | 14 ++++++++++++++ app/src/main/res/menu/sort_album_popup_menu.xml | 3 +++ app/src/main/res/values/strings.xml | 1 + 7 files changed, 47 insertions(+) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java index 146f3eb9..62ff0315 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/AlbumCatalogueAdapter.java @@ -161,6 +161,10 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter showPopupMenu(view, R.menu.sort_album_popup_menu)); } + private void initProgressLoader() { + albumCatalogueViewModel.getLoadingStatus().observe(getViewLifecycleOwner(), isLoading -> { + if (isLoading) { + bind.albumListSortImageView.setEnabled(false); + bind.albumListProgressLoader.setVisibility(View.VISIBLE); + } else { + bind.albumListSortImageView.setEnabled(true); + bind.albumListProgressLoader.setVisibility(View.GONE); + } + }); + } + @Override public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { inflater.inflate(R.menu.toolbar_menu, menu); @@ -171,6 +184,9 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback { } else if (menuItem.getItemId() == R.id.menu_album_sort_random) { albumAdapter.sort(Constants.ALBUM_ORDER_BY_RANDOM); return true; + } else if (menuItem.getItemId() == R.id.menu_album_sort_recently_added) { + albumAdapter.sort(Constants.ALBUM_ORDER_BY_RECENTLY_ADDED); + return true; } return false; diff --git a/app/src/main/java/com/cappielloantonio/tempo/util/Constants.kt b/app/src/main/java/com/cappielloantonio/tempo/util/Constants.kt index d4818482..7615662e 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/util/Constants.kt +++ b/app/src/main/java/com/cappielloantonio/tempo/util/Constants.kt @@ -30,6 +30,7 @@ object Constants { const val ALBUM_ORDER_BY_ARTIST = "ALBUM_ORDER_BY_ARTIST" const val ALBUM_ORDER_BY_YEAR = "ALBUM_ORDER_BY_YEAR" const val ALBUM_ORDER_BY_RANDOM = "ALBUM_ORDER_BY_RANDOM" + const val ALBUM_ORDER_BY_RECENTLY_ADDED = "ALBUM_ORDER_BY_RECENTLY_ADDED" const val ARTIST_DOWNLOADED = "ARTIST_DOWNLOADED" const val ARTIST_STARRED = "ARTIST_STARRED" diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumCatalogueViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumCatalogueViewModel.java index e1222f39..a18e645c 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumCatalogueViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumCatalogueViewModel.java @@ -20,6 +20,7 @@ import retrofit2.Callback; public class AlbumCatalogueViewModel extends AndroidViewModel { private final MutableLiveData> albumList = new MutableLiveData<>(new ArrayList<>()); + private final MutableLiveData loading = new MutableLiveData<>(true); private int page = 0; private Status status = Status.STOPPED; @@ -32,6 +33,10 @@ public class AlbumCatalogueViewModel extends AndroidViewModel { return albumList; } + public LiveData getLoadingStatus() { + return loading; + } + public void loadAlbums() { page = 0; status = Status.RUNNING; @@ -52,6 +57,7 @@ public class AlbumCatalogueViewModel extends AndroidViewModel { @Override public void onLoadMedia(List media) { if (status == Status.STOPPED) { + loading.setValue(false); return; } @@ -62,8 +68,10 @@ public class AlbumCatalogueViewModel extends AndroidViewModel { if (media.size() == size) { loadAlbums(size); + loading.setValue(true); } else { status = Status.STOPPED; + loading.setValue(false); } } }, size, size * page++); diff --git a/app/src/main/res/layout/fragment_album_catalogue.xml b/app/src/main/res/layout/fragment_album_catalogue.xml index 0111f825..c0928866 100644 --- a/app/src/main/res/layout/fragment_album_catalogue.xml +++ b/app/src/main/res/layout/fragment_album_catalogue.xml @@ -58,6 +58,20 @@ app:icon="@drawable/ic_sort_list" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> + + + + diff --git a/app/src/main/res/menu/sort_album_popup_menu.xml b/app/src/main/res/menu/sort_album_popup_menu.xml index 357be433..2f7a9d93 100644 --- a/app/src/main/res/menu/sort_album_popup_menu.xml +++ b/app/src/main/res/menu/sort_album_popup_menu.xml @@ -12,4 +12,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb9f8111..64282d27 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,6 +153,7 @@ Artist Name Random + Recently added Year %1$.2fx Clean play queue