blob: c781b2ee8ccb2258a37de1851466fde3ef880e9d [file] [log] [blame]
package org.wordpress.android.ui.themes;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import org.wordpress.android.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.util.NetworkUtils;
/**
* A fragment for display the results of a theme search
*/
public class ThemeSearchFragment extends ThemeBrowserFragment implements SearchView.OnQueryTextListener,
MenuItemCompat.OnActionExpandListener {
public static final String TAG = ThemeSearchFragment.class.getName();
private static final String BUNDLE_LAST_SEARCH = "BUNDLE_LAST_SEARCH";
public static final int SEARCH_VIEW_MAX_WIDTH = 10000;
public static ThemeSearchFragment newInstance() {
return new ThemeSearchFragment();
}
private String mLastSearch = "";
private SearchView mSearchView;
private MenuItem mSearchMenuItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
if (savedInstanceState != null) {
mLastSearch = savedInstanceState.getString(BUNDLE_LAST_SEARCH);
}
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
saveState(outState);
}
private void saveState(Bundle outState) {
outState.putString(BUNDLE_LAST_SEARCH, mLastSearch);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.removeItem(R.id.menu_search);
mSearchMenuItem = menu.findItem(R.id.menu_theme_search);
mSearchMenuItem.expandActionView();
MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, this);
configureSearchView();
}
public void configureSearchView() {
mSearchView = (SearchView) MenuItemCompat.getActionView(mSearchMenuItem);
mSearchView.setOnQueryTextListener(this);
mSearchView.setQuery(mLastSearch, true);
mSearchView.setMaxWidth(SEARCH_VIEW_MAX_WIDTH);
}
private void clearFocus(View view) {
if (view != null) {
view.clearFocus();
}
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
if (item.getItemId() == R.id.menu_theme_search) {
return true;
}
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
mThemeBrowserActivity.setIsInSearchMode(false);
mThemeBrowserActivity.showToolbar();
mThemeBrowserActivity.getFragmentManager().popBackStack();
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
if (!mLastSearch.equals(query)) {
mLastSearch = query;
search(query);
}
clearFocus(mSearchView);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!mLastSearch.equals(newText) && !newText.equals("")) {
mLastSearch = newText;
search(newText);
}
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.theme_search, menu);
}
@Override
protected void addHeaderViews(LayoutInflater inflater) {
// No header on Search
}
@Override
protected void configureSwipeToRefresh(View view) {
super.configureSwipeToRefresh(view);
mSwipeToRefreshHelper.setEnabled(false);
}
@Override
public void setRefreshing(boolean refreshing) {
refreshView(getSpinnerPosition());
}
@Override
protected Cursor fetchThemes(int position) {
if (WordPress.getCurrentBlog() == null) {
return null;
}
String blogId = String.valueOf(WordPress.getCurrentBlog().getRemoteBlogId());
return WordPress.wpDB.getThemes(blogId, mLastSearch);
}
public void search(String searchTerm) {
mLastSearch = searchTerm;
if (NetworkUtils.isNetworkAvailable(mThemeBrowserActivity)) {
mThemeBrowserActivity.searchThemes(searchTerm);
} else {
refreshView(getSpinnerPosition());
}
}
}