package org.aisen.weibo.sina.ui.fragment.profile;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.common.utils.SystemUtils;
import org.aisen.android.component.bitmaploader.BitmapLoader;
import org.aisen.android.network.http.Params;
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.fragment.AGridSwipyRefreshFragment;
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.SinaSDK;
import org.aisen.weibo.sina.sinasdk.bean.PicUrls;
import org.aisen.weibo.sina.sinasdk.bean.StatusContent;
import org.aisen.weibo.sina.sinasdk.bean.StatusContents;
import org.aisen.weibo.sina.sinasdk.bean.Token;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.support.bean.PhotoBean;
import org.aisen.weibo.sina.support.bean.PhotosBean;
import org.aisen.weibo.sina.support.compress.TimelineThumbBitmapCompress;
import org.aisen.weibo.sina.support.paging.PhotosPaging;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.ui.activity.picture.PhotosActivity;
import org.aisen.weibo.sina.ui.widget.GifHintImageView;
import org.aisen.weibo.sina.ui.widget.TimelinePicsView;
import java.util.ArrayList;
import java.util.List;
/**
* 用户相册
*
* Created by wangdan on 15/4/15.
*/
public class PhotosFragment extends AGridSwipyRefreshFragment<PhotoBean, PhotosBean>
implements ProfilePagerFragment.IUserProfileRefresh, ATabsFragment.ITabInitData {
public static PhotosFragment newInstance(WeiBoUser user) {
PhotosFragment fragment = new PhotosFragment();
Bundle args = new Bundle();
args.putSerializable("user", user);
fragment.setArguments(args);
return fragment;
}
public static PhotosBean photos;
private WeiBoUser mUser;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUser = savedInstanceState == null ? (WeiBoUser) getArguments().getSerializable("user")
: (WeiBoUser) savedInstanceState.getSerializable("user");
}
@Override
public int inflateContentView() {
return R.layout.ui_photos;
}
@Override
protected void setupRefreshConfig(RefreshConfig config) {
super.setupRefreshConfig(config);
config.emptyHint = getString(R.string.profile_photos_empty);
config.footerMoreEnable = false;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("user", mUser);
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
setViewVisiable(getLoadingLayout(), View.VISIBLE);
setViewVisiable(getEmptyLayout(), View.GONE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getRefreshView().setNestedScrollingEnabled(true);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
PhotosBean photos = new PhotosBean();
photos.setList(getAdapterItems());
PhotosFragment.photos = photos;
PhotosActivity.launch(this, position, 1000);
}
@Override
public void onResume() {
super.onResume();
photos = null;
}
@Override
public IItemViewCreator<PhotoBean> configItemViewCreator() {
return new IItemViewCreator<PhotoBean>() {
@Override
public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(R.layout.item_profile_photos, parent, false);
}
@Override
public IITemView<PhotoBean> newItemView(View convertView, int viewType) {
return new PhotoItemView(convertView);
}
};
}
@Override
protected IPaging<PhotoBean, PhotosBean> newPaging() {
return new PhotosPaging();
}
@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 PhotosTask(mode == RefreshMode.refresh ? RefreshMode.reset : mode).execute();
}
class PhotosTask extends APagingTask<Void, Void, PhotosBean> {
public PhotosTask(RefreshMode mode) {
super(mode);
}
@Override
protected PhotosBean workInBackground(RefreshMode mode, String previousPage, String nextPage,
Void... p) throws TaskException {
Params params = new Params();
if (mode == RefreshMode.refresh && !TextUtils.isEmpty(previousPage))
params.addParameter("since_id", previousPage);
if (mode == RefreshMode.update && !TextUtils.isEmpty(nextPage))
params.addParameter("max_id", nextPage);
if (AppContext.getAccount().getUser().getIdstr().equals(mUser.getIdstr())) {
params.addParameter("user_id", mUser.getIdstr());
}
else {
params.addParameter("screen_name", mUser.getScreen_name());
}
params.addParameter("count", "50");
// 相册
params.addParameter("feature", "2");
Token token = AppContext.getAccount().getAdvancedToken();
if (token == null)
token = AppContext.getAccount().getAccessToken();
StatusContents statuses = SinaSDK.getInstance(token, getTaskCacheMode(this)).statusesUserTimeLine(params);
// 过滤转发
List<StatusContent> statusList = new ArrayList<StatusContent>();
for (StatusContent status : statuses.getStatuses()) {
if (status.getRetweeted_status() == null)
statusList.add(status);
}
statuses.setStatuses(statusList);
PhotosBean photos = new PhotosBean();
photos.setFromCache(statuses.isFromCache());
photos.setOutofdate(statuses.isOutofdate());
photos.setEndPaging(statuses.getStatuses().size() == 3);
photos.setList(new ArrayList<PhotoBean>());
for (StatusContent status : statusList) {
PicUrls[] picUrlsArr = status.getPic_urls();
for (PicUrls picUrls : picUrlsArr) {
PhotoBean photo = new PhotoBean();
photo.setPhoto(picUrls);
photo.setStatus(status);
photos.getList().add(photo);
}
}
return photos;
}
@Override
protected List<PhotoBean> parseResult(PhotosBean result) {
return result.getList();
}
@Override
protected void onFailure(TaskException exception) {
super.onFailure(exception);
showMessage(exception.getMessage());
}
}
class PhotoItemView extends ARecycleViewItemView<PhotoBean> {
int size = 0;
TimelinePicsView.TimelineImageConfig config = new TimelinePicsView.TimelineImageConfig();
@ViewInject(id = R.id.imgPhoto)
GifHintImageView imgPhoto;
public PhotoItemView(View itemView) {
super(getActivity(), itemView);
int gap = getResources().getDimensionPixelSize(R.dimen.gap_photo);
size = (SystemUtils.getScreenWidth(getContext()) - gap * 4) / 3;
config.setLoadfaildRes(R.drawable.bg_timeline_loading);
config.setLoadingRes(R.drawable.bg_timeline_loading);
config.setMaxWidth(size);
config.setMaxHeight(size);
}
@Override
public void onBindData(View convertView, PhotoBean data, int position) {
convertView.setLayoutParams(new AbsListView.LayoutParams(size, size));
imgPhoto.setHint(data.getPhoto().getThumbnail_pic());
config.setShowWidth(size);
config.setShowHeight(size);
config.setSize(1);
String image = AisenUtils.getStatusMulImage(getContext(), data.getPhoto().getThumbnail_pic());
Logger.w(image);
boolean large = image.indexOf("bmiddle") != -1;
if (large) {
config.setId("status_large");
config.setMaxWidth(size);
} else {
config.setId("status_thumb");
}
config.setBitmapCompress(TimelineThumbBitmapCompress.class);
BitmapLoader.getInstance().display(PhotosFragment.this,
image,
imgPhoto,
config);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (Activity.RESULT_OK == resultCode && requestCode == 1000) {
int index = data.getIntExtra("index", 0);
getRefreshView().setSelection(index);
}
}
@Override
public void refreshProfile() {
requestDataDelay(100);
}
@Override
public boolean onToolbarDoubleClick() {
if (AisenUtils.checkTabsFragmentCanRequestData(this)) {
requestDataDelaySetRefreshing(AppSettings.REQUEST_DATA_DELAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getRefreshView().setSelectionFromTop(0, 0);
}
return true;
}
return false;
}
}