package com.florianmski.tracktoid.ui.fragments.search; import android.os.Bundle; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.florianmski.tracktoid.R; import com.florianmski.tracktoid.data.TraktoidItem; import com.florianmski.tracktoid.image.Type; import com.florianmski.tracktoid.rx.observables.TraktObservable; import com.florianmski.tracktoid.ui.fragments.base.trakt.TraktItemsFragment; import com.uwetrottmann.trakt.v2.exceptions.OAuthUnauthorizedException; import java.util.List; import rx.Observable; public abstract class SearchFragment<E extends TraktoidItem> extends TraktItemsFragment<E> implements SearchView.OnQueryTextListener { private final static String BUNDLE_QUERY = "query"; private SearchView searchView; private String query; public SearchFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); if(savedInstanceState == null) setRefreshOnStart(false); else query = savedInstanceState.getString(BUNDLE_QUERY); } protected abstract List<E> getSearch(String query); @Override protected Type getImageType() { return Type.FANART; } @Override protected Observable<List<E>> createObservable() { return Observable.create(new TraktObservable<List<E>>() { @Override public List<E> fire() throws OAuthUnauthorizedException { return getSearch(query); } }); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); // create the search view searchView = new SearchView(getActionBar().getThemedContext()); searchView.setQueryHint("What are you looking for?"); searchView.setOnQueryTextListener(this); searchView.setIconified(false); final MenuItem searchMenuItem = menu.add(Menu.NONE, R.id.action_bar_search, Menu.NONE, getString(android.R.string.search_go)); searchMenuItem .setIcon(android.support.v7.appcompat.R.drawable.abc_ic_search_api_mtrl_alpha) .setActionView(searchView) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); searchView.setOnSearchClickListener(new View.OnClickListener() { @Override public void onClick(View view) { searchView.setQuery(query, false); } }); searchMenuItem.expandActionView(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(BUNDLE_QUERY, query); } @Override public boolean onQueryTextSubmit(String newText) { query = newText; refresh(true); return false; } @Override public boolean onQueryTextChange(String newText) { return true; } }