feat: added sorting by newest album added

This commit is contained in:
CappielloAntonio 2024-03-16 16:28:33 +01:00
parent 302458e76b
commit 2712b73dac
7 changed files with 47 additions and 0 deletions

View file

@ -161,6 +161,10 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
case Constants.ALBUM_ORDER_BY_RANDOM: case Constants.ALBUM_ORDER_BY_RANDOM:
Collections.shuffle(albums); Collections.shuffle(albums);
break; break;
case Constants.ALBUM_ORDER_BY_RECENTLY_ADDED:
albums.sort(Comparator.comparing(AlbumID3::getCreated));
Collections.reverse(albums);
break;
} }
notifyDataSetChanged(); notifyDataSetChanged();

View file

@ -67,6 +67,7 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback {
initAppBar(); initAppBar();
initAlbumCatalogueView(); initAlbumCatalogueView();
initProgressLoader();
return view; return view;
} }
@ -124,6 +125,18 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback {
bind.albumListSortImageView.setOnClickListener(view -> showPopupMenu(view, R.menu.sort_album_popup_menu)); bind.albumListSortImageView.setOnClickListener(view -> 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 @Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.toolbar_menu, menu); 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) { } else if (menuItem.getItemId() == R.id.menu_album_sort_random) {
albumAdapter.sort(Constants.ALBUM_ORDER_BY_RANDOM); albumAdapter.sort(Constants.ALBUM_ORDER_BY_RANDOM);
return true; 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; return false;

View file

@ -30,6 +30,7 @@ object Constants {
const val ALBUM_ORDER_BY_ARTIST = "ALBUM_ORDER_BY_ARTIST" 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_YEAR = "ALBUM_ORDER_BY_YEAR"
const val ALBUM_ORDER_BY_RANDOM = "ALBUM_ORDER_BY_RANDOM" 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_DOWNLOADED = "ARTIST_DOWNLOADED"
const val ARTIST_STARRED = "ARTIST_STARRED" const val ARTIST_STARRED = "ARTIST_STARRED"

View file

@ -20,6 +20,7 @@ import retrofit2.Callback;
public class AlbumCatalogueViewModel extends AndroidViewModel { public class AlbumCatalogueViewModel extends AndroidViewModel {
private final MutableLiveData<List<AlbumID3>> albumList = new MutableLiveData<>(new ArrayList<>()); private final MutableLiveData<List<AlbumID3>> albumList = new MutableLiveData<>(new ArrayList<>());
private final MutableLiveData<Boolean> loading = new MutableLiveData<>(true);
private int page = 0; private int page = 0;
private Status status = Status.STOPPED; private Status status = Status.STOPPED;
@ -32,6 +33,10 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
return albumList; return albumList;
} }
public LiveData<Boolean> getLoadingStatus() {
return loading;
}
public void loadAlbums() { public void loadAlbums() {
page = 0; page = 0;
status = Status.RUNNING; status = Status.RUNNING;
@ -52,6 +57,7 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
if (status == Status.STOPPED) { if (status == Status.STOPPED) {
loading.setValue(false);
return; return;
} }
@ -62,8 +68,10 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
if (media.size() == size) { if (media.size() == size) {
loadAlbums(size); loadAlbums(size);
loading.setValue(true);
} else { } else {
status = Status.STOPPED; status = Status.STOPPED;
loading.setValue(false);
} }
} }
}, size, size * page++); }, size, size * page++);

View file

@ -58,6 +58,20 @@
app:icon="@drawable/ic_sort_list" app:icon="@drawable/ic_sort_list"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
<ProgressBar
android:id="@+id/album_list_progress_loader"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="12dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>

View file

@ -12,4 +12,7 @@
<item <item
android:id="@+id/menu_album_sort_random" android:id="@+id/menu_album_sort_random"
android:title="@string/menu_sort_random" /> android:title="@string/menu_sort_random" />
<item
android:id="@+id/menu_album_sort_recently_added"
android:title="@string/menu_sort_recently_added" />
</menu> </menu>

View file

@ -153,6 +153,7 @@
<string name="menu_sort_artist">Artist</string> <string name="menu_sort_artist">Artist</string>
<string name="menu_sort_name">Name</string> <string name="menu_sort_name">Name</string>
<string name="menu_sort_random">Random</string> <string name="menu_sort_random">Random</string>
<string name="menu_sort_recently_added">Recently added</string>
<string name="menu_sort_year">Year</string> <string name="menu_sort_year">Year</string>
<string name="player_playback_speed">%1$.2fx</string> <string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Clean play queue</string> <string name="player_queue_clean_all_button">Clean play queue</string>