fix bugs
This commit is contained in:
		
							parent
							
								
									7e813c9c6c
								
							
						
					
					
						commit
						9f964f1e31
					
				| 
						 | 
					@ -83,5 +83,5 @@ dependencies {
 | 
				
			||||||
    // implementation 'com.ms-square:expandableTextView:0.1.4'
 | 
					    // implementation 'com.ms-square:expandableTextView:0.1.4'
 | 
				
			||||||
    //  implementation 'com.github.tangguna:SearchBox:1.0.1'
 | 
					    //  implementation 'com.github.tangguna:SearchBox:1.0.1'
 | 
				
			||||||
    implementation 'com.github.chengzipi:Searchbox:v1.0.0'
 | 
					    implementation 'com.github.chengzipi:Searchbox:v1.0.0'
 | 
				
			||||||
 | 
					    implementation 'com.github.ixiaow:multilayout:1.0.0'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
<litepal>
 | 
					<litepal>
 | 
				
			||||||
    <dbname value="book" ></dbname>
 | 
					    <dbname value="book" ></dbname>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <version value="2" ></version>
 | 
					    <version value="3" ></version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <list>
 | 
					    <list>
 | 
				
			||||||
        <mapping class="com.novelbook.android.db.Chapter"></mapping>
 | 
					        <mapping class="com.novelbook.android.db.Chapter"></mapping>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ import android.content.Context;
 | 
				
			||||||
import android.content.DialogInterface;
 | 
					import android.content.DialogInterface;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
import android.content.IntentFilter;
 | 
					import android.content.IntentFilter;
 | 
				
			||||||
 | 
					import android.graphics.pdf.PdfDocument;
 | 
				
			||||||
import android.net.Uri;
 | 
					import android.net.Uri;
 | 
				
			||||||
import android.os.Build;
 | 
					import android.os.Build;
 | 
				
			||||||
import android.os.Handler;
 | 
					import android.os.Handler;
 | 
				
			||||||
| 
						 | 
					@ -320,7 +321,7 @@ public class BookActivity extends   Activity_base {
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case R.id.llCate:
 | 
					            case R.id.llCate:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Log.d(TAG, String .format("prepareBook: current book %s, start to open book cate of  %s" , mNovel.getName() , pageFactory.getNovle().getName()));
 | 
					               // Log.d(TAG, String .format("prepareBook: current book %s, start to open book cate of  %s" , mNovel.getName() , pageFactory.getNovle().getName()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  intent = new Intent(BookActivity.this, MarkActivity.class);
 | 
					                  intent = new Intent(BookActivity.this, MarkActivity.class);
 | 
				
			||||||
                startActivity(intent);;
 | 
					                startActivity(intent);;
 | 
				
			||||||
| 
						 | 
					@ -684,7 +685,10 @@ void onResponseProcess( String content ,String url){
 | 
				
			||||||
        registerReceiver(receiver,filter);
 | 
					        registerReceiver(receiver,filter);
 | 
				
			||||||
        if(mNovel!=null && mNovel.getId()>0) {
 | 
					        if(mNovel!=null && mNovel.getId()>0) {
 | 
				
			||||||
            mNovel = LitePal.find(Novel.class, mNovel.getId()); //更新最新进度
 | 
					            mNovel = LitePal.find(Novel.class, mNovel.getId()); //更新最新进度
 | 
				
			||||||
            if((pageFactory.getNovle()==null || mNovel.getId() !=pageFactory.getNovle().getId())){
 | 
					            if(pageFactory==null){
 | 
				
			||||||
 | 
					                pageFactory = PageFactory.getInstance();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if(( pageFactory.getNovle()==null || mNovel.getId() !=pageFactory.getNovle().getId())){
 | 
				
			||||||
                pageFactory.prepareBook(mNovel);
 | 
					                pageFactory.prepareBook(mNovel);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ import android.view.View;
 | 
				
			||||||
import android.widget.AdapterView;
 | 
					import android.widget.AdapterView;
 | 
				
			||||||
import android.widget.ListView;
 | 
					import android.widget.ListView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.novelbook.android.MarkActivity;
 | 
				
			||||||
import com.novelbook.android.R;
 | 
					import com.novelbook.android.R;
 | 
				
			||||||
import com.novelbook.android.adapter.MarkAdapter;
 | 
					import com.novelbook.android.adapter.MarkAdapter;
 | 
				
			||||||
import com.novelbook.android.db.BookMarks;
 | 
					import com.novelbook.android.db.BookMarks;
 | 
				
			||||||
| 
						 | 
					@ -23,7 +24,7 @@ import butterknife.BindView;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Created by Administrator on 2016/8/31 0031.
 | 
					 * Created by Administrator on 2016/8/31 0031.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class BookMarkFragment extends BasicFragment {
 | 
					public class BookMarkFragment extends BasicFragment  implements MarkActivity.Sortmark{
 | 
				
			||||||
    public static final String ARGUMENT = "argument";
 | 
					    public static final String ARGUMENT = "argument";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @BindView(R.id.lv_bookmark)
 | 
					    @BindView(R.id.lv_bookmark)
 | 
				
			||||||
| 
						 | 
					@ -42,14 +43,17 @@ public class BookMarkFragment extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected void initData() {
 | 
					    protected void initData() {
 | 
				
			||||||
        pageFactory = PageFactory.getInstance();
 | 
					
 | 
				
			||||||
        Bundle bundle = getArguments();
 | 
					        Bundle bundle = getArguments();
 | 
				
			||||||
        if (bundle != null) {
 | 
					        if (bundle != null) {
 | 
				
			||||||
            novelId = bundle.getInt(ARGUMENT);
 | 
					            novelId = bundle.getInt(ARGUMENT);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        bookMarksList = new ArrayList<>();
 | 
					        bookMarksList = new ArrayList<>();
 | 
				
			||||||
        bookMarksList = LitePal.where("novelId = ?", novelId+"").find(BookMarks.class);
 | 
					        bookMarksList = LitePal.where("novelId = ?", novelId+"").order(String.format("id %s",isAsc ?"asc" :"desc")). find(BookMarks.class);
 | 
				
			||||||
        Log.d(TAG, "initData: bookmark size " +bookMarksList.size());
 | 
					        Log.d(TAG, "initData: bookmark size " +bookMarksList.size());
 | 
				
			||||||
 | 
					        markAdapter = new MarkAdapter(getActivity(), bookMarksList);
 | 
				
			||||||
 | 
					        lv_bookmark.setAdapter(markAdapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected  void fillData() {
 | 
					    protected  void fillData() {
 | 
				
			||||||
| 
						 | 
					@ -66,6 +70,7 @@ public class BookMarkFragment extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected void initListener() {
 | 
					    protected void initListener() {
 | 
				
			||||||
 | 
					        pageFactory = PageFactory.getInstance();
 | 
				
			||||||
        lv_bookmark.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 | 
					        lv_bookmark.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 | 
					            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 | 
				
			||||||
| 
						 | 
					@ -101,8 +106,8 @@ public class BookMarkFragment extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected void initViews() {
 | 
					    protected void initViews() {
 | 
				
			||||||
        markAdapter = new MarkAdapter(getActivity(), bookMarksList);
 | 
					
 | 
				
			||||||
        lv_bookmark.setAdapter(markAdapter);
 | 
					        ((MarkActivity) getActivity()).setSortmark(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					@ -124,4 +129,10 @@ public class BookMarkFragment extends BasicFragment {
 | 
				
			||||||
        return bookMarkFragment;
 | 
					        return bookMarkFragment;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    boolean isAsc = true;
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sortList() {
 | 
				
			||||||
 | 
					        isAsc =!isAsc;
 | 
				
			||||||
 | 
					        initData();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,13 +2,18 @@ package com.novelbook.android.Fragments;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.app.ProgressDialog;
 | 
					import android.app.ProgressDialog;
 | 
				
			||||||
import android.os.Bundle;
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.support.v7.widget.LinearLayoutManager;
 | 
				
			||||||
 | 
					import android.text.TextUtils;
 | 
				
			||||||
import android.util.Log;
 | 
					import android.util.Log;
 | 
				
			||||||
import android.view.LayoutInflater;
 | 
					import android.view.LayoutInflater;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
import android.view.ViewGroup;
 | 
					import android.view.ViewGroup;
 | 
				
			||||||
import android.widget.AdapterView;
 | 
					import android.widget.AdapterView;
 | 
				
			||||||
 | 
					import android.widget.ImageButton;
 | 
				
			||||||
import android.widget.ListView;
 | 
					import android.widget.ListView;
 | 
				
			||||||
 | 
					import android.widget.TextView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.novelbook.android.MarkActivity;
 | 
				
			||||||
import com.novelbook.android.R;
 | 
					import com.novelbook.android.R;
 | 
				
			||||||
import com.novelbook.android.ReadActivity;
 | 
					import com.novelbook.android.ReadActivity;
 | 
				
			||||||
import com.novelbook.android.adapter.CatalogueAdapter;
 | 
					import com.novelbook.android.adapter.CatalogueAdapter;
 | 
				
			||||||
| 
						 | 
					@ -19,25 +24,36 @@ import com.novelbook.android.netutils.NetUtil;
 | 
				
			||||||
import com.novelbook.android.utils.PageFactory;
 | 
					import com.novelbook.android.utils.PageFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.litepal.LitePal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import butterknife.BindView;
 | 
					import butterknife.BindView;
 | 
				
			||||||
import butterknife.ButterKnife;
 | 
					import butterknife.ButterKnife;
 | 
				
			||||||
 | 
					import butterknife.OnClick;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Created by Administrator on 2016/8/31 0031.
 | 
					 * Created by Administrator on 2016/8/31 0031.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class CatalogFragment extends BasicFragment {
 | 
					public class CatalogFragment extends BasicFragment implements MarkActivity.Sortcat {
 | 
				
			||||||
    public static final String TAG=CatalogFragment.class.getSimpleName();
 | 
					    public static final String TAG=CatalogFragment.class.getSimpleName();
 | 
				
			||||||
    public static final String ARGUMENT = "argument";
 | 
					    public static final String ARGUMENT = "argument";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private PageFactory pageFactory;
 | 
					    private PageFactory pageFactory;
 | 
				
			||||||
    ArrayList<Chapter> catalogueList = new ArrayList<>();
 | 
					    ArrayList<Chapter> catalogueList = new ArrayList<>();
 | 
				
			||||||
 | 
					    ArrayList<Integer> catalogCached = new ArrayList<>();
 | 
				
			||||||
    @BindView(R.id.lv_catalogue)
 | 
					    @BindView(R.id.lv_catalogue)
 | 
				
			||||||
    ListView lv_catalogue;
 | 
					    ListView lv_catalogue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*    @BindView(R.id.tvTitle)
 | 
				
			||||||
 | 
					    TextView tvTitle;
 | 
				
			||||||
 | 
					    @BindView(R.id.tvChapts)
 | 
				
			||||||
 | 
					    TextView tvChapters;
 | 
				
			||||||
 | 
					    @BindView(R.id.btnSort)
 | 
				
			||||||
 | 
					    ImageButton ibSort;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CatalogueAdapter catalogueAdapter;
 | 
				
			||||||
    protected   void processArguments(){
 | 
					    protected   void processArguments(){
 | 
				
			||||||
        if (getArguments() != null) {
 | 
					        if (getArguments() != null) {
 | 
				
			||||||
            Bundle bundle = getArguments() ;
 | 
					            Bundle bundle = getArguments() ;
 | 
				
			||||||
| 
						 | 
					@ -46,18 +62,60 @@ public class CatalogFragment extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    boolean isAsc = true;
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected  void fillData() {
 | 
					    protected  void fillData() {
 | 
				
			||||||
 | 
					        catalogueList.clear();
 | 
				
			||||||
        catalogueList.addAll(pageFactory.getChapters());
 | 
					        catalogueList.addAll(pageFactory.getChapters());
 | 
				
			||||||
        CatalogueAdapter catalogueAdapter = new CatalogueAdapter(getContext(), catalogueList);
 | 
					
 | 
				
			||||||
        catalogueAdapter.setCharter(pageFactory.getCurrentChapter());
 | 
					       // int currentChp =pageFactory.getCurrentChapter()-1;
 | 
				
			||||||
 | 
					        int currentChp =pageFactory.getNovle().getLastReadChapt()-1;
 | 
				
			||||||
 | 
					        if(!isAsc){
 | 
				
			||||||
 | 
					            catalogueList =revertArray();
 | 
				
			||||||
 | 
					            currentChp = catalogueList.size() -currentChp-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        catalogueAdapter = new CatalogueAdapter(getContext(), catalogueList);
 | 
				
			||||||
 | 
					        catalogueAdapter.setCharter(currentChp+1);
 | 
				
			||||||
        lv_catalogue.setAdapter(catalogueAdapter);
 | 
					        lv_catalogue.setAdapter(catalogueAdapter);
 | 
				
			||||||
 | 
					        catalogueAdapter.setCahedChapters(catalogCached);
 | 
				
			||||||
        catalogueAdapter.notifyDataSetChanged();
 | 
					        catalogueAdapter.notifyDataSetChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       int count= lv_catalogue.getCount();
 | 
				
			||||||
 | 
					       if(count >=pageFactory.getCurrentChapter() ){
 | 
				
			||||||
 | 
					           lv_catalogue.setSelection(currentChp);
 | 
				
			||||||
 | 
					       }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /* tvTitle.setText(pageFactory.getBookName());
 | 
				
			||||||
 | 
					       tvChapters.setText(String.format("共%s章",catalogueList.size()));*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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
 | 
					    @Override
 | 
				
			||||||
    protected int getLayoutRes() {
 | 
					    protected int getLayoutRes() {
 | 
				
			||||||
        return R.layout.fragment_catalog;
 | 
					        return R.layout.fragment_catalog;
 | 
				
			||||||
| 
						 | 
					@ -66,6 +124,8 @@ public class CatalogFragment extends BasicFragment {
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected void initData() {
 | 
					    protected void initData() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ((MarkActivity) getActivity()).setSortcat(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        showProgressDialog(false,"请稍等");
 | 
					        showProgressDialog(false,"请稍等");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pageFactory = PageFactory.getInstance();
 | 
					        pageFactory = PageFactory.getInstance();
 | 
				
			||||||
| 
						 | 
					@ -75,6 +135,20 @@ public class CatalogFragment extends BasicFragment {
 | 
				
			||||||
       new Thread() {
 | 
					       new Thread() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void run() {
 | 
					            public void run() {
 | 
				
			||||||
 | 
					                ArrayList<Chapter> list  =(ArrayList<Chapter>) LitePal.where("novelId=?" ,pageFactory.getNovle().getId()+"").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());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int slepttime = 0;
 | 
					                int slepttime = 0;
 | 
				
			||||||
                while (NetUtil.isNetworkConnected() &&( slepttime < 1000 && ( pageFactory.isReadingCatalogs()  || pageFactory.getChapters().size() == 0))) {
 | 
					                while (NetUtil.isNetworkConnected() &&( slepttime < 1000 && ( pageFactory.isReadingCatalogs()  || pageFactory.getChapters().size() == 0))) {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
| 
						 | 
					@ -113,61 +187,16 @@ public class CatalogFragment extends BasicFragment {
 | 
				
			||||||
             //   if(pageFactory.getPageWidget()==null){
 | 
					             //   if(pageFactory.getPageWidget()==null){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  Novel novel = pageFactory.getNovle();
 | 
					                  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){
 | 
					                  if(novel!=null){
 | 
				
			||||||
                      novel.setLastReadChapt(position+1);
 | 
					
 | 
				
			||||||
 | 
					                      novel.setLastReadChapt(cp.getIndex());
 | 
				
			||||||
                      novel.setLastReadPos(1);
 | 
					                      novel.setLastReadPos(1);
 | 
				
			||||||
                      ReadActivity.openBook(novel, getActivity());
 | 
					                      ReadActivity.openBook(novel, getActivity());
 | 
				
			||||||
                   /*  new Thread() {
 | 
					 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void run() {
 | 
					 | 
				
			||||||
                        try {
 | 
					 | 
				
			||||||
                            sleep(40);
 | 
					 | 
				
			||||||
                        } catch (InterruptedException e) {
 | 
					 | 
				
			||||||
                            e.printStackTrace();
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        ReadActivity.openBook(novel, getActivity());
 | 
					 | 
				
			||||||
                    }}.start();*/
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
             //   }else {
 | 
					 | 
				
			||||||
             //       pageFactory.changeChapter(position+1);
 | 
					 | 
				
			||||||
             //   }
 | 
					 | 
				
			||||||
                /*new Thread() {
 | 
					 | 
				
			||||||
                    @Override
 | 
					 | 
				
			||||||
                    public void run() {
 | 
					 | 
				
			||||||
                        super.run();
 | 
					 | 
				
			||||||
                        int slepttime =0;
 | 
					 | 
				
			||||||
                        int chapid = position+1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        File f = new File(pageFactory.getChapterFileName(chapid)) ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        while(  pageFactory.getChapters().size() ==0 || !f.exists()){
 | 
					 | 
				
			||||||
                            try {
 | 
					 | 
				
			||||||
                                sleep(50);
 | 
					 | 
				
			||||||
                                slepttime+=1;
 | 
					 | 
				
			||||||
                                if(pageFactory.getChapters().size()>0){
 | 
					 | 
				
			||||||
                                    //Log.d(TAG, String .format("prepare book: slept %s for loading chapter content %s,chapter.getid %s " , slepttime*50, chapid,pageFactory.getChapters().get(chapid-1).getId()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                }else{
 | 
					 | 
				
			||||||
                                  //  Log.d(TAG, String .format("prepare book: slept %s for loading  pageFactory.getChapters().size() %s " , slepttime*50, pageFactory.getChapters().size()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
                            } catch (InterruptedException e) {
 | 
					 | 
				
			||||||
                                e.printStackTrace();
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            if(slepttime>100)
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                break;
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        Log.d(TAG, String .format("prepare book: total slept %s for loading chapter content %s,chapter.getid %s " , slepttime*50, chapid,pageFactory.getChapters().get(chapid-1).getId()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        handler.sendEmptyMessage(2);
 | 
					 | 
				
			||||||
                       *//* if(getActivity()!=null) {
 | 
					 | 
				
			||||||
                            getActivity().finish();
 | 
					 | 
				
			||||||
                        }*//*
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }.start();*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                getActivity().finish();
 | 
					                getActivity().finish();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -200,4 +229,12 @@ public class CatalogFragment extends BasicFragment {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void sortList() {
 | 
				
			||||||
 | 
					        isAsc =!isAsc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fillData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -198,8 +198,15 @@ public class Fragment_Shelf extends BasicFragment {
 | 
				
			||||||
                .setBackgroundColor(getResources().getColor(android.R.color.transparent));
 | 
					                .setBackgroundColor(getResources().getColor(android.R.color.transparent));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TextView tv =(TextView) bottomSheetDialog.findViewById(R.id.bdTitle);
 | 
					        TextView tv =(TextView) bottomSheetDialog.findViewById(R.id.bdTitle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tv.setText(bookLists.get(position).getName());
 | 
					        tv.setText(bookLists.get(position).getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LinearLayout lldetail=(LinearLayout) bottomSheetDialog.findViewById(R.id.llBookdetail);
 | 
				
			||||||
 | 
					        lldetail.setOnClickListener(new View.OnClickListener() {
 | 
				
			||||||
 | 
					            public void onClick(View v) {
 | 
				
			||||||
 | 
					               showBookDetail(bookLists.get(position));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
        bottomSheetDialog.show();
 | 
					        bottomSheetDialog.show();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import android.support.v7.widget.RecyclerView;
 | 
				
			||||||
import android.util.Log;
 | 
					import android.util.Log;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ixiaow.multilayout.MultiLayout;
 | 
				
			||||||
import com.novelbook.android.R;
 | 
					import com.novelbook.android.R;
 | 
				
			||||||
import com.novelbook.android.adapter.BandanAdapterNew;
 | 
					import com.novelbook.android.adapter.BandanAdapterNew;
 | 
				
			||||||
import com.novelbook.android.adapter.BookListAdapter;
 | 
					import com.novelbook.android.adapter.BookListAdapter;
 | 
				
			||||||
| 
						 | 
					@ -20,6 +21,7 @@ import com.novelbook.android.utils.GsonUtil;
 | 
				
			||||||
import com.novelbook.android.utils.OnItemClickListener;
 | 
					import com.novelbook.android.utils.OnItemClickListener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import butterknife.BindView;
 | 
					import butterknife.BindView;
 | 
				
			||||||
| 
						 | 
					@ -36,7 +38,16 @@ public class Fragment_bangdan extends BasicFragment {
 | 
				
			||||||
   // private List<Novel> mData;
 | 
					   // private List<Novel> mData;
 | 
				
			||||||
    @BindView(R.id.rvBangdan)
 | 
					    @BindView(R.id.rvBangdan)
 | 
				
			||||||
    RecyclerView rvBandan;
 | 
					    RecyclerView rvBandan;
 | 
				
			||||||
 | 
					//    @BindView(R.id.topic_layout)
 | 
				
			||||||
 | 
					//    MultiLayout topic_layout;
 | 
				
			||||||
 | 
					    private static final String[] TAB_NAMES = {
 | 
				
			||||||
 | 
					            "全部", "赛事", "原创", "少年", "少女", "日漫",
 | 
				
			||||||
 | 
					            "杂志", "热血", "搞笑", "治愈", "惊秫", "古风",
 | 
				
			||||||
 | 
					            "全部全部", "赛事2", "原创1", "少年2", "少女1", "日漫2",
 | 
				
			||||||
 | 
					            "杂志eeee3", "热血2", "搞笑1", "治愈2", "惊秫2", "古风2",
 | 
				
			||||||
 | 
					            "全部1", "赛事1", "原创2", "少年1", "少女", "日漫2",
 | 
				
			||||||
 | 
					            "杂志1", "热血1", "搞笑2", "治愈1", "惊秫1", "古风1"
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    public static Fragment_bangdan newInstance(String param1, String param2) {
 | 
					    public static Fragment_bangdan newInstance(String param1, String param2) {
 | 
				
			||||||
        Fragment_bangdan fragment = new Fragment_bangdan();
 | 
					        Fragment_bangdan fragment = new Fragment_bangdan();
 | 
				
			||||||
        Bundle args = new Bundle();
 | 
					        Bundle args = new Bundle();
 | 
				
			||||||
| 
						 | 
					@ -139,7 +150,7 @@ public class Fragment_bangdan extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void initViews(){
 | 
					    public void initViews(){
 | 
				
			||||||
 | 
					        //topic_layout.initTabNames(Arrays.asList(TAB_NAMES));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void initialBookList() {
 | 
					    void initialBookList() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -284,7 +284,8 @@ public class Fragment_booklist extends BasicFragment {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 | 
					            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 | 
				
			||||||
                super.onScrollStateChanged(recyclerView, newState);
 | 
					                super.onScrollStateChanged(recyclerView, newState);
 | 
				
			||||||
 | 
					  Log.d(TAG, String.format("onScrollStateChanged , state %s ,lastVisibleitem %s ,getItemCount %s,pageno %s ,pageCount %s",
 | 
				
			||||||
 | 
					                        newState==RecyclerView.SCROLL_STATE_IDLE,lastVisibleItem,mAdapter.getItemCount(),pageNo,pageCount));
 | 
				
			||||||
                //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载
 | 
					                //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载
 | 
				
			||||||
                if(newState==RecyclerView.SCROLL_STATE_IDLE&&lastVisibleItem+1==mAdapter.getItemCount()){
 | 
					                if(newState==RecyclerView.SCROLL_STATE_IDLE&&lastVisibleItem+1==mAdapter.getItemCount()){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,29 +1,51 @@
 | 
				
			||||||
package com.novelbook.android.Fragments;
 | 
					package com.novelbook.android.Fragments;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.os.Bundle;
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.os.Handler;
 | 
				
			||||||
 | 
					import android.os.Message;
 | 
				
			||||||
import android.support.v4.widget.NestedScrollView;
 | 
					import android.support.v4.widget.NestedScrollView;
 | 
				
			||||||
import android.support.v7.widget.LinearLayoutManager;
 | 
					import android.support.v7.widget.LinearLayoutManager;
 | 
				
			||||||
import android.support.v7.widget.RecyclerView;
 | 
					import android.support.v7.widget.RecyclerView;
 | 
				
			||||||
 | 
					import android.util.Log;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
import android.widget.LinearLayout;
 | 
					import android.widget.LinearLayout;
 | 
				
			||||||
import android.widget.TextView;
 | 
					import android.widget.TextView;
 | 
				
			||||||
import android.widget.Toast;
 | 
					import android.widget.Toast;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.gson.Gson;
 | 
				
			||||||
 | 
					import com.ixiaow.multilayout.MultiLayout;
 | 
				
			||||||
import com.novelbook.android.R;
 | 
					import com.novelbook.android.R;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.novelbook.android.adapter.JudgeNestedScrollView;
 | 
				
			||||||
 | 
					import com.novelbook.android.bean.Progress;
 | 
				
			||||||
import com.novelbook.android.db.Novel;
 | 
					import com.novelbook.android.db.Novel;
 | 
				
			||||||
 | 
					import com.novelbook.android.netsubscribe.BookSubscribe;
 | 
				
			||||||
 | 
					import com.novelbook.android.netutils.NetUtil;
 | 
				
			||||||
 | 
					import com.novelbook.android.netutils.OnSuccessAndFaultListener;
 | 
				
			||||||
 | 
					import com.novelbook.android.netutils.OnSuccessAndFaultSub;
 | 
				
			||||||
 | 
					import com.novelbook.android.utils.Constants;
 | 
				
			||||||
 | 
					import com.novelbook.android.utils.GsonUtil;
 | 
				
			||||||
import com.novelbook.android.utils.OnItemClickListener;
 | 
					import com.novelbook.android.utils.OnItemClickListener;
 | 
				
			||||||
import com.novelbook.android.adapter.BookListAdapter;
 | 
					import com.novelbook.android.adapter.BookListAdapter;
 | 
				
			||||||
import com.flyco.tablayout.CommonTabLayout;
 | 
					import com.flyco.tablayout.CommonTabLayout;
 | 
				
			||||||
import com.flyco.tablayout.listener.CustomTabEntity;
 | 
					import com.flyco.tablayout.listener.CustomTabEntity;
 | 
				
			||||||
import com.flyco.tablayout.listener.OnTabSelectListener;
 | 
					import com.flyco.tablayout.listener.OnTabSelectListener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.json.JSONArray;
 | 
				
			||||||
 | 
					import org.json.JSONObject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import butterknife.BindView;
 | 
					import butterknife.BindView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Fragment_paihang extends BasicFragment {
 | 
					import static com.novelbook.android.utils.Constants.lstNt;
 | 
				
			||||||
 | 
					import static com.novelbook.android.utils.Constants.lstProgress;
 | 
				
			||||||
 | 
					import static com.novelbook.android.utils.Constants.lstSex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
 | 
					final String TAG = Fragment_paihang.class.getSimpleName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static String getFTag() {
 | 
					    public static String getFTag() {
 | 
				
			||||||
        return "com.novelbook.android.Fragments.Fragment_paihang";
 | 
					        return "com.novelbook.android.Fragments.Fragment_paihang";
 | 
				
			||||||
| 
						 | 
					@ -34,15 +56,26 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
    private BookListAdapter mAdapter;
 | 
					    private BookListAdapter mAdapter;
 | 
				
			||||||
    // private BookListAdapter mAdapter;
 | 
					    // private BookListAdapter mAdapter;
 | 
				
			||||||
    private List<Novel> mData;;
 | 
					    private List<Novel> mData;;
 | 
				
			||||||
 | 
					    private List<Novel> mMoreData;
 | 
				
			||||||
    @BindView(R.id.rvPaihang)
 | 
					    @BindView(R.id.rvPaihang)
 | 
				
			||||||
    RecyclerView rvPaihang;
 | 
					    RecyclerView rvPaihang;
 | 
				
			||||||
    @BindView(R.id.tab_layout1)
 | 
					  /*  @BindView(R.id.tab_layout1)
 | 
				
			||||||
    CommonTabLayout tabLayout1;
 | 
					    CommonTabLayout tabLayout1;
 | 
				
			||||||
    @BindView(R.id.tab_layout2)
 | 
					    @BindView(R.id.tab_layout2)
 | 
				
			||||||
    CommonTabLayout tabLayout2;
 | 
					    CommonTabLayout tabLayout2;
 | 
				
			||||||
    @BindView(R.id.tab_layout3)
 | 
					    @BindView(R.id.tab_layout3)*/
 | 
				
			||||||
    CommonTabLayout tabLayout3;
 | 
					    CommonTabLayout tabLayout3;
 | 
				
			||||||
 | 
					    @BindView(R.id.topic_layout)
 | 
				
			||||||
 | 
					    MultiLayout topic_layout;
 | 
				
			||||||
 | 
					    @BindView(R.id.topic_layout1)
 | 
				
			||||||
 | 
					    MultiLayout topic_layout1;
 | 
				
			||||||
 | 
					    @BindView(R.id.topic_layout2)
 | 
				
			||||||
 | 
					    MultiLayout topic_layout2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Fragment_paihang() {
 | 
					    public Fragment_paihang() {
 | 
				
			||||||
        // Required empty public constructor
 | 
					        // Required empty public constructor
 | 
				
			||||||
| 
						 | 
					@ -50,13 +83,28 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
    protected   void processArguments(){
 | 
					    protected   void processArguments(){
 | 
				
			||||||
        if (getArguments() != null) {
 | 
					        if (getArguments() != null) {
 | 
				
			||||||
            Bundle bundle = getArguments() ;
 | 
					            Bundle bundle = getArguments() ;
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected  void fillData() {
 | 
					    protected  void fillData() {
 | 
				
			||||||
 | 
					        if(rvPaihang.getAdapter()==null) {
 | 
				
			||||||
 | 
					            rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | 
				
			||||||
 | 
					            rvPaihang.setAdapter(mAdapter);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(mMoreData!=null) {
 | 
				
			||||||
 | 
					            if(mMoreData.size()>0) {
 | 
				
			||||||
 | 
					                pageNo++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            int status = pageCount >= pageNo ? BookListAdapter.LOADING_MORE : BookListAdapter.NO_LOAD_MORE;
 | 
				
			||||||
 | 
					            //  mAdapter.setPercent(pageNo/pageCount);
 | 
				
			||||||
 | 
					            mAdapter.AddFooterItem(mMoreData);
 | 
				
			||||||
 | 
					            mAdapter.changeMoreStatus(status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mAdapter.notifyDataSetChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static Fragment_paihang newInstance(String param1, String param2) {
 | 
					    public static Fragment_paihang newInstance(String param1, String param2) {
 | 
				
			||||||
| 
						 | 
					@ -73,9 +121,8 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
        if (getArguments() != null) {
 | 
					        if (getArguments() != null) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        initData();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected int getLayoutRes() {
 | 
					    protected int getLayoutRes() {
 | 
				
			||||||
| 
						 | 
					@ -84,25 +131,28 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void initData() {
 | 
					    public void initData() {
 | 
				
			||||||
 | 
					        tmp=0;
 | 
				
			||||||
        mData =initData(mData,'Z');
 | 
					        loadSearchData();
 | 
				
			||||||
        mData1= new ArrayList<>();
 | 
					 | 
				
			||||||
        mData2 = new ArrayList<>();
 | 
					 | 
				
			||||||
        mData3 = new ArrayList<>();
 | 
					 | 
				
			||||||
        mData1.add(new TabEntry("男A",0,0)  );
 | 
					 | 
				
			||||||
        mData1.add(new TabEntry("女A",0,0));
 | 
					 | 
				
			||||||
        for (int i = 'A'; i < 'F'; i++)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            mData2.add(new TabEntry("类" + (char) i,0,0) );
 | 
					 | 
				
			||||||
            if(i<'D')
 | 
					 | 
				
			||||||
                mData3.add(new TabEntry("榜" + (char) i,0,0)  );
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        mAdapter = new BookListAdapter(activity, mData, R.layout.recycle_list_item_shudan, new OnItemClickListener() {
 | 
					      private void loadSearchData(){
 | 
				
			||||||
 | 
					        int pn = pageNo;
 | 
				
			||||||
 | 
					        String sex = lstSex.get(tab1Pos);
 | 
				
			||||||
 | 
					        String cate = lstNt.get(tab2Pos);
 | 
				
			||||||
 | 
					        if(pageNo==1) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (mData != null) {  //下拉刷新
 | 
				
			||||||
 | 
					                mData = new ArrayList<Novel>();
 | 
				
			||||||
 | 
					                mAdapter.setData(mData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                mData = new ArrayList<Novel>();
 | 
				
			||||||
 | 
					                mAdapter = new BookListAdapter(activity, mData, R.layout.recycle_list_item_horizon, new OnItemClickListener() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
                    public void onItemClick(View view, int position) {
 | 
					                    public void onItemClick(View view, int position) {
 | 
				
			||||||
                showBookDetail(mData.get(position) );
 | 
					                        showBookDetail(mData.get(position));
 | 
				
			||||||
                //openBook(mData.get(position),mAdapter);
 | 
					                        //  openBook(mData.get(position),mAdapter);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
| 
						 | 
					@ -112,127 +162,231 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
            public void onLinearOutClick(View view,  int position ,int llId) {
 | 
					                    public void onLinearOutClick(View view, int position, int llId) {
 | 
				
			||||||
                        Toast.makeText(activity, "book " + position + " clicked",
 | 
					                        Toast.makeText(activity, "book " + position + " clicked",
 | 
				
			||||||
                                Toast.LENGTH_SHORT).show();
 | 
					                                Toast.LENGTH_SHORT).show();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					                mAdapter.setShowFootView(true);
 | 
				
			||||||
 | 
					                rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | 
				
			||||||
 | 
					                rvPaihang.setAdapter(mAdapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        mMoreData =null;
 | 
				
			||||||
 | 
					        OnSuccessAndFaultListener successAndFaultListener =   new OnSuccessAndFaultListener() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onSuccess(String result) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // mFirstPage= gson.fromJson(result, FirstPage.class);
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                    JSONObject jsonObject = new JSONObject(result);
 | 
				
			||||||
 | 
					                    pageCount = jsonObject.getInt("pageCount");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    mMoreData = GsonUtil. parserJsonArray(jsonObject,Constants.BLOCK_TITLE_NOVELS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                } catch (Exception e) {
 | 
				
			||||||
 | 
					                    e.printStackTrace();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                handler.sendEmptyMessage(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onFault(String errorMsg) {
 | 
				
			||||||
 | 
					                //失败
 | 
				
			||||||
 | 
					                Log.d(TAG, "error on get firstpage: " + errorMsg);
 | 
				
			||||||
 | 
					                handler.sendEmptyMessage(1);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void initViews(){
 | 
					    public void initViews(){
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					        showProgressDialog(false,"加载。。。。");
 | 
				
			||||||
 | 
					        new Thread(){
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void run() {
 | 
				
			||||||
 | 
					                Log.d(TAG, "changing Source: to get site rule"  );
 | 
				
			||||||
 | 
					                while(lstNt==null){
 | 
				
			||||||
 | 
					                    try {
 | 
				
			||||||
 | 
					                        Thread.sleep(10);
 | 
				
			||||||
 | 
					                    } catch (InterruptedException e) {
 | 
				
			||||||
 | 
					                        e.printStackTrace();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                handler.sendEmptyMessage(2);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }.start();*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //setScrollListner();
 | 
				
			||||||
 | 
					        initLoadMoreListener();
 | 
				
			||||||
        initTabs();
 | 
					        initTabs();
 | 
				
			||||||
        initialBookList();
 | 
					
 | 
				
			||||||
        setScrollListner();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class TabEntry implements CustomTabEntity{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public String title;
 | 
					 | 
				
			||||||
        public int selectedIcon;
 | 
					 | 
				
			||||||
        public int unSelectedIcon;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public TabEntry(String title, int selectedIcon, int unSelectedIcon) {
 | 
					 | 
				
			||||||
            this.title = title;
 | 
					 | 
				
			||||||
            this.selectedIcon = selectedIcon;
 | 
					 | 
				
			||||||
            this.unSelectedIcon = unSelectedIcon;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        public String getTabTitle() {
 | 
					 | 
				
			||||||
            return title;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        public int getTabSelectedIcon() {
 | 
					 | 
				
			||||||
            return selectedIcon;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        public int getTabUnselectedIcon() {
 | 
					 | 
				
			||||||
            return unSelectedIcon;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private void initTabs() {
 | 
					    private void initTabs() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tabLayout1.setTabData(mData1);
 | 
					     /*
 | 
				
			||||||
        tabLayout1.setOnTabSelectListener(new OnTabSelectListener() {
 | 
					        while(lstNt==null){
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                Thread.sleep(10);
 | 
				
			||||||
 | 
					            } catch (InterruptedException e) {
 | 
				
			||||||
 | 
					                e.printStackTrace();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         topic_layout.initTabNames(lstNt) ;
 | 
				
			||||||
 | 
					         topic_layout1.initTabNames( lstSex) ;
 | 
				
			||||||
 | 
					         topic_layout2.initTabNames(Arrays.asList(lstProgress)) ;
 | 
				
			||||||
 | 
					       // topic_layout.initTabNames(lstNt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        topic_layout.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onTabSelect(int position) {
 | 
					            public void select(TextView textView, int i, int i1) {
 | 
				
			||||||
                tab1Pos = position;
 | 
					                Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | 
				
			||||||
 | 
					                tab2Pos = i1;
 | 
				
			||||||
               tabChanged();
 | 
					               tabChanged();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        topic_layout1.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onTabReselect(int position) {
 | 
					            public void select(TextView textView, int i, int i1) {
 | 
				
			||||||
                //TODO 重选
 | 
					                Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | 
				
			||||||
 | 
					                tab1Pos = i1;
 | 
				
			||||||
 | 
					                tabChanged();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        topic_layout2.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void select(TextView textView, int i, int i1) {
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | 
				
			||||||
 | 
					                tab3Pos = i1;
 | 
				
			||||||
 | 
					                tabChanged();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tabLayout2.setTabData(mData2);
 | 
					     // tabChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        tabLayout2.setOnTabSelectListener(new OnTabSelectListener() {
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public void onTabSelect(int position) {
 | 
					 | 
				
			||||||
                tab2Pos = position;
 | 
					 | 
				
			||||||
                tabChanged();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    int tmp=0;
 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public void onTabReselect(int position) {
 | 
					 | 
				
			||||||
                //TODO 重选
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        tabLayout3.setTabData(mData3);
 | 
					 | 
				
			||||||
        tabLayout3.setOnTabSelectListener(new OnTabSelectListener() {
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public void onTabSelect(int position) {
 | 
					 | 
				
			||||||
                tab3Pos = position;
 | 
					 | 
				
			||||||
                tabChanged();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public void onTabReselect(int position) {
 | 
					 | 
				
			||||||
                //TODO 重选
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        tabChanged();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void tabChanged() {
 | 
					    void tabChanged() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Log.d(TAG, String.format("tabChanged: to load data tmp %s" , tmp ));
 | 
				
			||||||
 | 
					        tmp++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       /* Toast.makeText(activity,   String.format( "TAB1 :{0}, TAB2 :{1}, TAB3 :{3}",
 | 
					       /* Toast.makeText(activity,   String.format( "TAB1 :{0}, TAB2 :{1}, TAB3 :{3}",
 | 
				
			||||||
                mData1.get(tab1Pos).getTabTitle(),
 | 
					                mData1.get(tab1Pos).getTabTitle(),
 | 
				
			||||||
                mData2.get(tab2Pos).getTabTitle(),
 | 
					                mData2.get(tab2Pos).getTabTitle(),
 | 
				
			||||||
                mData3.get(tab3Pos).getTabTitle()),
 | 
					                mData3.get(tab3Pos).getTabTitle()),
 | 
				
			||||||
                Toast.LENGTH_SHORT).show();
 | 
					                Toast.LENGTH_SHORT).show();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        */
 | 
					 | 
				
			||||||
 String selectedKey = mData1.get(tab1Pos).getTabTitle() +" " +
 | 
					 String selectedKey = mData1.get(tab1Pos).getTabTitle() +" " +
 | 
				
			||||||
               mData2.get(tab2Pos).getTabTitle() +" " +
 | 
					               mData2.get(tab2Pos).getTabTitle() +" " +
 | 
				
			||||||
               mData3.get(tab3Pos).getTabTitle() ;
 | 
					               mData3.get(tab3Pos).getTabTitle() ;
 | 
				
			||||||
       initialBookList();
 | 
					        */
 | 
				
			||||||
 | 
					       if(lstSex==null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       pageNo=1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String sex = lstSex.get(tab1Pos);
 | 
				
			||||||
 | 
					        String cate = lstNt.get(tab2Pos);
 | 
				
			||||||
 | 
					        String selectedKey = lstSex.get(tab1Pos) +" " +
 | 
				
			||||||
 | 
					                cate +" " +
 | 
				
			||||||
 | 
					                lstProgress[tab3Pos]  ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Toast.makeText(activity,  selectedKey,
 | 
					        Toast.makeText(activity,  selectedKey,
 | 
				
			||||||
                Toast.LENGTH_SHORT).show();
 | 
					                Toast.LENGTH_SHORT).show();
 | 
				
			||||||
        tvHint.setText(selectedKey);
 | 
					        tvHint.setText(selectedKey);
 | 
				
			||||||
 | 
					        Log.d(TAG, String.format("tabChanged: to load data %s,pageno %s" , selectedKey,pageNo ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if( tmp<4) return;
 | 
				
			||||||
 | 
					        loadSearchData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    private void initLoadMoreListener() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rvPaihang.addOnScrollListener(new RecyclerView.OnScrollListener() {
 | 
				
			||||||
 | 
					            int lastVisibleItem ,visibleItemCount,totalItemCount,pastVisiblesItems;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 | 
				
			||||||
 | 
					                super.onScrollStateChanged(recyclerView, newState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("onScrollStateChanged , state %s ,lastVisibleitem %s ,getItemCount %s,pageno %s ,pageCount %s",
 | 
				
			||||||
 | 
					                        newState==RecyclerView.SCROLL_STATE_IDLE,lastVisibleItem,mAdapter.getItemCount(),pageNo,pageCount));
 | 
				
			||||||
 | 
					                if(newState==RecyclerView.SCROLL_STATE_IDLE&&lastVisibleItem+1==mAdapter.getItemCount()){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if(pageNo <= pageCount) {
 | 
				
			||||||
 | 
					                        //设置正在加载更多
 | 
				
			||||||
 | 
					                        mAdapter.changeMoreStatus(mAdapter.LOADING_MORE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        //改为网络请求
 | 
				
			||||||
 | 
					                      loadSearchData();
 | 
				
			||||||
 | 
					                    }else{
 | 
				
			||||||
 | 
					                        mAdapter.changeMoreStatus(mAdapter.NO_LOAD_MORE);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
 | 
				
			||||||
 | 
					                super.onScrolled(recyclerView, dx, dy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					               // if (dy > 0) {
 | 
				
			||||||
 | 
					                    visibleItemCount = layoutManager.getChildCount();
 | 
				
			||||||
 | 
					                    totalItemCount = layoutManager.getItemCount();
 | 
				
			||||||
 | 
					                    pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             //   }
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("onScrolled:dy %s,visibleItemCount %s,totalItemCount %s,pastVisiblesItems %s ",
 | 
				
			||||||
 | 
					                      dy,  visibleItemCount,totalItemCount,pastVisiblesItems));
 | 
				
			||||||
 | 
					                    //最后一个可见的ITEM
 | 
				
			||||||
 | 
					                lastVisibleItem=layoutManager.findLastVisibleItemPosition();
 | 
				
			||||||
 | 
					                lastVisibleItem=layoutManager.findLastCompletelyVisibleItemPosition();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//----------------绑定列表
 | 
					//----------------绑定列表
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void initialBookList() {
 | 
					    void initialBookList() {
 | 
				
			||||||
        rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | 
					     //   rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | 
				
			||||||
        rvPaihang.setAdapter(mAdapter);
 | 
					    //    rvPaihang.setAdapter(mAdapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @BindView(R.id.tvHint)
 | 
				
			||||||
 | 
					    TextView tvHint;
 | 
				
			||||||
    //------------滑动监听
 | 
					    //------------滑动监听
 | 
				
			||||||
    @BindView(R.id.n_scroll_view)
 | 
					   /* @BindView(R.id.n_scroll_view)
 | 
				
			||||||
    NestedScrollView mNestedScrollView;
 | 
					    JudgeNestedScrollView mNestedScrollView;
 | 
				
			||||||
    @BindView(R.id.llTabs)
 | 
					    @BindView(R.id.llTabs)
 | 
				
			||||||
    LinearLayout llTabs;
 | 
					    LinearLayout llTabs;
 | 
				
			||||||
    @BindView(R.id.tvHint)
 | 
					    @BindView(R.id.tvHint)
 | 
				
			||||||
| 
						 | 
					@ -259,6 +413,7 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
                    // 随着滑动距离改变透明度
 | 
					                    // 随着滑动距离改变透明度
 | 
				
			||||||
                    // Log.e("al=","="+alpha);
 | 
					                    // Log.e("al=","="+alpha);
 | 
				
			||||||
                   // re.setBackgroundColor(Color.argb(alpha, 255, 0, 0));
 | 
					                   // re.setBackgroundColor(Color.argb(alpha, 255, 0, 0));
 | 
				
			||||||
 | 
					                    mNestedScrollView.setNeedScroll(true);
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    tvHint.setVisibility(View.VISIBLE);
 | 
					                    tvHint.setVisibility(View.VISIBLE);
 | 
				
			||||||
                   // if (alpha < 255) {
 | 
					                   // if (alpha < 255) {
 | 
				
			||||||
| 
						 | 
					@ -267,19 +422,54 @@ public class Fragment_paihang extends BasicFragment {
 | 
				
			||||||
                    //    alpha = 255;
 | 
					                    //    alpha = 255;
 | 
				
			||||||
                      //  re.setBackgroundColor(Color.argb(alpha, 255, 0, 0));
 | 
					                      //  re.setBackgroundColor(Color.argb(alpha, 255, 0, 0));
 | 
				
			||||||
                 //   }
 | 
					                 //   }
 | 
				
			||||||
 | 
					                    mNestedScrollView.setNeedScroll(false);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					              *//*  LinearLayoutManager layoutManager = (LinearLayoutManager) NestedScrollView.getLayoutManager();
 | 
				
			||||||
 | 
					                int lastVisibleItemPosition = 0;
 | 
				
			||||||
 | 
					                int totalItemCount = layoutManager.getItemCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if(v.getChildAt(v.getChildCount() - 1) != null) {
 | 
				
			||||||
 | 
					                    if (scrollY >= (v.getChildAt(v.getChildCount()-1).getMeasuredHeight() - v.getMeasuredHeight())
 | 
				
			||||||
 | 
					                            && scrollY > oldScrollY) {
 | 
				
			||||||
 | 
					                        if (layoutManager instanceof LinearLayoutManager) {
 | 
				
			||||||
 | 
					                            lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (totalItemCount < previousTotalItemCount) {
 | 
				
			||||||
 | 
					                            this.currentPage = this.startingPageIndex;
 | 
				
			||||||
 | 
					                            this.previousTotalItemCount = totalItemCount;
 | 
				
			||||||
 | 
					                            if (totalItemCount == 0) {
 | 
				
			||||||
 | 
					                                this.loading = true;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (loading && (totalItemCount > previousTotalItemCount)) {
 | 
				
			||||||
 | 
					                            loading = false;
 | 
				
			||||||
 | 
					                            previousTotalItemCount = totalItemCount;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (!loading && (lastVisibleItemPosition + visibleThreshold) > totalItemCount) {
 | 
				
			||||||
 | 
					                            currentPage++;
 | 
				
			||||||
 | 
					                            onLoadMore();
 | 
				
			||||||
 | 
					                            loading = true;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }*//*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onResume() {
 | 
					    public void onResume() {
 | 
				
			||||||
        super.onResume();
 | 
					        super.onResume();
 | 
				
			||||||
        //mNestedScrollView.smoothScrollBy(1,1);
 | 
					        //mNestedScrollView.smoothScrollBy(1,1);
 | 
				
			||||||
        tvHint.setVisibility(isShowHint? View.VISIBLE:View.GONE);
 | 
					      //  tvHint.setVisibility(isShowHint? View.VISIBLE:View.GONE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@ import com.novelbook.android.netutils.OnSuccessAndFaultListener;
 | 
				
			||||||
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
 | 
					import com.novelbook.android.netutils.OnSuccessAndFaultSub;
 | 
				
			||||||
import com.novelbook.android.utils.Config;
 | 
					import com.novelbook.android.utils.Config;
 | 
				
			||||||
import com.novelbook.android.utils.Constants;
 | 
					import com.novelbook.android.utils.Constants;
 | 
				
			||||||
 | 
					import com.novelbook.android.utils.GsonUtil;
 | 
				
			||||||
import com.novelbook.android.utils.PageFactory;
 | 
					import com.novelbook.android.utils.PageFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +75,7 @@ public class Main2Activity extends Activity_base
 | 
				
			||||||
       // ButterKnife.bind(this);
 | 
					       // ButterKnife.bind(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        initialSexOption();
 | 
					        initialSexOption();
 | 
				
			||||||
 | 
					        getSearchTabTtitle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -523,5 +524,33 @@ private  int bottomSelectedIndex;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }, this));
 | 
					        }, this));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    void getSearchTabTtitle(){
 | 
				
			||||||
 | 
					        BookSubscribe.getSearchTitles(new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onSuccess(String result) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // mFirstPage= gson.fromJson(result, FirstPage.class);
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Constants.lstSex = GsonUtil.parserStringBlocks(result,"sex");
 | 
				
			||||||
 | 
					                    Constants.lstNt =GsonUtil.parserStringBlocks(result,"nt");
 | 
				
			||||||
 | 
					                   // Constants.lstProgress =GsonUtil.parserProgressBlocks(result,"progress");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                } catch (Exception e) {
 | 
				
			||||||
 | 
					                    e.printStackTrace();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onFault(String errorMsg) {
 | 
				
			||||||
 | 
					                //失败
 | 
				
			||||||
 | 
					                Log.d(TAG, "error on get firstpage: " + errorMsg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },this));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ import android.support.v7.widget.Toolbar;
 | 
				
			||||||
import android.util.DisplayMetrics;
 | 
					import android.util.DisplayMetrics;
 | 
				
			||||||
import android.util.Log;
 | 
					import android.util.Log;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
 | 
					import android.widget.ImageButton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.flyco.tablayout.SlidingTabLayout;
 | 
					import com.flyco.tablayout.SlidingTabLayout;
 | 
				
			||||||
import com.novelbook.android.adapter.MyPagerAdapter;
 | 
					import com.novelbook.android.adapter.MyPagerAdapter;
 | 
				
			||||||
| 
						 | 
					@ -17,6 +18,7 @@ import com.novelbook.android.utils.PageFactory;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import butterknife.BindView;
 | 
					import butterknife.BindView;
 | 
				
			||||||
 | 
					import butterknife.OnClick;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MarkActivity extends Activity_base {
 | 
					public class MarkActivity extends Activity_base {
 | 
				
			||||||
| 
						 | 
					@ -34,11 +36,13 @@ public class MarkActivity extends Activity_base {
 | 
				
			||||||
    SlidingTabLayout tabLayout;
 | 
					    SlidingTabLayout tabLayout;
 | 
				
			||||||
//    @Bind(R.id.lv_catalogue)
 | 
					//    @Bind(R.id.lv_catalogue)
 | 
				
			||||||
//    ListView lv_catalogue;
 | 
					//    ListView lv_catalogue;
 | 
				
			||||||
 | 
					    @BindView(R.id.btnSort)
 | 
				
			||||||
 | 
					    ImageButton ibSort;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private PageFactory pageFactory;
 | 
					  private PageFactory pageFactory;
 | 
				
			||||||
    private Config config;
 | 
					   /*   private Config config;
 | 
				
			||||||
    private Typeface typeface;
 | 
					    private Typeface typeface;
 | 
				
			||||||
    private ArrayList<Chapter> catalogueList = new ArrayList<>();
 | 
					    private ArrayList<Chapter> catalogueList = new ArrayList<>();*/
 | 
				
			||||||
    private DisplayMetrics dm;
 | 
					    private DisplayMetrics dm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String EXTR_BOOK ="book";
 | 
					    private String EXTR_BOOK ="book";
 | 
				
			||||||
| 
						 | 
					@ -62,9 +66,9 @@ public class MarkActivity extends Activity_base {
 | 
				
			||||||
        pageFactory = PageFactory.getInstance();
 | 
					        pageFactory = PageFactory.getInstance();
 | 
				
			||||||
        Log.d(TAG, "prepareBook: pagefactory.mbook is ?" + (pageFactory.getNovle() .getName()) );
 | 
					        Log.d(TAG, "prepareBook: pagefactory.mbook is ?" + (pageFactory.getNovle() .getName()) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = Config.getInstance();
 | 
					        //config = Config.getInstance();
 | 
				
			||||||
        dm = getResources().getDisplayMetrics();
 | 
					       // dm = getResources().getDisplayMetrics();
 | 
				
			||||||
        typeface = config.getTypeface();
 | 
					       // typeface = config.getTypeface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        setSupportActionBar(toolbar);
 | 
					        setSupportActionBar(toolbar);
 | 
				
			||||||
        //设置导航图标
 | 
					        //设置导航图标
 | 
				
			||||||
| 
						 | 
					@ -93,5 +97,35 @@ public class MarkActivity extends Activity_base {
 | 
				
			||||||
    protected void initListener() {
 | 
					    protected void initListener() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    @OnClick(R.id.btnSort)
 | 
				
			||||||
 | 
					    void Onclick(View view){
 | 
				
			||||||
 | 
					        if(view.getId() == R.id.btnSort){
 | 
				
			||||||
 | 
					            Log.d(TAG, "Onclick: sorted");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(sortcat!=null){
 | 
				
			||||||
 | 
					                sortcat.sortList();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if(sortmark!=null){
 | 
				
			||||||
 | 
					                sortmark.sortList();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    private  Sortcat sortcat=null;
 | 
				
			||||||
 | 
					    private  Sortmark sortmark=null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSortcat(Sortcat sort) {
 | 
				
			||||||
 | 
					        this.sortcat = sort;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSortmark(Sortmark sort) {
 | 
				
			||||||
 | 
					        this.sortmark = sort;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public interface Sortmark {
 | 
				
			||||||
 | 
					        public void sortList();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public interface Sortcat {
 | 
				
			||||||
 | 
					        public void sortList();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -739,7 +739,7 @@ public class ReadActivity extends  Activity_base implements SpeechSynthesizerLis
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void showReadSetting(){
 | 
					    private void showReadSetting(){
 | 
				
			||||||
        isShow = true;
 | 
					        isShow = true;
 | 
				
			||||||
        rl_progress.setVisibility(View.GONE);
 | 
					       // rl_progress.setVisibility(View.GONE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (isSpeaking){
 | 
					        if (isSpeaking){
 | 
				
			||||||
            Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter);
 | 
					            Animation topAnim = AnimationUtils.loadAnimation(this, R.anim.dialog_top_enter);
 | 
				
			||||||
| 
						 | 
					@ -831,7 +831,7 @@ public class ReadActivity extends  Activity_base implements SpeechSynthesizerLis
 | 
				
			||||||
            R.id.tv_dayornight,R.id.tv_pagemode, R.id.tv_setting, R.id.bookpop_bottom, /*R.id.rl_bottom,*/R.id.tv_stop_read
 | 
					            R.id.tv_dayornight,R.id.tv_pagemode, R.id.tv_setting, R.id.bookpop_bottom, /*R.id.rl_bottom,*/R.id.tv_stop_read
 | 
				
			||||||
            ,R.id.llTopAd})
 | 
					            ,R.id.llTopAd})
 | 
				
			||||||
    public void onClick(View view) {
 | 
					    public void onClick(View view) {
 | 
				
			||||||
        if( pageFactory.isReady())
 | 
					      //  if( pageFactory.isReady())
 | 
				
			||||||
        switch (view.getId()) {
 | 
					        switch (view.getId()) {
 | 
				
			||||||
//            case R.id.btn_return:
 | 
					//            case R.id.btn_return:
 | 
				
			||||||
//                finish();
 | 
					//                finish();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,15 +19,17 @@ import java.util.List;
 | 
				
			||||||
public class CatalogueAdapter extends BaseAdapter {
 | 
					public class CatalogueAdapter extends BaseAdapter {
 | 
				
			||||||
    private Context mContext;
 | 
					    private Context mContext;
 | 
				
			||||||
    private List<Chapter> bookCatalogueList;
 | 
					    private List<Chapter> bookCatalogueList;
 | 
				
			||||||
 | 
					    private List<Integer> bookCatalogueListCached;
 | 
				
			||||||
    private Typeface typeface;
 | 
					    private Typeface typeface;
 | 
				
			||||||
    private Config config;
 | 
					    private Config config;
 | 
				
			||||||
    private int currentCharter = 0;
 | 
					    private int currentCharter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public CatalogueAdapter(Context context, List<Chapter> bookCatalogueList) {
 | 
					    public CatalogueAdapter(Context context, List<Chapter> bookCatalogueList ) {
 | 
				
			||||||
        mContext = context;
 | 
					        mContext = context;
 | 
				
			||||||
        this.bookCatalogueList = bookCatalogueList;
 | 
					        this.bookCatalogueList = bookCatalogueList;
 | 
				
			||||||
        config = config.getInstance();
 | 
					        config = config.getInstance();
 | 
				
			||||||
        typeface = config.getTypeface();
 | 
					        typeface = config.getTypeface();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					@ -49,6 +51,11 @@ public class CatalogueAdapter extends BaseAdapter {
 | 
				
			||||||
        currentCharter = charter;
 | 
					        currentCharter = charter;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCahedChapters(List<Integer> listCached ){
 | 
				
			||||||
 | 
					        bookCatalogueListCached =listCached;
 | 
				
			||||||
 | 
					        notifyDataSetChanged();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public View getView(int position, View convertView, ViewGroup parent) {
 | 
					    public View getView(int position, View convertView, ViewGroup parent) {
 | 
				
			||||||
        LayoutInflater inflater = LayoutInflater.from(mContext);
 | 
					        LayoutInflater inflater = LayoutInflater.from(mContext);
 | 
				
			||||||
| 
						 | 
					@ -58,6 +65,10 @@ public class CatalogueAdapter extends BaseAdapter {
 | 
				
			||||||
            convertView = inflater.inflate(R.layout.zcataloguelistview_item,null);
 | 
					            convertView = inflater.inflate(R.layout.zcataloguelistview_item,null);
 | 
				
			||||||
            viewHolder.catalogue_tv = (TextView)convertView.findViewById(R.id.catalogue_tv);
 | 
					            viewHolder.catalogue_tv = (TextView)convertView.findViewById(R.id.catalogue_tv);
 | 
				
			||||||
            viewHolder.catalogue_tv.setTypeface(typeface);
 | 
					            viewHolder.catalogue_tv.setTypeface(typeface);
 | 
				
			||||||
 | 
					            viewHolder.getCatalogue_cache =(TextView)convertView.findViewById(R.id.catalogue_cache);
 | 
				
			||||||
 | 
					            viewHolder.getCatalogue_cache.setTypeface(typeface);
 | 
				
			||||||
 | 
					          //  viewHolder.getCatalogue_cache.setTextSize( viewHolder.catalogue_tv.getTextSize()-2);
 | 
				
			||||||
 | 
					            viewHolder.getCatalogue_cache.setTextColor( mContext.getResources().getColor(R.color.light_gray));
 | 
				
			||||||
            convertView.setTag(viewHolder);
 | 
					            convertView.setTag(viewHolder);
 | 
				
			||||||
        }else {
 | 
					        }else {
 | 
				
			||||||
            viewHolder = (ViewHolder)convertView.getTag();
 | 
					            viewHolder = (ViewHolder)convertView.getTag();
 | 
				
			||||||
| 
						 | 
					@ -67,12 +78,20 @@ public class CatalogueAdapter extends BaseAdapter {
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
            viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.dark_gray));
 | 
					            viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.dark_gray));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        viewHolder.catalogue_tv.setText(bookCatalogueList.get(position).getChapterName());
 | 
					        Chapter chapter = bookCatalogueList.get(position);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        viewHolder.catalogue_tv.setText(chapter.getChapterName());
 | 
				
			||||||
 | 
					        viewHolder.getCatalogue_cache.setVisibility(View.GONE);
 | 
				
			||||||
 | 
					        if(bookCatalogueListCached.contains(chapter.getIndex())) {
 | 
				
			||||||
 | 
					            viewHolder.getCatalogue_cache.setVisibility(View.VISIBLE);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Log.d("catalogue",bookCatalogueList.get(position).getBookCatalogue());
 | 
					        //Log.d("catalogue",bookCatalogueList.get(position).getBookCatalogue());
 | 
				
			||||||
        return convertView;
 | 
					        return convertView;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class ViewHolder {
 | 
					    class ViewHolder {
 | 
				
			||||||
        TextView catalogue_tv;
 | 
					        TextView catalogue_tv;
 | 
				
			||||||
 | 
					        TextView getCatalogue_cache;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					package com.novelbook.android.adapter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					import android.support.annotation.NonNull;
 | 
				
			||||||
 | 
					import android.support.annotation.Nullable;
 | 
				
			||||||
 | 
					import android.support.v4.widget.NestedScrollView;
 | 
				
			||||||
 | 
					import android.util.AttributeSet;
 | 
				
			||||||
 | 
					import android.view.MotionEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class JudgeNestedScrollView extends NestedScrollView {
 | 
				
			||||||
 | 
					    private boolean isNeedScroll = true;
 | 
				
			||||||
 | 
					    public JudgeNestedScrollView(@NonNull Context context) {
 | 
				
			||||||
 | 
					        super(context);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public JudgeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs) {
 | 
				
			||||||
 | 
					        super(context, attrs);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public JudgeNestedScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
 | 
				
			||||||
 | 
					        super(context, attrs, defStyleAttr);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean onInterceptTouchEvent(MotionEvent ev) {
 | 
				
			||||||
 | 
					     /*   switch (ev.getAction()) {
 | 
				
			||||||
 | 
					            case MotionEvent.ACTION_MOVE:
 | 
				
			||||||
 | 
					                return isNeedScroll;
 | 
				
			||||||
 | 
					        }*/ //will cause tab no response
 | 
				
			||||||
 | 
					        return super.onInterceptTouchEvent(ev);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    改方法用来处理NestedScrollView是否拦截滑动事件
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void setNeedScroll(boolean isNeedScroll) {
 | 
				
			||||||
 | 
					        this.isNeedScroll = isNeedScroll;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					package com.novelbook.android.bean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Progress {
 | 
				
			||||||
 | 
					    private int id;
 | 
				
			||||||
 | 
					    private String name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setId(int id) {
 | 
				
			||||||
 | 
					        this.id = id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getName() {
 | 
				
			||||||
 | 
					        return name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ public class Novel extends LitePalSupport implements Serializable{
 | 
				
			||||||
    private String chapterName;
 | 
					    private String chapterName;
 | 
				
			||||||
    private String desc;
 | 
					    private String desc;
 | 
				
			||||||
    private String progress;
 | 
					    private String progress;
 | 
				
			||||||
    private long lastUpateTime;
 | 
					    private long lastUpdateTime;
 | 
				
			||||||
    private boolean isOnShelf;  //是否入书架
 | 
					    private boolean isOnShelf;  //是否入书架
 | 
				
			||||||
    private boolean isFinished; //是否完本
 | 
					    private boolean isFinished; //是否完本
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,11 +187,11 @@ public class Novel extends LitePalSupport implements Serializable{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public long getLastUpateTime() {
 | 
					    public long getLastUpateTime() {
 | 
				
			||||||
        return lastUpateTime;
 | 
					        return lastUpdateTime;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setLastUpateTime(long lastUpateTime) {
 | 
					    public void setLastUpateTime(long lastUpateTime) {
 | 
				
			||||||
        this.lastUpateTime = lastUpateTime;
 | 
					        this.lastUpdateTime = lastUpateTime;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isOnShelf() {
 | 
					    public boolean isOnShelf() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,7 +81,8 @@ public interface HttpApi {
 | 
				
			||||||
   Observable<ResponseBody> getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex);
 | 
					   Observable<ResponseBody> getSiteRankDetail(@Query("fn")String fn,@Query("pn")int pageNo,@Query("sex") int Sex);
 | 
				
			||||||
   @GET(  "search/{keyword}/{pageno}")
 | 
					   @GET(  "search/{keyword}/{pageno}")
 | 
				
			||||||
   Observable<ResponseBody> getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex);
 | 
					   Observable<ResponseBody> getSeachNolvelist(@Path("keyword")String keyWord,@Path("pageno")int pageNo,@Query("sex") int Sex);
 | 
				
			||||||
 | 
					    // 搜索分类 http://xiaoshuofenxiang.com/api/page/topdata
 | 
				
			||||||
 | 
					    @GET("page/topdata")
 | 
				
			||||||
 | 
					    Observable<ResponseBody> getSearchTitles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,5 +75,9 @@ public class BookSubscribe {
 | 
				
			||||||
        Observable<ResponseBody> observable =  HttpMethods.getInstance().getHttpApi().getSeachNolvelist(keyWord,pageNo,sex);
 | 
					        Observable<ResponseBody> observable =  HttpMethods.getInstance().getHttpApi().getSeachNolvelist(keyWord,pageNo,sex);
 | 
				
			||||||
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
 | 
					        HttpMethods.getInstance().toSubscribe(observable, subscriber);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    public static void getSearchTitles(DisposableObserver<ResponseBody> subscriber){
 | 
				
			||||||
 | 
					        Observable<ResponseBody> observable =  HttpMethods.getInstance().getHttpApi().getSearchTitles();
 | 
				
			||||||
 | 
					        HttpMethods.getInstance().toSubscribe(observable, subscriber);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -174,7 +174,7 @@ public class OnSuccessAndFaultSub extends DisposableObserver<ResponseBody>
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
         //   final String result = CompressUtils.decompress(body.byteStream());
 | 
					         //   final String result = CompressUtils.decompress(body.byteStream());
 | 
				
			||||||
            final String result =body.string();
 | 
					            final String result =body.string();
 | 
				
			||||||
            Log.e("body", result);
 | 
					           // Log.e("body", result);
 | 
				
			||||||
            JSONObject jsonObject = new JSONObject(result);
 | 
					            JSONObject jsonObject = new JSONObject(result);
 | 
				
			||||||
            int resultCode = jsonObject.getInt("code");
 | 
					            int resultCode = jsonObject.getInt("code");
 | 
				
			||||||
            if (resultCode == 0) {
 | 
					            if (resultCode == 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ public class BookUtil {
 | 
				
			||||||
        return mNovelSites;
 | 
					        return mNovelSites;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public synchronized void openBook(Novel novel) throws IOException, InterruptedException {
 | 
					    public synchronized void openBook(Novel novel, long chapter) throws IOException, InterruptedException {
 | 
				
			||||||
        this.mNovel = novel;
 | 
					        this.mNovel = novel;
 | 
				
			||||||
        //如果当前缓存不是要打开的书本就缓存书本同时删除缓存
 | 
					        //如果当前缓存不是要打开的书本就缓存书本同时删除缓存
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -150,6 +150,15 @@ public class BookUtil {
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }else{ //读取目录列表
 | 
					        }else{ //读取目录列表
 | 
				
			||||||
 | 
					            Log.d(TAG, String.format("prepare book %s open chapter %s  in background....  mMuluStatus %s,mSiteRule %s,thread %s",mNovel.getName(),chapter,mMuluStatus,mSiteRule,Thread.currentThread().getName()) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            File file =new File(fileChapterName((int)chapter));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if( file.exists()){
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("prepare book  open chapter file %s, exist,not waiting more...to open file...",fileChapterName((int)chapter)  ));
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            MuluStatus m = mMuluStatus;
 | 
					            MuluStatus m = mMuluStatus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //  Log.d(TAG,String.format("mulu on Site %s download status %s",mSite.getDomain(),mMuluStatus));
 | 
					            //  Log.d(TAG,String.format("mulu on Site %s download status %s",mSite.getDomain(),mMuluStatus));
 | 
				
			||||||
| 
						 | 
					@ -159,16 +168,17 @@ public class BookUtil {
 | 
				
			||||||
            while( mSiteRule ==null || mMuluStatus==null || mMuluStatus == MuluStatus.isDownloading){
 | 
					            while( mSiteRule ==null || mMuluStatus==null || mMuluStatus == MuluStatus.isDownloading){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                sleptTime++;
 | 
					                sleptTime++;
 | 
				
			||||||
                if(sleptTime >100 || !NetUtil.isNetworkConnected()){
 | 
					                if(sleptTime >400  || sleptTime >30  && !NetUtil.isNetworkConnected()){
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                Thread.sleep(50);
 | 
					 | 
				
			||||||
                Log.d(TAG,String.format("prepare book %s waiting for mulu downloading ,mMuluStatus %s,msiteRule %s" ,mNovel.getName(),mMuluStatus,mSiteRule));
 | 
					 | 
				
			||||||
                if(mMuluStatus == MuluStatus.failed){
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    throw new RuntimeException("读取资源失败,请检查网络");
 | 
					                Thread.sleep(50);
 | 
				
			||||||
 | 
					                if(mMuluStatus == MuluStatus.failed){
 | 
				
			||||||
 | 
					                    Log.d(TAG,String.format("prepare book %s failed ,mMuluStatus %s,msiteRule %s,slept %s" ,mNovel.getName(),mMuluStatus,mSiteRule,sleptTime*50));
 | 
				
			||||||
 | 
					                 //   throw new RuntimeException("读取资源失败,请检查网络");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            Log.d(TAG,String.format("prepare book %s waiting for mulu downloading ,mMuluStatus %s,msiteRule %s,slept %s" ,mNovel.getName(),mMuluStatus,mSiteRule,sleptTime*50));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //  dismissProgressDialog();
 | 
					        //  dismissProgressDialog();
 | 
				
			||||||
| 
						 | 
					@ -522,7 +532,7 @@ public class BookUtil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int muluRetryCount =0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void readChaptersAsync( ) {
 | 
					    void readChaptersAsync( ) {
 | 
				
			||||||
        String url = mSite.getMuluUrl();
 | 
					        String url = mSite.getMuluUrl();
 | 
				
			||||||
| 
						 | 
					@ -531,47 +541,84 @@ public class BookUtil {
 | 
				
			||||||
        long startTime= new Date().getTime();
 | 
					        long startTime= new Date().getTime();
 | 
				
			||||||
        Log.d(TAG,String.format("loadChapts----start download %s  目录 from %s",  mNovel.getName()  ,url ));
 | 
					        Log.d(TAG,String.format("loadChapts----start download %s  目录 from %s",  mNovel.getName()  ,url ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     /*   if(muluRetryCount<3){
 | 
				
			||||||
 | 
					            muluRetryCount++;
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(muluRetryCount>=3) {
 | 
				
			||||||
 | 
					         return;
 | 
				
			||||||
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
 | 
					        HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onFailure(Call call, IOException e) {
 | 
					            public void onFailure(Call call, IOException e) {
 | 
				
			||||||
                // Log.d(TAG, "onFailure: " + e.getMessage());
 | 
					                // Log.d(TAG, "onFailure: " + e.getMessage());
 | 
				
			||||||
                Log.e(TAG, "loadChapts---- failed: ",e );
 | 
					                Log.e(TAG, "prepare book loadChapts---- failed: ", e);
 | 
				
			||||||
                Log.d(TAG,String.format("loadChapts---- failed %s  目录 from %s",  mNovel.getName()  ,url ));
 | 
					                Log.d(TAG, String.format("prepare book loadChapts---- failed %s  目录 from %s", mNovel.getName(), url));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                handler.sendEmptyMessage(3);
 | 
					                handler.sendEmptyMessage(3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //TODO 如果是取消了访问,则返回
 | 
					                //TODO 如果是取消了访问,则返回
 | 
				
			||||||
                if(e.toString().contains("closed") ||e.getMessage().contains("Canceled"))
 | 
					                if (e.toString().contains("closed") || e.getMessage().contains("Canceled")) {
 | 
				
			||||||
                {
 | 
					                    Log.d(TAG, String.format("prepare book loadChapts---- canceled %s  目录 from %s", mNovel.getName(), url));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					 | 
				
			||||||
                if( mNovelSites.getSites().length ==1){ //仅有一个rule,且失败了
 | 
					 | 
				
			||||||
                mMuluStatus = MuluStatus.failed;
 | 
					                mMuluStatus = MuluStatus.failed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (muluRetryCount <  3) {
 | 
				
			||||||
 | 
					                    try {
 | 
				
			||||||
 | 
					                        Thread.sleep(50);
 | 
				
			||||||
 | 
					                    } catch (InterruptedException e1) {
 | 
				
			||||||
 | 
					                        e1.printStackTrace();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    muluRetryCount++;
 | 
				
			||||||
 | 
					                    Log.d(TAG,String.format("prepare book loadChapts----failed,  retrying count %s",muluRetryCount ));
 | 
				
			||||||
 | 
					                    readChaptersAsync();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (mNovelSites.getSites().length == 1) { //仅有一个rule,且失败了
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  //  mMuluStatus = MuluStatus.failed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //try next site
 | 
					                //try next site
 | 
				
			||||||
               for(Site st :  mNovelSites.getSites() ){
 | 
					
 | 
				
			||||||
                   if(!st.getDomain().equals(mSite.getDomain())){
 | 
					                    for (Site st : mNovelSites.getSites()) {
 | 
				
			||||||
                       mSite =st;
 | 
					                        if (!st.getDomain().equals(mSite.getDomain())) {
 | 
				
			||||||
 | 
					                            mSite = st;
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                     muluRetryCount=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    //  readChaptersAsync();
 | 
					                    //  readChaptersAsync();
 | 
				
			||||||
                    getSiteRule();
 | 
					                    getSiteRule();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void onResponse(Call call, Response response){
 | 
					            public void onResponse(Call call, Response response){
 | 
				
			||||||
                ResponseBody body = response.body();
 | 
					                ResponseBody body = response.body();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if(response.code()!=200){
 | 
					                if(response.code()!=200){
 | 
				
			||||||
                    Log.d(TAG,String.format("loadChapts----failed,  %s  目录 from %s,return code %s",  mNovel.getName()  ,url,response.code() ));
 | 
					                    Log.d(TAG,String.format("prepare book loadChapts----failed,  %s  目录 from %s,return code %s",  mNovel.getName()  ,url,response.code() ));
 | 
				
			||||||
                    handler.sendEmptyMessage(3);
 | 
					                    handler.sendEmptyMessage(3);
 | 
				
			||||||
                    mMuluStatus = MuluStatus.failed;
 | 
					                    mMuluStatus = MuluStatus.failed;
 | 
				
			||||||
 | 
					                    if(muluRetryCount <3){
 | 
				
			||||||
 | 
					                        Log.d(TAG,String.format("prepare book loadChapts----failed, response code %s  retrying count %s",response.code(), muluRetryCount ));
 | 
				
			||||||
 | 
					                        muluRetryCount++;
 | 
				
			||||||
 | 
					                        readChaptersAsync();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                muluRetryCount =0;
 | 
				
			||||||
                if (body != null) {
 | 
					                if (body != null) {
 | 
				
			||||||
                    Log.d(TAG, String.format("prepare book %s 章节信息读取成功.thread %s",mNovel.getName(),Thread.currentThread().getName()) );
 | 
					                    Log.d(TAG, String.format("prepare book %s 章节信息读取成功.thread %s",mNovel.getName(),Thread.currentThread().getName()) );
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
| 
						 | 
					@ -580,7 +627,7 @@ public class BookUtil {
 | 
				
			||||||
                     //   Log.d(TAG,String.format("loadChaptContent----end download %s  目录, 目录数量 %s, cost %s",  mNovel.getName()  , mChapters.size(),   new Date().getTime() -startTime ));
 | 
					                     //   Log.d(TAG,String.format("loadChaptContent----end download %s  目录, 目录数量 %s, cost %s",  mNovel.getName()  , mChapters.size(),   new Date().getTime() -startTime ));
 | 
				
			||||||
                    //    long startTime2= new Date().getTime();
 | 
					                    //    long startTime2= new Date().getTime();
 | 
				
			||||||
                        buildChapters(bodyStr,url);
 | 
					                        buildChapters(bodyStr,url);
 | 
				
			||||||
                        Log.d(TAG,String.format("loadChapts----end download %s  目录, 目录数量 %s, cost %s",  mNovel.getName()  , mChapters.size(),   new Date().getTime() -startTime ));
 | 
					                        Log.d(TAG,String.format("prepare book loadChapts----end download %s  目录, 目录数量 %s, cost %s",  mNovel.getName()  , mChapters.size(),   new Date().getTime() -startTime ));
 | 
				
			||||||
                        mMuluStatus = MuluStatus.isDone;
 | 
					                        mMuluStatus = MuluStatus.isDone;
 | 
				
			||||||
                        Log.d(TAG, String.format("prepare book %s 章节信息完成.",mNovel.getName()) );
 | 
					                        Log.d(TAG, String.format("prepare book %s 章节信息完成.",mNovel.getName()) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -623,7 +670,7 @@ public class BookUtil {
 | 
				
			||||||
            }*/
 | 
					            }*/
 | 
				
			||||||
        } catch (JSONException e) {
 | 
					        } catch (JSONException e) {
 | 
				
			||||||
            // } catch (JSONException | IOException e) {
 | 
					            // } catch (JSONException | IOException e) {
 | 
				
			||||||
            Log.d(TAG,String.format("mulu on Site %s download status %s",mSite.getDomain(),mMuluStatus));
 | 
					            Log.d(TAG,String.format("prepare book, mulu on Site %s download status %s",mSite.getDomain(),mMuluStatus));
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
        } finally {
 | 
					        } finally {
 | 
				
			||||||
            //   result.close();
 | 
					            //   result.close();
 | 
				
			||||||
| 
						 | 
					@ -1139,109 +1186,121 @@ public class BookUtil {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                File file = new File(fileChapterName(index));
 | 
					                File file = new File(fileChapterName(index));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if(!file.exists()) {
 | 
					                if (!file.exists()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if(mMuluStatus ==null){
 | 
					                    if (mMuluStatus == null) {
 | 
				
			||||||
                        Log.d(TAG,String.format("prepare book loadChapts---- 还未有目录信息,出错了 %s  目录, 目录数量 %s, MuluStatus %s ,thread %s",  mNovel.getName()  , mChapters.size(), mMuluStatus,Thread.currentThread().getName()  ));
 | 
					                        Log.d(TAG, String.format("prepare book loadChapts---- 还未有目录信息,出错了 %s  目录, 目录数量 %s, MuluStatus %s ,thread %s", mNovel.getName(), mChapters.size(), mMuluStatus, Thread.currentThread().getName()));
 | 
				
			||||||
                        //   getTargetSites();
 | 
					                        //   getTargetSites();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    int slept = 0;
 | 
					                    int slept = 0;
 | 
				
			||||||
                    while(NetUtil.isNetworkConnected() && slept <100 && mMuluStatus ==MuluStatus.isDownloading){
 | 
					                    while (NetUtil.isNetworkConnected() && slept < 100 && mMuluStatus == MuluStatus.isDownloading) {
 | 
				
			||||||
                        try {
 | 
					                        try {
 | 
				
			||||||
                            Thread.sleep(50);
 | 
					                            Thread.sleep(50);
 | 
				
			||||||
                            slept++;
 | 
					                            slept++;
 | 
				
			||||||
                            Log.d(TAG,String.format("prepare book loadChapts----等待中 %s  目录, 目录数量 %s, slept %s, MuluStatus %s",  mNovel.getName()  , mChapters.size(),slept ,mMuluStatus  ));
 | 
					                            Log.d(TAG, String.format("prepare book loadChapts----等待中 %s  目录, 目录数量 %s, slept %s, MuluStatus %s", mNovel.getName(), mChapters.size(), slept, mMuluStatus));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        } catch (InterruptedException e) {
 | 
					                        } catch (InterruptedException e) {
 | 
				
			||||||
                            e.printStackTrace();
 | 
					                            e.printStackTrace();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if( !NetUtil.isNetworkConnected() || mChapters ==null || mChapters.size() ==0){
 | 
					                    if (!NetUtil.isNetworkConnected() || muluRetryCount >= 3 && (mChapters == null || mChapters.size() == 0)) {
 | 
				
			||||||
                        Log.d(TAG,String.format("loadChapts----超时。。。或出错了 %s  目录, 目录数量 %s, slept %s, MuluStatus %s,thread %s",  mNovel.getName()  , mChapters.size(),slept ,mMuluStatus,Thread.currentThread().getName()  ));
 | 
					                        Log.d(TAG, String.format("loadChapts----超时。。。或出错了 %s  目录, 目录数量 %s, slept %s, MuluStatus %s,thread %s", mNovel.getName(), mChapters.size(), slept, mMuluStatus, Thread.currentThread().getName()));
 | 
				
			||||||
                        String error = "网络不给力";
 | 
					                        String error = "网络不给力";
 | 
				
			||||||
                        return error.toCharArray();
 | 
					                        return error.toCharArray();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    Log.d(TAG,String.format("loadChaptContent----start %s"  ,new Date().toString() ));
 | 
					                    Log.d(TAG, String.format("loadChaptContent----start %s", new Date().toString()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Log.d("loadChaptContent", String.format("begin to load content for chapter %s", index));
 | 
				
			||||||
 | 
					                    Log.d("loadChaptContent", String.format("isDownloadChapt: %s", isDownloadChapt));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    Log.d( "loadChaptContent",String.format("begin to load content for chapter %s",index));
 | 
					                    if (!chaptDownStatus.containsKey(Integer.valueOf(index))) {
 | 
				
			||||||
                    Log.d( "loadChaptContent",String.format("isDownloadChapt: %s",isDownloadChapt));
 | 
					                        chaptDownStatus.put(index, DownloadStatus.downloading);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if(!chaptDownStatus.containsKey(Integer.valueOf(index))){
 | 
					 | 
				
			||||||
                        chaptDownStatus.put(index,DownloadStatus.downloading);
 | 
					 | 
				
			||||||
                        loadChaptContent(index);
 | 
					                        loadChaptContent(index);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    Log.d( "loadChaptContent",String.format("showing dialog " ));
 | 
					                    Log.d("loadChaptContent", String.format("showing dialog "));
 | 
				
			||||||
                    // Log.d(TAG,String.format("showing progress diaglog......"));
 | 
					                    // Log.d(TAG,String.format("showing progress diaglog......"));
 | 
				
			||||||
                    int maxSleep =6000;
 | 
					                    int maxSleep = 4500;
 | 
				
			||||||
                    int slepttime =0;
 | 
					                    int slepttime = 0;
 | 
				
			||||||
                    //  while(!file.exists() && !getDownloadStatus()){//&& slepttime <maxSleep){
 | 
					                    //  while(!file.exists() && !getDownloadStatus()){//&& slepttime <maxSleep){
 | 
				
			||||||
                    //   while( !getDownloadStatus()  && slepttime <maxSleep){
 | 
					                    //   while( !getDownloadStatus()  && slepttime <maxSleep){
 | 
				
			||||||
                    while( NetUtil.isNetworkConnected() && !getDownloadStatus() && chaptDownStatus.get(Integer.valueOf(index)) == DownloadStatus.downloading  && slepttime <maxSleep){
 | 
					                    while (NetUtil.isNetworkConnected() && !getDownloadStatus() && chaptDownStatus.get(Integer.valueOf(index)) == DownloadStatus.downloading && slepttime < maxSleep) {
 | 
				
			||||||
                        Thread.sleep(50);
 | 
					                        Thread.sleep(50);
 | 
				
			||||||
                        slepttime+=50;
 | 
					                        slepttime += 50;
 | 
				
			||||||
                       Log.d(TAG,String.format(" prepare book  loadChaptContent slept %s for downloading,isDownload %s ,thread %s  ",slepttime,getDownloadStatus(),Thread.currentThread().getName()   )   );
 | 
					                        Log.d(TAG, String.format(" prepare book  loadChaptContent slept %s for downloading,isDownload %s ,thread %s  ", slepttime, getDownloadStatus(), Thread.currentThread().getName()));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    Log.d("loadChaptContent",String.format("loadChaptContent slept %s for downloading  ",slepttime   )   );
 | 
					                    Log.d("loadChaptContent", String.format("loadChaptContent slept %s for downloading  ", slepttime));
 | 
				
			||||||
                    Log.d( "loadChaptContent",String.format("dismissing dialog " ));
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                   Log.d(TAG,String.format("loadChaptContent slept %s for downloading chaptercontent ",slepttime  ));
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                Log.d( "loadChaptContent",String.format(" %s, file.exists()? %s",  file.getPath(),file.exists()));
 | 
					                Log.d("loadChaptContent", String.format(" %s, file.exists()? %s", file.getPath(), file.exists()));
 | 
				
			||||||
                if(!file.exists() || !NetUtil.isNetworkConnected()) {
 | 
					                if (!file.exists() && !NetUtil.isNetworkConnected()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    String error = "网络不给力";
 | 
					                    String error = "网络不给力";
 | 
				
			||||||
                    return error.toCharArray();
 | 
					                    return error.toCharArray();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if(mChapters.size() > index ) {
 | 
					                if (mChapters.size() > index && NetUtil.isNetworkConnected()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    File file2 = new File(fileChapterName(index+1));
 | 
					                    if (!chaptDownStatus.containsKey(index + 1) || chaptDownStatus.get(index + 1).equals(DownloadStatus.failure)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if(!file2.exists()) {
 | 
					
 | 
				
			||||||
                        Log.d(TAG,String.format(" prepare book to load next chapt %s",index+1));
 | 
					                        File file2 = new File(fileChapterName(index + 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (!file2.exists()) {
 | 
				
			||||||
 | 
					                            Log.d(TAG, String.format(" prepare book to load next chapt %s,down status %s ", index + 1, chaptDownStatus.get(index + 1)));
 | 
				
			||||||
 | 
					                            chaptDownStatus.put(index + 1, DownloadStatus.downloading);
 | 
				
			||||||
                            loadChaptContent(index + 1);
 | 
					                            loadChaptContent(index + 1);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                if(  index >1 &&  index -1 < mChapters.size()  ) {
 | 
					                }
 | 
				
			||||||
 | 
					                if (index > 1 && index - 1 < mChapters.size() && NetUtil.isNetworkConnected()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    File file2 = new File(fileChapterName(index-1));
 | 
					                    if (!chaptDownStatus.containsKey(index - 1) || chaptDownStatus.get(index - 1).equals(DownloadStatus.failure)) {
 | 
				
			||||||
 | 
					                        File file2 = new File(fileChapterName(index - 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if(!file2.exists()) {
 | 
					                        if (!file2.exists()) {
 | 
				
			||||||
                        Log.d(TAG,String.format(" prepare book to load pre chapt %s",index-1));
 | 
					                            Log.d(TAG, String.format(" prepare book to load pre chapt %s,down status  %s ", index - 1, chaptDownStatus.get(index - 1)));
 | 
				
			||||||
 | 
					                            chaptDownStatus.put(index - 1, DownloadStatus.downloading);
 | 
				
			||||||
                            loadChaptContent(index - 1);
 | 
					                            loadChaptContent(index - 1);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int size = (int)file.length();
 | 
					                int size = (int) file.length();
 | 
				
			||||||
                if (size < 0) {
 | 
					                if (size < 0) {
 | 
				
			||||||
                    throw new RuntimeException("Error during reading " + fileChapterName(index));
 | 
					                    Log.e(TAG, "prepare book chaptChars: Error during reading"+ fileChapterName(index) );
 | 
				
			||||||
 | 
					                   // throw new RuntimeException("Error during reading " + fileChapterName(index));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                block = new char[size / 2];
 | 
					                block = new char[size / 2];
 | 
				
			||||||
                InputStreamReader reader =
 | 
					                InputStreamReader reader = null;
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                    reader =
 | 
				
			||||||
                            new InputStreamReader(
 | 
					                            new InputStreamReader(
 | 
				
			||||||
                                    new FileInputStream(file),
 | 
					                                    new FileInputStream(file),
 | 
				
			||||||
                                    charachterType
 | 
					                                    charachterType
 | 
				
			||||||
                            );
 | 
					                            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    long l = reader.read(block);
 | 
					                    long l = reader.read(block);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (reader.read(block) != block.length) {
 | 
					                    if (reader.read(block) != block.length) {
 | 
				
			||||||
                        //   throw new RuntimeException("Error during reading " + fileChapterName(index));
 | 
					                        //   throw new RuntimeException("Error during reading " + fileChapterName(index));
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                reader.close();
 | 
					 | 
				
			||||||
                } catch (IOException e) {
 | 
					                } catch (IOException e) {
 | 
				
			||||||
                    e.printStackTrace();
 | 
					                    e.printStackTrace();
 | 
				
			||||||
                throw new RuntimeException("Error during reading " + fileChapterName(index));
 | 
					                } finally {
 | 
				
			||||||
            } catch (JSONException e) {
 | 
					                    if (reader != null) {
 | 
				
			||||||
 | 
					                        reader.close();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } catch (JSONException | IOException e) {
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
            } catch (InterruptedException e) {
 | 
					            } catch (InterruptedException e) {
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
            }finally {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Cache cache = new Cache();
 | 
					            Cache cache = new Cache();
 | 
				
			||||||
            cache.setSize(block.length);
 | 
					            cache.setSize(block.length);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,9 +18,12 @@ import android.view.TextureView;
 | 
				
			||||||
import android.view.ViewConfiguration;
 | 
					import android.view.ViewConfiguration;
 | 
				
			||||||
import android.view.Window;
 | 
					import android.view.Window;
 | 
				
			||||||
import android.view.WindowManager;
 | 
					import android.view.WindowManager;
 | 
				
			||||||
 | 
					import android.widget.Toast;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.lang.reflect.InvocationTargetException;
 | 
					import java.lang.reflect.InvocationTargetException;
 | 
				
			||||||
import java.lang.reflect.Method;
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
 | 
					import java.security.Timestamp;
 | 
				
			||||||
 | 
					import java.text.DateFormat;
 | 
				
			||||||
import java.text.SimpleDateFormat;
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
import java.util.Date;
 | 
					import java.util.Date;
 | 
				
			||||||
import java.util.Locale;
 | 
					import java.util.Locale;
 | 
				
			||||||
| 
						 | 
					@ -30,12 +33,12 @@ public class CommonUtil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final String TAG= CommonUtil.class.getSimpleName();
 | 
					    private static final String TAG= CommonUtil.class.getSimpleName();
 | 
				
			||||||
    public static int getScreenHeight(Context context){
 | 
					    public static int getScreenHeight(Context context){
 | 
				
			||||||
 | 
					        int diff = checkDeviceHasNavigationBar(context);
 | 
				
			||||||
        if(checkDeviceHasNavigationBar(context)){
 | 
					        if(diff >0){
 | 
				
			||||||
            return getDpi(context);
 | 
					            return getDpi(context) -diff;  // return height for no navigation bar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return getScreenHeightWithOutBottomBar(context);
 | 
					        return getScreenHeightWithOutBottomBar(context);  //return for with navigationbar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -43,14 +46,17 @@ public class CommonUtil {
 | 
				
			||||||
     * @param context
 | 
					     * @param context
 | 
				
			||||||
     * @return
 | 
					     * @return
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static boolean checkDeviceHasNavigationBar(Context context) {
 | 
					    public static int checkDeviceHasNavigationBar(Context context) {
 | 
				
			||||||
        Point appUsableSize = getAppUsableScreenSize(context);
 | 
					        Point appUsableSize = getAppUsableScreenSize(context);
 | 
				
			||||||
        Point realScreenSize = getRealScreenSize(context);
 | 
					        Point realScreenSize = getRealScreenSize(context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Log.d(TAG, String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s,realScreenSize.y -usablesize.y =%s, statusbar height %s"
 | 
					        Log.d(TAG, String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s" +
 | 
				
			||||||
 | 
					                        ",realScreenSize.y -usablesize.y =%s, statusbar height %s"
 | 
				
			||||||
                ,appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) ));
 | 
					                ,appUsableSize.y ,realScreenSize.y, realScreenSize.y-appUsableSize.y ,getStatusBarHeight(context) ));
 | 
				
			||||||
        Point p = getNavigationBarSize(context);
 | 
					        Point p = getNavigationBarSize(context);
 | 
				
			||||||
        return   realScreenSize.y-appUsableSize.y - getStatusBarHeight(context)>0;
 | 
					//        Toast.makeText(context,String.format("getNavigationBarSize: usablesize.y %s,realScreenSize.y %s,diff %s",
 | 
				
			||||||
 | 
					//                appUsableSize.y ,realScreenSize.y,realScreenSize.y-appUsableSize.y - getStatusBarHeight(context)),Toast.LENGTH_LONG).show();
 | 
				
			||||||
 | 
					        return   realScreenSize.y-appUsableSize.y - getStatusBarHeight(context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    public static Point getNavigationBarSize(Context context) {
 | 
					    public static Point getNavigationBarSize(Context context) {
 | 
				
			||||||
| 
						 | 
					@ -415,9 +421,31 @@ public class CommonUtil {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static String getDateString(long time,String format){
 | 
					    public static String getDateString(long time,String format){
 | 
				
			||||||
        String f = TextUtils.isEmpty(format) ?"yyyy年MM月dd日 HH:mm:ss":format;
 | 
					        String f = TextUtils.isEmpty(format) ?"yyyy年MM月dd日 HH:mm:ss":format;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Date dt = new Date(time);
 | 
					        Date dt = new Date(time);
 | 
				
			||||||
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 | 
					        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 | 
				
			||||||
 | 
					        String rt =sdf.format(dt);
 | 
				
			||||||
 | 
					        Log.d(TAG, String.format("getDateString:timestamp %s, formated time %s",time,rt));
 | 
				
			||||||
 | 
					        long time2 =System.currentTimeMillis();
 | 
				
			||||||
 | 
					        dt = new Date(time2);
 | 
				
			||||||
 | 
					        rt =sdf.format(dt);
 | 
				
			||||||
 | 
					        Log.d(TAG, String.format("getDateString:timestamp %s, formated time %s",time2,rt));
 | 
				
			||||||
        return sdf.format(dt);
 | 
					        return sdf.format(dt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       /* Timestamp ts = new Timestamp(time);
 | 
				
			||||||
 | 
					        String tsStr = "";
 | 
				
			||||||
 | 
					        DateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            //方法一
 | 
				
			||||||
 | 
					            tsStr = sdf2.format(ts);
 | 
				
			||||||
 | 
					            System.out.println(tsStr);
 | 
				
			||||||
 | 
					            //方法二
 | 
				
			||||||
 | 
					            tsStr = ts.toString();
 | 
				
			||||||
 | 
					            System.out.println(tsStr);
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    public static String getDateString(long time){
 | 
					    public static String getDateString(long time){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,18 @@
 | 
				
			||||||
package com.novelbook.android.utils;
 | 
					package com.novelbook.android.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.novelbook.android.bean.Progress;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Constants {
 | 
					public class Constants {
 | 
				
			||||||
    public static final String BLOCK_TITLE_NOVELS = "ns";
 | 
					    public static final String BLOCK_TITLE_NOVELS = "ns";
 | 
				
			||||||
    public static final int NOVEL_SPAN_CNT =3 ; //grid columns
 | 
					    public static final int NOVEL_SPAN_CNT =3 ; //grid columns
 | 
				
			||||||
    public static final boolean SHOWAD =false ;
 | 
					    public static final boolean SHOWAD =false ;
 | 
				
			||||||
    public static int SEX=1;
 | 
					    public static int SEX=1; //1 男,2女
 | 
				
			||||||
    public static String A_Regex = "<a[^>]+href[\\s]*=[\\s]*['\"]?([^'\"]+)['\"\\s]?[^>]*>([^<]+)<"; //TODO: 从服务器更新
 | 
					    public static String A_Regex = "<a[^>]+href[\\s]*=[\\s]*['\"]?([^'\"]+)['\"\\s]?[^>]*>([^<]+)<"; //TODO: 从服务器更新
 | 
				
			||||||
 | 
					    public static List<String> lstProperties =null;
 | 
				
			||||||
 | 
					    public static List<String> lstSex =null;
 | 
				
			||||||
 | 
					    public static  List<String> lstNt=null;
 | 
				
			||||||
 | 
					    //public static List<Progress> lstProgress=null;
 | 
				
			||||||
 | 
					    public static String[] lstProgress={"连载中","已完本","新书"};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,8 +6,10 @@ import com.google.gson.JsonElement;
 | 
				
			||||||
import com.google.gson.JsonObject;
 | 
					import com.google.gson.JsonObject;
 | 
				
			||||||
import com.google.gson.JsonParser;
 | 
					import com.google.gson.JsonParser;
 | 
				
			||||||
import com.novelbook.android.bean.NovelBlock;
 | 
					import com.novelbook.android.bean.NovelBlock;
 | 
				
			||||||
 | 
					import com.novelbook.android.bean.Progress;
 | 
				
			||||||
import com.novelbook.android.db.Novel;
 | 
					import com.novelbook.android.db.Novel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.json.JSONArray;
 | 
				
			||||||
import org.json.JSONException;
 | 
					import org.json.JSONException;
 | 
				
			||||||
import org.json.JSONObject;
 | 
					import org.json.JSONObject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +40,48 @@ public class GsonUtil {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return  nv;
 | 
					        return  nv;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    public static List<String> parserStringBlocks(String result,String blockName ) throws JSONException {
 | 
				
			||||||
 | 
					        JSONObject jsonObject = new JSONObject(result);
 | 
				
			||||||
 | 
					        JSONArray array  =   jsonObject.getJSONArray(blockName);
 | 
				
			||||||
 | 
					       List<String> lst = new ArrayList<String>();
 | 
				
			||||||
 | 
					        for( int i=0;i< array.length();i++){
 | 
				
			||||||
 | 
					            lst .add(array.getString(i));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return lst;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public static List<Progress> parserProgressBlocks(String restult, String blockName ) throws JSONException {
 | 
				
			||||||
 | 
					        JSONObject jsonObject = new JSONObject(restult);
 | 
				
			||||||
 | 
					        String strJson = jsonObject.getString(blockName);
 | 
				
			||||||
 | 
					        List<Progress> list = new ArrayList<Progress>();
 | 
				
			||||||
 | 
					        //创建一个Gson对象
 | 
				
			||||||
 | 
					        // Gson gson = new Gson();
 | 
				
			||||||
 | 
					        //创建一个JsonParser
 | 
				
			||||||
 | 
					        JsonParser parser = new JsonParser();
 | 
				
			||||||
 | 
					        //通过JsonParser对象可以把json格式的字符串解析成一个JsonElement对象
 | 
				
			||||||
 | 
					        JsonElement el = parser.parse(strJson);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //把JsonElement对象转换成JsonObject
 | 
				
			||||||
 | 
					        JsonObject jsonObj = null;
 | 
				
			||||||
 | 
					        if (el.isJsonObject()) {
 | 
				
			||||||
 | 
					            jsonObj = el.getAsJsonObject();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //把JsonElement对象转换成JsonArray
 | 
				
			||||||
 | 
					        JsonArray jsonArray = null;
 | 
				
			||||||
 | 
					        if (el.isJsonArray()) {
 | 
				
			||||||
 | 
					            jsonArray = el.getAsJsonArray();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //遍历JsonArray对象
 | 
				
			||||||
 | 
					        Iterator it = jsonArray.iterator();
 | 
				
			||||||
 | 
					        while (it.hasNext()) {
 | 
				
			||||||
 | 
					            JsonElement e = (JsonElement) it.next();
 | 
				
			||||||
 | 
					            //JsonElement转换为JavaBean对象
 | 
				
			||||||
 | 
					            list.add((Progress) gson.fromJson(e, Progress.class));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return list;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    public static List<NovelBlock> parserNovleBlocks(String restult,String blockName ) throws JSONException {
 | 
					    public static List<NovelBlock> parserNovleBlocks(String restult,String blockName ) throws JSONException {
 | 
				
			||||||
        JSONObject jsonObject = new JSONObject(restult);
 | 
					        JSONObject jsonObject = new JSONObject(restult);
 | 
				
			||||||
        String strJson = jsonObject.getString(blockName);
 | 
					        String strJson = jsonObject.getString(blockName);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -192,25 +192,34 @@ public class PageFactory implements ChangeSource{
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    private  List<TRPage>  loadCurrentChapt(int chaptId){
 | 
					    private  List<TRPage>  loadCurrentChapt(int chaptId){
 | 
				
			||||||
 | 
					        Log.d(TAG, String.format("prepare book,  loadCurrentChapt chaptId %s, getChapters().size() %s ",chaptId,getChapters().size()  ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        chaptId = chaptId >getChapters().size()?getChapters().size():chaptId;
 | 
					        final File file = new File(getChapterFileName(chaptId));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        chaptId = chaptId >0?chaptId:1;
 | 
					        if (!file.exists()) { //待下载
 | 
				
			||||||
 | 
					            chaptId = chaptId > getChapters().size() ? getChapters().size() : chaptId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            chaptId = chaptId > 0 ? chaptId : 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<TRPage> chaptPages = new ArrayList<TRPage>();
 | 
					            List<TRPage> chaptPages = new ArrayList<TRPage>();
 | 
				
			||||||
            chaptPages.add(new TRPage());
 | 
					            chaptPages.add(new TRPage());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         if(!mBook.isLocalBook()) {
 | 
					         if(!mBook.isLocalBook()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
             mStatus = Status.OPENING;
 | 
					             mStatus = Status.OPENING;
 | 
				
			||||||
             drawStatus(mBookPageWidget.getCurPage());
 | 
					             drawStatus(mBookPageWidget.getCurPage());
 | 
				
			||||||
             drawStatus(mBookPageWidget.getNextPage());
 | 
					             drawStatus(mBookPageWidget.getNextPage());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
           final File file = new File(getChapterFileName(chaptId));
 | 
					          // final File file = new File(getChapterFileName(chaptId));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					           Log.d(TAG, String.format("prepare book to open chapter %s ,file is exist ? %s",chaptId,file.exists()  ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!file.exists()) {
 | 
					            if (!file.exists()) {
 | 
				
			||||||
                Log.d(TAG, String.format("prepare book to open chapter %s ,file is not download",chaptId  ) );
 | 
					
 | 
				
			||||||
                mStatus = Status.OPENING;
 | 
					                mStatus = Status.OPENING;
 | 
				
			||||||
                if( !NetUtil.isNetworkConnected()){  //TODO: 500错误处理
 | 
					                if( !NetUtil.isNetworkConnected()){  //TODO: 500错误处理
 | 
				
			||||||
                    mStatus = Status.NETWORKFAILE;
 | 
					                    mStatus = Status.NETWORKFAILE;
 | 
				
			||||||
| 
						 | 
					@ -218,7 +227,14 @@ public class PageFactory implements ChangeSource{
 | 
				
			||||||
                    drawStatus(mBookPageWidget.getNextPage());
 | 
					                    drawStatus(mBookPageWidget.getNextPage());
 | 
				
			||||||
                    return chaptPages;
 | 
					                    return chaptPages;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                if(getChapters().size()==0 && mBookUtil.muluRetryCount>=3) {
 | 
				
			||||||
 | 
					                    Log.d(TAG, String.format("prepare book download mulu 失败,重试次数: %s ,thread.name %s",mBookUtil.muluRetryCount,Thread.currentThread().getName()  ) );
 | 
				
			||||||
 | 
					                    mBookUtil.muluRetryCount=0;
 | 
				
			||||||
 | 
					                    mStatus = Status.FAIL;
 | 
				
			||||||
 | 
					                    drawStatus(mBookPageWidget.getCurPage());
 | 
				
			||||||
 | 
					                    drawStatus(mBookPageWidget.getNextPage());
 | 
				
			||||||
 | 
					                    return chaptPages;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
              //  showProgressDialog();
 | 
					              //  showProgressDialog();
 | 
				
			||||||
                final int chid = chaptId;
 | 
					                final int chid = chaptId;
 | 
				
			||||||
                new Thread() {
 | 
					                new Thread() {
 | 
				
			||||||
| 
						 | 
					@ -234,7 +250,7 @@ public class PageFactory implements ChangeSource{
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
                    public void run() {
 | 
					                    public void run() {
 | 
				
			||||||
                        int slepttime =0;
 | 
					                        int slepttime =0;
 | 
				
			||||||
                      while( !file.exists() && slepttime <100){
 | 
					                      while( !file.exists() && slepttime <100 && mBookUtil.muluRetryCount<3){
 | 
				
			||||||
                          try {
 | 
					                          try {
 | 
				
			||||||
                              sleep(50);
 | 
					                              sleep(50);
 | 
				
			||||||
                              slepttime++;
 | 
					                              slepttime++;
 | 
				
			||||||
| 
						 | 
					@ -243,7 +259,12 @@ public class PageFactory implements ChangeSource{
 | 
				
			||||||
                          }
 | 
					                          }
 | 
				
			||||||
                      }
 | 
					                      }
 | 
				
			||||||
                      Log.d(TAG, String.format("prepare book to download chapter %s ,slepted %s ,thread.name %s",chid,slepttime*50 ,Thread.currentThread().getName()  ) );
 | 
					                      Log.d(TAG, String.format("prepare book to download chapter %s ,slepted %s ,thread.name %s",chid,slepttime*50 ,Thread.currentThread().getName()  ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        mStatus = Status.FINISH;
 | 
					                        mStatus = Status.FINISH;
 | 
				
			||||||
 | 
					                     if( mBookUtil.muluRetryCount>=3){
 | 
				
			||||||
 | 
					                         mStatus = Status.FAIL;
 | 
				
			||||||
 | 
					                     }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                      //notice file done
 | 
					                      //notice file done
 | 
				
			||||||
                       handler.sendEmptyMessage(1);
 | 
					                       handler.sendEmptyMessage(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -261,17 +282,17 @@ public class PageFactory implements ChangeSource{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         }else  if(getChapters().size()==0) {
 | 
					         }/*else  if(getChapters().size()==0) {
 | 
				
			||||||
            mStatus = Status.FAIL;
 | 
					            mStatus = Status.FAIL;
 | 
				
			||||||
            drawStatus(mBookPageWidget.getCurPage());
 | 
					            drawStatus(mBookPageWidget.getCurPage());
 | 
				
			||||||
            drawStatus(mBookPageWidget.getNextPage());
 | 
					            drawStatus(mBookPageWidget.getNextPage());
 | 
				
			||||||
            return chaptPages;
 | 
					            return chaptPages;
 | 
				
			||||||
        }
 | 
					        }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        chaptPages.clear();
 | 
					        chaptPages.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       chaptId =  mChapters!=null && mChapters.size() <= chaptId ? 1 : chaptId;
 | 
					      // chaptId =  mChapters!=null && mChapters.size() <= chaptId ? 1 : chaptId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
         Log.d(TAG, String.format("changing Source prepare book to open chapter %s ",chaptId  ) );
 | 
					         Log.d(TAG, String.format("changing Source prepare book to open chapter %s ",chaptId  ) );
 | 
				
			||||||
       char[] chars = mBookUtil.chaptChars(chaptId);
 | 
					       char[] chars = mBookUtil.chaptChars(chaptId);
 | 
				
			||||||
| 
						 | 
					@ -408,6 +429,9 @@ public static boolean busy(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        marginWidth = mContext.getResources().getDimension(R.dimen.readingMarginWidth);
 | 
					        marginWidth = mContext.getResources().getDimension(R.dimen.readingMarginWidth);
 | 
				
			||||||
        marginHeight = mContext.getResources().getDimension(R.dimen.readingMarginHeight);
 | 
					        marginHeight = mContext.getResources().getDimension(R.dimen.readingMarginHeight);
 | 
				
			||||||
 | 
					      //  Log.d(TAG, "PageFactory: marginHeight +" +marginHeight);
 | 
				
			||||||
 | 
					       // marginHeight = CommonUtil. getStatusBarHeight(mContext);
 | 
				
			||||||
 | 
					        Log.d(TAG, "PageFactory: marginHeight " +marginHeight);
 | 
				
			||||||
        statusMarginBottom = mContext.getResources().getDimension(R.dimen.reading_status_margin_bottom);
 | 
					        statusMarginBottom = mContext.getResources().getDimension(R.dimen.reading_status_margin_bottom);
 | 
				
			||||||
        lineSpace = context.getResources().getDimension(R.dimen.reading_line_spacing);
 | 
					        lineSpace = context.getResources().getDimension(R.dimen.reading_line_spacing);
 | 
				
			||||||
        paragraphSpace = context.getResources().getDimension(R.dimen.reading_paragraph_spacing);
 | 
					        paragraphSpace = context.getResources().getDimension(R.dimen.reading_paragraph_spacing);
 | 
				
			||||||
| 
						 | 
					@ -496,7 +520,7 @@ public static boolean busy(){
 | 
				
			||||||
                status = "正在拼命加载...";
 | 
					                status = "正在拼命加载...";
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case FAIL:
 | 
					            case FAIL:
 | 
				
			||||||
                status = "打开书本失败!";
 | 
					                status = "读取错误,请稍后重试";
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case NETWORKFAILE:
 | 
					            case NETWORKFAILE:
 | 
				
			||||||
                status = "请开启网络";
 | 
					                status = "请开启网络";
 | 
				
			||||||
| 
						 | 
					@ -525,6 +549,7 @@ public static boolean busy(){
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void onDraw(Bitmap bitmap,List<String> m_lines,Boolean updateChapter) {
 | 
					    public void onDraw(Bitmap bitmap,List<String> m_lines,Boolean updateChapter) {
 | 
				
			||||||
 | 
					        mAd.hideSystemUI();
 | 
				
			||||||
        if(m_lines.size()==0){
 | 
					        if(m_lines.size()==0){
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -550,11 +575,11 @@ public static boolean busy(){
 | 
				
			||||||
                        //	 * column won't be updated.
 | 
					                        //	 * column won't be updated.
 | 
				
			||||||
                     //   mBook.save();
 | 
					                     //   mBook.save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  /*      Novel nv = LitePal.find(Novel.class,mBook.getId());
 | 
					                    /*Novel nv = LitePal.find(Novel.class,mBook.getId());
 | 
				
			||||||
                        Log.d(TAG,String.format("prepare book saved lastchapt %s,lastpos %s, db lastchapt %s last pos %s",
 | 
					                        Log.d(TAG,String.format("prepare book saved lastchapt %s,lastpos %s, db lastchapt %s last pos %s",
 | 
				
			||||||
                                currentChapter,currentPage.getBegin(),nv.getLastReadChapt(),nv.getLastReadPos()));*/
 | 
					                                currentChapter,currentPage.getBegin(),nv.getLastReadChapt(),nv.getLastReadPos()));
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    /*
 | 
					                    /*
 | 
				
			||||||
| 
						 | 
					@ -582,25 +607,30 @@ public static boolean busy(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (m_lines.size() > 0) {
 | 
					        if (m_lines.size() > 0) {
 | 
				
			||||||
            float y = marginHeight;
 | 
					            float y = marginHeight;
 | 
				
			||||||
 | 
					            String lastLine ="";
 | 
				
			||||||
            for (String strLine : m_lines) {
 | 
					            for (String strLine : m_lines) {
 | 
				
			||||||
             //   if(strLine.endsWith("\n")) {
 | 
					             //   if(strLine.endsWith("\n")) {
 | 
				
			||||||
               // if(strLine.charAt(strLine.length()-1) == ('\n' )) {
 | 
					               // if(strLine.charAt(strLine.length()-1) == ('\n' )) {
 | 
				
			||||||
              // Log.d("TAG", strLine);
 | 
					              // Log.d(TAG, strLine);
 | 
				
			||||||
              // Log.d("TAG","最后字符 。。。" +strLine.charAt(strLine.length()-1) + "");
 | 
					              // Log.d(TAG,"最后字符 。。。" +strLine.charAt(strLine.length()-1) + "");
 | 
				
			||||||
 | 
					                lastLine =strLine;
 | 
				
			||||||
                  if((  strLine.charAt(strLine.length()-1) + "" ).equals("\n")){
 | 
					                  if((  strLine.charAt(strLine.length()-1) + "" ).equals("\n")){
 | 
				
			||||||
                      strLine =strLine.replace("\n","");
 | 
					                      strLine =strLine.replace("\n","");
 | 
				
			||||||
                    y += space;
 | 
					                    y += space;
 | 
				
			||||||
                    space =m_fontSize + paragraphSpace;
 | 
					                    space =m_fontSize + paragraphSpace;
 | 
				
			||||||
                   Log.d("TAG",String.format("开始新段落 %s,  y plus is %s" ,strLine, m_fontSize + paragraphSpace));
 | 
					                   Log.d( TAG ,String.format("开始新段落 %s,  y plus is %s" ,strLine, m_fontSize + paragraphSpace));
 | 
				
			||||||
                }else{
 | 
					                }else{
 | 
				
			||||||
                     y += space;
 | 
					                     y += space;
 | 
				
			||||||
                     space =m_fontSize + lineSpace;
 | 
					                     space =m_fontSize + lineSpace;
 | 
				
			||||||
                     Log.d("TAG",String.format("%s,y plus is %s" ,strLine, m_fontSize + lineSpace));
 | 
					                     Log.d(TAG,String.format("%s,y plus is %s" ,strLine, m_fontSize + lineSpace));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                c.drawText(strLine, measureMarginWidth, y, mPaint);
 | 
					                c.drawText(strLine, measureMarginWidth, y, mPaint);
 | 
				
			||||||
//                word.append(strLine);
 | 
					//                word.append(strLine);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Log.d(TAG,String.format("getNavigationBarSize mHeight is %s ,last line height %s, power %s,  %s",
 | 
				
			||||||
 | 
					                    mHeight,y,mHeight - CommonUtil.convertDpToPixel(mContext,10) + mBorderWidth - statusMarginBottom, lastLine));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            float adHeight = mHeight -y - space -marginHeight-statusMarginBottom;
 | 
					            float adHeight = mHeight -y - space -marginHeight-statusMarginBottom;
 | 
				
			||||||
            float adY =y +space;
 | 
					            float adY =y +space;
 | 
				
			||||||
            showAd((int)adHeight,(int)adY);
 | 
					            showAd((int)adHeight,(int)adY);
 | 
				
			||||||
| 
						 | 
					@ -698,6 +728,7 @@ public static boolean busy(){
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Log.d(TAG, "prepare book prePage: to  open prepage: ");
 | 
				
			||||||
        cancelPage = currentPage;
 | 
					        cancelPage = currentPage;
 | 
				
			||||||
        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),true);
 | 
					        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),true);
 | 
				
			||||||
        currentPage = getPrePage();
 | 
					        currentPage = getPrePage();
 | 
				
			||||||
| 
						 | 
					@ -728,7 +759,7 @@ public static boolean busy(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        Log.d(TAG, "prepare book nextPage: to  open next page: ");
 | 
				
			||||||
        cancelPage = currentPage;
 | 
					        cancelPage = currentPage;
 | 
				
			||||||
        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),true);
 | 
					        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),true);
 | 
				
			||||||
        prePage = currentPage;
 | 
					        prePage = currentPage;
 | 
				
			||||||
| 
						 | 
					@ -758,12 +789,12 @@ public static boolean busy(){
 | 
				
			||||||
                NetUtil.cancelRequest(mBook.getNovelId()  );
 | 
					                NetUtil.cancelRequest(mBook.getNovelId()  );
 | 
				
			||||||
            }catch (Exception e)
 | 
					            }catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log.e(TAG, "prepare Book: error on canceling request "+e.getMessage());
 | 
					                Log.e(TAG, "prepare book: error on canceling request "+e.getMessage());
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     //   Log.d(TAG, "prepareBook: .start prepare book " + book.getName());
 | 
					        Log.d(TAG, "prepare book: .start prepare book " + book.getName());
 | 
				
			||||||
        this.mBook = book ;
 | 
					        this.mBook = book ;
 | 
				
			||||||
        mBookUtil = new BookUtil();
 | 
					        mBookUtil = new BookUtil();
 | 
				
			||||||
        //this.mBookUtil.setContext(context);
 | 
					        //this.mBookUtil.setContext(context);
 | 
				
			||||||
| 
						 | 
					@ -820,9 +851,10 @@ public static boolean busy(){
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (result) {
 | 
					            if (result) {
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("prepare book  ready, to open chapter %s ",chapter  ) );
 | 
				
			||||||
//                m_mbBufLen = mBookUtil.getBookLen();
 | 
					//                m_mbBufLen = mBookUtil.getBookLen();
 | 
				
			||||||
                mBookUtil.setChapterNo((int)chapter);
 | 
					                mBookUtil.setChapterNo((int)chapter);
 | 
				
			||||||
 | 
					                Log.d(TAG, String.format("prepare book  ready, to open chapter, loadCurrentChapt %s ",chapter  ) );
 | 
				
			||||||
                currentChaptPages = loadCurrentChapt((int)chapter);
 | 
					                currentChaptPages = loadCurrentChapt((int)chapter);
 | 
				
			||||||
                currentPage = getPageForBegin(begin) ;// currentChaptPages.get(0);
 | 
					                currentPage = getPageForBegin(begin) ;// currentChaptPages.get(0);
 | 
				
			||||||
              //  currentPage = getPageForBegin(begin);
 | 
					              //  currentPage = getPageForBegin(begin);
 | 
				
			||||||
| 
						 | 
					@ -856,7 +888,7 @@ public static boolean busy(){
 | 
				
			||||||
            begin = params[1];
 | 
					            begin = params[1];
 | 
				
			||||||
            currentChapter = (int) chapter;
 | 
					            currentChapter = (int) chapter;
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                mBookUtil.openBook(mBook);
 | 
					                mBookUtil.openBook(mBook,chapter);
 | 
				
			||||||
            } catch (Exception e) {
 | 
					            } catch (Exception e) {
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
| 
						 | 
					@ -1152,12 +1184,14 @@ public static boolean busy(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //绘制当前页面
 | 
					    //绘制当前页面
 | 
				
			||||||
    public void currentPage(Boolean updateChapter){
 | 
					    public void currentPage(Boolean updateChapter){
 | 
				
			||||||
 | 
					        Log.d(TAG, "prepare book currentPage: to  open current Page : ");
 | 
				
			||||||
        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),updateChapter);
 | 
					        onDraw(mBookPageWidget.getCurPage(),currentPage.getLines(),updateChapter);
 | 
				
			||||||
        onDraw(mBookPageWidget.getNextPage(),currentPage.getLines(),updateChapter);
 | 
					        onDraw(mBookPageWidget.getNextPage(),currentPage.getLines(),updateChapter);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //更新电量
 | 
					    //更新电量
 | 
				
			||||||
    public void updateBattery(int mLevel){
 | 
					    public void updateBattery(int mLevel){
 | 
				
			||||||
 | 
					        mAd.hideSystemUI();
 | 
				
			||||||
        if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
 | 
					        if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
 | 
				
			||||||
            if (level != mLevel) {
 | 
					            if (level != mLevel) {
 | 
				
			||||||
                level = mLevel;
 | 
					                level = mLevel;
 | 
				
			||||||
| 
						 | 
					@ -1167,6 +1201,7 @@ public static boolean busy(){
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void updateTime(){
 | 
					    public void updateTime(){
 | 
				
			||||||
 | 
					        mAd.hideSystemUI();
 | 
				
			||||||
        if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
 | 
					        if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) {
 | 
				
			||||||
            String mDate = sdf.format(new java.util.Date());
 | 
					            String mDate = sdf.format(new java.util.Date());
 | 
				
			||||||
            if (date != mDate) {
 | 
					            if (date != mDate) {
 | 
				
			||||||
| 
						 | 
					@ -1368,6 +1403,10 @@ public static boolean busy(){
 | 
				
			||||||
    //是否可以翻页
 | 
					    //是否可以翻页
 | 
				
			||||||
    public boolean isReady() {
 | 
					    public boolean isReady() {
 | 
				
			||||||
        return mStatus==Status.FINISH;
 | 
					        return mStatus==Status.FINISH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    //设置页面背景
 | 
					    //设置页面背景
 | 
				
			||||||
    public void setBgBitmap(Bitmap BG) {
 | 
					    public void setBgBitmap(Bitmap BG) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,7 +158,8 @@ public class PageWidget extends View {
 | 
				
			||||||
            if (!isMove) {
 | 
					            if (!isMove) {
 | 
				
			||||||
                isMove = Math.abs(downX - x) > slop || Math.abs(downY - y) > slop;
 | 
					                isMove = Math.abs(downX - x) > slop || Math.abs(downY - y) > slop;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            Log.d(TAG, String.format("onTouchEvent:ACTION_MOVE isMove %s, isbusy %s",isMove,PageFactory.busy()));
 | 
				
			||||||
 | 
					            if(!PageFactory.busy())
 | 
				
			||||||
            if (isMove){
 | 
					            if (isMove){
 | 
				
			||||||
                isMove = true;
 | 
					                isMove = true;
 | 
				
			||||||
                if (moveX == 0 && moveY ==0) {
 | 
					                if (moveX == 0 && moveY ==0) {
 | 
				
			||||||
| 
						 | 
					@ -218,10 +219,11 @@ public class PageWidget extends View {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }else if (event.getAction() == MotionEvent.ACTION_UP){
 | 
					        }else if (event.getAction() == MotionEvent.ACTION_UP){
 | 
				
			||||||
            Log.e(TAG,"ACTION_UP");
 | 
					            Log.e(TAG,"ACTION_UP");
 | 
				
			||||||
            if (!isMove){
 | 
					            Log.d(TAG, String.format("onTouchEvent:ACTION_UP isMove %s, isbusy %s",isMove,PageFactory.busy()));
 | 
				
			||||||
 | 
					            if (!isMove || PageFactory.busy()){
 | 
				
			||||||
                cancelPage = false;
 | 
					                cancelPage = false;
 | 
				
			||||||
                //是否点击了中间
 | 
					                //是否点击了中间
 | 
				
			||||||
                if (downX > mScreenWidth / 3 && downX < mScreenWidth * 2 / 3 && downY > mScreenHeight / 3 && downY < mScreenHeight * 2 / 3){
 | 
					                if (downX > mScreenWidth / 3 && downX < mScreenWidth * 2 / 3 && downY > mScreenHeight / 3 && downY < mScreenHeight * 2 / 3  ){
 | 
				
			||||||
                    if (mTouchListener != null){
 | 
					                    if (mTouchListener != null){
 | 
				
			||||||
                        mTouchListener.center();
 | 
					                        mTouchListener.center();
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -231,7 +233,9 @@ public class PageWidget extends View {
 | 
				
			||||||
//                    mTouch.x = 0.1f;
 | 
					//                    mTouch.x = 0.1f;
 | 
				
			||||||
//                    mTouch.y = 0.1f;
 | 
					//                    mTouch.y = 0.1f;
 | 
				
			||||||
                    return true;
 | 
					                    return true;
 | 
				
			||||||
                }else if (x < mScreenWidth / 2){
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                else if (x < mScreenWidth / 2){
 | 
				
			||||||
                    isNext = false;
 | 
					                    isNext = false;
 | 
				
			||||||
                }else{
 | 
					                }else{
 | 
				
			||||||
                    isNext = true;
 | 
					                    isNext = true;
 | 
				
			||||||
| 
						 | 
					@ -252,17 +256,20 @@ public class PageWidget extends View {
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (cancelPage && mTouchListener != null){
 | 
					            if(!PageFactory.busy()) {
 | 
				
			||||||
 | 
					                if (cancelPage && mTouchListener != null) {
 | 
				
			||||||
                    mTouchListener.cancel();
 | 
					                    mTouchListener.cancel();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Log.e(TAG,"isNext:" + isNext);
 | 
					                Log.e(TAG, "isNext:" + isNext);
 | 
				
			||||||
                if (!noNext) {
 | 
					                if (!noNext) {
 | 
				
			||||||
                    isRuning = true;
 | 
					                    isRuning = true;
 | 
				
			||||||
                    mAnimationProvider.startAnimation(mScroller);
 | 
					                    mAnimationProvider.startAnimation(mScroller);
 | 
				
			||||||
                    this.postInvalidate();
 | 
					                    this.postInvalidate();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					<vector android:height="24dp" android:tint="#FFFFFF"
 | 
				
			||||||
 | 
					    android:viewportHeight="24.0" android:viewportWidth="24.0"
 | 
				
			||||||
 | 
					    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||||
 | 
					    <path android:fillColor="#FF000000" android:pathData="M6,7h2.5L5,3.5 1.5,7L4,7v10L1.5,17L5,20.5 8.5,17L6,17L6,7zM10,5v2h12L22,5L10,5zM10,19h12v-2L10,17v2zM10,13h12v-2L10,11v2z"/>
 | 
				
			||||||
 | 
					</vector>
 | 
				
			||||||
| 
						 | 
					@ -1,23 +1,22 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<LinearLayout
 | 
					<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					 | 
				
			||||||
    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
				
			||||||
    xmlns:tools="http://schemas.android.com/tools"
 | 
					    xmlns:tools="http://schemas.android.com/tools"
 | 
				
			||||||
    android:layout_height="match_parent"
 | 
					 | 
				
			||||||
    android:layout_width="match_parent"
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
    android:orientation="vertical"
 | 
					    android:orientation="vertical"
 | 
				
			||||||
    tools:context=".BookActivity"
 | 
					    tools:context=".BookActivity"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
<android.support.design.widget.CoordinatorLayout
 | 
					
 | 
				
			||||||
 | 
					    <android.support.design.widget.CoordinatorLayout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="match_parent"
 | 
					        android:layout_height="match_parent"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        android:clipToPadding="false"
 | 
					 | 
				
			||||||
        android:fitsSystemWindows="true"
 | 
					 | 
				
			||||||
        android:layout_weight="1"
 | 
					        android:layout_weight="1"
 | 
				
			||||||
        >
 | 
					        android:clipToPadding="false"
 | 
				
			||||||
 | 
					        android:fitsSystemWindows="true">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <android.support.design.widget.AppBarLayout
 | 
					        <android.support.design.widget.AppBarLayout
 | 
				
			||||||
            android:id="@+id/app_bar"
 | 
					            android:id="@+id/app_bar"
 | 
				
			||||||
| 
						 | 
					@ -31,11 +30,11 @@
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
                android:fitsSystemWindows="true"
 | 
					                android:fitsSystemWindows="true"
 | 
				
			||||||
                app:contentScrim="?attr/colorPrimary"
 | 
					 | 
				
			||||||
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
 | 
					 | 
				
			||||||
                app:collapsedTitleGravity="center"
 | 
					                app:collapsedTitleGravity="center"
 | 
				
			||||||
 | 
					                app:contentScrim="?attr/colorPrimary"
 | 
				
			||||||
                app:expandedTitleGravity="bottom"
 | 
					                app:expandedTitleGravity="bottom"
 | 
				
			||||||
                app:expandedTitleTextAppearance="@style/TitleText"
 | 
					                app:expandedTitleTextAppearance="@style/TitleText"
 | 
				
			||||||
 | 
					                app:layout_scrollFlags="scroll|exitUntilCollapsed"
 | 
				
			||||||
                app:toolbarId="@+id/toolbar">
 | 
					                app:toolbarId="@+id/toolbar">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,29 +50,27 @@
 | 
				
			||||||
                        android:id="@+id/imageViewHead"
 | 
					                        android:id="@+id/imageViewHead"
 | 
				
			||||||
                        android:layout_width="match_parent"
 | 
					                        android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="match_parent"
 | 
					                        android:layout_height="match_parent"
 | 
				
			||||||
                        android:scaleType="fitXY"
 | 
					                        android:scaleType="fitXY" />
 | 
				
			||||||
                        />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <LinearLayout
 | 
					                    <LinearLayout
 | 
				
			||||||
                        android:layout_width="match_parent"
 | 
					                        android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="wrap_content"
 | 
					                        android:layout_height="wrap_content"
 | 
				
			||||||
                        android:gravity="bottom"
 | 
					 | 
				
			||||||
                        android:layout_gravity="center"
 | 
					                        android:layout_gravity="center"
 | 
				
			||||||
                        android:layout_marginLeft="30dp"
 | 
					                        android:layout_marginLeft="30dp"
 | 
				
			||||||
                        android:layout_marginRight="20dp"
 | 
					                        android:layout_marginRight="20dp"
 | 
				
			||||||
 | 
					                        android:gravity="bottom"
 | 
				
			||||||
                        android:orientation="horizontal">
 | 
					                        android:orientation="horizontal">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        <ImageView
 | 
					                        <ImageView
 | 
				
			||||||
                            android:id="@+id/imageView"
 | 
					                            android:id="@+id/imageView"
 | 
				
			||||||
                            style="@style/NovelImage"
 | 
					                            style="@style/NovelImage"
 | 
				
			||||||
 | 
					                            android:layout_width="80dp"
 | 
				
			||||||
 | 
					                            android:layout_height="100dp"
 | 
				
			||||||
                            android:layout_weight="0"
 | 
					                            android:layout_weight="0"
 | 
				
			||||||
                            android:gravity="left"
 | 
					                            android:gravity="left"
 | 
				
			||||||
                            android:scaleType="fitXY"
 | 
					                            android:scaleType="fitXY" />
 | 
				
			||||||
                            android:layout_height="100dp"
 | 
					 | 
				
			||||||
                            android:layout_width="80dp"
 | 
					 | 
				
			||||||
                              />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        <LinearLayout
 | 
					                        <LinearLayout
 | 
				
			||||||
                            android:layout_width="match_parent"
 | 
					                            android:layout_width="match_parent"
 | 
				
			||||||
| 
						 | 
					@ -94,42 +91,40 @@
 | 
				
			||||||
                                android:id="@+id/desc"
 | 
					                                android:id="@+id/desc"
 | 
				
			||||||
                                style="@style/TextViewNovelDesc.head"
 | 
					                                style="@style/TextViewNovelDesc.head"
 | 
				
			||||||
                                android:text=" "
 | 
					                                android:text=" "
 | 
				
			||||||
                                android:visibility="gone"
 | 
					                                android:visibility="gone" />
 | 
				
			||||||
                                />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            <TextView
 | 
					                            <TextView
 | 
				
			||||||
                                android:id="@+id/author"
 | 
					                                android:id="@+id/author"
 | 
				
			||||||
                                style="@style/TextViewNovelAuthor"
 | 
					                                style="@style/TextViewNovelAuthor"
 | 
				
			||||||
                                android:layout_marginTop="3dp"
 | 
					                                android:layout_marginTop="3dp"
 | 
				
			||||||
                                android:layout_marginBottom="1dp"
 | 
					                                android:layout_marginBottom="1dp"
 | 
				
			||||||
                                android:text=""
 | 
					                                android:text="" />
 | 
				
			||||||
                                />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            <LinearLayout
 | 
					                            <LinearLayout
 | 
				
			||||||
                                android:layout_width="match_parent"
 | 
					                                android:layout_width="match_parent"
 | 
				
			||||||
                                android:layout_height="wrap_content"
 | 
					                                android:layout_height="wrap_content"
 | 
				
			||||||
                                android:layout_marginTop="3dp"
 | 
					                                android:layout_marginTop="3dp"
 | 
				
			||||||
                                android:orientation="horizontal">
 | 
					                                android:orientation="horizontal">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                <TextView
 | 
					                                <TextView
 | 
				
			||||||
                                    android:id="@+id/category"
 | 
					                                    android:id="@+id/category"
 | 
				
			||||||
                                    style="@style/TextViewNovelType"
 | 
					                                    style="@style/TextViewNovelType"
 | 
				
			||||||
                                    android:text=""
 | 
					                                    android:text="" />
 | 
				
			||||||
                                    />
 | 
					
 | 
				
			||||||
                                <TextView
 | 
					                                <TextView
 | 
				
			||||||
                                    android:id="@+id/smallCate"
 | 
					                                    android:id="@+id/smallCate"
 | 
				
			||||||
                                    style="@style/TextViewNovelType"
 | 
					                                    style="@style/TextViewNovelType"
 | 
				
			||||||
                                    android:text=""
 | 
					                                    android:text="" />
 | 
				
			||||||
                                    />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            </LinearLayout>
 | 
					                            </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            <TextView
 | 
					                            <TextView
 | 
				
			||||||
                                android:layout_marginTop="2dp"
 | 
					 | 
				
			||||||
                                android:id="@+id/progress"
 | 
					                                android:id="@+id/progress"
 | 
				
			||||||
                                style="@style/TextViewNovelAuthor"
 | 
					                                style="@style/TextViewNovelAuthor"
 | 
				
			||||||
                                android:textColor="@color/common_google_signin_btn_text_light"
 | 
					                                android:layout_marginTop="2dp"
 | 
				
			||||||
                                android:text=""
 | 
					                                android:text=""
 | 
				
			||||||
                                />
 | 
					                                android:textColor="@color/common_google_signin_btn_text_light" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        </LinearLayout>
 | 
					                        </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -144,64 +139,65 @@
 | 
				
			||||||
                    android:layout_width="match_parent"
 | 
					                    android:layout_width="match_parent"
 | 
				
			||||||
                    android:layout_height="40dp"
 | 
					                    android:layout_height="40dp"
 | 
				
			||||||
                    android:minHeight="40dp"
 | 
					                    android:minHeight="40dp"
 | 
				
			||||||
                    app:layout_collapseMode="pin"
 | 
					 | 
				
			||||||
                    app:contentInsetLeft="0dp"
 | 
					                    app:contentInsetLeft="0dp"
 | 
				
			||||||
                    app:contentInsetStart="0dp"
 | 
					                    app:contentInsetStart="0dp"
 | 
				
			||||||
 | 
					                    app:layout_collapseMode="pin"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    app:popupTheme="@style/ToolBarTheme.PopupOverlay"  >
 | 
					                    app:popupTheme="@style/ToolBarTheme.PopupOverlay">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <Button  android:id="@+id/btnFistPage"
 | 
					                    <Button
 | 
				
			||||||
 | 
					                        android:id="@+id/btnFistPage"
 | 
				
			||||||
                        style="@style/buttonCates"
 | 
					                        style="@style/buttonCates"
 | 
				
			||||||
                        android:layout_width="wrap_content"
 | 
					                        android:layout_width="wrap_content"
 | 
				
			||||||
                        android:textColor="@color/white"
 | 
					 | 
				
			||||||
                        android:layout_gravity="right|center_vertical"
 | 
					                        android:layout_gravity="right|center_vertical"
 | 
				
			||||||
                        android:layout_marginRight="10dp"
 | 
					                        android:layout_marginRight="10dp"
 | 
				
			||||||
                        android:text="首页" />
 | 
					                        android:text="首页"
 | 
				
			||||||
 | 
					                        android:textColor="@color/white" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                </android.support.v7.widget.Toolbar>
 | 
					                </android.support.v7.widget.Toolbar>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            </android.support.design.widget.CollapsingToolbarLayout>
 | 
					            </android.support.design.widget.CollapsingToolbarLayout>
 | 
				
			||||||
        </android.support.design.widget.AppBarLayout>
 | 
					        </android.support.design.widget.AppBarLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <include layout="@layout/content_book" />
 | 
					        <include layout="@layout/content_book" />
 | 
				
			||||||
</android.support.design.widget.CoordinatorLayout>
 | 
					    </android.support.design.widget.CoordinatorLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <LinearLayout
 | 
					    <LinearLayout
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="@dimen/botoomNavi"
 | 
					        android:layout_height="@dimen/botoomNavi"
 | 
				
			||||||
        android:orientation="horizontal"
 | 
					 | 
				
			||||||
        android:layout_weight="0"
 | 
					 | 
				
			||||||
        android:layout_gravity="bottom"
 | 
					        android:layout_gravity="bottom"
 | 
				
			||||||
        >
 | 
					        android:layout_weight="0"
 | 
				
			||||||
 | 
					        android:orientation="horizontal">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <Button
 | 
					        <Button
 | 
				
			||||||
            android:id="@+id/btnShelf"
 | 
					            android:id="@+id/btnShelf"
 | 
				
			||||||
            android:text="加入书架"
 | 
					 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
            android:layout_height="match_parent"
 | 
					            android:layout_height="match_parent"
 | 
				
			||||||
            android:drawableTop="@drawable/ic_mood_black_24dp"
 | 
					 | 
				
			||||||
            android:layout_weight="1"
 | 
					            android:layout_weight="1"
 | 
				
			||||||
            android:background="@drawable/item_selector"
 | 
					            android:background="@drawable/item_selector"
 | 
				
			||||||
            />
 | 
					            android:drawableTop="@drawable/ic_mood_black_24dp"
 | 
				
			||||||
 | 
					            android:text="加入书架" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <Button
 | 
					        <Button
 | 
				
			||||||
            android:id="@+id/btnRead"
 | 
					            android:id="@+id/btnRead"
 | 
				
			||||||
            android:text="立即阅读"
 | 
					 | 
				
			||||||
            android:textColor="@color/white"
 | 
					 | 
				
			||||||
            android:textSize="15sp"
 | 
					 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
            android:layout_height="match_parent"
 | 
					            android:layout_height="match_parent"
 | 
				
			||||||
            android:layout_weight="0.8"
 | 
					            android:layout_weight="0.8"
 | 
				
			||||||
            android:background="@drawable/item_selector_red"
 | 
					            android:background="@drawable/item_selector_red"
 | 
				
			||||||
            />
 | 
					            android:text="立即阅读"
 | 
				
			||||||
 | 
					            android:textColor="@color/white"
 | 
				
			||||||
 | 
					            android:textSize="15sp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <Button
 | 
					        <Button
 | 
				
			||||||
            android:id="@+id/btnCacheBook"
 | 
					            android:id="@+id/btnCacheBook"
 | 
				
			||||||
            android:text="全本缓存"
 | 
					 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
            android:layout_height="match_parent"
 | 
					            android:layout_height="match_parent"
 | 
				
			||||||
            android:drawableTop="@drawable/ic_mood_black_24dp"
 | 
					 | 
				
			||||||
            android:layout_weight="1"
 | 
					            android:layout_weight="1"
 | 
				
			||||||
            android:background="@drawable/item_selector"
 | 
					            android:background="@drawable/item_selector"
 | 
				
			||||||
              />
 | 
					            android:drawableTop="@drawable/ic_mood_black_24dp"
 | 
				
			||||||
 | 
					            android:text="全本缓存" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </LinearLayout>
 | 
					    </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,7 @@
 | 
				
			||||||
        </LinearLayout>
 | 
					        </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <LinearLayout style="@style/llGraySplit" />
 | 
					        <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <LinearLayout
 | 
					        <LinearLayout
 | 
				
			||||||
| 
						 | 
					@ -123,7 +123,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <LinearLayout style="@style/llGraySplit" />
 | 
					        <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <LinearLayout
 | 
					        <LinearLayout
 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
| 
						 | 
					@ -162,8 +162,8 @@
 | 
				
			||||||
                android:orientation="horizontal">
 | 
					                android:orientation="horizontal">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <ImageView
 | 
					                <ImageView
 | 
				
			||||||
                android:layout_width="20dp"
 | 
					                android:layout_width="25dp"
 | 
				
			||||||
                android:layout_height="20dp"
 | 
					                android:layout_height="25dp"
 | 
				
			||||||
                android:layout_gravity="center"
 | 
					                android:layout_gravity="center"
 | 
				
			||||||
                android:layout_weight="0"
 | 
					                android:layout_weight="0"
 | 
				
			||||||
                android:layout_marginRight="5dp"
 | 
					                android:layout_marginRight="5dp"
 | 
				
			||||||
| 
						 | 
					@ -181,7 +181,9 @@
 | 
				
			||||||
                    android:layout_width="match_parent"
 | 
					                    android:layout_width="match_parent"
 | 
				
			||||||
                    android:layout_height="wrap_content"
 | 
					                    android:layout_height="wrap_content"
 | 
				
			||||||
                    android:layout_weight="1"
 | 
					                    android:layout_weight="1"
 | 
				
			||||||
                    android:orientation="vertical">
 | 
					                    android:orientation="vertical"
 | 
				
			||||||
 | 
					                    android:layout_marginLeft="5dp"
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
                    <TextView
 | 
					                    <TextView
 | 
				
			||||||
                        android:id="@+id/txtLatestUpdate"
 | 
					                        android:id="@+id/txtLatestUpdate"
 | 
				
			||||||
                        style="@style/TextViewDesc.small"
 | 
					                        style="@style/TextViewDesc.small"
 | 
				
			||||||
| 
						 | 
					@ -191,6 +193,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        />
 | 
					                        />
 | 
				
			||||||
                    <TextView
 | 
					                    <TextView
 | 
				
			||||||
 | 
					                        android:layout_marginTop="2dp"
 | 
				
			||||||
                        android:id="@+id/txtLatestCate"
 | 
					                        android:id="@+id/txtLatestCate"
 | 
				
			||||||
                        style="@style/TextViewDesc"
 | 
					                        style="@style/TextViewDesc"
 | 
				
			||||||
                        android:layout_width="wrap_content"
 | 
					                        android:layout_width="wrap_content"
 | 
				
			||||||
| 
						 | 
					@ -203,7 +206,7 @@
 | 
				
			||||||
            </LinearLayout>
 | 
					            </LinearLayout>
 | 
				
			||||||
        </LinearLayout>
 | 
					        </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <LinearLayout style="@style/llGraySplit" />
 | 
					        <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       <!--
 | 
					       <!--
 | 
				
			||||||
        <LinearLayout
 | 
					        <LinearLayout
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,31 @@
 | 
				
			||||||
    android:layout_height="match_parent"
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
    android:background="@color/white"
 | 
					    android:background="@color/white"
 | 
				
			||||||
    android:orientation="vertical">
 | 
					    android:orientation="vertical">
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					    <LinearLayout
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:orientation="horizontal"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					        <TextView
 | 
				
			||||||
 | 
					            android:id="@+id/tvTitle"
 | 
				
			||||||
 | 
					            style="@style/TitleText"
 | 
				
			||||||
 | 
					            android:layout_weight="1"
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="wrap_content" />
 | 
				
			||||||
 | 
					        <ImageButton
 | 
				
			||||||
 | 
					            android:id="@+id/btnSort"
 | 
				
			||||||
 | 
					            android:layout_weight="0"
 | 
				
			||||||
 | 
					            android:layout_width="wrap_content"
 | 
				
			||||||
 | 
					            android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					            android:src="@drawable/ic_format_line_spacing_black_24dp"
 | 
				
			||||||
 | 
					            style="@style/buttonCates"/>
 | 
				
			||||||
 | 
					    </LinearLayout>-->
 | 
				
			||||||
 | 
					    <TextView
 | 
				
			||||||
 | 
					        android:id="@+id/tvChapts"
 | 
				
			||||||
 | 
					        style="@style/TextViewNovelTitle"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ListView
 | 
					    <ListView
 | 
				
			||||||
        android:id="@+id/lv_catalogue"
 | 
					        android:id="@+id/lv_catalogue"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,31 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
    <android.support.v4.widget.SwipeRefreshLayout
 | 
					    <android.support.v4.widget.SwipeRefreshLayout
 | 
				
			||||||
        xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					        xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="match_parent"
 | 
					        android:layout_height="match_parent"
 | 
				
			||||||
        android:orientation="vertical"
 | 
					        android:orientation="vertical"
 | 
				
			||||||
    android:layout_marginBottom="-2dp"
 | 
					    android:layout_marginBottom="-2dp"
 | 
				
			||||||
        android:id="@+id/swipeLayout" >
 | 
					        android:id="@+id/swipeLayout" >
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					    <com.novelbook.android.adapter.JudgeNestedScrollView
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="match_parent">
 | 
				
			||||||
 | 
					    <com.ixiaow.multilayout.MultiLayout
 | 
				
			||||||
 | 
					        android:id="@+id/topic_layout"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        app:tab_indicator_color="@color/colorAccent"
 | 
				
			||||||
 | 
					        app:tab_indicator_height="1dp"
 | 
				
			||||||
 | 
					        app:tab_indicator_radius="1dp"
 | 
				
			||||||
 | 
					        app:tab_text_size="14sp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        app:tl_indicator_style="BLOCK"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        app:tl_textUnselectColor="@color/darkgray" />
 | 
				
			||||||
 | 
					</com.novelbook.android.adapter.JudgeNestedScrollView>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- TODO: Update blank fragment layout -->
 | 
					    <!-- TODO: Update blank fragment layout -->
 | 
				
			||||||
    <android.support.v7.widget.RecyclerView
 | 
					    <android.support.v7.widget.RecyclerView
 | 
				
			||||||
        android:id="@+id/rvBangdan"
 | 
					        android:id="@+id/rvBangdan"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,12 +8,13 @@
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="match_parent"
 | 
					        android:layout_height="match_parent"
 | 
				
			||||||
        android:orientation="vertical">
 | 
					        android:orientation="vertical">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <android.support.v7.widget.RecyclerView
 | 
					    <android.support.v7.widget.RecyclerView
 | 
				
			||||||
        android:id="@+id/rvBooklist"
 | 
					        android:id="@+id/rvBooklist"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="match_parent"
 | 
					        android:layout_height="match_parent"
 | 
				
			||||||
        android:nestedScrollingEnabled="false"
 | 
					        android:nestedScrollingEnabled="true"
 | 
				
			||||||
        android:paddingTop="5dp"
 | 
					        android:paddingTop="5dp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,128 +1,162 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    xmlns:tools="http://schemas.android.com/tools"
 | 
					 | 
				
			||||||
    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
				
			||||||
    android:orientation="vertical"
 | 
					    xmlns:tools="http://schemas.android.com/tools"
 | 
				
			||||||
    android:layout_width="match_parent"
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
    android:layout_height="match_parent"
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
    tools:context=".Fragments.Fragment_paihang">
 | 
					    android:clipToPadding="false"
 | 
				
			||||||
 | 
					    android:fitsSystemWindows="true">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- TODO: Update blank fragment layout -->
 | 
					
 | 
				
			||||||
    <android.support.v4.widget.SwipeRefreshLayout
 | 
					        <android.support.design.widget.AppBarLayout
 | 
				
			||||||
 | 
					            android:id="@+id/app_bar"
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="@dimen/app_bar_height_250"
 | 
				
			||||||
 | 
					            android:fitsSystemWindows="true"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            android:theme="@style/ToolBarTheme.AppBarOverlay">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <android.support.design.widget.CollapsingToolbarLayout
 | 
				
			||||||
 | 
					                android:id="@+id/toolbar_layout"
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
        android:orientation="vertical"
 | 
					                android:fitsSystemWindows="true"
 | 
				
			||||||
        android:id="@+id/swipeLayout" >
 | 
					                app:collapsedTitleGravity="center"
 | 
				
			||||||
 | 
					                app:contentScrim="?attr/colorPrimary"
 | 
				
			||||||
        <FrameLayout
 | 
					                app:expandedTitleGravity="bottom"
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					                app:expandedTitleTextAppearance="@style/TitleText"
 | 
				
			||||||
        android:layout_height="wrap_content">
 | 
					                app:layout_scrollFlags="scroll|exitUntilCollapsed"
 | 
				
			||||||
 | 
					                app:toolbarId="@+id/toolbar">
 | 
				
			||||||
    <android.support.v4.widget.NestedScrollView
 | 
					 | 
				
			||||||
            android:id="@+id/n_scroll_view"
 | 
					 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					 | 
				
			||||||
            android:layout_height="match_parent"
 | 
					 | 
				
			||||||
            android:fillViewport="true"
 | 
					 | 
				
			||||||
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <LinearLayout
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					 | 
				
			||||||
                android:layout_height="match_parent"
 | 
					 | 
				
			||||||
                android:orientation="vertical"
 | 
					 | 
				
			||||||
                >
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     <LinearLayout
 | 
					                     <LinearLayout
 | 
				
			||||||
                    android:id="@+id/llTabs"
 | 
					                    android:id="@+id/llTabs"
 | 
				
			||||||
                    android:layout_width="match_parent"
 | 
					                    android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="match_parent"
 | 
					                    android:layout_height="wrap_content"
 | 
				
			||||||
                    android:orientation="vertical"
 | 
					                    android:orientation="vertical"
 | 
				
			||||||
 | 
					                    android:background="@color/white"
 | 
				
			||||||
                        >
 | 
					                    android:paddingBottom="16dp"
 | 
				
			||||||
 | 
					                    android:layout_marginTop="40dp"
 | 
				
			||||||
                    <com.flyco.tablayout.CommonTabLayout
 | 
					                    app:layout_collapseMode="pin"
 | 
				
			||||||
                        android:id="@+id/tab_layout1"
 | 
					                    app:layout_collapseParallaxMultiplier="0.7">
 | 
				
			||||||
 | 
					                         <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					                         <LinearLayout
 | 
				
			||||||
                             android:layout_width="match_parent"
 | 
					                             android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="40dp"
 | 
					                             android:layout_height="wrap_content"
 | 
				
			||||||
                        app:tl_iconVisible="false"
 | 
					                             android:orientation="horizontal">
 | 
				
			||||||
                        android:paddingLeft="5dp"
 | 
					                             <com.ixiaow.multilayout.MultiLayout
 | 
				
			||||||
                        android:paddingRight="5dp"
 | 
					                                 android:id="@+id/topic_layout1"
 | 
				
			||||||
                        app:tl_indicator_margin_left="2dp"
 | 
					                                 android:layout_width="90dp"
 | 
				
			||||||
                        app:tl_indicator_margin_right="2dp"
 | 
					                                 android:layout_height="wrap_content"
 | 
				
			||||||
                        app:tl_indicator_style="BLOCK"
 | 
					                                 app:tab_indicator_color="@color/colorAccent"
 | 
				
			||||||
                        app:tl_textSelectColor="@color/white"
 | 
					                                 app:tab_indicator_height="0dp"
 | 
				
			||||||
                        app:tl_textUnselectColor="@color/darkgray"
 | 
					                                 app:tab_indicator_radius="0dp"
 | 
				
			||||||
                        app:tl_textsize="14sp"
 | 
					                                 app:tab_text_size="15sp"
 | 
				
			||||||
                        app:tl_indicator_color="@color/red"
 | 
					                                 app:tab_text_width="40dp"
 | 
				
			||||||
                        app:tl_tab_space_equal ="false"
 | 
					                                 android:layout_weight="0"
 | 
				
			||||||
                        app:tl_indicator_width="@dimen/tabBlock_width"
 | 
					                                 app:tl_textUnselectColor="@color/darkgray" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        />
 | 
					                            <TextView
 | 
				
			||||||
                    <com.flyco.tablayout.CommonTabLayout
 | 
					                                android:layout_weight="1"
 | 
				
			||||||
                        android:id="@+id/tab_layout2"
 | 
					 | 
				
			||||||
                                android:layout_width="match_parent"
 | 
					                                android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="40dp"
 | 
					                                android:layout_height="wrap_content" />
 | 
				
			||||||
                        app:tl_iconVisible="false"
 | 
					 | 
				
			||||||
                        android:paddingLeft="5dp"
 | 
					 | 
				
			||||||
                        android:paddingRight="5dp"
 | 
					 | 
				
			||||||
                        app:tl_indicator_margin_left="2dp"
 | 
					 | 
				
			||||||
                        app:tl_indicator_margin_right="2dp"
 | 
					 | 
				
			||||||
                        app:tl_indicator_style="BLOCK"
 | 
					 | 
				
			||||||
                        app:tl_textSelectColor="@color/white"
 | 
					 | 
				
			||||||
                        app:tl_textUnselectColor="@color/darkgray"
 | 
					 | 
				
			||||||
                        app:tl_textsize="14sp"
 | 
					 | 
				
			||||||
                        app:tl_indicator_color="@color/red"
 | 
					 | 
				
			||||||
                        app:tl_tab_space_equal ="true"
 | 
					 | 
				
			||||||
                        app:tl_indicator_width="@dimen/tabBlock_width"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        />
 | 
					                         </LinearLayout>
 | 
				
			||||||
                    <com.flyco.tablayout.CommonTabLayout
 | 
					
 | 
				
			||||||
                        android:id="@+id/tab_layout3"
 | 
					                    <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <com.ixiaow.multilayout.MultiLayout
 | 
				
			||||||
 | 
					                        android:id="@+id/topic_layout"
 | 
				
			||||||
                        android:layout_width="match_parent"
 | 
					                        android:layout_width="match_parent"
 | 
				
			||||||
                        android:layout_height="40dp"
 | 
					                        android:layout_height="wrap_content"
 | 
				
			||||||
                        app:tl_iconVisible="false"
 | 
					                        app:tab_indicator_color="@color/colorAccent"
 | 
				
			||||||
                        android:paddingLeft="5dp"
 | 
					                        app:tab_indicator_height="0dp"
 | 
				
			||||||
                        android:paddingRight="5dp"
 | 
					                        app:tab_indicator_radius="0dp"
 | 
				
			||||||
                        app:tl_indicator_margin_left="2dp"
 | 
					                        app:tab_text_size="14sp"
 | 
				
			||||||
                        app:tl_indicator_margin_right="2dp"
 | 
					 | 
				
			||||||
                        app:tl_indicator_style="BLOCK"
 | 
					                        app:tl_indicator_style="BLOCK"
 | 
				
			||||||
                        app:tl_textSelectColor="@color/white"
 | 
					
 | 
				
			||||||
                        app:tl_textUnselectColor="@color/darkgray"
 | 
					                        app:tl_textUnselectColor="@color/darkgray" />
 | 
				
			||||||
                        app:tl_textsize="14sp"
 | 
					
 | 
				
			||||||
                        app:tl_indicator_color="@color/red"
 | 
					                    <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
                        app:tl_tab_space_equal ="false"
 | 
					
 | 
				
			||||||
                        app:tl_indicator_width="@dimen/tabBlock_width"/>
 | 
					
 | 
				
			||||||
 | 
					                    <com.ixiaow.multilayout.MultiLayout
 | 
				
			||||||
 | 
					                        android:id="@+id/topic_layout2"
 | 
				
			||||||
 | 
					                        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					                        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					                        app:tab_indicator_color="@color/colorAccent"
 | 
				
			||||||
 | 
					                        app:tab_indicator_height="0dp"
 | 
				
			||||||
 | 
					                        app:tab_indicator_radius="0dp"
 | 
				
			||||||
 | 
					                        app:tab_text_size="15sp"
 | 
				
			||||||
 | 
					                        app:tab_text_width="60dp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        app:tl_textUnselectColor="@color/darkgray" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <LinearLayout style="@style/llGraySplit.2dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                </LinearLayout>
 | 
					                </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <android.support.v7.widget.Toolbar
 | 
				
			||||||
       <!-- data begin -->
 | 
					                    android:id="@+id/toolbar"
 | 
				
			||||||
          <android.support.v7.widget.RecyclerView
 | 
					 | 
				
			||||||
            android:id="@+id/rvPaihang"
 | 
					 | 
				
			||||||
            android:divider="#ffff0000"
 | 
					 | 
				
			||||||
            android:dividerHeight="10dp"
 | 
					 | 
				
			||||||
                    android:layout_width="match_parent"
 | 
					                    android:layout_width="match_parent"
 | 
				
			||||||
            android:layout_height="match_parent"
 | 
					                    android:layout_height="40dp"
 | 
				
			||||||
            android:nestedScrollingEnabled="false"
 | 
					                    android:minHeight="5dp"
 | 
				
			||||||
            android:paddingBottom="50dp"
 | 
					                    app:contentInsetLeft="0dp"
 | 
				
			||||||
            />
 | 
					                    app:contentInsetStart="0dp"
 | 
				
			||||||
 | 
					                    app:layout_collapseMode="pin"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    app:popupTheme="@style/ToolBarTheme.PopupOverlay">
 | 
				
			||||||
        </LinearLayout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </android.support.v4.widget.NestedScrollView>
 | 
					 | 
				
			||||||
                    <TextView
 | 
					                    <TextView
 | 
				
			||||||
                        android:id="@+id/tvHint"
 | 
					                        android:id="@+id/tvHint"
 | 
				
			||||||
 | 
					                        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					                        android:layout_height="40dp"
 | 
				
			||||||
 | 
					                        android:background="@color/white"
 | 
				
			||||||
                        android:gravity="center"
 | 
					                        android:gravity="center"
 | 
				
			||||||
                        android:text="selected texts"
 | 
					                        android:text="selected texts"
 | 
				
			||||||
                        android:textColor="@color/red"
 | 
					                        android:textColor="@color/red"
 | 
				
			||||||
                android:layout_width="match_parent"
 | 
					 | 
				
			||||||
                        android:textSize="15sp"
 | 
					                        android:textSize="15sp"
 | 
				
			||||||
               android:visibility="gone"
 | 
					                        />
 | 
				
			||||||
                android:background="@color/white"
 | 
					                </android.support.v7.widget.Toolbar>
 | 
				
			||||||
                android:layout_height="40dp" />
 | 
					
 | 
				
			||||||
    </FrameLayout>
 | 
					            </android.support.design.widget.CollapsingToolbarLayout>
 | 
				
			||||||
    </android.support.v4.widget.SwipeRefreshLayout>
 | 
					        </android.support.design.widget.AppBarLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <android.support.v4.widget.SwipeRefreshLayout
 | 
				
			||||||
 | 
					            android:id="@+id/swipeLayout"
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="match_parent"
 | 
				
			||||||
 | 
					            android:layout_weight="1"
 | 
				
			||||||
 | 
					            android:layout_below ="@+id/app_bar"
 | 
				
			||||||
 | 
					            app:layout_behavior="@string/appbar_scrolling_view_behavior"
 | 
				
			||||||
 | 
					            android:orientation="vertical">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <android.support.v7.widget.RecyclerView
 | 
				
			||||||
 | 
					                android:id="@+id/rvPaihang"
 | 
				
			||||||
 | 
					                android:layout_width="match_parent"
 | 
				
			||||||
 | 
					                android:layout_height="match_parent"
 | 
				
			||||||
 | 
					                android:divider="#ffff0000"
 | 
				
			||||||
 | 
					                android:dividerHeight="10dp"
 | 
				
			||||||
 | 
					                android:nestedScrollingEnabled="true"
 | 
				
			||||||
 | 
					                android:paddingBottom="50dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </android.support.v4.widget.SwipeRefreshLayout>
 | 
				
			||||||
 | 
					   <TextView
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="1300dp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </android.support.design.widget.CoordinatorLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</LinearLayout>
 | 
					 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
    android:layout_width="match_parent"
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
    android:layout_height="wrap_content"
 | 
					    android:layout_height="wrap_content"
 | 
				
			||||||
     android:orientation="vertical"
 | 
					     android:orientation="vertical"
 | 
				
			||||||
 | 
					    android:id="@+id/llout"
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -105,7 +106,7 @@
 | 
				
			||||||
            android:orientation="vertical"
 | 
					            android:orientation="vertical"
 | 
				
			||||||
            android:layout_width="60dp"
 | 
					            android:layout_width="60dp"
 | 
				
			||||||
            android:layout_height="70dp"
 | 
					            android:layout_height="70dp"
 | 
				
			||||||
 | 
					            android:id="@+id/llBookdetail"
 | 
				
			||||||
            android:gravity="center"
 | 
					            android:gravity="center"
 | 
				
			||||||
            android:background="@drawable/item_selector"
 | 
					            android:background="@drawable/item_selector"
 | 
				
			||||||
            android:clickable="true"
 | 
					            android:clickable="true"
 | 
				
			||||||
| 
						 | 
					@ -119,6 +120,7 @@
 | 
				
			||||||
                android:src="@drawable/googleg_standard_color_18" />
 | 
					                android:src="@drawable/googleg_standard_color_18" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <TextView
 | 
					            <TextView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                android:layout_width="wrap_content"
 | 
					                android:layout_width="wrap_content"
 | 
				
			||||||
                android:layout_height="30dp"
 | 
					                android:layout_height="30dp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent">
 | 
				
			||||||
 | 
					    <android.support.v4.widget.SwipeRefreshLayout
 | 
				
			||||||
 | 
					        android:id="@+id/swipeLayout"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="match_parent"
 | 
				
			||||||
 | 
					        android:layout_weight="1"
 | 
				
			||||||
 | 
					        android:layout_below ="@+id/app_bar"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        android:orientation="vertical">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <android.support.v7.widget.RecyclerView
 | 
				
			||||||
 | 
					            android:id="@+id/rvPaihang"
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="match_parent"
 | 
				
			||||||
 | 
					            android:divider="#ffff0000"
 | 
				
			||||||
 | 
					            android:dividerHeight="10dp"
 | 
				
			||||||
 | 
					            android:nestedScrollingEnabled="true"
 | 
				
			||||||
 | 
					            android:paddingBottom="50dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <TextView
 | 
				
			||||||
 | 
					            android:id="@+id/tvHint"
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="40dp"
 | 
				
			||||||
 | 
					            android:background="@color/white"
 | 
				
			||||||
 | 
					            android:gravity="center"
 | 
				
			||||||
 | 
					            android:text="selected texts"
 | 
				
			||||||
 | 
					            android:textColor="@color/red"
 | 
				
			||||||
 | 
					            android:textSize="15sp"
 | 
				
			||||||
 | 
					            android:visibility="gone" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </android.support.v4.widget.SwipeRefreshLayout>
 | 
				
			||||||
 | 
					</LinearLayout>
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,18 @@
 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
            android:layout_height="?attr/actionBarSize"
 | 
					            android:layout_height="?attr/actionBarSize"
 | 
				
			||||||
            android:background="?attr/colorPrimary"
 | 
					            android:background="?attr/colorPrimary"
 | 
				
			||||||
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 | 
					            app:popupTheme="@style/AppTheme.PopupOverlay">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <ImageButton
 | 
				
			||||||
 | 
					                android:id="@+id/btnSort"
 | 
				
			||||||
 | 
					                android:layout_weight="0"
 | 
				
			||||||
 | 
					                android:layout_gravity ="right|center_vertical"
 | 
				
			||||||
 | 
					                android:layout_marginRight="10dp"
 | 
				
			||||||
 | 
					                android:layout_width="wrap_content"
 | 
				
			||||||
 | 
					                android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					                android:src="@drawable/ic_format_line_spacing_black_24dp"
 | 
				
			||||||
 | 
					                style="@style/buttonCates"/>
 | 
				
			||||||
 | 
					        </android.support.v7.widget.Toolbar>
 | 
				
			||||||
    </android.support.design.widget.AppBarLayout>
 | 
					    </android.support.design.widget.AppBarLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!--<ListView-->
 | 
					    <!--<ListView-->
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,19 @@
 | 
				
			||||||
        android:singleLine="true"
 | 
					        android:singleLine="true"
 | 
				
			||||||
        android:gravity="center_vertical"
 | 
					        android:gravity="center_vertical"
 | 
				
			||||||
        android:layout_marginLeft="10dp"
 | 
					        android:layout_marginLeft="10dp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        android:layout_weight="1"
 | 
				
			||||||
 | 
					         />
 | 
				
			||||||
 | 
					    <TextView
 | 
				
			||||||
 | 
					        android:id="@+id/catalogue_cache"
 | 
				
			||||||
 | 
					        style="@style/TextViewNovelDesc"
 | 
				
			||||||
 | 
					        android:layout_width="wrap_content"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:singleLine="true"
 | 
				
			||||||
 | 
					        android:layout_weight="0"
 | 
				
			||||||
 | 
					        android:gravity="right|center_vertical"
 | 
				
			||||||
 | 
					        android:text="@string/cached"
 | 
				
			||||||
 | 
					        android:layout_marginLeft="10dp"
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</LinearLayout>
 | 
					</LinearLayout>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,6 +47,7 @@
 | 
				
			||||||
    <dimen name="botoomNavi">42dp</dimen>
 | 
					    <dimen name="botoomNavi">42dp</dimen>
 | 
				
			||||||
    <dimen name="_10dp">10dp</dimen>
 | 
					    <dimen name="_10dp">10dp</dimen>
 | 
				
			||||||
    <dimen name="toolbarHeight">40dp</dimen>
 | 
					    <dimen name="toolbarHeight">40dp</dimen>
 | 
				
			||||||
 | 
					    <dimen name="app_bar_height_250">240dp</dimen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Default screen margins, per the Android Design guidelines. -->
 | 
					    <!-- Default screen margins, per the Android Design guidelines. -->
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,6 +187,7 @@
 | 
				
			||||||
    <string name="noRecord">没有数据</string>
 | 
					    <string name="noRecord">没有数据</string>
 | 
				
			||||||
    <string name="title_Activity_ChgSource">换源</string>
 | 
					    <string name="title_Activity_ChgSource">换源</string>
 | 
				
			||||||
    <string name="_00_00">00.00%</string>
 | 
					    <string name="_00_00">00.00%</string>
 | 
				
			||||||
 | 
					    <string name="cached">已缓存</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <string-array name="voicer_cloud_entries">
 | 
					    <string-array name="voicer_cloud_entries">
 | 
				
			||||||
        <item>小燕—女青、中英、普通话</item>
 | 
					        <item>小燕—女青、中英、普通话</item>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -205,6 +205,7 @@
 | 
				
			||||||
    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
 | 
					    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
 | 
				
			||||||
    <orderEntry type="library" name="Gradle: com.android.support:viewpager:28.0.0@aar" level="project" />
 | 
					    <orderEntry type="library" name="Gradle: com.android.support:viewpager:28.0.0@aar" level="project" />
 | 
				
			||||||
    <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement:16.0.1@aar" level="project" />
 | 
					    <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement:16.0.1@aar" level="project" />
 | 
				
			||||||
 | 
					    <orderEntry type="library" name="Gradle: com.github.ixiaow:multilayout:1.0.0@aar" level="project" />
 | 
				
			||||||
    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
 | 
					    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
 | 
				
			||||||
    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
 | 
					    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
 | 
				
			||||||
    <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
 | 
					    <orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue