package org.aisen.weibo.sina.ui.fragment.publish;
import java.lang.reflect.Field;
import java.util.List;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.support.db.FriendMentionDB;
import org.aisen.weibo.sina.support.utils.AisenUtil;
import org.aisen.weibo.sina.support.utils.AppContext;
import org.aisen.weibo.sina.support.utils.ImageConfigUtils;
import org.aisen.weibo.sina.ui.activity.common.FragmentContainerActivity;
import org.aisen.weibo.sina.ui.fragment.base.ARefreshProxyFragment;
import org.android.loader.BitmapLoader;
import org.sina.android.SinaSDK;
import org.sina.android.bean.Friendship;
import org.sina.android.bean.WeiBoUser;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import com.m.common.utils.Logger;
import com.m.support.Inject.ViewInject;
import com.m.support.adapter.ABaseAdapter.AbstractItemView;
import com.m.support.task.TaskException;
import com.m.ui.fragment.ABaseFragment;
/**
* 提及好友
*
* @author wangdan
*
*/
public class AddFriendMentionFragment extends ARefreshProxyFragment<WeiBoUser, Friendship>
implements OnItemClickListener, OnQueryTextListener, OnActionExpandListener {
public static void launch(ABaseFragment from, int requestCode) {
FragmentContainerActivity.launchForResult(from, AddFriendMentionFragment.class, null, requestCode);
}
@ViewInject(id = R.id.laySearchSuggest)
View laySearchSuggest;
@ViewInject(id = R.id.layoutContent)
View layContent;
private int recentSize;
private SearchView searchView;
private MenuItem searchMenu;
private MentionSuggestionFragment suggestionFragment;
@Override
protected int inflateContentView() {
return R.layout.ui_add_friend_mention;
}
@Override
protected RefreshListType configListType() {
return RefreshListType.actionbarPulltorefresh;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
getActivity().getActionBar().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");
}
((TextView) findViewById(R.id.layoutEmpty).findViewById(R.id.txtLoadFailed)).setText(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
protected AbstractItemView<WeiBoUser> newItemView() {
return new FriendItemView();
}
@Override
protected void requestData(RefreshMode mode) {
new FriendTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
class FriendItemView extends AbstractItemView<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;
@Override
public int inflateViewId() {
return R.layout.item_friend;
}
@Override
public void bindingData(View convertView, WeiBoUser data) {
BitmapLoader.getInstance().display(AddFriendMentionFragment.this,
AisenUtil.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);
}
AisenUtil.setDivider(layDivider);
AisenUtil.setAlpha(convertView);
}
}
class FriendTask extends PagingTask<Void, Void, Friendship> {
public FriendTask(RefreshMode mode) {
super("PagingTask", 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 {
List<WeiBoUser> recentUsers = FriendMentionDB.getRecentMention("5");
recentSize = recentUsers.size();
Friendship friendship = SinaSDK.getInstance(AppContext.getToken(), getTaskCacheMode(this))
.friendshipsFriends(AppContext.getUser().getIdstr(), null, "0");
if (recentUsers.size() > 0 && friendship != null && friendship.getUsers() != null) {
recentUsers.addAll(friendship.getUsers());
friendship.setUsers(recentUsers);
friendship.setNoMore(true);
}
return friendship;
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
}
@Override
public boolean onBackClick() {
if (searchMenu.isActionViewExpanded()) {
searchMenu.collapseActionView();
return true;
}
return super.onBackClick();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search_friend, menu);
searchMenu = menu.findItem(R.id.search);
searchMenu.setOnActionExpandListener(this);
searchView = (SearchView) searchMenu.getActionView();
searchView.setOnQueryTextListener(this);
searchView.setQueryHint(getString(R.string.publish_mention_hint));
try {
Field textField = searchView.getClass().getDeclaredField("mQueryTextView");
textField.setAccessible(true);
TextView txt = (TextView) textField.get(searchView);
txt.setHintTextColor(Color.parseColor("#88ffffff"));
} catch (Exception e) {
}
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);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
return true;
}
}