package org.aisen.weibo.sina.ui.fragment.profile;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.network.http.Params;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.support.bean.TabItem;
import org.aisen.android.support.paging.IPaging;
import org.aisen.android.support.paging.PageIndexPaging;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.activity.container.FragmentArgs;
import org.aisen.android.ui.fragment.ABaseFragment;
import org.aisen.android.ui.fragment.ATabsFragment;
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.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.Favorities;
import org.aisen.weibo.sina.sinasdk.bean.Favority;
import org.aisen.weibo.sina.sinasdk.bean.StatusContent;
import org.aisen.weibo.sina.sinasdk.bean.StatusContents;
import org.aisen.weibo.sina.support.cache.FavoritesCacheUtility;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.ui.activity.base.SinaCommonActivity;
import org.aisen.weibo.sina.ui.fragment.timeline.ATimelineFragment;
import java.util.ArrayList;
/**
* 用户收藏微博
*
* @author Jeff.Wang
*
* @date 2014年9月18日
*/
public class TimelineFavoritesFragment extends ATimelineFragment
implements ATabsFragment.ITabInitData, ProfilePagerFragment.IUserProfileRefresh {
public static ABaseFragment newInstance() {
TimelineFavoritesFragment fragment = new TimelineFavoritesFragment();
TabItem bean = new TabItem();
bean.setTag("7");
bean.setTitle(GlobalContext.getInstance().getResources().getString(R.string.draw_fav_title));
bean.setType("7");
Bundle args = new Bundle();
args.putSerializable("bean", bean);
fragment.setArguments(args);
return fragment;
}
public static void launch(Activity from) {
TabItem bean = new TabItem();
bean.setTag("7");
bean.setTitle(GlobalContext.getInstance().getResources().getString(R.string.draw_fav_title));
bean.setType("7");
FragmentArgs args = new FragmentArgs();
args.add("bean", bean);
args.add("launch", true);
SinaCommonActivity.launch(from, TimelineFavoritesFragment.class, args);
}
private boolean launch = false;
@Override
public void onCreate(Bundle savedInstanceSate) {
super.onCreate(savedInstanceSate);
launch = savedInstanceSate == null ? getArguments().getBoolean("launch", false)
: savedInstanceSate.getBoolean("launch");
}
@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(R.string.myfav_title);
}
setViewVisiable(getLoadingLayout(), View.VISIBLE);
setViewVisiable(getEmptyLayout(), View.GONE);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("launch", launch);
}
@Override
public void onTabRequestData() {
// 如果还没有加载过数据,就开始加载
if (getTaskCount(PAGING_TASK_ID) == 0) {
requestData(RefreshMode.reset);
}
}
@Override
public void requestData(RefreshMode mode) {
boolean load = true;
// 如果还没有加载过数据,切且显示的是当前的页面
if (getTaskCount(PAGING_TASK_ID) == 0) {
load = AisenUtils.checkTabsFragmentCanRequestData(this);
}
if (load)
new FavoritesTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
@Override
protected IPaging<StatusContent, StatusContents> newPaging() {
return new PageIndexPaging<StatusContent, StatusContents>("total_number");
}
class FavoritesTask extends ATimelineTask {
FavoritesTask(RefreshMode mode) {
super(mode);
}
@Override
protected StatusContents workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... p) throws TaskException {
Favorities favorities = SinaSDK.getInstance(AppContext.getAccount().getAdvancedToken(), getTaskCacheMode(this)).favorites(nextPage, String.valueOf(AppSettings.getTimelineCount()));
StatusContents statusContents = new StatusContents(new ArrayList<StatusContent>());
for (Favority favority : favorities.getFavorites()) {
statusContents.getStatuses().add(favority.getStatus());
}
statusContents.setFromCache(favorities.isFromCache());
statusContents.setOutofdate(favorities.isOutofdate());
// 如果是重置数据,就判断新加载的数据是否是全部加载完了
int total = mode == RefreshMode.reset ? 0 : getAdapter().getDatas().size();
total += favorities.getFavorites().size();
if (total >= favorities.getTotal_number())
statusContents.setEndPaging(true);
return statusContents;
}
@Override
public StatusContents getStatusContents(Params params) throws TaskException {
return null;
}
}
@Override
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("org.aisen.weibo.sina.FAV_DESTORY");
getActivity().registerReceiver(receiver, filter);
}
@Override
public void onPause() {
super.onPause();
getActivity().unregisterReceiver(receiver);
}
// 接收来自BizFragment的删除(溢出菜单)
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && "org.aisen.weibo.sina.FAV_DESTORY".equalsIgnoreCase(intent.getAction())
&& intent.getExtras() != null) {
String statusId = intent.getExtras().getString("statusId");
destoryFav(statusId);
}
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 详情页面的取消收藏
if (resultCode == Activity.RESULT_OK && requestCode == 1000) {
String statusId = data.getStringExtra("statusId");
destoryFav(statusId);
}
}
private void destoryFav(String statusId) {
for (StatusContent status : getAdapterItems()) {
if (String.valueOf(status.getId()).equals(String.valueOf(statusId))) {
// 更新ListView
getAdapterItems().remove(status);
getAdapter().notifyDataSetChanged();
FavoritesCacheUtility.destory(statusId);
break;
}
}
}
@Override
public void refreshProfile() {
requestDataDelay(100);
}
@Override
public boolean onToolbarDoubleClick() {
if (AisenUtils.checkTabsFragmentCanRequestData(this)) {
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
getRefreshView().scrollToPosition(0);
return true;
}
return false;
}
}