package com.garethevans.church.opensongtablet; import android.app.Activity; import android.app.DialogFragment; import android.content.Context; import android.os.Bundle; import android.os.Vibrator; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SearchView; import android.widget.TextView; import android.widget.Toast; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public class PopUpFullSearchFragment extends DialogFragment implements SearchView.OnQueryTextListener { private SearchView mSearchView; private ListView mListView; // Vibrate to indicate something has happened Vibrator vb; SearchViewAdapter adapter; public final ArrayList<String> mFileName = new ArrayList<>(); public final ArrayList<String> mFolder = new ArrayList<>(); public final ArrayList<String> mTitle = new ArrayList<>(); public final ArrayList<String> mAuthor = new ArrayList<>(); public final ArrayList<String> mShortLyrics = new ArrayList<>(); public final ArrayList<String> mTheme = new ArrayList<>(); public final ArrayList<String> mKey = new ArrayList<>(); public final ArrayList<String> mHymnNumber = new ArrayList<>(); ArrayList<SearchViewItems> searchlist = new ArrayList<>(); public static List<Map<String, String>> data; public interface MyInterface { void loadSong(); } public static PopUpFullSearchFragment newInstance () { PopUpFullSearchFragment frag; frag = new PopUpFullSearchFragment(); return frag; } private MyInterface mListener; @Override @SuppressWarnings("deprecation") public void onAttach(Activity activity) { super.onAttach(activity); mListener = (MyInterface) activity; } @Override public void onDetach() { mListener = null; super.onDetach(); } @Override public void onStart() { super.onStart(); // safety check if (getDialog() == null) { return; } getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(getActivity().getResources().getString(R.string.action_search)); View V = inflater.inflate(R.layout.searchview_filter, container, false); super.onCreate(savedInstanceState); vb = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); mSearchView = (SearchView) V.findViewById(R.id.search_view); mListView = (ListView) V.findViewById(R.id.list_view); mSearchView.requestFocus(); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); // Decide if we are using full blown search or a simplified one if (FullscreenActivity.safetosearch) { Fullsearch(); } else { Simplesearch(); } return V; } public void Simplesearch() { // This gets called if the database wasn't built properly // Tell the user there was a problem FullscreenActivity.myToastMessage = getResources().getString(R.string.search_index_error); ShowToast.showToast(getActivity()); // Convert the list of folder/files into a database sorted by filenames ArrayList<String> filesnfolders = new ArrayList<>(); for (String foldernfile:FullscreenActivity.allfilesforsearch) { String[] file_split = foldernfile.split("/"); String filename; String foldername; try { filename = file_split[1]; } catch (Exception e) { filename = ""; } try { foldername = file_split[0]; } catch (Exception e) { foldername = ""; } if (foldername.equals("")) { foldername = FullscreenActivity.mainfoldername; } filesnfolders.add(filename + " _%%%_ " + foldername); } Collator coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(filesnfolders,coll); // Copy the full search string, now it is sorted, into a song and folder array mFileName.clear(); mFolder.clear(); mTitle.clear(); mAuthor.clear(); mShortLyrics.clear(); mTheme.clear(); mKey.clear(); mHymnNumber.clear(); for (int d=0;d<filesnfolders.size();d++) { String[] songbits = filesnfolders.get(d).split("_%%%_"); String filename = songbits[0].trim(); String foldername = songbits[1].trim(); String lyricstoadd = filename + " " + foldername; // Replace unwanted symbols lyricstoadd = ProcessSong.removeUnwantedSymbolsAndSpaces(lyricstoadd); mFileName.add(d, filename); mFolder.add(d, foldername); mTitle.add(d, filename); mAuthor.add(d, ""); mShortLyrics.add(d, lyricstoadd); mTheme.add(d, ""); mKey.add(d, ""); mHymnNumber.add(d, ""); } mListView.setTextFilterEnabled(true); mListView.setFastScrollEnabled(true); setupSearchView(); for (int i = 0; i < filesnfolders.size(); i++) { SearchViewItems song = new SearchViewItems(mFileName.get(i), mTitle.get(i) , mFolder.get(i), mAuthor.get(i), mKey.get(i), mTheme.get(i), mShortLyrics.get(i), mHymnNumber.get(i)); searchlist.add(song); } adapter = new SearchViewAdapter(getActivity().getApplicationContext(), searchlist, "search"); mListView.setAdapter(adapter); mListView.setTextFilterEnabled(true); mListView.setFastScrollEnabled(true); setupSearchView(); mSearchView.setOnQueryTextListener(this); } public void Fullsearch() { // Add locale sort Collator coll = Collator.getInstance(FullscreenActivity.locale); coll.setStrength(Collator.SECONDARY); Collections.sort(FullscreenActivity.search_database, coll); // Copy the full search string, now it is sorted, into a song and folder array mFileName.clear(); mFolder.clear(); mTitle.clear(); mAuthor.clear(); mShortLyrics.clear(); mTheme.clear(); mKey.clear(); mHymnNumber.clear(); for (int d=0;d<FullscreenActivity.search_database.size();d++) { String[] songbits = FullscreenActivity.search_database.get(d).split("_%%%_"); mFileName.add(d, songbits[0].trim()); mFolder.add(d, songbits[1].trim()); mTitle.add(d, songbits[2].trim()); mAuthor.add(d, songbits[3].trim()); mShortLyrics.add(d, songbits[4].trim()); mTheme.add(d, songbits[5].trim()); mKey.add(d, songbits[6].trim()); mHymnNumber.add(d,songbits[7].trim()); } mListView.setTextFilterEnabled(true); mListView.setFastScrollEnabled(true); setupSearchView(); for (int i = 0; i < FullscreenActivity.search_database.size(); i++) { SearchViewItems song = new SearchViewItems(mFileName.get(i), mTitle.get(i) , mFolder.get(i), mAuthor.get(i), mKey.get(i), mTheme.get(i), mShortLyrics.get(i), mHymnNumber.get(i)); searchlist.add(song); } adapter = new SearchViewAdapter(getActivity().getApplicationContext(), searchlist, "search" ); mListView.setAdapter(adapter); mListView.setTextFilterEnabled(true); mListView.setFastScrollEnabled(true); setupSearchView(); mSearchView.setOnQueryTextListener(this); } @Override public boolean onQueryTextSubmit(String newText) { InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0); mListView.requestFocus(); if (mListView.getCount() == 0) { dismiss(); return false; } else { SearchViewItems item = (SearchViewItems) adapter.getItem(0); FullscreenActivity.songfilename = item.getFilename(); FullscreenActivity.whichSongFolder = item.getFolder(); FullscreenActivity.setView = false; FullscreenActivity.myToastMessage = FullscreenActivity.songfilename; //Save preferences Preferences.savePreferences(); // Vibrate to indicate something has happened vb.vibrate(30); mListener.loadSong(); dismiss(); return true; } } @Override public boolean onQueryTextChange(String newText) { // Replace unwanted symbols newText = ProcessSong.removeUnwantedSymbolsAndSpaces(newText); adapter.getFilter().filter(newText); return false; } private void setupSearchView() { mSearchView.setIconifiedByDefault(false); mSearchView.setOnQueryTextListener(this); mSearchView.setSubmitButtonEnabled(false); mSearchView.setQueryHint(getResources().getText(R.string.search_here).toString()); mListView.setOnItemClickListener(new SongClickListener()); mListView.setOnItemLongClickListener(new SongLongClickListener()); } private class SongClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Vibrate to indicate that something has happened. vb.vibrate(30); TextView mFilename = (TextView) view.findViewById(R.id.cardview_filename); TextView mFoldername = (TextView) view.findViewById(R.id.cardview_folder); FullscreenActivity.songfilename = mFilename.getText().toString(); FullscreenActivity.whichSongFolder = mFoldername.getText().toString(); Preferences.savePreferences(); FullscreenActivity.setView = false; mListener.loadSong(); dismiss(); } } // This listener listens for long clicks in the song menu private class SongLongClickListener implements ListView.OnItemLongClickListener { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // Each song is saved in the set string as $**_Love everlasting_**$ // Vibrate to indicate that something has happened. vb.vibrate(50); TextView mFilename = (TextView) view.findViewById(R.id.cardview_filename); TextView mFoldername = (TextView) view.findViewById(R.id.cardview_folder); String tsong = mFilename.getText().toString(); String tfolder = mFoldername.getText().toString(); // We need to figure out the file name and the folder (if any) it is in if (tfolder.equals(FullscreenActivity.mainfoldername) || tfolder.equals("")) { FullscreenActivity.whatsongforsetwork = "$**_" + tsong + "_**$"; } else { FullscreenActivity.whatsongforsetwork = "$**_" + tfolder + "/" + tsong + "_**$"; } // Allow the song to be added, even if it is already there FullscreenActivity.mySet = FullscreenActivity.mySet + FullscreenActivity.whatsongforsetwork; // Tell the user that the song has been added. Toast toast = Toast.makeText(getActivity(), "\""+tsong+"\" "+getResources().getString(R.string.addedtoset), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); // Save the set and other preferences Preferences.savePreferences(); /*FullscreenActivity.setView = "N"; mListener.loadSong();*/ return true; } } }