pda/zhuike/.svn/pristine/38/383256d8e4c7603d4d74d0fee21...

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);
}
}