351 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			351 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | package com.novelbook.android.Fragments; | ||
|  | 
 | ||
|  | import android.app.ProgressDialog; | ||
|  | import android.os.Bundle; | ||
|  | import android.os.Handler; | ||
|  | import android.os.Message; | ||
|  | import android.support.v4.widget.SwipeRefreshLayout; | ||
|  | import android.support.v7.widget.LinearLayoutManager; | ||
|  | import android.text.TextUtils; | ||
|  | import android.util.Log; | ||
|  | import android.view.LayoutInflater; | ||
|  | import android.view.View; | ||
|  | import android.view.ViewGroup; | ||
|  | import android.widget.AdapterView; | ||
|  | import android.widget.Button; | ||
|  | import android.widget.ImageButton; | ||
|  | import android.widget.ListView; | ||
|  | import android.widget.TextView; | ||
|  | 
 | ||
|  | import com.novelbook.android.MarkActivity; | ||
|  | import com.novelbook.android.R; | ||
|  | import com.novelbook.android.ReadActivity; | ||
|  | import com.novelbook.android.adapter.CatalogueAdapter; | ||
|  | import com.novelbook.android.db.Chapter; | ||
|  | import com.novelbook.android.db.DownloadTask; | ||
|  | import com.novelbook.android.db.Novel; | ||
|  | import com.novelbook.android.netutils.NetUtil; | ||
|  | import com.novelbook.android.utils.Constants; | ||
|  | import com.novelbook.android.utils.PageFactory; | ||
|  | import com.umeng.analytics.MobclickAgent; | ||
|  | 
 | ||
|  | 
 | ||
|  | import org.litepal.LitePal; | ||
|  | 
 | ||
|  | import java.io.File; | ||
|  | import java.util.ArrayList; | ||
|  | 
 | ||
|  | import butterknife.BindView; | ||
|  | import butterknife.ButterKnife; | ||
|  | import butterknife.OnClick; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Created by Administrator on 2016/8/31 0031. | ||
|  |  */ | ||
|  | public class CatalogFragment extends BasicFragment implements MarkActivity.Sortcat { | ||
|  |     public static final String TAG=CatalogFragment.class.getSimpleName(); | ||
|  |     public static final String ARGUMENT = "argument"; | ||
|  | 
 | ||
|  |     private PageFactory pageFactory; | ||
|  |     ArrayList<Chapter> catalogueList = new ArrayList<>(); | ||
|  |     ArrayList<Integer> catalogCached = new ArrayList<>(); | ||
|  |     @BindView(R.id.lv_catalogue) | ||
|  |     ListView lv_catalogue; | ||
|  |     @BindView(R.id.btnRefresh) | ||
|  |     Button btnRefresh; | ||
|  | /*    @BindView(R.id.tvTitle) | ||
|  |     TextView tvTitle; | ||
|  |     @BindView(R.id.tvChapts) | ||
|  |     TextView tvChapters; | ||
|  |     @BindView(R.id.btnSort) | ||
|  |     ImageButton ibSort;*/ | ||
|  | 
 | ||
|  |     CatalogueAdapter catalogueAdapter; | ||
|  |     protected   void processArguments(){ | ||
|  |         if (getArguments() != null) { | ||
|  |             Bundle bundle = getArguments() ; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         } | ||
|  |     } | ||
|  |     boolean isAsc = true; | ||
|  |     boolean isFirstLoad = true; | ||
|  |     @Override | ||
|  |     protected  void fillData() { | ||
|  |         catalogueList.clear(); | ||
|  |         catalogueList.addAll(pageFactory.getChapters()); | ||
|  | 
 | ||
|  |        // int currentChp =pageFactory.getCurrentChapter()-1; | ||
|  |         int currentChp =pageFactory.getNovle().getLastReadChapt()-1; | ||
|  |         if(!isAsc){ | ||
|  |             catalogueList =revertArray(); | ||
|  |             currentChp = catalogueList.size() -currentChp-1; | ||
|  | 
 | ||
|  |         } | ||
|  |         catalogueAdapter.setData(catalogueList); | ||
|  |         catalogueAdapter.setCharter(currentChp+1); | ||
|  |         catalogueAdapter.setCahedChapters(catalogCached); | ||
|  |         catalogueAdapter.notifyDataSetChanged(); | ||
|  | 
 | ||
|  |        int count= lv_catalogue.getCount(); | ||
|  |        if(count >=pageFactory.getCurrentChapter()&& isFirstLoad){ | ||
|  |            lv_catalogue.setSelection(currentChp); | ||
|  |            isFirstLoad =false; | ||
|  |        } | ||
|  | 
 | ||
|  |       /* tvTitle.setText(pageFactory.getBookName()); | ||
|  |        tvChapters.setText(String.format("共%s章",catalogueList.size()));*/ | ||
|  | 
 | ||
|  |       if(catalogueList.size() ==0) { | ||
|  |           btnRefresh.setVisibility(View.VISIBLE); | ||
|  |       }else btnRefresh.setVisibility(View.GONE); | ||
|  | 
 | ||
|  | 
 | ||
|  |         | ||
|  |     } | ||
|  | 
 | ||
|  | @OnClick(R.id.btnRefresh) | ||
|  |     void refresh(View view) { | ||
|  |     pageFactory.refreshCate(); | ||
|  |     loadData(); | ||
|  |     btnRefresh.setVisibility(View.GONE); | ||
|  | } | ||
|  | 
 | ||
|  |     ArrayList<Chapter> revertArray(){ | ||
|  |         ArrayList<Chapter> tmp = new ArrayList<>(); | ||
|  | 
 | ||
|  |         for(int i = catalogueList.size()-1;i>=0;i--){ | ||
|  |             tmp.add(catalogueList.get(i)); | ||
|  | 
 | ||
|  |         } | ||
|  | 
 | ||
|  |         return tmp; | ||
|  |   | ||
|  |     } | ||
|  | 
 | ||
|  |    /* @OnClick(R.id.btnSort) | ||
|  |     void Onclick(View view){ | ||
|  |         if(view.getId() == R.id.btnSort){ | ||
|  |             Log.d(TAG, "Onclick: sorted"); | ||
|  |             catalogueList = getArray(); | ||
|  |             catalogueAdapter.notifyDataSetChanged(); | ||
|  |         } | ||
|  |          | ||
|  |     }*/ | ||
|  |     @Override | ||
|  |     protected int getLayoutRes() { | ||
|  |         return R.layout.fragment_catalog; | ||
|  |     } | ||
|  | 
 | ||
|  |     @Override | ||
|  |     protected void initData() { | ||
|  | 
 | ||
|  |         pageFactory = PageFactory.getInstance(activity.getApplicationContext()); | ||
|  |        loadData(); | ||
|  | 
 | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     public void loadData(){ | ||
|  |         showProgressDialog(false,"正在读取目录数据,请稍等"); | ||
|  | 
 | ||
|  |         catalogueList.clear(); | ||
|  |         catalogueAdapter = new CatalogueAdapter(getContext(), catalogueList); | ||
|  | 
 | ||
|  |         lv_catalogue.setAdapter(catalogueAdapter); | ||
|  |         Log.d(TAG, String .format("prepare book: start to open book cate of  %s" ,  pageFactory.getNovle().getName())); | ||
|  | 
 | ||
|  |         new Thread() { | ||
|  |             @Override | ||
|  |             public void run() { | ||
|  |              //   ArrayList<Chapter> list  =(ArrayList<Chapter>) LitePal.where("novelId=? and domain =? " ,pageFactory.getNovle().getId()+"",pageFactory.getSite().getDomain()).find(Chapter.class); | ||
|  | 
 | ||
|  |                 String domain =pageFactory.getNovle().getDomain(); | ||
|  |                 if(TextUtils.isEmpty(domain)){ | ||
|  |                   domain=""; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 ArrayList<Chapter> list  = new ArrayList<Chapter>(); | ||
|  |                 if(!TextUtils.isEmpty(domain)) { | ||
|  |                     list = (ArrayList<Chapter>) LitePal.where("novelId=? and domain =? ", pageFactory.getNovle().getId() + "", domain).find(Chapter.class); | ||
|  |                   } | ||
|  |                 File file; | ||
|  |                 for(Chapter cp : list){ | ||
|  |                     if(!TextUtils.isEmpty(cp.getChapterPath())) { | ||
|  |                         String filename =pageFactory.getChapterFileName(cp.getIndex()); | ||
|  |                         file = new File(filename); | ||
|  |                         if(file.exists()) { | ||
|  |                             Log.d(TAG, String .format("prepare book: load cats,chapter %s ,id %s,file %s is exist" ,cp.getChapterName(),cp.getIndex() , filename)); | ||
|  | 
 | ||
|  |                             catalogCached.add(cp.getIndex()); | ||
|  |                         } | ||
|  |                     } | ||
|  |                 } | ||
|  |                 Log.d(TAG, String .format("prepare book:  to open book cate to sleep  ,pageFactory.getChapters().size() %s " ,  pageFactory.getChapters().size())); | ||
|  |                 int maxSlept =NetUtil.isNetworkConnected()?250 :100; | ||
|  |                 int slepttime = 0; | ||
|  |                 while (  slepttime < maxSlept*50 && ( pageFactory.isReadingCatalogs()  || pageFactory.getChapters().size() == 0)) { | ||
|  |                     try { | ||
|  |                         Log.d(TAG, String .format("prepare book:  to open book cate to sleep   %s,pageFactory.getChapters().size() %s " , 50,pageFactory.getChapters().size())); | ||
|  |                         sleep(50); | ||
|  |                         slepttime+=50; | ||
|  |                     } catch (InterruptedException e) { | ||
|  | 
 | ||
|  |                         e.printStackTrace(); | ||
|  |                     } | ||
|  |                 } | ||
|  |                 Log.d(TAG, String .format("prepare book:to open book cate slept  %s" , slepttime)); | ||
|  |               /*  if ( !pageFactory.isReadingCatalogs() && pageFactory.getChapters().size() == 0) { | ||
|  | 
 | ||
|  |                     handler.sendEmptyMessage(2); | ||
|  |                 }else{ | ||
|  |                     handler.sendEmptyMessage(1); | ||
|  |                 }*/ | ||
|  |                handler.sendEmptyMessage(1); | ||
|  | 
 | ||
|  |             } | ||
|  |         }.start(); | ||
|  | 
 | ||
|  |     } | ||
|  |     Handler handler = new Handler() { | ||
|  |         @Override | ||
|  |         public void handleMessage(Message msg) { | ||
|  |             Log.d(TAG, "prepare book handleMessage: msg" + msg.what); | ||
|  | 
 | ||
|  |             hideProgressSelf(); | ||
|  |             if (msg.what == 1) { | ||
|  |                 try { | ||
|  |                     fillData(); | ||
|  |                 }catch (Exception e){ | ||
|  |                     Log.e(TAG, "handleMessage: filldata error ", e); | ||
|  |                 } | ||
|  | 
 | ||
|  |             } | ||
|  |         } | ||
|  |     }; | ||
|  |     @Override | ||
|  |     protected void initListener() { | ||
|  |         lv_catalogue.setOnItemClickListener(new AdapterView.OnItemClickListener() { | ||
|  |             @Override | ||
|  |             public void onItemClick(AdapterView<?> parent, View view, int position, long id) { | ||
|  |               //  showProgressDialog(true,"请稍等"); | ||
|  |                 Log.d(TAG, String .format("prepare book: getPageWidget is null? %s",pageFactory.getPageWidget()==null)); | ||
|  |              //   if(pageFactory.getPageWidget()==null){ | ||
|  | 
 | ||
|  |                   Novel novel = pageFactory.getNovle(); | ||
|  |                   Chapter cp = catalogueList.get(position); | ||
|  |                 Log.d(TAG, String .format("prepare book: catalog list postion %s, cp.index %s ,cp.name %s ",position,cp.getIndex(),cp.getChapterName())); | ||
|  |                   if(novel!=null){ | ||
|  | 
 | ||
|  |                       novel.setLastReadChapt(cp.getIndex()); | ||
|  |                       novel.setLastReadPos(1); | ||
|  |                       novel.setLastReadChaptName(cp.getChapterName()); | ||
|  |                       novel.update(novel.getId()); | ||
|  |                       ReadActivity.openBook(novel, getActivity()); | ||
|  | 
 | ||
|  |             } | ||
|  | 
 | ||
|  | 
 | ||
|  |                 getActivity().finish(); | ||
|  | 
 | ||
|  |             } | ||
|  |         }); | ||
|  |     } | ||
|  | 
 | ||
|  |     @Override | ||
|  |     protected void initViews() { | ||
|  |         lv_catalogue.setFastScrollEnabled(true); | ||
|  |         ((MarkActivity) getActivity()).setSortcat(this); | ||
|  | 
 | ||
|  |         //lv_catalogue.setFastScrollStyle(R.style.FastScrollTheme); //不起作用 | ||
|  |     } | ||
|  |     void initSwipeRefreshLayout(){ | ||
|  |         super.initSwipeRefreshLayout(); | ||
|  |         mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { | ||
|  |             @Override | ||
|  |             public void onRefresh() { | ||
|  | 
 | ||
|  |                 // 开始刷新,设置当前为刷新状态 | ||
|  |                 //swipeRefreshLayout.setRefreshing(true); | ||
|  |                // isAsc =true; | ||
|  |                 refresh(btnRefresh); | ||
|  | 
 | ||
|  |             } | ||
|  |         }); | ||
|  |     } | ||
|  |     @Override | ||
|  |     public void setFTag() { | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 用于从Activity传递数据到Fragment | ||
|  |      * @param bookpath | ||
|  |      * @return | ||
|  |      */ | ||
|  |     public static CatalogFragment newInstance(String bookpath) | ||
|  |     { | ||
|  |         Bundle bundle = new Bundle(); | ||
|  |         bundle.putString(ARGUMENT, bookpath); | ||
|  |         CatalogFragment catalogFragment = new CatalogFragment(); | ||
|  |         catalogFragment.setArguments(bundle); | ||
|  |         return catalogFragment; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     @Override | ||
|  |     public void sortList() { | ||
|  |         isAsc =!isAsc; | ||
|  | 
 | ||
|  |         fillData(); | ||
|  | 
 | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     @Override | ||
|  |     public void refresh() { | ||
|  |         refresh(null); | ||
|  |     } | ||
|  | 
 | ||
|  |     @Override | ||
|  |     public void onResume() { | ||
|  |         super.onResume(); | ||
|  |         MobclickAgent.onPageStart(TAG); | ||
|  |     } | ||
|  |     @Override | ||
|  |     public void onPause(){ | ||
|  |         super.onPause(); | ||
|  |         MobclickAgent.onPageEnd(TAG); | ||
|  |     } | ||
|  |     private ProgressDialog mProgressDialog2; | ||
|  |     public void showProgressDialog(boolean flag, String message) { | ||
|  |         if (mProgressDialog2 == null) { | ||
|  |             mProgressDialog2 = new ProgressDialog(getActivity()); | ||
|  |             mProgressDialog2.setProgressStyle(ProgressDialog.STYLE_SPINNER); | ||
|  |             mProgressDialog2.setCancelable(true); | ||
|  |             mProgressDialog2.setCanceledOnTouchOutside(false); | ||
|  |             mProgressDialog2.setMessage(message); | ||
|  |         } | ||
|  |         if(NetUtil.isNetworkConnected()) | ||
|  |             mProgressDialog2.show(); | ||
|  |         Log.d(TAG, "prepare book showProgressDialog2 called" ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public void hideProgressSelf() { | ||
|  |         Log.d(TAG, "prepare book hideProgress2 called" ); | ||
|  |         try{ | ||
|  |             throw new Exception("who dismissed"); | ||
|  |         }catch (Exception e){ | ||
|  |             Log.e(TAG, "prepare book hideProgress2: ", e); | ||
|  |         } | ||
|  |         if (mProgressDialog2 == null) | ||
|  |             return; | ||
|  | 
 | ||
|  |         if (mProgressDialog2.isShowing()) { | ||
|  |             mProgressDialog2.dismiss(); | ||
|  |         } | ||
|  |         mSwipeRefresh.setRefreshing(false); | ||
|  |     } | ||
|  | } |