package com.novelbook.android.Fragments;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialog;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

/*import com.androidquery.callback.AQuery2;
import com.novelbook.android.AD.toutiao.TTAdManagerHolder;
import com.novelbook.android.BuildConfig;*/
import com.novelbook.android.Main2Activity;
import com.novelbook.android.R;
import com.novelbook.android.db.Chapter;
import com.novelbook.android.db.DownloadTask;
import com.novelbook.android.db.Novel;

import com.novelbook.android.db.SiteRule;
import com.novelbook.android.filechooser.FileChooserActivity;
import com.novelbook.android.netsubscribe.BookSubscribe;
import com.novelbook.android.netutils.HttpMethods;
import com.novelbook.android.netutils.NetUtil;
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
import com.novelbook.android.utils.CommonUtil;
import com.novelbook.android.utils.Config;
import com.novelbook.android.utils.Constants;
import com.novelbook.android.utils.FileUtils;
import com.novelbook.android.utils.Fileutil;
import com.novelbook.android.utils.GsonUtil;
import com.novelbook.android.utils.ImageUtil;
import com.novelbook.android.utils.MyImageLoader;
import com.novelbook.android.utils.OnItemClickListener;
import com.novelbook.android.adapter.BookListAdapter;
import com.umeng.analytics.MobclickAgent;

import org.json.JSONObject;
import org.litepal.LitePal;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;


public class Fragment_Shelf extends BasicFragment {
    public static final String TAG = Fragment_Shelf.class.getSimpleName();
    private boolean[] flag;//此处添加一个boolean类型的数组
    private boolean isSelectAll = true;
    private MyImageLoader loader = new MyImageLoader();
    @BindView(R.id.llShelfBottom)
    LinearLayout llShelfBottom;
    @BindView(R.id.id_recyclerview)
    RecyclerView mRecyclerView;
    // private List<Novel> mDatas;
    private BookListAdapter mAdapter;
    List<Novel> lstUpdate = new ArrayList<Novel>();
    private List<Novel> bookLists;
    // private ShelfAdapter adapter;
    private String noveIds;
    BottomSheetDialog bottomSheetDialog;

    @BindView(R.id.banner_container)
    FrameLayout mBannerContainer;

    private  Config config  ;
    public Fragment_Shelf() {
        // Required empty public constructor
    }


    public static Fragment_Shelf newInstance(String param1, String param2) {
        Fragment_Shelf fragment = new Fragment_Shelf();
        Bundle args = new Bundle();

        fragment.setArguments(args);
        return fragment;
    }

    private void loadNovelsOnShelf() {

        Log.d(TAG, String.format("db count info: chapters %s,novels %s,downtask  %s,siterule %s,maxsize %s",
                LitePal.count(Chapter.class),  LitePal.count(Novel.class),LitePal.count(DownloadTask.class),LitePal.count(SiteRule.class)
                ,Fileutil.formatFileSize( LitePal.getDatabase().getMaximumSize())
        ));

     /*   try{
            throw new Exception("show trace");
        }catch (Exception e){
            Log.e(TAG, "loadNovelsOnShelf: ",e);
        }*/

        bookLists = Novel.getNovelsOnShelf();
        noveIds = "";
        int i=0;
        for (Novel novel : bookLists) {
             if (novel.isFinished() || novel.isLocalBook() || novel.isUpdated()  && (new Date().getTime() - novel.getLastVisit() > 1*3600*1000 ) ) {
                //if(!novel.getName().equals("剑来"))
                continue;
            }
            if(i>Constants.MAX_SHELF_CNT){
                break;
            }
            noveIds += novel.getNovelId() + ",";
            i++;
        }
    }

    void test(int maxAge) {

        String url = "http://xiaoshuofenxiang.com/api/r/need-update";
        Request request = new Request.Builder().url(url)   // .header("User-Agent", "OkHttp Example")
                .removeHeader("Pragma")
                .header("Cache-Control", "public, max-age=" + maxAge)
                .build();

        if (maxAge == -1) {
            request = new Request.Builder().url(url).build();
        }


        HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ResponseBody body = response.body();
                Log.d(TAG, "onResponse:test " + body.string());
                handler.sendEmptyMessage(1);
            }
        });


    }

    @Override
    protected int getLayoutRes() {
        return R.layout.fragment_fragment__shelf;
    }

    /**
     * to get updated info from server,TODO: put it in service ,scheduled
     */
    private void getUpdatedData() {

        loadNovelsOnShelf();
        List<Integer> novelIds;
        OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() {
            @Override
            public void onSuccess(String result) {

                // mFirstPage= gson.fromJson(result, FirstPage.class);
                try {

                    lstUpdate = GsonUtil.parserJsonArray(result, Constants.BLOCK_TITLE_NOVELS);
                    if (lstUpdate.size() > 0) {
                        for (Novel novel2 : lstUpdate) {
                            novel2.checkAndUpdate();
                        }
                    }
                   loadNovelsOnShelf();

                   /* for(Novel nove : bookLists){

                        nove.testUpdate();
                    }*/

                } catch (Exception e) {
                    e.printStackTrace();
                }
                handler.sendEmptyMessage(1);

            }

            @Override
            public void onFault(String errorMsg) {
                //失败
                Log.d(TAG, "error on get novel update list: " + errorMsg);
                Toast.makeText(activity,"获取更新服务失败",Toast.LENGTH_SHORT).show();
                handler.sendEmptyMessage(1);
            }
        };


        if (TextUtils.isEmpty(noveIds)) {
            loadNovelsOnShelf();
        }
        if (!TextUtils.isEmpty(noveIds)) {
            BookSubscribe.getNovelsByIds(noveIds, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
        } else {
            handler.sendEmptyMessage(1);
        }

    }

    @Override
    public void initData() {


        // mDatas = initData(mDatas,'X');

        // bookLists = LitePal.where("isOnShelf=? or novelId=? ","1","").find(Novel.class);
        loadNovelsOnShelf();
        // getUpdatedData();
        flag = new boolean[bookLists.size()];

       /* if(bookLists.size()>0) { //TODO: to remove
            bookLists.get(0).setUpdated(true);
           // bookLists.get(bookLists.size()-1).setUpdated(true);
        }*/

        mAdapter = new BookListAdapter(activity, bookLists, R.layout.recycle_list_item, new OnItemClickListener() {
            private long lastTimeMillis;
            private static final long MIN_CLICK_INTERVAL = 1000;

            protected boolean isTimeEnabled() {
                long currentTimeMillis = System.currentTimeMillis();
                if ((currentTimeMillis - lastTimeMillis) > MIN_CLICK_INTERVAL) {
                    lastTimeMillis = currentTimeMillis;
                    return true;
                }
                return false;
            }

            @Override
            public void onItemClick(View view, int position) {
                if (isTimeEnabled()) {
                    Novel book = bookLists.get(position);
                    openBook(book, mAdapter);
                } else {
                    Log.d(TAG, "onclickInterval: bad click");
                }

            }

            @Override
            public void onItemLongClick(View view, int position) {
                initDialog(position);
                // mAdapter.removeData(position);
            }

            @Override
            public void onLinearOutClick(View view, int position, int llId) {

            }
        });

        mAdapter.setNorecord(R.string.noRecordInshelf);


        ((Main2Activity) activity).setShelfFragment(this);
    }

    @Override
    void initSwipeRefreshLayout() {
        super.initSwipeRefreshLayout();
        mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {

                // 开始刷新,设置当前为刷新状态
                //swipeRefreshLayout.setRefreshing(true);
                pageNo = 1;
                getUpdatedData();


            }
        });
    }

    @Override
    public void initViews() {

        initReceyleView();

    }

    protected void processArguments() {
        if (getArguments() != null) {
            Bundle bundle = getArguments();


        }
    }

    @Override
    protected void fillData() {
       /* for(Novel nv :bookLists){
            nv.testUpdate();
        }*/

        mAdapter.setData(bookLists);


    }

    public void initReceyleView() {
        // initData();
        //  mRecyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
        mRecyclerView.setLayoutManager(new GridLayoutManager(activity, 3));
        mRecyclerView.setAdapter(mAdapter);
        llShelfBottom.setVisibility(View.GONE);

    }

    public void showShelfMoreSheet() {
        BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this.activity);
        bottomSheetDialog.setContentView(R.layout.fragment_shelf_more_sheet);
//给布局设置透明背景色
        bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet)
                .setBackgroundColor(getResources().getColor(android.R.color.transparent));

        Button btnZhengli = bottomSheetDialog.findViewById(R.id.btnZhengli);
        btnZhengli.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bottomSheetDialog.dismiss();
                initZhengliDialog();
            }
        });
        Button btnImport = bottomSheetDialog.findViewById(R.id.btnImport);
        btnImport.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bottomSheetDialog.dismiss();
                Intent intent = new Intent(activity, FileChooserActivity.class);
                startActivityForResult(intent, Activity.RESULT_FIRST_USER);
                //  startActivity(intent);
            }
        });
        Button btnCancel = bottomSheetDialog.findViewById(R.id.btnCancel);
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                bottomSheetDialog.dismiss();
            }
        });

        if(config==null){
            config =Config.getInstance();
        }

        RadioGroup rgShelfOrder =  bottomSheetDialog.findViewById(R.id.rgShelfOrder);
        Constants.SHELF_ORDER = config.getShelfOrderOption();
        rgShelfOrder.clearCheck();
        ((RadioButton) rgShelfOrder.getChildAt(Constants.SHELF_ORDER-1)).setChecked(true);



        RadioButton radioButton1 =  bottomSheetDialog.findViewById(R.id.radioButton1);
        RadioButton radioButton2 =  bottomSheetDialog.findViewById(R.id.radioButton2);
        RadioButton radioButton3 =  bottomSheetDialog.findViewById(R.id.radioButton3);
        RadioButton radioButton4 =  bottomSheetDialog.findViewById(R.id.radioButton4);
        radioButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setShelfOrder(1);
            }
        });

        radioButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setShelfOrder(2);
            }
        });
        radioButton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setShelfOrder(3);
            }
        });

        radioButton4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setShelfOrder(4);
            }
        });


        bottomSheetDialog.show();





    }
    private void setShelfOrder(int option) {

        Log.d(TAG, "setShelfOrder: new sex option:" +option);
        if(option!= Constants.SHELF_ORDER) {
            Constants.SHELF_ORDER = option;
            config.setShelfOrderOption(option);
          //  getUpdatedData();
            loadLocalData();
        }
    }




    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        //  bookLists = LitePal.findAll(Novel.class);
        //   mAdapter.notifyDataSetChanged();
        initViews();
    }

    private void initDialog(int position) {

        Log.d(TAG, "initDialog: onlongclick " + bookLists.get(position).getName() );



        bottomSheetDialog = new BottomSheetDialog(this.activity);
        bottomSheetDialog.setContentView(R.layout.fragment_shelf_botoomsheetdialog);
//给布局设置透明背景色
        bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet)
                .setBackgroundColor(getResources().getColor(android.R.color.transparent));

        TextView tvTitle = (TextView) bottomSheetDialog.findViewById(R.id.bdTitle);
        TextView tvLatestChapt = (TextView) bottomSheetDialog.findViewById(R.id.txtLatestCate);
        TextView tvAuthor = (TextView) bottomSheetDialog.findViewById(R.id.tvAuthor);
        tvTitle.setText(bookLists.get(position).getName());
        ImageView imageView = (ImageView) bottomSheetDialog.findViewById(R.id.imageG1);
       // TextView tvImportTitle = (TextView) bottomSheetDialog.findViewById(R.id.tvImportTitle);
        if (!bookLists.get(position).isLocalBook()) {
            tvLatestChapt.setText(bookLists.get(position).getChapterName());
            tvAuthor.setText(bookLists.get(position).getAuthor());
            TextView tvLatest = (TextView) bottomSheetDialog.findViewById(R.id.txtLatestUpdate);
            tvLatest.setText(CommonUtil.getDateString(bookLists.get(position).getLastUpdateTime()));
            TextView tvLastDomain = (TextView) bottomSheetDialog.findViewById(R.id.txtLastDomain);
            tvLastDomain. setText( "[" +  bookLists.get(position).getDomainName()+"]") ;
            ImageUtil.loadImage(activity, bookLists.get(position).getCover(), imageView);
          //  tvImportTitle.setVisibility(View.GONE);
            imageView.setVisibility(View.VISIBLE);
        } else {
            tvLatestChapt.setText("本地导入");
            tvAuthor.setText("");
           // imageView.setImageResource(R.drawable.blankcover);
            imageView.setVisibility(View.GONE);
         //   tvImportTitle.setText(bookLists.get(position).getName());
        //    tvImportTitle.setVisibility(View.VISIBLE);
        }

        TextView tvLastVisit = (TextView) bottomSheetDialog.findViewById(R.id.txtLatestVisit);;
        tvLastVisit.setText( CommonUtil.getDateString( bookLists.get(position).getLastVisit()));
        TextView tvLastReadChpapt = (TextView) bottomSheetDialog.findViewById(R.id.txtLatestReadChapter);
        String lastReadChapt =  bookLists.get(position).getLastReadChaptName();
        lastReadChapt = TextUtils.isEmpty(lastReadChapt)? "":lastReadChapt;
        lastReadChapt =lastReadChapt.replace("null","").trim();
        tvLastReadChpapt.setText(   lastReadChapt) ;

        Log.d(TAG, "initDialog: " + lastReadChapt);



        LinearLayout lldetail = (LinearLayout) bottomSheetDialog.findViewById(R.id.llBookdetail);
        if (!bookLists.get(position).isLocalBook())
            lldetail.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showBookDetail(bookLists.get(position));
                }
            });
        TextView tvCache = (TextView) bottomSheetDialog.findViewById(R.id.tvCache);

        tvCache.setText(FileUtils.getCacheSizeK(bookLists.get(position).getId()));

        if (!bookLists.get(position).isLocalBook()) {
            LinearLayout llClearCache = (LinearLayout) bottomSheetDialog.findViewById(R.id.llClearCache);

            llClearCache.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    FileUtils.clearChapterCache(bookLists.get(position).getId());
                    long size = FileUtils.getCacheSize(bookLists.get(position).getId());
                    size = size / 1024;
                    tvCache.setText(String.format("%sK", size));
                    Toast.makeText(activity, "缓存清除成功", Toast.LENGTH_SHORT);

                }
            });
        } else {
            TextView tvClearCache = (TextView) bottomSheetDialog.findViewById(R.id.tvClearCache);
            tvClearCache.setText("导入文本");
        }

        LinearLayout lltop = (LinearLayout) bottomSheetDialog.findViewById(R.id.llTop);
        TextView tvTop = (TextView) bottomSheetDialog.findViewById(R.id.tvTop);
        ImageView imgTop = (ImageView) bottomSheetDialog.findViewById(R.id.imageTop);
        if (bookLists.get(position).isTop()) {

            tvTop.setText("取消置顶");
            imgTop.setImageResource(R.mipmap.star_inactive);

        } else {
            tvTop.setText("置顶显示");
            imgTop.setImageResource(R.mipmap.star_active);
        }

        lltop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (bookLists.get(position).isTop()) {
                    bookLists.get(position).setToDefault("isTop");
                    tvTop.setText("置顶显示");
                    imgTop.setImageResource(R.mipmap.star_active);

                } else {
                    bookLists.get(position).setTop(true);
                    tvTop.setText("取消置顶");
                    imgTop.setImageResource(R.mipmap.star_inactive);
                }

                bookLists.get(position).update(bookLists.get(position).getId());

                loadNovelsOnShelf();
                mAdapter.setData(bookLists);

                //Toast.makeText(activity,"缓存清除成功",Toast.LENGTH_SHORT);
            }
        });


        bottomSheetDialog.show();
    }

    @BindView(R.id.btnDelete)
    Button btnDelete;
    @BindView(R.id.btnSelect)
    Button btnSelectAll;

    @OnClick({R.id.btnSelect, R.id.btnDelete})
    void shelfZhengliSubmit(View view) {

        if (view.getId() == R.id.btnSelect) {

            if (isSelectAll) {
                btnSelectAll.setText("全不选");

            } else {
                btnSelectAll.setText("全选");
            }
            for (int i = 0; i < flag.length; i++) {
                flag[i] = isSelectAll;
            }
            isSelectAll = !isSelectAll;
            mChkAdapter.notifyDataSetChanged();
        } else if (view.getId() == R.id.btnDelete) {

            boolean isChecked = false;
            for(boolean b :flag){
                if(b) {
                    isChecked = true;
                    break;
                }
            }
            if(!isChecked){
                new AlertDialog.Builder(activity)
                        .setTitle(this.getString(R.string.app_name))
                        .setMessage( "您还没有选择要移除的书籍")
                        .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                return;


                            }
                        })

                        .setCancelable(false).show();
                return;
            }
            new AlertDialog.Builder(activity)
                    .setTitle(this.getString(R.string.app_name))
                    .setMessage( "您将从书架移除选中的书籍,是否继续?")
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            return;


                        }
                    })
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            for (int i = 0; i < bookLists.size(); i++) {
                                if (flag[i]) {
                                    Novel nv = bookLists.get(i);
                                    if (nv.isLocalBook()) {

                                        nv.delete();
                                        LitePal.deleteAllAsync(Chapter.class, "novelId=?", nv.getId() + "");
                                        //TODO: remove cache on a new thread
                                        FileUtils.clearChapterCache(nv.getId());
                                    } else {
                                        Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName());
                                        nv.setToDefault("isOnShelf");
                                        nv.setToDefault("isTop");
                                        //nv.setOnShelf(false);
                                        nv.update(nv.getId());
                                        // nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding  column won't be updated.
                                    }

                                    // flag = new boolean[bookLists.size()];
                                    // bookLists.remove(i);
                                }
                            }
                            btnSelectAll.setText("全选");
                            bookLists = Novel.getNovelsOnShelf();
                            flag = new boolean[bookLists.size()];
                            zhengliShelf();
                            initData();
                        }
                    })
                    .setCancelable(false).show();



         //   List<Integer> toRemove = new ArrayList<Integer>();


            /*for (int i = 0; i < bookLists.size(); i++) {
                if (flag[i]) {
                    bookLists.remove(i);
                    flag[i] =false;
                }
            }
            */

            // mChkAdapter.notifyDataSetChanged();
        }

    }


    private void initZhengliDialog() {
        if( flag==null || flag.length ==0 ){
            flag=  new boolean[bookLists.size()];
        }
        if( flag==null || flag.length ==0 ){
            new AlertDialog.Builder(activity)
                    .setTitle(this.getString(R.string.app_name))
                    .setMessage( "您书架上还没有书籍可以整理")
                    .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            return;


                        }
                    })

                    .setCancelable(false).show();
            return;

        }

        zhengliShelf();
        llShelfBottom.setVisibility(View.VISIBLE);
        Main2Activity main2Activity = (Main2Activity) activity;
        main2Activity.switchShelfZhengli(false);

    }


    CheckAdapter mChkAdapter;

    void zhengliShelf() {
        mChkAdapter = new CheckAdapter(activity, bookLists, R.layout.recycle_list_item, new OnItemClickListener() {

            @Override
            public void onItemClick(View view, int position) {

            }

            @Override
            public void onItemLongClick(View view, int position) {

            }

            @Override
            public void onLinearOutClick(View view, int position, int llId) {

            }
        });
        mRecyclerView.setLayoutManager(new GridLayoutManager(activity, 3));
        mRecyclerView.setAdapter(mChkAdapter);

    }


    //--------------------整理 adapter---------------

    class CheckAdapter extends RecyclerView.Adapter<CheckAdapter.MyViewHolder> {
        private final int EMPTY_VIEW = 1;
        private final int PROGRESS_VIEW = 2;
        private final int IMAGE_VIEW = 3;

        private Context context;
        private List<Novel> mDatas = new ArrayList<Novel>();
        private OnItemClickListener mOnItemClickListener;
        private int listItemID;

        public CheckAdapter(Context context, List<Novel> mDatas, int listItemID, OnItemClickListener clickLitener) {
            this.context = context;
            this.mDatas = mDatas;
            this.mOnItemClickListener = clickLitener;
            this.listItemID = listItemID;
        }

        public CheckAdapter(Context context, OnItemClickListener clickLitener) {
            this.context = context;
            this.mOnItemClickListener = clickLitener;

        }

        @Override
        public int getItemViewType(int position) {
            if (mDatas.size() == 0) {
                return EMPTY_VIEW;
            } else if (mDatas.get(position) == null) {
                return PROGRESS_VIEW;
            } else {
                return super.getItemViewType(position);
            }
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    context).inflate(listItemID, parent,
                    false));
            return holder;
        }


        public void setParameters(List<Novel> mDatas, int listItemID) {
            this.mDatas = mDatas;
            this.listItemID = listItemID;
        }

        public void setOnItemClickLitener(OnItemClickListener mOnItemClickLitener) {
            this.mOnItemClickListener = mOnItemClickLitener;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {

            holder.tvTitle.setText(mDatas.get(position).getName());
            if (holder.tvAuthor != null) holder.tvAuthor.setText(mDatas.get(position).getAuthor());
            if (holder.tvCate != null) holder.tvCate.setText(mDatas.get(position).getNovelType());
            if (holder.tvDesc != null) holder.tvDesc.setText(mDatas.get(position).getDesc());
            if (holder.checkBox != null) holder.checkBox.setVisibility(View.VISIBLE);
            if (holder.imageView != null && !TextUtils.isEmpty(mDatas.get(position).getCover())) {
                loader.displayImage(context, NetUtil.getCoverUrl(mDatas.get(position).getCover()), holder.imageView);
            }
            if (mDatas.get(position).isTop()) {
                holder.imageTop.setVisibility(View.VISIBLE);
            } else {
                holder.imageTop.setVisibility(View.GONE);
            }
            // 如果设置了回调,则设置点击事件
            if (mOnItemClickListener != null) {
                holder.checkBox.setOnCheckedChangeListener(null);//先设置一次CheckBox的选中监听器,传入参数null
                holder.checkBox.setChecked(flag[position]);//用数组中的值设置CheckBox的选中状态

                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        holder.checkBox.setChecked(!holder.checkBox.isChecked());
                    }
                });

                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        return false;
                    }
                });


                //再设置一次CheckBox的选中监听器,当CheckBox的选中状态发生改变时,把改变后的状态储存在数组中
                holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                        flag[position] = b;
                    }
                });

            }
        }

        @Override
        public int getItemCount() {
            return mDatas.size();
        }

        public void addData(int position) {
            // mDatas.add(position, "Insert One");
            notifyItemInserted(position);
        }

        public void removeData(int position) {
            mDatas.remove(position);
            notifyItemRemoved(position);
        }

        class MyViewHolder extends RecyclerView.ViewHolder {
            @BindView(R.id.id_check_box)
            CheckBox checkBox;
            @BindView(R.id.imageView)
            ImageView imageView;
            @BindView(R.id.imageTop)
            ImageView imageTop;

            @BindView(R.id.title)
            TextView tvTitle;
            @Nullable
            @BindView(R.id.author)
            TextView tvAuthor;
            @Nullable
            @BindView(R.id.category)
            TextView tvCate;
            @Nullable
            @BindView(R.id.desc)
            TextView tvDesc;

            public MyViewHolder(View view) {
                super(view);
                ButterKnife.bind(this, view);
                //tvTitle = (TextView) view.findViewById(R.id.title);
                // tvAuthor = (TextView) view.findViewById(R.id.author);

            }
        }
    }

    @Override
    public void onResume() {

        super.onResume();

        loadLocalData();
        getUpdatedData();

        if (bottomSheetDialog != null) {
            bottomSheetDialog.hide();
        }
        MobclickAgent.onPageStart(TAG);
    }

    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPageEnd(TAG);
    }

    void loadLocalData(){
        loadNovelsOnShelf();
        fillData();
    }

    //----------toutiao ad





}