package studio.uphie.one.ui.thing; import android.graphics.drawable.Animatable; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.controller.BaseControllerListener; import com.facebook.drawee.controller.ControllerListener; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.image.ImageInfo; import com.loopj.android.http.RequestParams; import io.paperdb.Paper; import studio.uphie.one.R; import studio.uphie.one.abs.AbsBaseFragment; import studio.uphie.one.common.Api; import studio.uphie.one.common.Constants; import studio.uphie.one.common.HttpData; import studio.uphie.one.common.HttpError; import studio.uphie.one.ui.article.Article; import studio.uphie.one.ui.article.ArticleFragment; import studio.uphie.one.ui.home.HomeFragment; import studio.uphie.one.utils.JsonUtil; import studio.uphie.one.utils.TextToast; import studio.uphie.one.utils.TimeUtil; import butterknife.Bind; import butterknife.ButterKnife; /** * Created by Uphie on 2015/9/6. * Email: uphie7@gmail.com */ public class ThingContentFragment extends AbsBaseFragment { @Bind(R.id.text_thing_date) TextView textThingDate; @Bind(R.id.dv_thing) SimpleDraweeView dvThing; @Bind(R.id.text_thing_name) TextView textThingName; @Bind(R.id.text_thing_intro) TextView textThingIntro; @Bind(R.id.thing_content) LinearLayout thingContent; /** * 当前的东西 */ private Thing curThing; @Override public int getLayoutId() { return R.layout.layout_thing; } @Override public void init() { Bundle bundle = getArguments(); String date = bundle.getString(Constants.KEY_DATE); index = bundle.getInt(Constants.KEY_INDEX); curDate = TimeUtil.getPreviousDate(date, index); RequestParams params = new RequestParams(); params.put("strDate", date); params.put("strRow", index); getHttpData(Api.URL_THING, params, new HttpData("rs", "entTg")); } @Override public void onDataOk(String url, String data) { switch (url) { case Api.URL_THING: Thing thing = JsonUtil.getEntity(data, Thing.class); refreshUI(thing); if (thing != null) { Paper.book().write(Constants.TAG_THING + curDate, thing); } ThingFragment.getInstance().pager.onRefreshComplete(); break; } } @Override public void onDataError(String url, HttpError error) { switch (url) { case Api.URL_THING: ThingFragment.getInstance().pager.onRefreshComplete(); //没有数据,删除并销毁自己 finish(); break; } } @Override public void onRestoreData(String url) { if (url.equals(Api.URL_THING)) { Thing thing = Paper.book().read(Constants.TAG_THING + curDate); refreshUI(thing); ThingFragment.getInstance().pager.onRefreshComplete(); } } public Thing getContentData() { return curThing; } @Override public void refreshUI(Object data) { Thing thing = (Thing) data; if (thing == null) { if (!isFirstPage()) { //如果不是第一个,销毁之 finish(); } return; } if (isExpired()) { finish(); } curThing = thing; thingContent.setVisibility(View.VISIBLE); //日期 textThingDate.setText(TimeUtil.getEngDate(thing.strTm)); //东西名称 textThingName.setText(thing.strTt); //东西简介 textThingIntro.setText(thing.strTc); //东西 ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() { @Override public void onFailure(String id, Throwable throwable) { super.onFailure(id, throwable); TextToast.shortShow("加载失败:" + throwable.toString()); } @Override public void onIntermediateImageSet(String id, ImageInfo imageInfo) { super.onIntermediateImageSet(id, imageInfo); } @Override public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) { super.onFinalImageSet(id, imageInfo, animatable); if (imageInfo == null) { return; } float rate = (float) imageInfo.getWidth() / (float) imageInfo.getHeight(); dvThing.setAspectRatio(rate); } }; DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(Uri.parse(thing.strBu)) .setControllerListener(controllerListener) .build(); dvThing.setController(controller); } @Override public void finish() { ThingFragment.adapter.removeFromAdapter(this); } public static ThingContentFragment newInstance(int index) { Bundle bundle = new Bundle(); bundle.putString(Constants.KEY_DATE, TimeUtil.getDate()); bundle.putInt(Constants.KEY_INDEX, index); ThingContentFragment fragment = new ThingContentFragment(); fragment.setArguments(bundle); return fragment; } }