package com.boardgamegeek.ui;
import android.app.SearchManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.boardgamegeek.R;
import com.boardgamegeek.provider.BggContract.Games;
import com.boardgamegeek.util.ActivityUtils;
import icepick.Icepick;
import icepick.State;
import timber.log.Timber;
public class SearchResultsActivity extends SimpleSinglePaneActivity {
@State @Nullable String searchText;
private SearchView searchView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
setTitle(null);
}
@Override
protected void onNewIntent(@NonNull Intent intent) {
super.onNewIntent(intent);
parseIntent(intent);
if (searchView != null) {
String query = searchView.getQuery().toString();
if (!query.equals(searchText)) {
searchView.setQuery(searchText, true);
}
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
@Override
protected int getOptionsMenuId() {
return R.menu.search_widget;
}
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
super.onCreateOptionsMenu(menu);
final MenuItem searchItem = menu.findItem(R.id.menu_search);
if (searchItem != null) {
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView == null) {
Timber.w("Could not set up search view, view is null.");
} else {
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconified(false);
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
finish();
return true;
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(@Nullable String query) {
if (query != null && query.length() > 1 && query.length() <= 2) {
((SearchResultsFragment) getFragment()).forceQueryUpdate(query);
}
// close the auto-complete list; don't pass to a different activity
searchView.clearFocus();
searchText = query;
return true;
}
@Override
public boolean onQueryTextChange(@Nullable String newText) {
if (newText != null && newText.length() > 2) {
if (!newText.equals(searchText)) {
((SearchResultsFragment) getFragment()).requestQueryUpdate(newText);
searchText = newText;
}
} else {
((SearchResultsFragment) getFragment()).requestQueryUpdate("");
}
return true;
}
});
if (!TextUtils.isEmpty(searchText)) {
searchView.setQuery(searchText, false);
}
}
}
return true;
}
@NonNull
@Override
protected Fragment onCreatePane(@NonNull Intent intent) {
parseIntent(intent);
return new SearchResultsFragment();
}
private void parseIntent(@NonNull Intent intent) {
String action = intent.getAction();
if (action != null && Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
if (uri == null) {
Toast.makeText(this, R.string.search_error_no_data, Toast.LENGTH_LONG).show();
finish();
} else {
ActivityUtils.launchGame(this, Games.getGameId(uri), "");
}
} else if (action != null &&
(Intent.ACTION_SEARCH.equals(action) || "com.google.android.gms.actions.SEARCH_ACTION".equals(action))) {
searchText = "";
if (intent.hasExtra(SearchManager.QUERY)) {
searchText = intent.getExtras().getString(SearchManager.QUERY);
}
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setSubtitle(String.format(getResources().getString(R.string.search_searching), searchText));
}
}
}
@Override
protected int getDrawerResId() {
return R.string.title_search;
}
}