package com.quinn.githubknife.ui.activity;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.quinn.githubknife.R;
import com.quinn.githubknife.ui.BaseActivity;
import com.quinn.githubknife.ui.adapter.SuggestAdapter;
import com.quinn.githubknife.ui.fragments.SearchUserFragment;
import com.quinn.githubknife.utils.Constants;
import com.quinn.githubknife.utils.L;
import com.quinn.githubknife.utils.PreferenceUtils;
import com.quinn.githubknife.utils.UIUtils;
import java.util.ArrayList;
import java.util.Set;
import butterknife.Bind;
import butterknife.ButterKnife;
public class SearchActivity extends BaseActivity implements SearchUserFragment.TotalCountCallback, AdapterView.OnItemClickListener {
private final static String TAG = SearchActivity.class.getSimpleName();
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
searchView.setQuery(suggestDataItems.get(position),false);
}
public enum SEARCH_TYPE{
SEARCH_USER,
SEARCH_REPO
};
SEARCH_TYPE search_type = SEARCH_TYPE.SEARCH_USER;
@Bind(R.id.toolbar)
Toolbar toolbar;
@Bind(R.id.searchSuggest)
ListView suggestListview;
private ArrayList<String> suggestDataItems;
private SuggestAdapter adapter;
private Menu menu;
private SearchView searchView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
ButterKnife.bind(this);
toolbar.setTitle(R.string.search);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//
suggestDataItems = new ArrayList<>();
adapter = new SuggestAdapter(this,suggestDataItems);
suggestListview.setAdapter(adapter);
suggestListview.setVisibility(View.GONE);
suggestListview.setOnItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_search, menu);
this.menu = menu;
final MenuItem searchItem = menu.findItem(R.id.action_search);
final MenuItem setItem = menu.findItem(R.id.action_set);
SearchManager searchManager = (SearchManager) SearchActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(SearchActivity.this.getComponentName()));
}
searchView.setQueryHint(getResources().getString(R.string.search_user));
//searchView.setQueryHint("");
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setItem.setVisible(false);
suggestListview.setVisibility(View.VISIBLE);
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
UIUtils.closeInputMethod(SearchActivity.this);
searchView.setIconified(true);
setItem.setVisible(true);
Bundle bundle = new Bundle();
bundle.putString("query", query);
bundle.putSerializable("search_type", search_type);
PreferenceUtils.appendStringToSet(SearchActivity.this, Constants.SEARCH_SUGGESTION, query);
SearchResultActivity.launch(SearchActivity.this, bundle);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
L.i(TAG, "onQueryTextChange : " + newText);
suggestDataItems.clear();
if (!newText.isEmpty()) {
Set<String> set = PreferenceUtils.getStringSet(SearchActivity.this, Constants.SEARCH_SUGGESTION);
for (String string : set) {
if (string.startsWith(newText) && !suggestDataItems.contains(string))
suggestDataItems.add(string);
}
adapter.notifyDataSetChanged();
}
return false;
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
setItem.setVisible(true);
invalidateOptionsMenu();
suggestListview.setVisibility(View.GONE);
return true;
}
});
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
suggestListview.setVisibility(View.VISIBLE);
} else {
suggestListview.setVisibility(View.GONE);
}
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_search) {
return true;
}
if (id == R.id.action_set) {
showPreferenceDialog();
return true;
}
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public void showPreferenceDialog(){
final AlertDialog.Builder builder =
new AlertDialog.Builder(this);
int currentIndex = 0;
if(search_type == SEARCH_TYPE.SEARCH_USER){
currentIndex = 0;
}else {
currentIndex = 1;
}
new MaterialDialog.Builder(this)
.title(R.string.search)
.items(R.array.search_type)
.itemsCallbackSingleChoice(currentIndex, new MaterialDialog.ListCallbackSingleChoice() {
@Override
public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
if(which == 0){
searchView.setQueryHint(getResources().getString(R.string.search_user));
search_type = SEARCH_TYPE.SEARCH_USER;
}else if(which == 1){
searchView.setQueryHint(getResources().getString(R.string.search_repository));
search_type = SEARCH_TYPE.SEARCH_REPO;
}
return true;
}
})
.positiveText(R.string.ok)
.negativeText(R.string.cancel)
.cancelable(true)
.show();
}
@Override
public void setTotalCount(int count) {
toolbar.setSubtitle("" + count);
}
}