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

9
.idea/misc.xml generated
View file

@ -36,6 +36,7 @@
<entry key="app/src/main/res/drawable/ic_favorites_outlined.xml" value="0.28055555555555556" /> <entry key="app/src/main/res/drawable/ic_favorites_outlined.xml" value="0.28055555555555556" />
<entry key="app/src/main/res/drawable/ic_feed.xml" value="0.28055555555555556" /> <entry key="app/src/main/res/drawable/ic_feed.xml" value="0.28055555555555556" />
<entry key="app/src/main/res/drawable/ic_file_download.xml" value="0.2722222222222222" /> <entry key="app/src/main/res/drawable/ic_file_download.xml" value="0.2722222222222222" />
<entry key="app/src/main/res/drawable/ic_filter_list.xml" value="0.1825" />
<entry key="app/src/main/res/drawable/ic_forward.xml" value="0.156" /> <entry key="app/src/main/res/drawable/ic_forward.xml" value="0.156" />
<entry key="app/src/main/res/drawable/ic_genre.xml" value="0.24814814814814815" /> <entry key="app/src/main/res/drawable/ic_genre.xml" value="0.24814814814814815" />
<entry key="app/src/main/res/drawable/ic_grade.xml" value="0.28703703703703703" /> <entry key="app/src/main/res/drawable/ic_grade.xml" value="0.28703703703703703" />
@ -74,6 +75,8 @@
<entry key="app/src/main/res/drawable/ic_skip_previous_white_24dp.xml" value="0.28055555555555556" /> <entry key="app/src/main/res/drawable/ic_skip_previous_white_24dp.xml" value="0.28055555555555556" />
<entry key="app/src/main/res/drawable/ic_skip_silence.xml" value="0.156" /> <entry key="app/src/main/res/drawable/ic_skip_silence.xml" value="0.156" />
<entry key="app/src/main/res/drawable/ic_skip_silence_outlined.xml" value="0.156" /> <entry key="app/src/main/res/drawable/ic_skip_silence_outlined.xml" value="0.156" />
<entry key="app/src/main/res/drawable/ic_sort_by_alpha.xml" value="0.1825" />
<entry key="app/src/main/res/drawable/ic_sort_list.xml" value="0.123" />
<entry key="app/src/main/res/drawable/ic_speed.xml" value="0.156" /> <entry key="app/src/main/res/drawable/ic_speed.xml" value="0.156" />
<entry key="app/src/main/res/drawable/ic_star.xml" value="0.2722222222222222" /> <entry key="app/src/main/res/drawable/ic_star.xml" value="0.2722222222222222" />
<entry key="app/src/main/res/drawable/ic_toolbar_motion_on.xml" value="0.30625" /> <entry key="app/src/main/res/drawable/ic_toolbar_motion_on.xml" value="0.30625" />
@ -163,12 +166,18 @@
<entry key="app/src/main/res/layout/player_control_view_body.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/layout/player_control_view_body.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/layout/player_control_view_header.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/layout/player_control_view_header.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/layout/player_header_bottom_sheet.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/layout/player_header_bottom_sheet.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/album_page_menu.xml" value="0.1" />
<entry key="app/src/main/res/menu/bottom_nav_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/bottom_nav_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/login_page_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/login_page_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/main_page_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/main_page_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/now_playing_page_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/now_playing_page_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/player_page_menu.xml" value="0.5178753830439223" /> <entry key="app/src/main/res/menu/player_page_menu.xml" value="0.5178753830439223" />
<entry key="app/src/main/res/menu/playlist_page_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/playlist_page_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/menu/sort_album_popup_menu.xml" value="0.1" />
<entry key="app/src/main/res/menu/sort_artist_popup_menu.xml" value="0.3494791666666667" />
<entry key="app/src/main/res/menu/sort_genre_popup_menu.xml" value="0.3494791666666667" />
<entry key="app/src/main/res/menu/sort_playlist_popup_menu.xml" value="0.3494791666666667" />
<entry key="app/src/main/res/menu/sort_popup_menu.xml" value="0.5536458333333333" />
<entry key="app/src/main/res/menu/toolbar_menu.xml" value="0.3229166666666667" /> <entry key="app/src/main/res/menu/toolbar_menu.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.28055555555555556" /> <entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.28055555555555556" />
</map> </map>

View file

@ -23,6 +23,8 @@ import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -159,4 +161,23 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
return true; 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 FROM_ARTIST = "FROM_ARTIST";
public static final String NEW_RELEASES = "NEW_RELEASES"; 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 id;
private String title; private String title;
private int year; private int year;

View file

@ -11,6 +11,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.PopupMenu;
import android.widget.SearchView; import android.widget.SearchView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -25,6 +26,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumCatalogueAdapter; import com.cappielloantonio.play.adapter.AlbumCatalogueAdapter;
import com.cappielloantonio.play.databinding.FragmentAlbumCatalogueBinding; import com.cappielloantonio.play.databinding.FragmentAlbumCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration; import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.AlbumCatalogueViewModel; import com.cappielloantonio.play.viewmodel.AlbumCatalogueViewModel;
@ -113,6 +115,8 @@ public class AlbumCatalogueFragment extends Fragment {
hideKeyboard(v); hideKeyboard(v);
return false; return false;
}); });
bind.albumListSortImageView.setOnClickListener(view -> showPopupMenu(view, R.menu.sort_album_popup_menu));
} }
@Override @Override
@ -144,4 +148,29 @@ public class AlbumCatalogueFragment extends Fragment {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 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();
}
} }

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:autoMirrored="true">
<path
android:fillColor="@color/titleTextColor"
android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"/>
</vector>

View file

@ -41,6 +41,24 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="parent" /> app:layout_constraintStart_toEndOf="parent" />
<Button
android:id="@+id/album_list_sort_image_view"
style="@style/Widget.Material3.Button.TonalButton.Icon"
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:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
app:cornerRadius="30dp"
app:icon="@drawable/ic_sort_list"
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

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_album_sort_name"
android:title="@string/menu_sort_name" />
<item
android:id="@+id/menu_album_sort_artist"
android:title="@string/menu_sort_artist" />
<item
android:id="@+id/menu_album_sort_year"
android:title="@string/menu_sort_year" />
<item
android:id="@+id/menu_album_sort_random"
android:title="@string/menu_sort_random" />
</menu>

View file

@ -217,4 +217,8 @@
<string name="podcast_bottom_sheet_download">Download</string> <string name="podcast_bottom_sheet_download">Download</string>
<string name="podcast_bottom_sheet_add_to_queue">Add to queue</string> <string name="podcast_bottom_sheet_add_to_queue">Add to queue</string>
<string name="podcast_bottom_sheet_play_next">Play next</string> <string name="podcast_bottom_sheet_play_next">Play next</string>
<string name="menu_sort_year">Year</string>
<string name="menu_sort_artist">Artist</string>
<string name="menu_sort_name">Name</string>
<string name="menu_sort_random">Random</string>
</resources> </resources>