package com.jasonchen.microlang.fragments;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.Toast;
import com.jasonchen.microlang.R;
import com.jasonchen.microlang.activitys.SearchActivity;
import com.jasonchen.microlang.adapter.FollowersAdapter;
import com.jasonchen.microlang.adapter.TimeLineAdapter;
import com.jasonchen.microlang.beans.MessageBean;
import com.jasonchen.microlang.beans.MessageListBean;
import com.jasonchen.microlang.beans.UserBean;
import com.jasonchen.microlang.beans.UserListBean;
import com.jasonchen.microlang.dao.SearchStatusDao;
import com.jasonchen.microlang.dao.SearchUserDao;
import com.jasonchen.microlang.debug.AppLogger;
import com.jasonchen.microlang.exception.WeiboException;
import com.jasonchen.microlang.utils.GlobalContext;
import com.jasonchen.microlang.workers.TimeLineBitmapDownloader;
import java.util.ArrayList;
import java.util.List;
/**
* jasonchen
* 2015/04/16
*/
public class SearchUserFragment extends TimeLineBaseFragment implements SearchActivity.Searcher {
private static final String ARGUMENTS_TOKEN_EXTRA = SearchUserFragment.class
.getName() + ":token_extra";
private static final int REFRESH_LISTVIEW = 2;
private static final int LOAD_OLD_MESSAGE = 3;
private static final int NETWORK_ERROR = 4;
private View view;
private String token;
private MyHandler handler;
private List<UserBean> userBean;
private FollowersAdapter adapter;
private int pager = 0;
private String q;
public static SearchUserFragment newInstance(String token) {
SearchUserFragment fragment = new SearchUserFragment();
Bundle bundle = new Bundle();
bundle.putString(ARGUMENTS_TOKEN_EXTRA, token);
fragment.setArguments(bundle);
return fragment;
}
public SearchUserFragment() {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
token = getArguments().getString(ARGUMENTS_TOKEN_EXTRA);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = super.onCreateView(inflater, container, savedInstanceState);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
userBean = new ArrayList<UserBean>();
handler = new MyHandler();
fab.setVisibility(View.GONE);
getListView().setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(false);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
false);
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(true);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
true);
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
TimeLineBitmapDownloader.getInstance()
.setPauseDownloadWork(true);
TimeLineBitmapDownloader.getInstance().setPauseReadWork(
true);
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
listView.getFooterView().hide();
adapter = new FollowersAdapter(getActivity(), userBean, listView);
listView.setAdapter(adapter);
}
@Override
public void search(String q) {
this.q = q;
try {
userBean.clear();
adapter.notifyDataSetChanged();
listView.setVisibility(View.GONE);
refreshLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48, getResources().getDisplayMetrics()));
refreshLayout.setRefreshing(true);
onRefresh();
} catch (NullPointerException e) {
}
}
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case REFRESH_LISTVIEW:
UserListBean newList = (UserListBean) msg.obj;
if (newList != null && newList.getUsers().size() > 0) {
userBean.addAll(0, newList.getUsers());
adapter.setList(userBean);
adapter.notifyDataSetChanged();
}
listView.setVisibility(View.VISIBLE);
listView.getFooterView().show();
getRefreshLayout().setRefreshing(false);
break;
case LOAD_OLD_MESSAGE:
UserListBean oldList = (UserListBean) msg.obj;
if(oldList != null && oldList.getUsers().size() > 0) {
userBean.addAll(oldList.getUsers());
}
adapter.setList(userBean);
adapter.notifyDataSetChanged();
int oldnumber = oldList.getUsers().size();
if (oldnumber == 0) {
Toast.makeText(GlobalContext.getInstance(),
getString(R.string.load_complete),
Toast.LENGTH_SHORT).show();
listView.getFooterView().hide();
listView.setPullLoadEnable(false);
}
getListView().stopLoadMore();
break;
case NETWORK_ERROR:
String errorStr = (String) msg.obj;
Toast.makeText(GlobalContext.getInstance(), errorStr, Toast.LENGTH_SHORT)
.show();
getRefreshLayout().setRefreshing(false);
getListView().stopLoadMore();
break;
}
}
}
@Override
public void onRefresh() {
super.onRefresh();
new Thread() {
public void run() {
SearchUserDao dao = new SearchUserDao(token, q);
try {
UserListBean newlist = dao.getGSONMsgList();
Message msg = Message.obtain();
msg.what = REFRESH_LISTVIEW;
msg.obj = newlist;
handler.sendMessage(msg);
} catch (WeiboException e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = NETWORK_ERROR;
msg.obj = e.getError();
handler.sendMessage(msg);
}
}
;
}.start();
}
@Override
public void onLoadMore() {
super.onLoadMore();
asyncLoadOldMessage();
}
private void asyncLoadOldMessage() {
new Thread() {
public void run() {
SearchUserDao dao = new SearchUserDao(token, q);
pager = pager + 1;
dao.setPage(String.valueOf(pager));
try {
UserListBean oldList = dao.getGSONMsgList();
Message msg = Message.obtain();
msg.what = LOAD_OLD_MESSAGE;
msg.obj = oldList;
handler.sendMessage(msg);
} catch (WeiboException e) {
e.printStackTrace();
Message msg = Message.obtain();
msg.what = NETWORK_ERROR;
msg.obj = e.getError();
handler.sendMessage(msg);
}
}
;
}.start();
}
}