package net.oschina.gitapp.ui;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Message;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import net.oschina.gitapp.AppContext;
import net.oschina.gitapp.AppException;
import net.oschina.gitapp.R;
import net.oschina.gitapp.adapter.ExploreListProjectAdapter;
import net.oschina.gitapp.bean.MessageData;
import net.oschina.gitapp.bean.Project;
import net.oschina.gitapp.common.UIHelper;
import net.oschina.gitapp.ui.baseactivity.BaseActionBarActivity;
/**
* 搜索项目界面
* @created 2014-07-10
* @author 火蚁(http://my.oschina.net/LittleDY)
*
*/
public class SearchActivity extends BaseActionBarActivity implements
OnQueryTextListener, OnItemClickListener {
private final int MESSAGESTATEFULL = 0;//已加载全部状态
private final int MESSAGESTATEMORE = 1;//可以加载更多状态
private SearchView mSearchView;
private AppContext mAppContext;
private InputMethodManager imm;
private ProgressBar mLoading;
private ListView mListView;
private View mEmpty;
private View mFooterView;
private ProgressBar mFooterLoading;
private TextView mFooterMsg;
private List<Project> mData;
private ExploreListProjectAdapter adapter;
private String mKey;
private int mMessageState = MESSAGESTATEMORE;
private boolean isLoading = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
mAppContext = getGitApplication();
initView();
steupList();
}
private void initView() {
mSearchView = (SearchView) findViewById(R.id.search_view);
mLoading = (ProgressBar) findViewById(R.id.search_loading);
mListView = (ListView) findViewById(R.id.search_list);
mEmpty = findViewById(R.id.search_empty);
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mSearchView.setOnQueryTextListener(this);
mSearchView.setIconifiedByDefault(false);
}
private void steupList() {
mData = new ArrayList<Project>();
adapter = new ExploreListProjectAdapter(mAppContext, mData,
R.layout.exploreproject_listitem);
mFooterView = LayoutInflater.from(mAppContext).inflate(
R.layout.listview_footer, null);
mFooterLoading = (ProgressBar) mFooterView.findViewById(R.id.listview_foot_progress);
mFooterMsg = (TextView) mFooterView.findViewById(R.id.listview_foot_more);
mFooterLoading.setVisibility(View.GONE);
mFooterMsg.setText(R.string.load_more);
mListView.addFooterView(mFooterView);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onQueryTextChange(String arg0) {
return true;
}
@Override
public boolean onQueryTextSubmit(String arg0) {
mKey = arg0;
load(arg0, 1);
imm.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
return true;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (adapter == null || mData == null || mData.isEmpty()) {
return;
}
//点击了底部
if(view == mFooterView) {
//数据已经全部加载,或数据为空时,或正在加载,不处理滚动事件
if(mMessageState == MessageData.MESSAGE_STATE_FULL
|| mMessageState == MessageData.MESSAGE_STATE_EMPTY
|| isLoading) {
return;
}
onLoadNextPage();
return;
}
UIHelper.showProjectDetail(mAppContext, mData.get(position), null);
}
/** 加载下一页*/
protected void onLoadNextPage() {
// 当前pageIndex
int pageIndex = mData.size() / 15 + 1;
load(mKey, pageIndex);
}
/** 设置底部有更多数据的状态*/
private void setFooterHasMoreState() {
if(mFooterView != null) {
mFooterLoading.setVisibility(View.GONE);
mFooterMsg.setText(R.string.load_more);
}
}
/** 设置底部已加载全部的状态*/
private void setFooterFullState() {
if(mFooterView != null) {
mMessageState = MESSAGESTATEFULL;
mFooterLoading.setVisibility(View.GONE);
mFooterMsg.setText(R.string.load_full);
}
}
/** 设置底部加载中的状态*/
private void setFooterLoadingState() {
if(mFooterView != null) {
mFooterLoading.setVisibility(View.VISIBLE);
mFooterMsg.setText(R.string.load_ing);
mEmpty.setVisibility(View.GONE);
}
}
private void load(final String key, final int page) {
new AsyncTask<Void, Void, Message>() {
@Override
protected Message doInBackground(Void... params) {
Message msg = new Message();
try {
msg.obj = mAppContext.getSearcheProject(key, page);
msg.what = 1;
} catch (AppException e) {
isLoading = false;
msg.what = -1;
msg.obj = e;
e.printStackTrace();
}
return msg;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
isLoading = true;
mEmpty.setVisibility(View.GONE);
if (page != 0 && page != 1) {
setFooterLoadingState();
} else {
mLoading.setVisibility(View.VISIBLE);
mListView.setVisibility(View.GONE);
}
}
@SuppressWarnings("unchecked")
@Override
protected void onPostExecute(Message msg) {
super.onPostExecute(msg);
mLoading.setVisibility(View.GONE);
isLoading = false;
if (msg.what == 1) {
if (page == 1 || page == 0)
mData.clear();
List<Project> resuleData = (List<Project>) msg.obj;
if (resuleData.size() > 0) {
mEmpty.setVisibility(View.GONE);
mData.addAll(resuleData);
if (resuleData.size() != 15) {
setFooterFullState();
} else {
setFooterHasMoreState();
}
adapter.notifyDataSetChanged();
mListView.setVisibility(View.VISIBLE);
} else {
if (page == 1 || page == 0) {
mListView.setVisibility(View.GONE);
mEmpty.setVisibility(View.VISIBLE);
}
}
} else {
((AppException) msg.obj).makeToast(mAppContext);
}
}
}.execute();
}
}