package org.aisen.weibo.sina.ui.fragment.friendship;
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.support.paging.IPaging;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.AListSwipeRefreshFragment;
import org.aisen.android.ui.fragment.ATabsFragment;
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.base.AppSettings;
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.utils.AisenUtils;
import org.aisen.weibo.sina.support.utils.ImageConfigUtils;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import org.aisen.weibo.sina.ui.fragment.profile.ProfilePagerFragment;
import java.util.List;
/**
* 朋友圈基类
*
* @author wangdan
*
*/
public abstract class AFriendshipFragment extends AListSwipeRefreshFragment<WeiBoUser, Friendship>
implements OnItemClickListener, ATabsFragment.ITabInitData {
private WeiBoUser mUser;
private boolean launch;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUser = savedInstanceState == null ? (WeiBoUser) getArguments().getSerializable("user")
: (WeiBoUser) savedInstanceState.getSerializable("user");
launch = savedInstanceState != null ? savedInstanceState.getBoolean("launch")
: getArguments().getBoolean("launch", true);
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
if (launch) {
BaseActivity activity = (BaseActivity) getActivity();
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setTitle(acTitle());
activity.getSupportActionBar().setSubtitle(AisenUtils.getUserScreenName(getUser()));
}
}
@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 = getRefreshView().getHeaderViewsCount();
ProfilePagerFragment.launch(getActivity(), getAdapterItems().get(position - header));
}
@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_friendship, parent, false);
}
@Override
public IITemView<WeiBoUser> newItemView(View convertView, int viewType) {
return new FriendshipItemView(convertView);
}
};
}
@Override
protected IPaging<WeiBoUser, Friendship> newPaging() {
return new FriendshipPaging();
}
@Override
public void requestData(RefreshMode mode) {
boolean load = true;
// 如果还没有加载过数据,切且显示的是当前的页面
if (getTaskCount(PAGING_TASK_ID) == 0) {
load = AisenUtils.checkTabsFragmentCanRequestData(this);
}
if (load) {
new FriendshipTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
}
@Override
public void onTabRequestData() {
// 如果还没有加载过数据,就开始加载
if (getTaskCount(PAGING_TASK_ID) == 0) {
requestData(RefreshMode.reset);
}
}
class FriendshipItemView 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.divider)
View divider;
public FriendshipItemView(View itemView) {
super(getActivity(), itemView);
}
@Override
public void onBindData(View convertView, WeiBoUser data, int position) {
BitmapLoader.getInstance().display(AFriendshipFragment.this,
AisenUtils.getUserPhoto(data), imgPhoto, ImageConfigUtils.getLargePhotoConfig());
String name = data.getScreen_name();
if (!TextUtils.isEmpty(data.getRemark()))
name = String.format("%s(%s)", name, data.getRemark());
txtName.setText(name);
txtRemark.setVisibility(View.VISIBLE);
if (data.getStatus() != null)
txtRemark.setText(data.getStatus().getText());
else if (!TextUtils.isEmpty(data.getDescription()))
txtRemark.setText(data.getDescription());
else {
txtRemark.setVisibility(View.GONE);
txtRemark.setText("");
}
divider.setVisibility(itemPosition() == getSize() - 1 ? View.GONE : View.VISIBLE);
}
}
class FriendshipTask extends APagingTask<Void, Void, Friendship> {
public FriendshipTask(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 {
if (mode != RefreshMode.update)
nextPage = "0";
Token token = AppContext.getAccount().getAdvancedToken();
if (token == null) {
token = AppContext.getAccount().getAccessToken();
}
Friendship resut = getFriendship(this, mode, previousPage, nextPage, token, params);
if (resut.getNext_cursor() <= 0)
resut.setEndPaging(true);
return resut;
}
@Override
protected void onSuccess(Friendship result) {
super.onSuccess(result);
if (result == null || isDestory())
return;
if (AFriendshipFragment.this instanceof FollowersFragment &&
AppContext.getAccount().getUnreadCount() != null && AppContext.getAccount().getUnreadCount().getFollower() > 0) {
if (result.fromCache())
requestDataDelay(AppSettings.REQUEST_DATA_DELAY);
if (getActivity() != null)
BizFragment.createBizFragment(AFriendshipFragment.this).remindSetCount(BizFragment.RemindType.follower);
}
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
@Override
protected void onFinished() {
super.onFinished();
if (mode != RefreshMode.update)
getRefreshView().postDelayed(new Runnable() {
@Override
public void run() {
getRefreshView().setSelectionFromTop(0, 0);
}
}, 20);
}
}
WeiBoUser getUser() {
return mUser;
}
/**
* Pager页面,用来设置actionbar的subtitle的提示信息
*
* @return
*/
int getSize() {
return getAdapterItems().size();
}
@Override
public boolean onToolbarDoubleClick() {
if (AisenUtils.checkTabsFragmentCanRequestData(this)) {
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
getRefreshView().setSelectionFromTop(0, 0);
return true;
}
return false;
}
abstract Friendship getFriendship(@SuppressWarnings("rawtypes") WorkTask task, RefreshMode mode,
String previousPage, String nextPage,
Token extraToken, Void... params) throws TaskException;
abstract String acTitle();
}