package org.aisen.weibo.sina.ui.fragment.friendship;
import java.util.List;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.support.paging.FriendshipPagingProcessor;
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.aisen.weibo.sina.ui.fragment.base.BizFragment;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment.RemindType;
import org.aisen.weibo.sina.ui.fragment.profile.UserProfileFragment;
import org.android.loader.BitmapLoader;
import org.sina.android.bean.Friendship;
import org.sina.android.bean.WeiBoUser;
import android.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
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.paging.IPaging;
import com.m.support.task.TaskException;
import com.m.support.task.WorkTask;
import com.m.ui.fragment.ABaseFragment;
import com.m.ui.fragment.ATabTitlePagerFragment;
/**
* 朋友圈基类
*
* @author wangdan
*
*/
public abstract class AFriendshipFragment extends ARefreshProxyFragment<WeiBoUser, Friendship>
implements OnItemClickListener {
private WeiBoUser mUser;
private boolean launch;
@Override
protected int inflateContentView() {
return R.layout.ui_friendship;
}
@Override
protected RefreshListType configListType() {
return RefreshListType.androidPulltorefresh;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
mUser = savedInstanceSate == null ? (WeiBoUser) getArguments().getSerializable("user")
: (WeiBoUser) savedInstanceSate.getSerializable("user");
launch = savedInstanceSate != null ? savedInstanceSate.getBoolean("launch")
: getArguments().getBoolean("launch", true);
getRefreshView().setOnItemClickListener(this);
if (launch) {
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
getActivity().getActionBar().setTitle(acTitle());
getActivity().getActionBar().setSubtitle(AisenUtil.getUserScreenName(getUser()));
}
}
@Override
protected void config(RefreshConfig config) {
super.config(config);
config.soundPlay = true;
config.savePosition = false;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("user", mUser);
outState.putBoolean("launch", launch);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int header = ((ListView) getRefreshView()).getHeaderViewsCount();
UserProfileFragment.launch(getActivity(), getAdapterItems().get(position - header));
}
@Override
protected AbstractItemView<WeiBoUser> newItemView() {
return new FriendshipItemView();
}
@Override
protected IPaging<WeiBoUser, Friendship> configPaging() {
return new FriendshipPagingProcessor();
}
@Override
protected void requestData(RefreshMode mode) {
new FriendshipTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
class FriendshipItemView extends AbstractItemView<WeiBoUser> {
@ViewInject(id = R.id.imgPhoto)
ImageView imgPhoto;
@ViewInject(id = R.id.txtName)
TextView txtName;
@ViewInject(id = R.id.txtRemark)
TextView txtRemark;
@Override
public int inflateViewId() {
return R.layout.item_friendship;
}
@Override
public void bindingData(View convertView, WeiBoUser data) {
BitmapLoader.getInstance().display(AFriendshipFragment.this,
AisenUtil.getUserPhoto(data), imgPhoto, ImageConfigUtils.getPhotoConfig());
txtName.setText(data.getScreen_name());
if (!TextUtils.isEmpty(data.getRemark())) {
txtRemark.setVisibility(View.VISIBLE);
txtRemark.setText(data.getRemark());
}
else {
txtRemark.setVisibility(View.GONE);
}
AisenUtil.setAlpha(convertView);
}
}
class FriendshipTask extends PagingTask<Void, Void, Friendship> {
public FriendshipTask(RefreshMode mode) {
super("FriendshipTask", 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 {
if (mode != RefreshMode.update)
nextPage = "0";
Friendship resut = getFriendship(this, mode, previousPage, nextPage, params);
if (resut.getNext_cursor() <= 0)
resut.setNoMore(true);
return resut;
}
@Override
protected void onSuccess(Friendship result) {
super.onSuccess(result);
if (result == null)
return;
// 刷新actionbar
if (getActivity() != null && result.getUsers() != null && result.getUsers().size() > 0) {
Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(FriendshipPagerFragment.class.getName());
if (fragment == null)
fragment = getActivity().getFragmentManager().findFragmentByTag("MainFragment");
if (fragment != null && fragment instanceof FriendshipPagerFragment) {
((FriendshipPagerFragment) fragment).setSubtitle();
}
}
if (AFriendshipFragment.this instanceof FollowersFragment &&
AppContext.getUnreadCount() != null && AppContext.getUnreadCount().getFollower() > 0) {
Logger.w(String.format("有新的粉丝,刷新列表, group = %s", getLastReadKey() + ""));
requestDataDelay(1000);
// fuck sina,貌似这个接口也被封了
AppContext.getUnreadCount().setFollower(0);
BizFragment.getBizFragment(AFriendshipFragment.this).remindSetCount(RemindType.follower);
}
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
}
WeiBoUser getUser() {
return mUser;
}
@Override
public void onMovedToScrapHeap(View view) {
}
/**
* Pager页面,用来设置actionbar的subtitle的提示信息
*
* @return
*/
int getSize() {
return getAdapterItems().size();
}
@Override
public String getLastReadKey() {
return acTitle();
}
@Override
public boolean onAcUnusedDoubleClicked() {
ABaseFragment aFragment = (ABaseFragment) getActivity().getFragmentManager().findFragmentByTag("MainFragment");
if (aFragment instanceof ATabTitlePagerFragment) {
@SuppressWarnings("rawtypes")
ATabTitlePagerFragment tabTitlePagerFragment = (ATabTitlePagerFragment) aFragment;
if (tabTitlePagerFragment.getCurrentFragment() == this)
return super.onAcUnusedDoubleClicked();
else
return false;
}
if (getActivity() instanceof FragmentContainerActivity) {
@SuppressWarnings("rawtypes")
ATabTitlePagerFragment aTabTitlePagerFragment = (ATabTitlePagerFragment) getActivity().getFragmentManager().findFragmentByTag(FriendshipPagerFragment.class.getName());
if (aTabTitlePagerFragment.getCurrentFragment() == this)
return super.onAcUnusedDoubleClicked();
else
return false;
}
return super.onAcUnusedDoubleClicked();
}
abstract Friendship getFriendship(@SuppressWarnings("rawtypes") WorkTask task, RefreshMode mode, String previousPage, String nextPage,
Void... params) throws TaskException;
abstract String acTitle();
}