diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java index a080b1a6..826a7edf 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java @@ -4,6 +4,8 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Filter; +import android.widget.Filterable; import androidx.annotation.NonNull; import androidx.appcompat.content.res.AppCompatResources; @@ -29,19 +31,54 @@ import java.util.Objects; import java.util.Optional; @UnstableApi -public class SongHorizontalAdapter extends RecyclerView.Adapter { +public class SongHorizontalAdapter extends RecyclerView.Adapter implements Filterable { private final ClickCallback click; private final boolean showCoverArt; private final boolean showAlbum; private final AlbumID3 album; + private List songsFull; private List songs; + private String currentFilter; + + private final Filter filtering = new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + List filteredList = new ArrayList<>(); + + if (constraint == null || constraint.length() == 0) { + filteredList.addAll(songsFull); + } else { + String filterPattern = constraint.toString().toLowerCase().trim(); + currentFilter = filterPattern; + + for (Child item : songsFull) { + if (item.getTitle().toLowerCase().contains(filterPattern)) { + filteredList.add(item); + } + } + } + + FilterResults results = new FilterResults(); + results.values = filteredList; + + return results; + } + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + songs = (List) results.values; + notifyDataSetChanged(); + } + }; public SongHorizontalAdapter(ClickCallback click, boolean showCoverArt, boolean showAlbum, AlbumID3 album) { this.click = click; this.showCoverArt = showCoverArt; this.showAlbum = showAlbum; this.songs = Collections.emptyList(); + this.songsFull = Collections.emptyList(); + this.currentFilter = ""; this.album = album; } @@ -135,7 +172,8 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter songs) { - this.songs = songs != null ? songs : Collections.emptyList(); + this.songsFull = songs != null ? songs : Collections.emptyList(); + filtering.filter(currentFilter); notifyDataSetChanged(); } @@ -149,6 +187,11 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter activity.navController.navigateUp()); + bind.animToolbar.setNavigationOnClickListener(v -> { + hideKeyboard(v); + activity.navController.navigateUp(); + }); Objects.requireNonNull(bind.animToolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null)); } + private void hideKeyboard(View view) { + InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + private void initMusicButton() { playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> { if (bind != null) { diff --git a/app/src/main/res/menu/playlist_page_menu.xml b/app/src/main/res/menu/playlist_page_menu.xml index f947c2dc..6164be98 100644 --- a/app/src/main/res/menu/playlist_page_menu.xml +++ b/app/src/main/res/menu/playlist_page_menu.xml @@ -1,6 +1,13 @@ + + - \ No newline at end of file