diff --git a/app/src/main/java/org/xbmc/kore/ui/AbstractCursorListFragment.java b/app/src/main/java/org/xbmc/kore/ui/AbstractCursorListFragment.java index 88b214b..2ef7cd3 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AbstractCursorListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AbstractCursorListFragment.java @@ -17,6 +17,7 @@ package org.xbmc.kore.ui; import android.annotation.TargetApi; +import android.app.Activity; import android.content.Intent; import android.content.ServiceConnection; import android.database.Cursor; @@ -25,15 +26,20 @@ import android.support.annotation.Nullable; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; +import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.SearchView; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; import android.widget.CursorAdapter; +import android.widget.EditText; import android.widget.Toast; import org.xbmc.kore.R; @@ -54,6 +60,8 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment SwipeRefreshLayout.OnRefreshListener { private static final String TAG = LogUtils.makeLogTag(AbstractCursorListFragment.class); + private final String BUNDLE_KEY_SEARCH_QUERY = "search_query"; + private ServiceConnection serviceConnection; private HostInfo hostInfo; @@ -66,7 +74,13 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment // The search filter to use in the loader private String searchFilter = null; + private String savedSearchFilter; + private boolean supportsSearch; + private boolean loaderLoading; + private SearchView searchView; + + abstract protected void onListItemClicked(View view); abstract protected CursorLoader createCursorLoader(); @TargetApi(16) @@ -84,6 +98,11 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment adapter = (CursorAdapter) getAdapter(); + if (savedInstanceState != null) { + savedSearchFilter = savedInstanceState.getString(BUNDLE_KEY_SEARCH_QUERY); + } + searchFilter = savedSearchFilter; + return root; } @@ -118,10 +137,34 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment SyncUtils.disconnectFromLibrarySyncService(getActivity(), serviceConnection); } + @Override + public void onSaveInstanceState(Bundle outState) { + if (!TextUtils.isEmpty(searchFilter)) { + savedSearchFilter = searchFilter; + } + outState.putString(BUNDLE_KEY_SEARCH_QUERY, savedSearchFilter); + super.onSaveInstanceState(outState); + } + + @Override + protected AdapterView.OnItemClickListener createOnItemClickListener() { + return new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + saveSearchState(); + onListItemClicked(view); + } + }; + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.abstractcursorlistfragment, menu); + if (supportsSearch) { + setupSearchMenuItem(menu, inflater); + } + super.onCreateOptionsMenu(menu, inflater); } @@ -204,6 +247,18 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment } } + /** + * Use this to indicate your fragment supports search queries. + * Get the entered search query using {@link #getSearchFilter()} + *
+ * Note: make sure this is set before {@link #onCreateOptionsMenu(Menu, MenuInflater)} is called. + * For instance in {@link #onAttach(Activity)} + * @param supportsSearch true if you support search queries, false otherwise + */ + public void setSupportsSearch(boolean supportsSearch) { + this.supportsSearch = supportsSearch; + } + protected void onSwipeRefresh() { LogUtils.LOGD(TAG, "Swipe, starting sync for: " + getListSyncType()); // Start the syncing process @@ -218,8 +273,15 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment /** {@inheritDoc} */ @Override public boolean onQueryTextChange(String newText) { + if ((!searchView.hasFocus()) && TextUtils.isEmpty(newText)) { + //onQueryTextChange called as a result of manually expanding the searchView in setupSearchMenuItem(...) + return true; + } + searchFilter = newText; - getLoaderManager().restartLoader(LOADER, null, this); + + restartLoader(); + return true; } @@ -236,12 +298,14 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment /** {@inheritDoc} */ @Override public Loader onCreateLoader(int i, Bundle bundle) { + loaderLoading = true; return createCursorLoader(); } /** {@inheritDoc} */ @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { + loaderLoading = false; adapter.swapCursor(cursor); // To prevent the empty text from appearing on the first load, set it now emptyView.setText(getString(R.string.swipe_down_to_refresh)); @@ -253,6 +317,12 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment adapter.swapCursor(null); } + /** + * Save the search state of the list fragment + */ + public void saveSearchState() { + savedSearchFilter = searchFilter; + } /** * @return text entered in searchview @@ -265,6 +335,58 @@ public abstract class AbstractCursorListFragment extends AbstractListFragment * Use this to reload the items in the list */ public void refreshList() { - getLoaderManager().restartLoader(LOADER, null, this); + restartLoader(); + } + + private void setupSearchMenuItem(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.media_search, menu); + MenuItem searchMenuItem = menu.findItem(R.id.action_search); + if (searchMenuItem != null) { + searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); + searchView.setOnQueryTextListener(this); + searchView.setQueryHint(getString(R.string.action_search)); + if ((savedSearchFilter != null) && (!TextUtils.isEmpty(savedSearchFilter))){ + searchMenuItem.expandActionView(); + searchView.setQuery(savedSearchFilter, false); + searchView.clearFocus(); + } + + MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + searchFilter = savedSearchFilter = null; + restartLoader(); + return true; + } + }); + } + + //Handle clearing search query using the close button (X button). + View view = searchView.findViewById(R.id.search_close_btn); + if (view != null) { + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EditText editText = (EditText) searchView.findViewById(R.id.search_src_text); + editText.setText(""); + searchView.setQuery("", false); + searchFilter = savedSearchFilter = ""; + restartLoader(); + } + }); + } + } + + private void restartLoader() { + //When loader is restarted while current loader hasn't finished yet, + //it may result in none of the loaders finishing. + if(!loaderLoading) { + getLoaderManager().restartLoader(LOADER, null, this); + } } } diff --git a/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java b/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java index 6bf8d22..5c63ec4 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AlbumListFragment.java @@ -24,16 +24,11 @@ import android.net.Uri; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.PopupMenu; @@ -98,16 +93,11 @@ public class AlbumListFragment extends AbstractCursorListFragment { } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the movie id from the tag - ViewHolder tag = (ViewHolder) view.getTag(); - // Notify the activity - listenerActivity.onAlbumSelected(tag); - } - }; + protected void onListItemClicked(View view) { + // Get the movie id from the tag + ViewHolder tag = (ViewHolder) view.getTag(); + // Notify the activity + listenerActivity.onAlbumSelected(tag); } @Override @@ -160,6 +150,8 @@ public class AlbumListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnAlbumSelectedListener"); } + + setSupportsSearch(true); } @Override @@ -168,22 +160,6 @@ public class AlbumListFragment extends AbstractCursorListFragment { listenerActivity = null; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!isAdded()) { - // HACK: Fix crash reported on Play Store. Why does this is necessary is beyond me - super.onCreateOptionsMenu(menu, inflater); - return; - } - - inflater.inflate(R.menu.media_search, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_albums)); - super.onCreateOptionsMenu(menu, inflater); - } - /** * Album list query parameters. */ diff --git a/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java b/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java index dc9cec5..dec9d89 100644 --- a/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/ArtistListFragment.java @@ -23,16 +23,11 @@ import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.PopupMenu; @@ -67,16 +62,11 @@ public class ArtistListFragment extends AbstractCursorListFragment { protected String getListSyncType() { return LibrarySyncService.SYNC_ALL_MUSIC; } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the artist id from the tag - ViewHolder tag = (ViewHolder) view.getTag(); - // Notify the activity - listenerActivity.onArtistSelected(tag); - } - }; + protected void onListItemClicked(View view) { + // Get the artist id from the tag + ViewHolder tag = (ViewHolder) view.getTag(); + // Notify the activity + listenerActivity.onArtistSelected(tag); } @Override @@ -109,6 +99,7 @@ public class ArtistListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnArtistSelectedListener"); } + setSupportsSearch(true); } @Override @@ -117,21 +108,6 @@ public class ArtistListFragment extends AbstractCursorListFragment { listenerActivity = null; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!isAdded()) { - // HACK: Fix crash reported on Play Store. Why does this is necessary is beyond me - super.onCreateOptionsMenu(menu, inflater); - return; - } - inflater.inflate(R.menu.media_search, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_artists)); - super.onCreateOptionsMenu(menu, inflater); - } - /** * Artist list query parameters. */ diff --git a/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java b/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java index cd09315..09107ce 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AudioGenresListFragment.java @@ -22,16 +22,11 @@ import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.PopupMenu; @@ -64,16 +59,11 @@ public class AudioGenresListFragment extends AbstractCursorListFragment { protected String getListSyncType() { return LibrarySyncService.SYNC_ALL_MUSIC; } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the movie id from the tag - ViewHolder tag = (ViewHolder) view.getTag(); - // Notify the activity - listenerActivity.onAudioGenreSelected(tag.genreId, tag.genreTitle); - } - }; + protected void onListItemClicked(View view) { + // Get the movie id from the tag + ViewHolder tag = (ViewHolder) view.getTag(); + // Notify the activity + listenerActivity.onAudioGenreSelected(tag.genreId, tag.genreTitle); } @Override @@ -106,6 +96,7 @@ public class AudioGenresListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnAudioGenreSelectedListener"); } + setSupportsSearch(true); } @Override @@ -114,23 +105,6 @@ public class AudioGenresListFragment extends AbstractCursorListFragment { listenerActivity = null; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!isAdded()) { - // HACK: Fix crash reported on Play Store. Why does this is necessary is beyond me - super.onCreateOptionsMenu(menu, inflater); - return; - } - - inflater.inflate(R.menu.media_search, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_genres)); - super.onCreateOptionsMenu(menu, inflater); - } - - /** * Audio genres list query parameters. */ diff --git a/app/src/main/java/org/xbmc/kore/ui/MovieListFragment.java b/app/src/main/java/org/xbmc/kore/ui/MovieListFragment.java index ea6e24d..430a69a 100644 --- a/app/src/main/java/org/xbmc/kore/ui/MovieListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/MovieListFragment.java @@ -25,8 +25,6 @@ import android.net.Uri; import android.preference.PreferenceManager; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; @@ -34,7 +32,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.TextView; @@ -67,16 +64,11 @@ public class MovieListFragment extends AbstractCursorListFragment { protected String getListSyncType() { return LibrarySyncService.SYNC_ALL_MOVIES; } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the movie id from the tag - ViewHolder tag = (ViewHolder) view.getTag(); - // Notify the activity - listenerActivity.onMovieSelected(tag); - } - }; + protected void onListItemClicked(View view) { + // Get the movie id from the tag + ViewHolder tag = (ViewHolder) view.getTag(); + // Notify the activity + listenerActivity.onMovieSelected(tag); } @Override @@ -136,6 +128,7 @@ public class MovieListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnMovieSelectedListener"); } + setSupportsSearch(true); } @Override @@ -154,12 +147,6 @@ public class MovieListFragment extends AbstractCursorListFragment { inflater.inflate(R.menu.movie_list, menu); - // Setup search view - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_movies)); - // Setup filters MenuItem hideWatched = menu.findItem(R.id.action_hide_watched), ignoreArticles = menu.findItem(R.id.action_ignore_prefixes), diff --git a/app/src/main/java/org/xbmc/kore/ui/MoviesActivity.java b/app/src/main/java/org/xbmc/kore/ui/MoviesActivity.java index faa6088..4216640 100644 --- a/app/src/main/java/org/xbmc/kore/ui/MoviesActivity.java +++ b/app/src/main/java/org/xbmc/kore/ui/MoviesActivity.java @@ -54,6 +54,8 @@ public class MoviesActivity extends BaseActivity private boolean clearSharedElements; + private MovieListFragment movieListFragment; + @TargetApi(21) @Override protected void onCreate(Bundle savedInstanceState) { @@ -70,7 +72,7 @@ public class MoviesActivity extends BaseActivity navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout)); if (savedInstanceState == null) { - MovieListFragment movieListFragment = new MovieListFragment(); + movieListFragment = new MovieListFragment(); // Setup animations if (Utils.isLollipopOrLater()) { @@ -169,6 +171,7 @@ public class MoviesActivity extends BaseActivity selectedMovieTitle = null; setupActionBar(null); } + super.onBackPressed(); } diff --git a/app/src/main/java/org/xbmc/kore/ui/MusicListFragment.java b/app/src/main/java/org/xbmc/kore/ui/MusicListFragment.java index c3dfb64..e392ed2 100644 --- a/app/src/main/java/org/xbmc/kore/ui/MusicListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/MusicListFragment.java @@ -39,6 +39,8 @@ public class MusicListFragment extends Fragment { private TabsAdapter tabsAdapter; + private int currentItem; + @InjectView(R.id.pager_tab_strip) PagerSlidingTabStrip pagerTabStrip; @InjectView(R.id.pager) ViewPager viewPager; @@ -56,6 +58,28 @@ public class MusicListFragment extends Fragment { viewPager.setAdapter(tabsAdapter); pagerTabStrip.setViewPager(viewPager); + currentItem = viewPager.getCurrentItem(); + + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + AbstractCursorListFragment f = + ((AbstractCursorListFragment) tabsAdapter.getStoredFragment(currentItem)); + if (f != null) { + f.saveSearchState(); + } + currentItem = viewPager.getCurrentItem(); + } + + @Override + public void onPageScrollStateChanged(int state) { + } + }); return root; } diff --git a/app/src/main/java/org/xbmc/kore/ui/MusicVideoListFragment.java b/app/src/main/java/org/xbmc/kore/ui/MusicVideoListFragment.java index 5019ce9..40996cb 100644 --- a/app/src/main/java/org/xbmc/kore/ui/MusicVideoListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/MusicVideoListFragment.java @@ -23,16 +23,10 @@ import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.TextView; @@ -64,16 +58,11 @@ public class MusicVideoListFragment extends AbstractCursorListFragment { protected String getListSyncType() { return LibrarySyncService.SYNC_ALL_MUSIC_VIDEOS; } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the movie id from the tag - ViewHolder tag = (ViewHolder)view.getTag(); - // Notify the activity - listenerActivity.onMusicVideoSelected(tag); - } - }; + protected void onListItemClicked(View view) { + // Get the movie id from the tag + ViewHolder tag = (ViewHolder)view.getTag(); + // Notify the activity + listenerActivity.onMusicVideoSelected(tag); } @Override @@ -106,6 +95,7 @@ public class MusicVideoListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnMusicVideoSelectedListener"); } + setSupportsSearch(true); } @Override @@ -114,22 +104,6 @@ public class MusicVideoListFragment extends AbstractCursorListFragment { listenerActivity = null; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!isAdded()) { - // HACK: Fix crash reported on Play Store. Why does this is necessary is beyond me - super.onCreateOptionsMenu(menu, inflater); - return; - } - - inflater.inflate(R.menu.media_search, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_music_videos)); - super.onCreateOptionsMenu(menu, inflater); - } - /** * Videos list query parameters. */ diff --git a/app/src/main/java/org/xbmc/kore/ui/TVShowListFragment.java b/app/src/main/java/org/xbmc/kore/ui/TVShowListFragment.java index bb863a7..fa8bffa 100644 --- a/app/src/main/java/org/xbmc/kore/ui/TVShowListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/TVShowListFragment.java @@ -25,8 +25,6 @@ import android.net.Uri; import android.preference.PreferenceManager; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; @@ -34,7 +32,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.TextView; @@ -67,16 +64,11 @@ public class TVShowListFragment extends AbstractCursorListFragment { protected String getListSyncType() { return LibrarySyncService.SYNC_ALL_TVSHOWS; } @Override - protected AdapterView.OnItemClickListener createOnItemClickListener() { - return new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Get the movie id from the tag - ViewHolder tag = (ViewHolder) view.getTag(); - // Notify the activity - listenerActivity.onTVShowSelected(tag); - } - }; + protected void onListItemClicked(View view) { + // Get the movie id from the tag + ViewHolder tag = (ViewHolder) view.getTag(); + // Notify the activity + listenerActivity.onTVShowSelected(tag); } @Override @@ -138,6 +130,7 @@ public class TVShowListFragment extends AbstractCursorListFragment { } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnTVShowSelectedListener"); } + setSupportsSearch(true); } @Override @@ -155,10 +148,6 @@ public class TVShowListFragment extends AbstractCursorListFragment { } inflater.inflate(R.menu.tvshow_list, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setOnQueryTextListener(this); - searchView.setQueryHint(getString(R.string.action_search_tvshows)); // Setup filters MenuItem hideWatched = menu.findItem(R.id.action_hide_watched), diff --git a/app/src/main/res/menu/movie_list.xml b/app/src/main/res/menu/movie_list.xml index d731b96..1c99516 100644 --- a/app/src/main/res/menu/movie_list.xml +++ b/app/src/main/res/menu/movie_list.xml @@ -17,13 +17,6 @@ - diff --git a/app/src/main/res/menu/tvshow_list.xml b/app/src/main/res/menu/tvshow_list.xml index a945fe8..04457c3 100644 --- a/app/src/main/res/menu/tvshow_list.xml +++ b/app/src/main/res/menu/tvshow_list.xml @@ -16,12 +16,6 @@ --> -