package org.carelife.creader.ui.activity;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.carelife.creader.dao.SearchData;
import org.carelife.creader.dao.UrlHelper;
import org.carelife.creader.db.BookDao;
import org.carelife.creader.ui.adapter.SearchResultAdapter;
import org.carelife.creader.util.ToastUtil;
import org.carelife.creader.util.XmlUtil;
import org.carelife.creader.R;
import android.app.ActionBar;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SearchView;
public class SearchResultList extends Activity implements OnScrollListener {
private ListView rank_cate_list = null;
private SearchResultAdapter listAdapter;
private View listaddview;
private int mCount = 1;
private int MAX_COUNT = 1;
private SharedPreferences sp;
private Editor edit;
private ToastUtil toast;
private List<SearchData> adapterData;
private String searchstring;
private LinearLayout progressbar;
private BookDao bookDao;
private GetDataTask mTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.searchresultlist);
sp = getSharedPreferences("sogounovel", MODE_PRIVATE);
edit = sp.edit();
toast = ToastUtil.getInstance(this);
buildActionBarAndViewPagerTitles();
progressbar = (LinearLayout) findViewById(R.id.rankcatelist_progressbar2);
progressbar.setVisibility(View.VISIBLE);
bookDao = BookDao.getInstance(SearchResultList.this);
searchstring = sp.getString("querystring", "");
if (searchstring.equals("")) {
toast.setText("�ף���ѯ��Ϊ��~");
SearchResultList.this.finish();
}
rank_cate_list = (ListView) findViewById(R.id.cate_rank_list2);
LayoutInflater lay = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listaddview = lay.inflate(R.layout.booklistmore, null);
rank_cate_list.addFooterView(listaddview);
adapterData = new ArrayList<SearchData>();
listAdapter = new SearchResultAdapter(SearchResultList.this,
adapterData);
rank_cate_list.setAdapter(listAdapter);
rank_cate_list.setOnScrollListener(SearchResultList.this);
new GetDataTask().execute();
}
private void buildActionBarAndViewPagerTitles() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(getString(R.string.search));
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar_menu_searchmainactivity, menu);
final SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
searchView.setIconifiedByDefault(false);
searchView.setSubmitButtonEnabled(true);
searchView.setLayoutParams(new LayoutParams(getResources().getDisplayMetrics().widthPixels / 4 * 3, LayoutParams.WRAP_CONTENT));
String show_string = searchstring;
try {
show_string = URLDecoder.decode(show_string,"utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
searchView.setQuery(show_string, false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
String query_word = query.trim();
if (query_word.equals("")) {
return true;
}
bookDao.insertHistory(query_word);
try {
query_word = URLEncoder.encode(query_word, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (query_word.equals("")) {
return true;
}
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive())
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
edit.putString("querystring", query_word);
edit.commit();
Intent intent = new Intent(SearchResultList.this,
SearchResultList.class);
SearchResultList.this.finish();
startActivity(intent);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
SearchResultList.this.finish();
return true;
}
return true;
}
private void invisibleFooter() {
rank_cate_list.removeFooterView(listaddview);
}
private class GetDataTask extends AsyncTask<Integer, Void, HashMap<String, Object>> {
@Override
protected HashMap<String, Object> doInBackground(Integer... params) {
HashMap<String, Object> tmpData = null;
mCount++;
try {
tmpData = XmlUtil.getXML(UrlHelper.searchurl, searchstring,
"&p=" + mCount +"&fixpos=0", 0);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return tmpData;
}
@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(HashMap<String, Object> data) {
progressbar.setVisibility(View.GONE);
if(data == null) {
ToastUtil.getInstance(SearchResultList.this).setText("�ף��������粻���������Ժ�����...");
} else {
rank_cate_list.setVisibility(View.VISIBLE);
adapterData.addAll((List<SearchData>) data.get("searchitem"));
MAX_COUNT = Integer.parseInt((String) data.get("maxpage"));
if (MAX_COUNT == 1) {
invisibleFooter();
}
listAdapter.notifyDataSetChanged();
}
super.onPostExecute(data);
}
}
private void additionalReading() {
if (mCount >= MAX_COUNT) {
invisibleFooter();
return;
}
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
return;
}
mTask = new GetDataTask();
mTask.execute();
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (totalItemCount == firstVisibleItem + visibleItemCount) {
additionalReading();
}
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}