package net.coding.program.maopao;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
import android.widget.ImageView;
import android.widget.TextView;
import com.bigkoo.convenientbanner.CBPageAdapter;
import com.bigkoo.convenientbanner.CBViewHolderCreator;
import com.bigkoo.convenientbanner.ConvenientBanner;
import com.melnykov.fab.FloatingActionButton;
import com.twotoasters.jazzylistview.effects.SlideInEffect;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ImageLoadTool;
import net.coding.program.common.RedPointTip;
import net.coding.program.common.guide.IndicatorView;
import net.coding.program.common.htmltext.URLSpanNoUnderline;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.BannerObject;
import net.coding.program.model.UserObject;
import net.coding.program.subject.SubjectWallActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Calendar;
@EFragment(R.layout.fragment_maopao_list)
@OptionsMenu(R.menu.menu_fragment_maopao)
public class MaopaoListFragment extends MaopaoListBaseFragment {
final String friendUrl = Global.HOST_API + "/activities/user_tweet?last_id=%s";
final String myUrl = Global.HOST_API + "/tweet/user_public?user_id=%s&last_id=%s";
@Override
protected String getMaopaoUrlFormat() {
return Global.HOST_API + "/tweet/public_tweets?last_id=%s&sort=%s";
}
final String TAG_BANNER = "TAG_BANNER";
@FragmentArg
Type mType;
@FragmentArg
int userId;
@ViewById
FloatingActionButton floatButton;
ConvenientBanner banner;
@Override
public void onResume() {
super.onResume();
getActivity().invalidateOptionsMenu();
if (banner != null) {
banner.startTurning(5000);
}
}
@OptionsItem
void action_search() {
SubjectWallActivity_.intent(this).start();
getActivity().overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
private IndicatorView bannerIndicator;
private TextView bannerName;
private TextView bannerTitle;
@AfterViews
protected void initMaopaoListFragment() {
initMaopaoListBaseFragmen();
}
@Override
protected void setActionTitle() {
if (userId != 0) {
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (userId == MyApp.sUserObject.id) {
actionBar.setTitle("我的冒泡");
} else {
actionBar.setTitle("TA的冒泡");
}
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(TAG_BANNER)) {
if (code == 0) {
ArrayList<BannerObject> banners = new ArrayList<>();
JSONArray jsonArray = respanse.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); ++i) {
banners.add(new BannerObject(jsonArray.getJSONObject(i)));
}
AccountInfo.saveMaopaoBanners(getActivity(), banners);
mBannerDatas.clear();
mBannerDatas.addAll(banners);
// initBannerData(mBannerDatas);
updateBannerData();
}
} else {
super.parseJson(code, respanse, tag, pos, data);
}
}
@Override
protected void initMaopaoType() {
listView.setTransitionEffect(new UpSlideInEffect());
if (mType == Type.friends) {
id = UPDATE_ALL_INT;
lastTime = 0;
}
if (mType == Type.hot) {
mNoMore = true;
}
if (mType != Type.user) {
floatButton.attachToListView(listView);
} else {
floatButton.hide(false);
}
if (mType == Type.time) {
mBannerDatas.addAll(AccountInfo.getMaopaoBanners(getActivity()));
initBannerData();
updateBannerData();
getNetwork(BannerObject.getHttpBanners(), TAG_BANNER);
}
addDoubleClickActionbar();
getNetwork(createUrl(), getMaopaoUrlFormat());
}
private void addDoubleClickActionbar() {
ActionBar actionBar = getActionBarActivity().getSupportActionBar();
View v = actionBar.getCustomView();
// 有些界面没有下拉刷新
if (v != null && v.getParent() != null) {
((View) v.getParent()).setOnClickListener(new View.OnClickListener() {
final long DOUBLE_CLICK_TIME = 300;
long mLastTime = 0;
@Override
public void onClick(View v) {
long lastTime = mLastTime;
long nowTime = Calendar.getInstance().getTimeInMillis();
mLastTime = nowTime;
if (nowTime - lastTime < DOUBLE_CLICK_TIME) {
if (!isRefreshing()) {
setRefreshing(true);
onRefresh();
}
}
}
});
}
}
@Override
public void onPause() {
if (banner != null) {
banner.stopTurning();
}
super.onPause();
}
protected void setRedPointStyle(int buttonId, RedPointTip.Type type) {
View item = getView().findViewById(buttonId);
View redPoint = item.findViewById(R.id.badge);
boolean show = RedPointTip.show(getActivity(), type);
redPoint.setVisibility(show ? View.VISIBLE : View.GONE);
}
private void updateBannerData() {
if (mBannerDatas.isEmpty()) {
mBannerDatas.add(new BannerObject());
}
banner.setPages(new CBViewHolderCreator() {
@Override
public Object createHolder() {
return new LocalImageHolder();
}
}, mBannerDatas);
int bannerStartPos = 0;
bannerIndicator.setCount(mBannerDatas.size(), bannerStartPos);
bannerName.setVisibility(View.VISIBLE);
if (mBannerDatas.size() > 0) {
bannerName.setText(mBannerDatas.get(bannerStartPos).getName());
bannerTitle.setText(mBannerDatas.get(bannerStartPos).getTitle());
}
}
private void initBannerData() {
View bannerLayout = mInflater.inflate(R.layout.maopao_banner_view_pager, null);
banner = (ConvenientBanner) bannerLayout.findViewById(R.id.bannerViewPager);
ViewGroup.LayoutParams layoutParams = banner.getLayoutParams();
layoutParams.height = (int) ((MyApp.sWidthPix - getResources().getDimensionPixelSize(R.dimen.padding_12) * 2) * 0.3);
banner.setLayoutParams(layoutParams);
bannerIndicator = (IndicatorView) bannerLayout.findViewById(R.id.indicatorView);
bannerName = (TextView) bannerLayout.findViewById(R.id.bannerName);
bannerTitle = (TextView) bannerLayout.findViewById(R.id.bannerTitle);
listView.addHeaderView(bannerLayout);
((ViewPager) banner.findViewById(R.id.cbLoopViewPager)).setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
BannerObject bannerData = mBannerDatas.get(position);
String name = bannerData.getName();
if (name.isEmpty()) {
bannerName.setVisibility(View.INVISIBLE);
} else {
bannerName.setVisibility(View.VISIBLE);
bannerName.setText(name);
}
bannerTitle.setText(bannerData.getTitle());
bannerIndicator.setSelect(position);
}
@Override
public void onPageScrollStateChanged(int state) {
enableSwipeRefresh(state == ViewPager.SCROLL_STATE_IDLE);
}
});
}
@Click
protected final void floatButton() {
Intent intent = new Intent(getActivity(), MaopaoAddActivity_.class);
startActivityForResult(intent, RESULT_EDIT_MAOPAO);
}
@Override
protected String createUrl() {
if (mType == Type.friends) {
return String.format(friendUrl, id);
} else if (mType == Type.my) {
UserObject my = AccountInfo.loadAccount(getActivity());
return String.format(myUrl, my.id, id);
} else if (mType == Type.user) {
return String.format(myUrl, userId, id);
} else {
String url = String.format(getMaopaoUrlFormat(), id, mType) + "&last_time=";
if (lastTime > 0) {
url += lastTime;
}
return url;
}
}
@Override
protected void initData() {
}
protected void hideSoftkeyboard() {
super.hideSoftkeyboard();
floatButton.setVisibility(View.VISIBLE);
}
@Override
protected void popComment(View v) {
super.popComment(v);
floatButton.hide(false);
floatButton.setVisibility(View.INVISIBLE);
}
// user 某个用户,friend 好友圈,time 冒泡广场
public enum Type {
user, friends, hot, my, time
}
public static class ClickImageParam {
public ArrayList<String> urls;
public int pos;
public boolean needEdit;
public ClickImageParam(ArrayList<String> urlsParam, int posParam, boolean needEditParam) {
urls = urlsParam;
pos = posParam;
needEdit = needEditParam;
}
public ClickImageParam(String url) {
urls = new ArrayList<>();
urls.add(url);
pos = 0;
needEdit = false;
}
}
ArrayList<BannerObject> mBannerDatas = new ArrayList<>();
// listview 向上滑才有动画
class UpSlideInEffect extends SlideInEffect {
@Override
public void initView(View item, int position, int scrollDirection) {
if (scrollDirection > 0) {
super.initView(item, position, scrollDirection);
}
}
@Override
public void setupAnimation(View item, int position, int scrollDirection, ViewPropertyAnimator animator) {
if (scrollDirection > 0) {
super.setupAnimation(item, position, scrollDirection, animator);
}
}
}
class LocalImageHolder implements CBPageAdapter.Holder<BannerObject> {
ImageView imageView;
@Override
public View createView(Context context) {
imageView = new ImageView(getActivity());
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.image);
BannerObject bannerObject = mBannerDatas.get(position);
URLSpanNoUnderline.openActivityByUri(getActivity(), bannerObject.getLink(), false, true, true);
}
});
return imageView;
}
@Override
public void UpdateUI(Context context, int position, BannerObject data) {
imageView.setTag(R.id.image, position);
getImageLoad().loadImage(imageView, mBannerDatas.get(position).getImage(), ImageLoadTool.bannerOptions);
}
}
}