package com.garethevans.church.opensongtablet; import android.app.Activity; import android.content.Context; import android.graphics.drawable.GradientDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.RelativeLayout; import android.widget.SectionIndexer; import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Set; public class SearchViewAdapter extends BaseAdapter implements Filterable, SectionIndexer { Context context; ArrayList<SearchViewItems> searchlist; ArrayList<SearchViewItems> mStringFilterList; ValueFilter valueFilter; String what; HashMap<String, Integer> mapIndex; String[] sections; SearchViewAdapter(Context context , ArrayList<SearchViewItems> searchlist, String what) { this.context = context; this.searchlist = searchlist; mStringFilterList = searchlist; this.what = what; mapIndex = new LinkedHashMap<>(); for (int x = 0; x < FullscreenActivity.searchTitle.size(); x++) { String title = FullscreenActivity.searchTitle.get(x); String ch = title.substring(0, 1); ch = ch.toUpperCase(FullscreenActivity.locale); // HashMap will prevent duplicates mapIndex.put(ch, x); } Set<String> sectionLetters = mapIndex.keySet(); // create a list from the set to sort ArrayList<String> sectionList = new ArrayList<>(sectionLetters); Collections.sort(sectionList); sections = new String[sectionList.size()]; sectionList.toArray(sections); } @Override public int getCount() { return searchlist.size(); } @Override public Object getItem(int position) { return searchlist.get(position); } @Override public long getItemId(int position) { return searchlist.indexOf(getItem(position)); } @Override public View getView(int position , View convertView , ViewGroup parent ) { LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.searchrow, null); RelativeLayout card_view = (RelativeLayout) convertView.findViewById(R.id.card_view); TextView file_tv = (TextView) convertView.findViewById(R.id.cardview_filename); TextView name_tv = (TextView) convertView.findViewById(R.id.cardview_songtitle); TextView folder_tv = (TextView) convertView.findViewById(R.id.cardview_folder); TextView text_key = (TextView) convertView.findViewById(R.id.text_key); TextView author_tv = (TextView) convertView.findViewById(R.id.cardview_author); TextView key_tv = (TextView) convertView.findViewById(R.id.cardview_key); TextView text_author = (TextView) convertView.findViewById(R.id.text_author); TextView theme_tv = (TextView) convertView.findViewById(R.id.cardview_theme); TextView lyrics_tv = (TextView) convertView.findViewById(R.id.cardview_lyrics); TextView hymnnum_tv = (TextView) convertView.findViewById(R.id.cardview_hymn); SearchViewItems song = searchlist.get(position); if (what.equals("songmenu")) { card_view.setBackgroundColor(0x00000000); name_tv.setTextSize(16.0f); name_tv.setTextColor(0xffffffff); name_tv.setText(song.getTitle()); author_tv.setText(song.getAuthor()); author_tv.setTextSize(10.0f); author_tv.setTextColor(0xffaaaaaa); folder_tv.setVisibility(View.GONE); text_author.setVisibility(View.GONE); key_tv.setVisibility(View.GONE); text_key.setVisibility(View.GONE); } else { // Set the text colours name_tv.setTextColor(FullscreenActivity.lyricsTextColor); folder_tv.setTextColor(FullscreenActivity.lyricsChordsColor); author_tv.setTextColor(FullscreenActivity.lyricsTextColor); text_author.setTextColor(FullscreenActivity.lyricsTextColor); key_tv.setTextColor(FullscreenActivity.lyricsTextColor); text_key.setTextColor(FullscreenActivity.lyricsTextColor); // Set the background colour card_view.setBackgroundColor(FullscreenActivity.lyricsBackgroundColor); card_view.setBackgroundResource(R.drawable.section_box); GradientDrawable drawable = (GradientDrawable) card_view.getBackground(); drawable.setColor(FullscreenActivity.lyricsBackgroundColor); file_tv.setText(song.getFilename()); name_tv.setText(song.getTitle()); folder_tv.setText(song.getFolder()); author_tv.setText(song.getAuthor()); key_tv.setText(song.getKey()); theme_tv.setText(song.getTheme()); lyrics_tv.setText(song.getLyrics()); hymnnum_tv.setText(song.getHymnnum()); // Hide the empty stuff if (song.getAuthor().equals("")) { text_author.setVisibility(View.GONE); author_tv.setVisibility(View.GONE); } else { text_author.setVisibility(View.VISIBLE); author_tv.setVisibility(View.VISIBLE); } if (song.getKey().equals("")) { text_key.setVisibility(View.GONE); key_tv.setVisibility(View.GONE); } else { text_key.setVisibility(View.VISIBLE); key_tv.setVisibility(View.VISIBLE); } } } return convertView; } @Override public Filter getFilter() { if (valueFilter == null) { valueFilter = new ValueFilter(); } return valueFilter; } @Override public Object[] getSections() { return sections; } @Override public int getPositionForSection(int i) { if (mapIndex!=null && sections!=null && sections.length>0) { return mapIndex.get(sections[i]); } else { return 0; } } @Override public int getSectionForPosition(int i) { return 0; } private class ValueFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (constraint != null && constraint.length() > 0) { ArrayList<SearchViewItems> filterList = new ArrayList<>(); for (int i = 0; i < mStringFilterList.size(); i++) { if ( (mStringFilterList.get(i).getLyrics().toUpperCase(FullscreenActivity.locale) ) .contains(constraint.toString().toUpperCase(FullscreenActivity.locale))) { SearchViewItems song = new SearchViewItems( mStringFilterList.get(i).getFilename(), mStringFilterList.get(i).getTitle(), mStringFilterList.get(i).getFolder(), mStringFilterList.get(i).getAuthor(), mStringFilterList.get(i).getKey(), mStringFilterList.get(i).getTheme(), mStringFilterList.get(i).getLyrics(), mStringFilterList.get(i).getHymnnum()); filterList.add(song); } } results.count = filterList.size(); results.values = filterList; } else { results.count = mStringFilterList.size(); results.values = mStringFilterList; } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { searchlist = (ArrayList<SearchViewItems>) results.values; notifyDataSetChanged(); } } }