package org.aisen.weibo.sina.ui.fragment.publish;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import org.aisen.android.component.bitmaploader.BitmapLoader;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.network.task.WorkTask;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.ui.fragment.AListFragment;
import org.aisen.android.ui.fragment.adapter.ARecycleViewItemView;
import org.aisen.android.ui.fragment.itemview.IITemView;
import org.aisen.android.ui.fragment.itemview.IItemViewCreator;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.sinasdk.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.SuggestionAtUser;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.support.bean.MentionSuggestionBean;
import org.aisen.weibo.sina.support.bean.MentionSuggestionBeans;
import org.aisen.weibo.sina.support.sqlit.FriendDB;
import org.aisen.weibo.sina.support.sqlit.FriendMentionDB;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.support.utils.ImageConfigUtils;
import java.util.ArrayList;
import java.util.List;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
/**
* \@联想搜索建议,搜着关注好友
*
* @author wangdan
*
*/
public class MentionSuggestionFragment extends AListFragment<MentionSuggestionBean, MentionSuggestionBeans>
implements OnItemClickListener {
public static MentionSuggestionFragment newInstance() {
return new MentionSuggestionFragment();
}
@ViewInject(id = R.id.progress)
SmoothProgressBar progressBar;
@ViewInject(id = R.id.txtNone)
View viewNone;
private ArrayList<MentionSuggestionBean> localUserList;
private ArrayList<MentionSuggestionBean> remoteUserList;
private WorkTask<String, Void, List<SuggestionAtUser>> remoteTask;
@Override
public int inflateContentView() {
return R.layout.ui_mention_suggestion;
}
@SuppressWarnings("unchecked")
@Override
protected void layoutInit(android.view.LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
localUserList = savedInstanceSate == null ? null
: (ArrayList<MentionSuggestionBean>) savedInstanceSate.getSerializable("local");
remoteUserList = savedInstanceSate == null ? null
: (ArrayList<MentionSuggestionBean>) savedInstanceSate.getSerializable("remote");
progressBar.setVisibility(View.GONE);
progressBar.setIndeterminate(true);
getRefreshView().setOnItemClickListener(this);
};
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("local", localUserList);
outState.putSerializable("remote", remoteUserList);
}
public void query(String q) {
if (q == null)
q = "";
new LocalTask(RefreshMode.reset).execute(q);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MentionSuggestionBean bean = getAdapterItems().get(position);
WeiBoUser friend = bean.getUser();
if (friend == null) {
friend = new WeiBoUser();
friend.setIdstr(bean.getSuggestUser().getUid());
friend.setScreen_name(bean.getSuggestUser().getNickname());
new UserShowTask().execute(friend.getScreen_name());
}
else {
FriendMentionDB.addFriend(friend);
}
Intent data = new Intent();
data.putExtra("bean", friend);
getActivity().setResult(Activity.RESULT_OK, data);
getActivity().finish();
}
@Override
public IItemViewCreator<MentionSuggestionBean> configItemViewCreator() {
return new IItemViewCreator<MentionSuggestionBean>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(R.layout.item_friend, parent, false);
}
@Override
public IITemView<MentionSuggestionBean> newItemView(View convertView, int viewType) {
return new SuggestionItemView(convertView);
}
};
}
@Override
public void requestData(RefreshMode mode) {
new LocalTask(RefreshMode.reset).execute("");
}
class LocalTask extends APagingTask<String, Void, MentionSuggestionBeans> {
public LocalTask(RefreshMode mode) {
super(mode);
}
@Override
protected void onPrepare() {
super.onPrepare();
getRefreshView().setVisibility(View.VISIBLE);
viewNone.setVisibility(View.GONE);
}
@Override
protected List<MentionSuggestionBean> parseResult(MentionSuggestionBeans result) {
return result.getList();
}
@Override
protected MentionSuggestionBeans workInBackground(RefreshMode mode, String previousPage,
String nextPage, String... params) throws TaskException {
String q = params[0];
List<WeiBoUser> userList = FriendDB.query(q);
localUserList = new ArrayList<MentionSuggestionBean>();
for (WeiBoUser user : userList) {
MentionSuggestionBean bean = new MentionSuggestionBean();
bean.setUser(user);
localUserList.add(bean);
}
MentionSuggestionBeans beans = new MentionSuggestionBeans();
beans.setList(localUserList);
remoteUserList = new ArrayList<MentionSuggestionBean>();
return beans;
}
@Override
protected void onFinished() {
super.onFinished();
if (remoteTask != null)
remoteTask.cancel(true);
// 搜索建议不为空,搜索服务端数据
if (!TextUtils.isEmpty(getParams()[0]))
remoteTask = new RemoteTask().execute(getParams()[0]);
}
}
class RemoteTask extends WorkTask<String, Void, List<SuggestionAtUser>> {
@Override
protected void onPrepare() {
super.onPrepare();
progressBar.setVisibility(View.VISIBLE);
}
@Override
public List<SuggestionAtUser> workInBackground(String... params) throws TaskException {
try {
Thread.sleep(500);
} catch (Exception e) {
}
SuggestionAtUser[] userArr = SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).searchSuggestionsAtUsers(params[0]);
List<SuggestionAtUser> suggestionAtUsers = new ArrayList<SuggestionAtUser>();
// 将本地匹配的数据过滤掉
for (SuggestionAtUser suggestionAtUser : userArr) {
boolean exist = false;
for (MentionSuggestionBean bean : getAdapterItems()) {
if (bean.getUser() != null && bean.getUser().getIdstr().equals(suggestionAtUser.getUid())) {
exist = true;
break;
}
}
if (!exist) {
for (SuggestionAtUser user : suggestionAtUsers) {
if (user.getUid().equals(suggestionAtUser.getUid())) {
exist = true;
break;
}
}
}
if (!exist)
suggestionAtUsers.add(suggestionAtUser);
}
return suggestionAtUsers;
}
@Override
protected void onFinished() {
super.onFinished();
progressBar.setVisibility(View.GONE);
}
@Override
protected void onSuccess(List<SuggestionAtUser> result) {
super.onSuccess(result);
if (result != null) {
remoteUserList = new ArrayList<MentionSuggestionBean>();
for (SuggestionAtUser suggestionAtUser : result) {
MentionSuggestionBean bean = new MentionSuggestionBean();
bean.setSuggestUser(suggestionAtUser);
remoteUserList.add(bean);
}
getAdapterItems().addAll(remoteUserList);
getAdapter().notifyDataSetChanged();
}
if (getAdapter().getDatas().size() == 0) {
getRefreshView().setVisibility(View.GONE);
viewNone.setVisibility(View.VISIBLE);
}
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
}
class SuggestionItemView extends ARecycleViewItemView<MentionSuggestionBean> {
@ViewInject(id = R.id.imgPhoto)
ImageView imgPhoto;
@ViewInject(id = R.id.txtName)
TextView txtName;
@ViewInject(id = R.id.txtRemark)
TextView txtRemark;
@ViewInject(id = R.id.txtDivider)
TextView txtDivider;
@ViewInject(id = R.id.layDivider)
View layDivider;
public SuggestionItemView(View itemView) {
super(getActivity(), itemView);
}
@Override
public void onBindData(View convertView, MentionSuggestionBean data, int position) {
String screenName = null;
String remark = null;
if (data.getUser() != null) {
BitmapLoader.getInstance().display(MentionSuggestionFragment.this,
AisenUtils.getUserPhoto(data.getUser()),
imgPhoto, ImageConfigUtils.getLargePhotoConfig());
imgPhoto.setVisibility(View.VISIBLE);
screenName = data.getUser().getScreen_name();
remark = data.getUser().getRemark();
}
else {
imgPhoto.setVisibility(View.GONE);
screenName = data.getSuggestUser().getNickname();
remark = data.getSuggestUser().getRemark();
}
txtName.setText(screenName);
txtRemark.setText(remark);
if (localUserList.size() > 0 && remoteUserList.size() > 0) {
layDivider.setVisibility(getPosition() == 0 || getPosition() == localUserList.size() ? View.VISIBLE : View.GONE);
if (getPosition() == 0)
txtDivider.setText(R.string.publish_local_datas);
else if (getPosition() == localUserList.size())
txtDivider.setText(R.string.publish_service_datas);
}
else {
layDivider.setVisibility(View.GONE);
}
}
}
// 添加一个关注好友到搜索记录
class UserShowTask extends WorkTask<String, Void, WeiBoUser> {
@Override
public WeiBoUser workInBackground(String... params) throws TaskException {
WeiBoUser user = SinaSDK.getInstance(AppContext.getAccount().getAccessToken()).userShow(null, params[0]);
FriendMentionDB.addFriend(user);
// List<WeiBoUser> userList = new ArrayList<WeiBoUser>();
// userList.add(user);
// FriendDB.insertFriends(userList);
return null;
}
}
}