package com.gnod.geekr.ui.activity;
import java.util.ArrayList;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.gnod.geekr.R;
import com.gnod.geekr.app.AppConfig;
import com.gnod.geekr.app.adapter.SpinnerAdapter;
import com.gnod.geekr.app.adapter.TimelineAdapter;
import com.gnod.geekr.model.StatusModel;
import com.gnod.geekr.model.UserInfoModel;
import com.gnod.geekr.tool.LaunchHelper;
import com.gnod.geekr.tool.ToastHelper;
import com.gnod.geekr.tool.fetcher.BaseFetcher;
import com.gnod.geekr.tool.fetcher.BaseFetcher.FetchCompleteListener;
import com.gnod.geekr.tool.fetcher.SearchFetcher;
import com.gnod.geekr.tool.manager.Utils;
public class SearchActivity extends BaseActivity {
private static final int FETCH_COUNT = 30;
public static final int TYPE_AT_LIST = 2;
private ListView listView;
private ArrayList<UserInfoModel> userList = new ArrayList<UserInfoModel>();
private ArrayList<StatusModel> statusList = new ArrayList<StatusModel>();
private SearchFetcher sinaWeiboFetcher;
private EditText editor;
private MenuItem refreshMenu;
protected int mSearchType;
private View mSearchBtn;
private TimelineAdapter statusAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
sinaWeiboFetcher = new SearchFetcher();
initView();
bindListener();
bindView();
}
@Override
protected void onResume() {
super.onResume();
AppConfig.sImageFetcher.setExitTasksEarly(false);
}
@Override
protected void onPause() {
super.onPause();
AppConfig.sImageFetcher.setPauseWork(false);
AppConfig.sImageFetcher.setExitTasksEarly(true);
AppConfig.sImageFetcher.flushCache();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.menu_search, menu);
refreshMenu = menu.findItem(R.id.menu_searchitem);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void initView() {
listView = (ListView)findViewById(R.id.view_search_list);
mSearchBtn = findViewById(R.id.btn_search);
listView.setAdapter(userAdapter);
statusAdapter = new TimelineAdapter(this, statusList);
editor = (EditText)findViewById(R.id.view_search_edittext);
}
private void bindListener() {
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(userList.size() == 0|| position >= userList.size())
return;
if(mSearchType == 0) {
UserInfoModel user = userList.get(position);
LaunchHelper.startProfileActivity(view.getContext(), user);
} else {
StatusModel item = statusList.get(position);
LaunchHelper.startDetailActivity(view.getContext(), item);
}
}
});
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == OnScrollListener.SCROLL_STATE_FLING) {
if (!Utils.hasHoneycomb()) {
AppConfig.sImageFetcher.setPauseWork(true);
}
} else {
AppConfig.sImageFetcher.setPauseWork(false);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
mSearchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = editor.getText().toString();
if(text.trim().length() == 0) {
ToastHelper.show("搜索内容为空", 2);
return;
}
if(mSearchType == 0) {
sinaWeiboFetcher.fetchUsers(text, 20, onFetchUsers);
setRefreshing(true);
} else {
sinaWeiboFetcher.fetchStatuses(text, 20, onFetchStatuses);
setRefreshing(true);
}
}
});
}
private void bindView() {
final String[] searchType = new String[] {
"搜索用户·Beta", "搜索微博·Beta"};
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(this, searchType);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(spinnerAdapter, new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
if(mSearchType == itemPosition)
return false;
mSearchType = itemPosition;
editor.setHint(searchType[itemPosition]);
if(itemPosition == 0) {
listView.setAdapter(userAdapter);
} else {
listView.setAdapter(statusAdapter);
}
return true;
}
});
}
private void setRefreshing(boolean checked) {
if(refreshMenu != null){
if(checked)
refreshMenu.setActionView(R.layout.layout_loading);
else
refreshMenu.setActionView(null);
}
}
private FetchCompleteListener onFetchUsers = new FetchCompleteListener() {
@Override
public void fetchComplete(int state, int code, Object obj) {
setRefreshing(false);
if(editor.length() == 0){
return;
};
switch (state) {
case BaseFetcher.FETCH_NOT_NETWORK:
case BaseFetcher.FETCH_AUTH_FAILED:
ToastHelper.show((String) obj, 2);
break;
case BaseFetcher.FETCH_EMPTY:
break;
case BaseFetcher.FETCH_SUCCEED_NEWS:
userList.clear();
userList.addAll( (ArrayList<UserInfoModel>)obj);
userAdapter.notifyDataSetChanged();
break;
default:
break;
}
}
};
private FetchCompleteListener onFetchStatuses = new FetchCompleteListener() {
@Override
public void fetchComplete(int state, int code, Object obj) {
setRefreshing(false);
if(editor.length() == 0){
return;
};
switch (state) {
case BaseFetcher.FETCH_NOT_NETWORK:
case BaseFetcher.FETCH_AUTH_FAILED:
ToastHelper.show((String) obj, 2);
break;
case BaseFetcher.FETCH_EMPTY:
break;
case BaseFetcher.FETCH_SUCCEED_NEWS:
statusList.clear();
statusList.addAll( (ArrayList<StatusModel>)obj);
statusAdapter.notifyDataSetChanged();
break;
default:
break;
}
}
};
private BaseAdapter userAdapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemView itemView;
if(convertView == null) {
itemView = new ItemView();
convertView = LayoutInflater.from(SearchActivity.this).inflate(R.layout.listitem_search, null);
itemView.textName = (TextView) convertView.findViewById(R.id.text_search_item_username);
convertView.setTag(itemView);
} else {
itemView = (ItemView) convertView.getTag();
}
UserInfoModel user = userList.get(position);
itemView.textName.setText(user.nickName);
return convertView;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return userList.get(position);
}
@Override
public int getCount() {
return userList.size();
}
class ItemView {
public TextView textName;
}
};
}