package org.aisen.weibo.sina.ui.fragment.publish;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.component.bitmaploader.BitmapLoader;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.support.paging.IPaging;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.ABaseFragment;
import org.aisen.android.ui.fragment.AListSwipeRefreshFragment;
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.Friendship;
import org.aisen.weibo.sina.sinasdk.bean.Token;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.support.paging.FriendshipPaging;
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 org.aisen.weibo.sina.support.utils.UMengUtil;
import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by wangdan on 15/4/25.
*/
public class AddFriendMentionFragment extends AListSwipeRefreshFragment<WeiBoUser, Friendship>
implements AdapterView.OnItemClickListener, SearchView.OnQueryTextListener, MenuItemCompat.OnActionExpandListener{
public static void launch(ABaseFragment from, int requestCode) {
SinaCommonActivity.launchForResult(from, AddFriendMentionFragment.class, null, requestCode);
}
@ViewInject(id = R.id.laySearchSuggest)
View laySearchSuggest;
@ViewInject(id = R.id.layoutContent)
View layContent;
private int recentSize;
private MentionSuggestionFragment suggestionFragment;
@Override
public int inflateContentView() {
return R.layout.ui_add_friend_mention;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
BaseActivity activity = (BaseActivity) getActivity();
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setTitle(R.string.publish_mention);
getRefreshView().setOnItemClickListener(this);
setHasOptionsMenu(true);
if (savedInstanceSate == null) {
suggestionFragment = MentionSuggestionFragment.newInstance();
getFragmentManager().beginTransaction().add(R.id.laySearchSuggest, suggestionFragment, "MentionSuggestionFragment").commit();
}
else {
suggestionFragment = (MentionSuggestionFragment) getFragmentManager().findFragmentByTag("MentionSuggestionFragment");
}
}
@Override
protected void setupRefreshConfig(RefreshConfig config) {
super.setupRefreshConfig(config);
config.emptyHint = getString(R.string.empty_friends);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
position = position - ((ListView) getRefreshView()).getHeaderViewsCount();
FriendMentionDB.addFriend(getAdapterItems().get(position));
Intent data = new Intent();
data.putExtra("bean", getAdapterItems().get(position));
getActivity().setResult(Activity.RESULT_OK, data);
getActivity().finish();
}
@Override
public IItemViewCreator<WeiBoUser> configItemViewCreator() {
return new IItemViewCreator<WeiBoUser>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(R.layout.item_friend, parent, false);
}
@Override
public IITemView<WeiBoUser> newItemView(View convertView, int viewType) {
return new FriendItemView(convertView);
}
};
}
@Override
protected IPaging<WeiBoUser, Friendship> newPaging() {
return new FriendshipPaging();
}
@Override
public void requestData(RefreshMode mode) {
new FriendTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
class FriendItemView extends ARecycleViewItemView<WeiBoUser> {
@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 FriendItemView(View itemView) {
super(getActivity(), itemView);
}
@Override
public void onBindData(View convertView, WeiBoUser data, int position) {
BitmapLoader.getInstance().display(AddFriendMentionFragment.this,
AisenUtils.getUserPhoto(data),
imgPhoto, ImageConfigUtils.getLargePhotoConfig());
txtName.setText(data.getScreen_name());
if (!TextUtils.isEmpty(data.getRemark()))
txtRemark.setText(data.getRemark());
else
txtRemark.setText("");
if (recentSize > 0) {
layDivider.setVisibility(getPosition() == 0 || getPosition() == recentSize ? View.VISIBLE : View.GONE);
if (getPosition() == 0)
txtDivider.setText(R.string.publish_recent);
else if (getPosition() == recentSize)
txtDivider.setText(R.string.publish_all);
}
else {
layDivider.setVisibility(View.GONE);
}
}
}
class FriendTask extends APagingTask<Void, Void, Friendship> {
public FriendTask(RefreshMode mode) {
super(mode);
}
@Override
protected List<WeiBoUser> parseResult(Friendship result) {
return result.getUsers();
}
@Override
protected Friendship workInBackground(RefreshMode mode, String previousPage, String nextPage,
Void... params) throws TaskException {
Token token = AppContext.getAccount().getAdvancedToken();
if (token == null) {
token = AppContext.getAccount().getAccessToken();
}
if (mode != RefreshMode.update)
nextPage = "0";
Friendship friendship = SinaSDK.getInstance(token, getTaskCacheMode(this))
.friendshipsFriends(AppContext.getAccount().getUser().getIdstr(), null, nextPage, 50);
if ("0".equalsIgnoreCase(nextPage)) {
List<WeiBoUser> recentUsers = FriendMentionDB.getRecentMention("5");
recentSize = recentUsers.size();
ArrayList<WeiBoUser> fuck = new ArrayList<>();
fuck.addAll(recentUsers);
if (recentUsers.size() > 0 && friendship != null && friendship.getUsers() != null) {
for (WeiBoUser lineUser : friendship.getUsers()) {
boolean find = false;
for (WeiBoUser user : recentUsers) {
if (user.getIdstr().equalsIgnoreCase(lineUser.getIdstr())) {
find = true;
break;
}
}
if (!find)
fuck.add(lineUser);
}
friendship.setUsers(fuck);
}
}
if (friendship.getNext_cursor() <= 0)
friendship.setEndPaging(true);
return friendship;
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_mention_friend, menu);
MenuItem switchItem = menu.findItem(R.id.menuSwitch);
View viewTitle = switchItem.getActionView();
final EditText editQuary = (EditText) viewTitle.findViewById(R.id.editQuery);
editQuary.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEND || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
onQueryTextSubmit(v.getText().toString());
onMenuItemActionExpand(null);
return true;
}
return false;
}
});
editQuary.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
onQueryTextChange(s.toString());
if (TextUtils.isEmpty(s.toString()))
onMenuItemActionCollapse(null);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
editQuary.setHint(R.string.metion_search_hint);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onQueryTextChange(String newText) {
Logger.v("suggestion query ---> " + newText);
suggestionFragment.query(newText);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
Logger.v("suggestion query ---> " + query);
suggestionFragment.query(query);
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
layContent.setVisibility(View.GONE);
laySearchSuggest.setVisibility(View.VISIBLE);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
layContent.setVisibility(View.VISIBLE);
laySearchSuggest.setVisibility(View.GONE);
BaseActivity activity = (BaseActivity) getActivity();
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
return true;
}
@Override
public void onResume() {
super.onResume();
UMengUtil.onPageStart(getActivity(), "搜索提及好友页");
}
@Override
public void onPause() {
super.onPause();
UMengUtil.onPageEnd(getActivity(), "搜索提及好友页");
}
}