package licola.demo.com.huabandemo.Module.User; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import java.util.List; import licola.demo.com.huabandemo.API.Dialog.OnEditDialogInteractionListener; import licola.demo.com.huabandemo.API.Fragment.OnBoardFragmentInteractionListener; import licola.demo.com.huabandemo.API.Fragment.OnRefreshFragmentInteractionListener; import licola.demo.com.huabandemo.API.HttpsAPI.OperateAPI; import licola.demo.com.huabandemo.API.HttpsAPI.UserAPI; import licola.demo.com.huabandemo.Adapter.RecyclerBoardUserAdapter; import licola.demo.com.huabandemo.Base.BaseRecyclerHeadFragment; import licola.demo.com.huabandemo.HttpUtils.RetrofitClient; import licola.demo.com.huabandemo.Util.Constant; import licola.demo.com.huabandemo.Util.DialogUtils; import licola.demo.com.huabandemo.Util.Logger; import licola.demo.com.huabandemo.Widget.MyDialog.BoardEditDialogFragment; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; import rx.functions.Action1; import rx.schedulers.Schedulers; /** * Created by LiCola on 2016/04/07 20:34 */ public class UserBoardFragment extends BaseRecyclerHeadFragment<RecyclerBoardUserAdapter, List<UserBoardItemBean>> implements OnEditDialogInteractionListener { private static final String TAG = "UserBoardFragment"; private int mMaxId; private boolean isMe; private OnBoardFragmentInteractionListener<UserBoardItemBean> mListener; private OnRefreshFragmentInteractionListener mRefreshListener; @Override protected String getTAG() { return this.toString(); } public static UserBoardFragment newInstance(String key) { UserBoardFragment fragment = new UserBoardFragment(); Bundle args = new Bundle(); args.putString(TYPE_KEY, key); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected Subscription getHttpFirst() { return RetrofitClient.createService(UserAPI.class) .httpsUserBoardRx(mAuthorization, mKey, mLimit) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(UserBoardListBean::getBoards) .filter(getFilterFunc1()) .subscribe(new Action1<List<UserBoardItemBean>>() { @Override public void call(List<UserBoardItemBean> userBoardItemBeen) { Logger.d(); mAdapter.setListNotify(userBoardItemBeen); mMaxId = getMax(userBoardItemBeen); } }, getErrorAction(), getCompleteAction()); } private int getMax(List<UserBoardItemBean> been) { return been.get(been.size() - 1).getBoard_id(); } private Action1<Throwable> getErrorAction() { return throwable -> { Logger.d(throwable.toString()); checkException(throwable); mRefreshListener.OnRefreshState(false); }; } private Action0 getCompleteAction() { return () -> { Logger.d(); mRefreshListener.OnRefreshState(false); }; } @Override protected Subscription getHttpScroll() { return RetrofitClient.createService(UserAPI.class) .httpsUserBoardMaxRx(mAuthorization, mKey, mMaxId, mLimit) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(UserBoardListBean::getBoards) .filter(getFilterFunc1()) .subscribe(new Subscriber<List<UserBoardItemBean>>() { @Override public void onCompleted() { Logger.d(); } @Override public void onError(Throwable e) { Logger.d(e.toString()); checkException(e); } @Override public void onNext(List<UserBoardItemBean> userBoardItemBeen) { Logger.d(); mAdapter.addListNotify(userBoardItemBeen); mMaxId = getMax(userBoardItemBeen); } }); } @Override protected View getHeadView() { return null; } @Override public void onAttach(Context context) { super.onAttach(context); if ((context instanceof OnBoardFragmentInteractionListener) && (context instanceof OnRefreshFragmentInteractionListener)) { mListener = (OnBoardFragmentInteractionListener<UserBoardItemBean>) context; mRefreshListener = (OnRefreshFragmentInteractionListener) context; } else { throwRuntimeException(context); } if (context instanceof UserActivity) { mAuthorization = ((UserActivity) context).mAuthorization; isMe = ((UserActivity) context).isMe; } } @Override protected void initListener() { super.initListener(); mAdapter.setOnClickItemListener(new RecyclerBoardUserAdapter.onAdapterListener() { @Override public void onClickImage(UserBoardItemBean bean, View view) { mListener.onClickBoardItemImage(bean, view); } @Override public void onClickOperate(UserBoardItemBean bean, View view) { // mListener.onClickBoardItemOperate(bean, view); //点击图片操作项 本地Fragment处理 不传递事件 handleOperate(bean, view); } }); } private void handleOperate(UserBoardItemBean bean, View view) { Logger.d(); if (isMe) { //如果是我的画板 弹出编辑对话框 BoardEditDialogFragment fragment = BoardEditDialogFragment.create(String.valueOf(bean.getBoard_id()), bean.getTitle(), bean.getDescription(), bean.getCategory_id()); fragment.setListener(this);//注入已经实现接口的 自己 fragment.show(getActivity().getSupportFragmentManager(), null); } else { //如果是其他用户的画板 直接操作 Logger.d(); } } @Override protected int getAdapterPosition() { return mAdapter.getAdapterPosition(); } @Override protected RecyclerBoardUserAdapter setAdapter() { return new RecyclerBoardUserAdapter(mRecyclerView, isMe); } @Override public void onDialogPositiveClick(String boardId, String name, String describe, String selectType) { Logger.d("name=" + name + " describe=" + describe + " selectPosition=" + selectType); RetrofitClient.createService(OperateAPI.class) .httpsEditBoard(mAuthorization, boardId, name, describe, selectType) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(new Action0() { @Override public void call() { mRefreshListener.OnRefreshState(true); } }) .subscribe(getNextAction(), getErrorAction()); } @NonNull private Action1<UserBoardSingleBean> getNextAction() { return new Action1<UserBoardSingleBean>() { @Override public void call(UserBoardSingleBean userBoardSingleBean) { getHttpFirst(); } }; } @Override public void onDialogNeutralClick(String boardId, String boardTitle) { Logger.d(); DialogUtils.showDeleteDialog(getContext(), boardTitle, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startDeleteBoard(boardId); } }); } private void startDeleteBoard(String boardId) { RetrofitClient.createService(OperateAPI.class) .httpsDeleteBoard(mAuthorization, boardId, Constant.OPERATEDELETEBOARD) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(new Action0() { @Override public void call() { mRefreshListener.OnRefreshState(true); } }) .subscribe(getNextAction(), getErrorAction()); } }