Added the ability to sort items in the album catalogue

This commit is contained in:
antonio 2022-03-24 22:21:38 +01:00
parent 1515bc320b
commit 3c617570de
8 changed files with 111 additions and 0 deletions

View file

@ -23,6 +23,8 @@ import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.MusicUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
@ -159,4 +161,23 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
return true;
}
}
public void sort(String order) {
switch (order) {
case Album.ORDER_BY_NAME:
albums.sort(Comparator.comparing(Album::getTitle));
break;
case Album.ORDER_BY_ARTIST:
albums.sort(Comparator.comparing(Album::getArtistName));
break;
case Album.ORDER_BY_YEAR:
albums.sort(Comparator.comparing(Album::getYear));
break;
case Album.ORDER_BY_RANDOM:
Collections.shuffle(albums);
break;
}
notifyDataSetChanged();
}
}

View file

@ -24,6 +24,11 @@ public class Album implements Parcelable {
public static final String FROM_ARTIST = "FROM_ARTIST";
public static final String NEW_RELEASES = "NEW_RELEASES";
public static final String ORDER_BY_NAME = "ORDER_BY_NAME";
public static final String ORDER_BY_ARTIST = "ORDER_BY_ARTIST";
public static final String ORDER_BY_YEAR = "ORDER_BY_YEAR";
public static final String ORDER_BY_RANDOM = "ORDER_BY_RANDOM";
private String id;
private String title;
private int year;

View file

@ -11,6 +11,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.PopupMenu;
import android.widget.SearchView;
import androidx.annotation.NonNull;
@ -25,6 +26,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumCatalogueAdapter;
import com.cappielloantonio.play.databinding.FragmentAlbumCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.AlbumCatalogueViewModel;
@ -113,6 +115,8 @@ public class AlbumCatalogueFragment extends Fragment {
hideKeyboard(v);
return false;
});
bind.albumListSortImageView.setOnClickListener(view -> showPopupMenu(view, R.menu.sort_album_popup_menu));
}
@Override
@ -144,4 +148,29 @@ public class AlbumCatalogueFragment extends Fragment {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
private void showPopupMenu(View view, int menuResource) {
PopupMenu popup = new PopupMenu(requireContext(), view);
popup.getMenuInflater().inflate(menuResource, popup.getMenu());
popup.setOnMenuItemClickListener(menuItem -> {
if (menuItem.getItemId() == R.id.menu_album_sort_name) {
albumAdapter.sort(Album.ORDER_BY_NAME);
return true;
} else if (menuItem.getItemId() == R.id.menu_album_sort_artist) {
albumAdapter.sort(Album.ORDER_BY_ARTIST);
return true;
} else if (menuItem.getItemId() == R.id.menu_album_sort_year) {
albumAdapter.sort(Album.ORDER_BY_YEAR);
return true;
} else if (menuItem.getItemId() == R.id.menu_album_sort_random) {
albumAdapter.sort(Album.ORDER_BY_RANDOM);
return true;
}
return false;
});
popup.show();
}
}