This commit is contained in:
mwang 2019-05-21 23:30:59 +08:00
parent 0638761d96
commit d2b450806c
39 changed files with 761 additions and 266 deletions

View File

@ -168,4 +168,8 @@ dependencies {
implementation 'com.github.ixiaow:multilayout:1.0.0' implementation 'com.github.ixiaow:multilayout:1.0.0'
implementation 'com.umeng.umsdk:analytics:8.0.2' implementation 'com.umeng.umsdk:analytics:8.0.2'
implementation 'com.umeng.umsdk:common:2.0.2' implementation 'com.umeng.umsdk:common:2.0.2'
implementation 'q.rorbin:VerticalTabLayout:1.2.5'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16'
} }

View File

@ -49,6 +49,7 @@
<activity <activity
android:name=".ReadActivity" android:name=".ReadActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/ToolBarTheme.NoActionBar"></activity> android:theme="@style/ToolBarTheme.NoActionBar"></activity>
<activity <activity
android:name=".Main2Activity" android:name=".Main2Activity"

View File

@ -9,28 +9,42 @@ import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.TextView;
import com.ixiaow.multilayout.MultiLayout;
import com.novelbook.android.Fragments.BasicFragment; import com.novelbook.android.Fragments.BasicFragment;
import com.novelbook.android.Fragments.Fragment_booklist; import com.novelbook.android.Fragments.Fragment_booklist;
import com.novelbook.android.Fragments.Fragment_shudan_list; import com.novelbook.android.Fragments.Fragment_shudan_list;
import com.flyco.tablayout.SlidingTabLayout; import com.flyco.tablayout.SlidingTabLayout;
import com.novelbook.android.bean.ProgressType;
import com.novelbook.android.utils.Constants;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import butterknife.BindView; import butterknife.BindView;
public class Activity_cate_books extends Activity_base { 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 Activity_cate_books extends Activity_base {
public static final String TAG=Activity_cate_books.class.getSimpleName();
public static String EXTRNAME="catename"; public static String EXTRNAME="catename";
@BindView(R.id.viewpager) @BindView(R.id.viewpager)
ViewPager mViewpager; ViewPager mViewpager;
@BindView(R.id.tab_layout) @BindView(R.id.tab_layout)
SlidingTabLayout tabLayout; SlidingTabLayout tabLayout;
@BindView(R.id.topic_layout)
MultiLayout topic_layout;
String cate=""; String cate="";
private ArrayList<BasicFragment> mFragments; private ArrayList<BasicFragment> mFragments;
ArrayList<View> mList; ArrayList<View> mList;
String[] mTitle; String[] mTitle;
public static String TAG="com.novelbook.android.Activity_cate_books";
private int tabPos;
@Override @Override
public int getLayoutRes() { public int getLayoutRes() {
@ -40,7 +54,7 @@ public class Activity_cate_books extends Activity_base {
@Override @Override
protected void initViews() { protected void initViews() {
creatToolbar(); creatToolbar();
initTabs(); initTabs2();
} }
@ -62,17 +76,37 @@ public class Activity_cate_books extends Activity_base {
//---------tabs------------- //---------tabs-------------
void initTabs() { void initTabs() {
List<String> lstType = new ArrayList<String>() ;//Arrays.asList(lstProgress);
if (mFragments == null || mFragments.size() == 0) { for(ProgressType progressType : Constants.lstProgressType){
mTitle = new String[]{"新书", "连载", "完本"}; lstType.add(progressType.getName());
mFragments = new ArrayList<BasicFragment>();
mFragments.add(Fragment_booklist.newInstance(cate, 1));
mFragments.add(Fragment_booklist.newInstance(cate, 2));
mFragments.add(Fragment_booklist.newInstance(cate, 3));
Log.d(TAG, "initial fragments in tabs ");
} }
topic_layout.initTabNames(lstType) ;
topic_layout.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
@Override
public void select(TextView textView, int i, int i1) {
Log.d(TAG, String.format("select: text %si %s i1 %s ",textView.getText(),i,i1));
tabPos = i1;
tabChanged();
}
});
}
void initTabs2() {
if (mFragments == null ) {
mFragments = new ArrayList<BasicFragment>();
}
mFragments.clear();
for(ProgressType progressType : Constants.lstProgressType) {
mFragments.add(Fragment_booklist.newInstance(cate, progressType.getId()));
}
Log.d(TAG, "initial fragments in tabs ");
Log.d(TAG, "set viewPager adapter "); Log.d(TAG, "set viewPager adapter ");
// FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(activity.getSupportFragmentManager()) { 第一次进入没问题再次进入ViewPager的fragment时里面内容就没了,数据丢失 https://blog.csdn.net/allan_bst/article/details/64920076 // FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(activity.getSupportFragmentManager()) { 第一次进入没问题再次进入ViewPager的fragment时里面内容就没了,数据丢失 https://blog.csdn.net/allan_bst/article/details/64920076
FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@ -89,20 +123,71 @@ public class Activity_cate_books extends Activity_base {
//ViewPager与TabLayout绑定后这里获取到PageTitle就是Tab的Text //ViewPager与TabLayout绑定后这里获取到PageTitle就是Tab的Text
@Override @Override
public CharSequence getPageTitle(int position) { public CharSequence getPageTitle(int position) {
return mTitle[position]; return Constants.lstProgressType.get(position).getName();
} }
}; };
mViewpager.setAdapter(mAdapter); mViewpager.setAdapter(mAdapter);
mViewpager.setOffscreenPageLimit(3); mViewpager.setOffscreenPageLimit( Constants.lstProgressType.size()+1);
tabLayout.setViewPager(mViewpager);
tabLayout.setViewPager(mViewpager);
// tabLayout.setViewPager(mViewpager, mTitle, activity, mFragments); // tabLayout.setViewPager(mViewpager, mTitle, activity, mFragments);
mViewpager.setCurrentItem(0); mViewpager.setCurrentItem(0);
} }
int tmp=0;
private void tabChanged() {
Log.d(TAG, String.format("tabChanged: to load data tmp %s" , tmp ));
tmp++;
if(lstSex==null) return;
if (mFragments == null ) {
mFragments = new ArrayList<BasicFragment>();
}
mFragments.clear();
mFragments.add(Fragment_booklist.newInstance(cate, Constants.lstProgressType.get(tabPos).getId()));
Log.d(TAG, "initial fragments in tabs ");
Log.d(TAG, "set viewPager adapter ");
// FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(activity.getSupportFragmentManager()) { 第一次进入没问题再次进入ViewPager的fragment时里面内容就没了,数据丢失 https://blog.csdn.net/allan_bst/article/details/64920076
FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
//ViewPager与TabLayout绑定后这里获取到PageTitle就是Tab的Text
@Override
public CharSequence getPageTitle(int position) {
return mTitle[position];
}
};
mViewpager.setAdapter(mAdapter);
mViewpager.setOffscreenPageLimit(2);
// tabLayout.setViewPager(mViewpager);
// tabLayout.setViewPager(mViewpager, mTitle, activity, mFragments);
mViewpager.setCurrentItem(0);
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. // Inflate the menu; this adds items to the action bar if it is present.

View File

@ -30,6 +30,7 @@ public static String TAG ="com.novelbook.android.paihangbang";
@BindView(R.id.tab_layout) @BindView(R.id.tab_layout)
SlidingTabLayout tabLayout; SlidingTabLayout tabLayout;
public static final String EXTR_FN="fn"; public static final String EXTR_FN="fn";
public static final String EXTR_CID="cid";
public static final String EXTR_TITLE="title"; public static final String EXTR_TITLE="title";
public static final String EXTR_BANGDAN ="bangdan"; public static final String EXTR_BANGDAN ="bangdan";
public static final String EXTR_SEARCH ="search"; public static final String EXTR_SEARCH ="search";
@ -47,7 +48,7 @@ public static String TAG ="com.novelbook.android.paihangbang";
initTabs(); initTabs();
} }
int cid;
String bangdan,fn,keyword,histroy; String bangdan,fn,keyword,histroy;
@Override @Override
@ -58,7 +59,7 @@ public static String TAG ="com.novelbook.android.paihangbang";
} }
fn = getIntent().getStringExtra(EXTR_FN); fn = getIntent().getStringExtra(EXTR_FN);
cid = getIntent().getIntExtra(EXTR_CID,-1);
bangdan = getIntent().getStringExtra(EXTR_BANGDAN); bangdan = getIntent().getStringExtra(EXTR_BANGDAN);
String title = getIntent().getStringExtra(EXTR_TITLE); String title = getIntent().getStringExtra(EXTR_TITLE);
@ -95,6 +96,8 @@ public static String TAG ="com.novelbook.android.paihangbang";
}else if(!TextUtils.isEmpty(fn)){ }else if(!TextUtils.isEmpty(fn)){
mFragments.add(Fragment_booklist.newInstance(fn, bangdan)); //首页更多 mFragments.add(Fragment_booklist.newInstance(fn, bangdan)); //首页更多
}else if(cid>0){
mFragments.add(Fragment_booklist.newInstance(cid, bangdan)); //首页更多
} }

View File

@ -268,7 +268,12 @@ public class BookActivity extends Activity_base {
this.txtLatestCate.setText(mNovel.getChapterName()); this.txtLatestCate.setText(mNovel.getChapterName());
tvLastUpdate.setText(CommonUtil.getDateString( mNovel.getLastUpdateTime())); tvLastUpdate.setText(CommonUtil.getDateString( mNovel.getLastUpdateTime()));
loadImageView(mNovel.getCover(),imageView); loadImageView(mNovel.getCover(),imageView);
gaosiHeadPic(); try {
gaosiHeadPic();
}catch (Exception e){
Log.e(TAG, "setBookDetailInfo: gosiheadpic error", e);
}
} }
void gaosiHeadPic(){ void gaosiHeadPic(){
//new BlurTransformation(BookActivity.this, 10)).into(mImageView); //new BlurTransformation(BookActivity.this, 10)).into(mImageView);

View File

@ -134,7 +134,7 @@ public abstract class BasicFragment extends Fragment {
} }
public abstract void setFTag(); public void setFTag(){};
Handler handler = new Handler() { Handler handler = new Handler() {
@Override @Override
@ -380,7 +380,7 @@ public abstract class BasicFragment extends Fragment {
Intent intent = new Intent(activity, Activity_paihangbang.class); Intent intent = new Intent(activity, Activity_paihangbang.class);
String title = TextUtils.isEmpty(nb.getTitle()) ? nb.getName() : nb.getTitle() ; String title = TextUtils.isEmpty(nb.getTitle()) ? nb.getName() : nb.getTitle() ;
intent.putExtra(Activity_paihangbang.EXTR_FN,nb.getFn() ); intent.putExtra(Activity_paihangbang.EXTR_CID,nb.getCid() );
intent.putExtra(Activity_paihangbang.EXTR_TITLE,title ); intent.putExtra(Activity_paihangbang.EXTR_TITLE,title );
intent.putExtra(Activity_paihangbang.EXTR_BANGDAN,title ); intent.putExtra(Activity_paihangbang.EXTR_BANGDAN,title );
startActivity(intent); startActivity(intent);

View File

@ -177,7 +177,7 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc
} }
} }
int maxSlept =NetUtil.isNetworkConnected()?50 :200; int maxSlept =NetUtil.isNetworkConnected()?250 :100;
int slepttime = 0; int slepttime = 0;
while ( slepttime < maxSlept && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0)) { while ( slepttime < maxSlept && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0)) {
try { try {

View File

@ -80,6 +80,7 @@ public class Fragment_Shelf extends BasicFragment {
private List<Novel> bookLists; private List<Novel> bookLists;
// private ShelfAdapter adapter; // private ShelfAdapter adapter;
private String noveIds ; private String noveIds ;
BottomSheetDialog bottomSheetDialog;
public Fragment_Shelf() { public Fragment_Shelf() {
// Required empty public constructor // Required empty public constructor
} }
@ -330,7 +331,7 @@ void test(int maxAge){
private void initDialog(int position) { private void initDialog(int position) {
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this.activity); bottomSheetDialog = new BottomSheetDialog(this.activity);
bottomSheetDialog.setContentView(R.layout.fragment_shelf_botoomsheetdialog); bottomSheetDialog.setContentView(R.layout.fragment_shelf_botoomsheetdialog);
//给布局设置透明背景色 //给布局设置透明背景色
bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet)
@ -488,7 +489,9 @@ void test(int maxAge){
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
getUpdatedData(); //TODO: 更新书的状态是不有更新 getUpdatedData(); //TODO: 更新书的状态是不有更新
if(bottomSheetDialog!=null){
bottomSheetDialog.hide();
}
} }

View File

@ -31,8 +31,7 @@ public class Fragment_bangdan extends BasicFragment {
public static final String TAG=Fragment_bangdan.class.getSimpleName(); public static final String TAG=Fragment_bangdan.class.getSimpleName();
// TODO: Rename parameter arguments, choose names that match // TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1"; private static final String ARG_CID = "CID";
private static final String ARG_PARAM2 = "param2";
private BandanAdapterNew mAdapter; private BandanAdapterNew mAdapter;
private List<NovelBlock> mBlocks; private List<NovelBlock> mBlocks;
private List<NovelBlock> mMoreBlocks; private List<NovelBlock> mMoreBlocks;
@ -42,11 +41,11 @@ public class Fragment_bangdan extends BasicFragment {
// @BindView(R.id.topic_layout) // @BindView(R.id.topic_layout)
// MultiLayout topic_layout; // MultiLayout topic_layout;
public static Fragment_bangdan newInstance(String param1, String param2) { private int cid;
public static Fragment_bangdan newInstance(int cid) {
Fragment_bangdan fragment = new Fragment_bangdan(); Fragment_bangdan fragment = new Fragment_bangdan();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1); args.putInt(ARG_CID, cid);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@ -74,6 +73,11 @@ public class Fragment_bangdan extends BasicFragment {
@Override @Override
public void initData() { public void initData() {
if (getArguments() != null) {
cid = getArguments().getInt(ARG_CID);
}
if(pageNo==1) { if(pageNo==1) {
if(mBlocks!=null){ //下拉刷新 if(mBlocks!=null){ //下拉刷新
@ -116,7 +120,7 @@ public class Fragment_bangdan extends BasicFragment {
showProgressDialog(true, "正在加载"); showProgressDialog(true, "正在加载");
mMoreBlocks =null; mMoreBlocks =null;
BookSubscribe.getSiteRanks( Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { BookSubscribe.getPaihangBangByCate( Constants.SEX,cid,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override @Override
public void onSuccess(String result) { public void onSuccess(String result) {

View File

@ -0,0 +1,185 @@
package com.novelbook.android.Fragments;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import com.flyco.tablayout.SlidingTabLayout;
import com.novelbook.android.R;
import com.novelbook.android.bean.BangdanCate;
import com.novelbook.android.netsubscribe.BookSubscribe;
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 java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import q.rorbin.verticaltablayout.VerticalTabLayout;
public class Fragment_bangdans extends BasicFragment {
public static String TAG= Fragment_bangdans.class.getSimpleName();
@BindView(R.id.viewpager)
ViewPager mViewpager;
@BindView(R.id.tablayout)
VerticalTabLayout tabLayout;
private FragmentStatePagerAdapter mAdapter =null;
private ArrayList<BasicFragment> mFragments;
ArrayList<View> mList;
String[] mTitle;
List<BangdanCate> mCateList;
protected void processArguments(){
if (getArguments() != null) {
Bundle bundle = getArguments() ;
}
}
public static Fragment_bangdans newInstance(String param1, String param2) {
Fragment_bangdans fragment = new Fragment_bangdans();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
// mParam1 = getArguments().getString(ARG_PARAM1);
// mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
protected int getLayoutRes() {
return R.layout.fragment_bangdans;
}
@Override
public void initData() {
showProgressDialog(false,"正在加载榜单列表");
getCateTabTtitle();
}
@Override
public void fillData() {
// initTabs();
};
public void onSexSwitch(){
if(mAdapter!=null) {
for(BasicFragment bf:mFragments){
bf.initData();
}
mAdapter.notifyDataSetChanged();
}
}
@Override
public void initViews(){
mFragments = new ArrayList<>();
mAdapter = new FragmentStatePagerAdapter(getChildFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
//ViewPager与TabLayout绑定后这里获取到PageTitle就是Tab的Text
@Override
public CharSequence getPageTitle(int position) {
return mCateList.get(position).getName();
}
};
// mViewpager.setAdapter(mAdapter);
// tabLayout.setupWithViewPager(mViewpager);
}
//---------tabs-------------
void initTabs() {
Log.d(TAG, "getCateTabTtitle: init tabs");
// if(mFragments ==null || mFragments.size() ==0)
{
// mTitle = new String[]{"精选", "榜单", "书单"};
mFragments.clear();
for(BangdanCate bangdanCate : mCateList) {
mFragments.add(Fragment_bangdan.newInstance(bangdanCate.getCid()));
}
// mFragments.add(new Fragment_shudan());
Log.d(TAG,"initial fragments in tabs ");
}
Log.d(TAG,"set viewPager adapter ");
// FragmentPagerAdapter mAdapter = new FragmentPagerAdapter(activity.getSupportFragmentManager()) { 第一次进入没问题再次进入ViewPager的fragment时里面内容就没了,数据丢失 https://blog.csdn.net/allan_bst/article/details/64920076
mAdapter.notifyDataSetChanged();
// mViewpager.setOffscreenPageLimit(30);//预加载设置
if(mCateList!=null){
mViewpager.setOffscreenPageLimit(mCateList.size()+1);//预加载设置
}
mViewpager.setAdapter(mAdapter);
tabLayout.setupWithViewPager(mViewpager);
// tabLayout.setViewPager(mViewpager, mTitle, activity, mFragments);
// mViewpager.setCurrentItem(0);
}
void getCateTabTtitle(){
Log.d(TAG, "getCateTabTtitle: prepare cate tabs");
BookSubscribe.getPaihangBangCateList(Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override
public void onSuccess(String result) {
try {
mCateList = GsonUtil.parserBangdanCate(result,"subCategories");
initTabs();
} catch (Exception e) {
Log.e(TAG, "onSuccess: prepare book",e );
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
@Override
public void onFault(String errorMsg) {
//失败
Log.d(TAG, "error on get firstpage: " + errorMsg);
// getSearchTabTtitle();
handler.sendEmptyMessage(0);
}
},getActivity()));
}
}

View File

@ -28,6 +28,7 @@ public class Fragment_bookStore extends BasicFragment {
SlidingTabLayout tabLayout; SlidingTabLayout tabLayout;
private FragmentStatePagerAdapter mAdapter =null; private FragmentStatePagerAdapter mAdapter =null;
private ArrayList<BasicFragment> mFragments; private ArrayList<BasicFragment> mFragments;
private ArrayList<BasicFragment> mFragments_cp;
ArrayList<View> mList; ArrayList<View> mList;
String[] mTitle; String[] mTitle;
@ -75,9 +76,14 @@ public class Fragment_bookStore extends BasicFragment {
} }
public void onSexSwitch(){ public void onSexSwitch(){
if(mAdapter!=null) { if(mAdapter!=null) {
for(BasicFragment bf:mFragments){ for(BasicFragment bf: mFragments_cp){
bf.initData(); bf.initData();
} }
/* for(int i=0;i<mAdapter.getCount();i++){
((BasicFragment) mAdapter.getItem(i)).initData();
}*/
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
} }
@ -97,8 +103,9 @@ public class Fragment_bookStore extends BasicFragment {
mFragments = new ArrayList<>(); mFragments = new ArrayList<>();
mFragments.add(new Fragment_jingxuan()); mFragments.add(new Fragment_jingxuan());
mFragments.add(FragmentCates.newInstance()); mFragments.add(FragmentCates.newInstance());
mFragments.add(new Fragment_bangdan()); mFragments.add(new Fragment_bangdans());
mFragments_cp = new ArrayList<>();
mFragments_cp.addAll(mFragments);
// mFragments.add(new Fragment_shudan()); // mFragments.add(new Fragment_shudan());
Log.d(TAG,"initial fragments in tabs "); Log.d(TAG,"initial fragments in tabs ");
} }

View File

@ -50,12 +50,13 @@ public class Fragment_booklist extends BasicFragment {
private static final String EXTR_FN ="fn" ; private static final String EXTR_FN ="fn" ;
private static final String EXTR_BANGDAN ="bangdan" ; private static final String EXTR_BANGDAN ="bangdan" ;
private static final String EXTR_HISTORY ="history" ; private static final String EXTR_HISTORY ="history" ;
private static final String EXTR_CID ="cid" ;
private BookListAdapter mAdapter; private BookListAdapter mAdapter;
// private BookListAdapter mAdapter; // private BookListAdapter mAdapter;
private List<Novel> mData;; private List<Novel> mData;;
private List<Novel> mMoreData; private List<Novel> mMoreData;
private String cate; private String cate;
private int progress; private int progress,cid;
private String keyWord ,fn,bangdan,history; private String keyWord ,fn,bangdan,history;
private int listItem =R.layout.recycle_list_item_horizon; private int listItem =R.layout.recycle_list_item_horizon;
//private int pageNo=1; //private int pageNo=1;
@ -75,6 +76,14 @@ public class Fragment_booklist extends BasicFragment {
public Fragment_booklist() { public Fragment_booklist() {
// Required empty public constructor // Required empty public constructor
} }
public static Fragment_booklist newInstance(int cid,String bangdan) {
Fragment_booklist fragment = new Fragment_booklist();
Bundle args = new Bundle();
args.putInt(EXTR_CID,cid);
args.putString(EXTR_BANGDAN,bangdan);
fragment.setArguments(args);
return fragment;
}
public static Fragment_booklist newInstance(String fn,String bangdan) { public static Fragment_booklist newInstance(String fn,String bangdan) {
Fragment_booklist fragment = new Fragment_booklist(); Fragment_booklist fragment = new Fragment_booklist();
Bundle args = new Bundle(); Bundle args = new Bundle();
@ -112,7 +121,7 @@ public class Fragment_booklist extends BasicFragment {
Bundle bundle = getArguments() ; Bundle bundle = getArguments() ;
bangdan =bundle.getString(EXTR_BANGDAN); bangdan =bundle.getString(EXTR_BANGDAN);
fn= bundle.getString(EXTR_FN); fn= bundle.getString(EXTR_FN);
cid =bundle.getInt(EXTR_CID);
if(!TextUtils.isEmpty((fn))){ if(!TextUtils.isEmpty((fn))){
return; return;
} }
@ -230,10 +239,10 @@ public class Fragment_booklist extends BasicFragment {
Log.d(TAG,String.format("fn is %s",fn) ); Log.d(TAG,String.format("fn is %s",fn) );
if(!TextUtils.isEmpty(bangdan) && !TextUtils.isEmpty(fn)){ //榜单 if(!TextUtils.isEmpty(bangdan) && (cid >0 || !TextUtils.isEmpty(fn))){ //榜单
// showProgressDialog(true, "正在加载榜单"); // showProgressDialog(true, "正在加载榜单");
mAdapter.setShowTop(true); mAdapter.setShowTop(true);
BookSubscribe.getSiteRankDetail(fn,pageNo,Constants.SEX,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { BookSubscribe.getPaihangBangList(Constants.SEX,pageNo,cid,new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
@Override @Override
public void onSuccess(String result) { public void onSuccess(String result) {

View File

@ -9,16 +9,13 @@ import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.ixiaow.multilayout.MultiLayout; 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.bean.ProgressType;
import com.novelbook.android.db.Novel; import com.novelbook.android.db.Novel;
import com.novelbook.android.netapi.RandomHost; import com.novelbook.android.netapi.RandomHost;
import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netsubscribe.BookSubscribe;
@ -31,10 +28,10 @@ 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 org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import org.litepal.util.Const;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -213,7 +210,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
} }
}; };
showProgressDialog(false, "正在加载..."); showProgressDialog(false, "正在加载...");
BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1, tab3Pos+1, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); BookSubscribe.getCateNovelList(cate, pageNo, Constants.SEX, Constants.lstProgressType.get(tab3Pos).getId(), new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
} }
@ -221,7 +218,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
public void initViews(){ public void initViews(){
appBarLayout.setVisibility(View.GONE); appBarLayout.setVisibility(View.GONE);
if(lstNt==null) { if(lstNt==null) {
getSearchTabTtitle(); // getSearchTabTtitle();
} }
else { else {
initTabs(); initTabs();
@ -263,7 +260,10 @@ final String TAG = Fragment_paihang.class.getSimpleName();
}*/ }*/
List<String> lstType = Arrays.asList(lstProgress); List<String> lstType = new ArrayList<String>() ;//Arrays.asList(lstProgress);
for(ProgressType progressType : Constants.lstProgressType){
lstType.add(progressType.getName());
}
topic_layout.initTabNames(lstNt) ; topic_layout.initTabNames(lstNt) ;
topic_layout1.initTabNames( lstSex) ; topic_layout1.initTabNames( lstSex) ;
topic_layout2.initTabNames(lstType) ; topic_layout2.initTabNames(lstType) ;
@ -322,8 +322,8 @@ final String TAG = Fragment_paihang.class.getSimpleName();
String sex = lstSex.get(tab1Pos); String sex = lstSex.get(tab1Pos);
String cate = lstNt.get(tab2Pos); String cate = lstNt.get(tab2Pos);
String selectedKey = lstSex.get(tab1Pos) +" " + String selectedKey = lstSex.get(tab1Pos) +" " +
cate +" " + cate +" " + Constants.lstProgressType.get(tab3Pos).getName();
lstProgress[tab3Pos] ; // lstProgress[tab3Pos] ;
@ -331,7 +331,7 @@ final String TAG = Fragment_paihang.class.getSimpleName();
tvHint.setText(selectedKey); tvHint.setText(selectedKey);
Log.d(TAG, String.format("tabChanged: to load data %s,pageno %s, tmp %s" , selectedKey,pageNo ,tmp)); Log.d(TAG, String.format("tabChanged: to load data %s,pageno %s, tmp %s" , selectedKey,pageNo ,tmp));
if( tmp<4) return; if( tmp<lstProgress.length+1) return;
loadSearchData(); loadSearchData();
@ -402,92 +402,14 @@ final String TAG = Fragment_paihang.class.getSimpleName();
@BindView(R.id.tvHint) @BindView(R.id.tvHint)
TextView tvHint; TextView tvHint;
//------------滑动监听 //------------滑动监听
/* @BindView(R.id.n_scroll_view)
JudgeNestedScrollView mNestedScrollView;
@BindView(R.id.llTabs)
LinearLayout llTabs;
@BindView(R.id.tvHint)
TextView tvHint;
private boolean isShowHint =false;
void setScrollListner(){
llTabs.measure(0,0);
final int height = llTabs.getMeasuredHeight(); //获得当前组件的宽度和高度
// final int height = llTabs.getLayoutParams().height;
mNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
// 将透明度声明成局部变量用于判断
//int alpha = 0;
// int count = 0;
// float scale = 0;
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
isShowHint = scrollY > height;
if (scrollY <= height) {
// scale = (float) scrollY / height;
// alpha = (int) (255 * scale);
tvHint.setVisibility(View.GONE);
// 随着滑动距离改变透明度
// Log.e("al=","="+alpha);
// re.setBackgroundColor(Color.argb(alpha, 255, 0, 0));
mNestedScrollView.setNeedScroll(true);
} else {
tvHint.setVisibility(View.VISIBLE);
// if (alpha < 255) {
// Log.e("执行次数", "=" + (++count));
// 防止频繁重复设置相同的值影响性能
// alpha = 255;
// 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);
tmp=0;
} }
@ -496,38 +418,6 @@ final String TAG = Fragment_paihang.class.getSimpleName();
} }
void getSearchTabTtitle(){
BookSubscribe.getSearchTitles(Constants.SEX,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");
initTabs();
loadSearchData();
} catch (Exception e) {
Log.e(TAG, "onSuccess: prepare book",e );
e.printStackTrace();
}
}
@Override
public void onFault(String errorMsg) {
//失败
Log.d(TAG, "error on get firstpage: " + errorMsg);
// getSearchTabTtitle();
handler.sendEmptyMessage(0);
}
},getActivity()));
}
} }

View File

@ -86,7 +86,7 @@ public class Main2Activity extends Activity_base
initialSexOption(); initialSexOption();
checkUpdate(true); checkUpdate(true);
// getSearchTabTtitle(); getSearchTabTtitle();
} }
@ -551,6 +551,39 @@ private int bottomSelectedIndex;
} }
//----get master domain //----get master domain
void getSearchTabTtitle(){
BookSubscribe.getSearchTitles(Constants.SEX,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.lstProgressType =GsonUtil.parserProgressType(result,"progress");
// initTabs();
// loadSearchData();
} catch (Exception e) {
Log.e(TAG, "onSuccess: prepare book",e );
e.printStackTrace();
}
}
@Override
public void onFault(String errorMsg) {
//失败
Log.d(TAG, "error on get firstpage: " + errorMsg);
// getSearchTabTtitle();
handler.sendEmptyMessage(0);
}
},this));
}
} }

View File

@ -11,6 +11,7 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView;
import com.flyco.tablayout.SlidingTabLayout; import com.flyco.tablayout.SlidingTabLayout;
import com.novelbook.android.adapter.MyPagerAdapter; import com.novelbook.android.adapter.MyPagerAdapter;

View File

@ -26,6 +26,7 @@ import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.Button; import android.widget.Button;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.SeekBar; import android.widget.SeekBar;
@ -111,6 +112,8 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
@BindView(R.id.llTopAd) @BindView(R.id.llTopAd)
LinearLayout llTopAd; LinearLayout llTopAd;
@BindView(R.id.imgLoading)
pl.droidsonroids.gif.GifImageView imgLoading;
private Config config; private Config config;
private WindowManager.LayoutParams lp; private WindowManager.LayoutParams lp;
@ -178,6 +181,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
config = Config.getInstance(); config = Config.getInstance();
pageFactory = PageFactory.getInstance(getApplicationContext()); pageFactory = PageFactory.getInstance(getApplicationContext());
pageFactory.clear();
pageFactory.setAd(this); pageFactory.setAd(this);
llTopAd.setVisibility(View.GONE); llTopAd.setVisibility(View.GONE);
@ -589,7 +593,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
// automatically handle clicks on the Home/Up button, so long // automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. // as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId(); int id = item.getItemId();
pageFactory.setPageWidget(bookpage);
if (id == R.id.action_add_bookmark){ if (id == R.id.action_add_bookmark){
if( pageFactory.isReady()) if( pageFactory.isReady())
if (pageFactory.getCurrentPage() != null) { if (pageFactory.getCurrentPage() != null) {
@ -804,6 +808,21 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
btnRefresh.setVisibility(visible); btnRefresh.setVisibility(visible);
} }
@Override
public void showProgressbar(boolean dismissAble,String msg) {
showProgressDialog(dismissAble,msg);
}
@Override
public void hideProgressbar() {
}
@Override
public void showLoading(boolean isShow) {
imgLoading.setVisibility(isShow?View.VISIBLE:View.GONE);
}
private void showSystemUI() { private void showSystemUI() {
getWindow().getDecorView().setSystemUiVisibility( getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE View.SYSTEM_UI_FLAG_LAYOUT_STABLE
@ -886,6 +905,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.btnRefresh}) ,R.id.llTopAd,R.id.btnRefresh})
public void onClick(View view) { public void onClick(View view) {
pageFactory.setPageWidget(bookpage);
// if( pageFactory.isReady()) // if( pageFactory.isReady())
switch (view.getId()) { switch (view.getId()) {
// case R.id.btn_return: // case R.id.btn_return:

View File

@ -0,0 +1,40 @@
package com.novelbook.android.bean;
public class BangdanCate {
private int cid;
private String fn;
private String name;
private String title;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getFn() {
return fn;
}
public void setFn(String fn) {
this.fn = fn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

View File

@ -5,6 +5,7 @@ import com.novelbook.android.db.Novel;
import java.util.List; import java.util.List;
public class NovelBlock{ public class NovelBlock{
private int cid;
private String fn; private String fn;
private String title; private String title;
private int oneself; private int oneself;
@ -14,6 +15,14 @@ public class NovelBlock{
private List<String> pictures; private List<String> pictures;
private List<Novel> ns; private List<Novel> ns;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getFn() { public String getFn() {
return fn; return fn;
} }

View File

@ -1,6 +1,6 @@
package com.novelbook.android.bean; package com.novelbook.android.bean;
public class Progress { public class ProgressType {
private int id; private int id;
private String name; private String name;

View File

@ -272,7 +272,9 @@ public class Novel extends LitePalSupport implements Serializable{
} }
public static List<Novel> getNovelsOnShelf(){ public static List<Novel> getNovelsOnShelf(){
return LitePal.where("isOnShelf=?","1").order("isTop desc,isUpdated desc,lastVisit desc" ).find(Novel.class); // return LitePal.where("isOnShelf=?","1").order("isTop desc,isUpdated desc,lastVisit desc,lastUpdateTime desc" ).find(Novel.class);
return LitePal.where("isOnShelf=?","1").order("isTop desc,lastUpdateTime desc" ).find(Novel.class);
} }
public static List<Novel> getLocalNovels(){ public static List<Novel> getLocalNovels(){
@ -305,8 +307,12 @@ public class Novel extends LitePalSupport implements Serializable{
} }
@Override @Override
public int update(long id){ public int update(long id){
setValues(); setValues();try {
return super.update(id); return super.update(id);
}catch (Exception e){
Log.e("NOVELDB", "update:error ", e);
}
return 0;
} }
public void testUpdate(){ public void testUpdate(){
isUpdated=true; isUpdated=true;

View File

@ -357,22 +357,23 @@ public class SettingDialog extends Dialog {
case R.id.iv_bg_default: case R.id.iv_bg_default:
setBookBg(Config.BOOK_BG_DEFAULT); setBookBg(Config.BOOK_BG_DEFAULT);
selectBg(Config.BOOK_BG_DEFAULT); selectBg(Config.BOOK_BG_DEFAULT);
config.setDayOrNight(false);
break; break;
case R.id.iv_bg_1: case R.id.iv_bg_1:
setBookBg(Config.BOOK_BG_1); setBookBg(Config.BOOK_BG_1);
selectBg(Config.BOOK_BG_1); selectBg(Config.BOOK_BG_1); config.setDayOrNight(false);
break; break;
case R.id.iv_bg_2: case R.id.iv_bg_2:
setBookBg(Config.BOOK_BG_2); setBookBg(Config.BOOK_BG_2);
selectBg(Config.BOOK_BG_2); selectBg(Config.BOOK_BG_2); config.setDayOrNight(false);
break; break;
case R.id.iv_bg_3: case R.id.iv_bg_3:
setBookBg(Config.BOOK_BG_3); setBookBg(Config.BOOK_BG_3);
selectBg(Config.BOOK_BG_3); selectBg(Config.BOOK_BG_3); config.setDayOrNight(false);
break; break;
case R.id.iv_bg_4: case R.id.iv_bg_4:
setBookBg(Config.BOOK_BG_4); setBookBg(Config.BOOK_BG_4);
selectBg(Config.BOOK_BG_4); selectBg(Config.BOOK_BG_4); config.setDayOrNight(false);
break; break;
case R.id.tv_lhadd: case R.id.tv_lhadd:
addLineSpace(); addLineSpace();

View File

@ -74,11 +74,11 @@ public interface HttpApi {
@GET("n/{novelId}/author") @GET("n/{novelId}/author")
Observable<ResponseBody> getNovelsSameAuthor(@Path("novelId") int novelId); Observable<ResponseBody> getNovelsSameAuthor(@Path("novelId") int novelId);
//站点榜单http://xiaoshuofenxiang.com/api/page/siteranks?sex=1 //站点榜单http://xiaoshuofenxiang.com/api/page/siteranks?sex=1
@GET("page/siteranks") /* @GET("page/siteranks")
Observable<ResponseBody> getSiteRanks(@Query("sex") int Sex); Observable<ResponseBody> getSiteRanks(@Query("sex") int Sex);
//http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3 //http://xiaoshuofenxiang.com/api/page/siterank?fn=qidian-yuanchuangfengyunbang&pn=3
@GET("page/siterank") @GET("page/siterank")
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 // 搜索分类 http://xiaoshuofenxiang.com/api/page/topdata
@ -94,5 +94,11 @@ public interface HttpApi {
@GET("download/version.xml") @GET("download/version.xml")
Observable<ResponseBody> getVersion(); Observable<ResponseBody> getVersion();
@GET("page/category")
Observable<ResponseBody> getPaihangBangCateList(@Query("sex") int Sex,@Query("type") String type);
@GET("page/siteranks")
Observable<ResponseBody> getPaihangBangByCate(@Query("sex") int Sex,@Query("cid") int cid);
@GET("page/siterank")
Observable<ResponseBody> getPaihangBangList(@Query("sex") int Sex,@Query("cid") int cid,@Query("pn")int pageNo);
} }

View File

@ -62,14 +62,14 @@ public class BookSubscribe {
HttpMethods.getInstance().toSubscribe(observable, subscriber); HttpMethods.getInstance().toSubscribe(observable, subscriber);
} }
public static void getSiteRanks( int sex,DisposableObserver<ResponseBody> subscriber){ /* public static void getSiteRanks( int sex,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance("/api/page/siteranks").getHttpApi().getSiteRanks(sex); Observable<ResponseBody> observable = HttpMethods.getInstance("/api/page/siteranks").getHttpApi().getSiteRanks(sex);
HttpMethods.getInstance().toSubscribe(observable, subscriber); HttpMethods.getInstance().toSubscribe(observable, subscriber);
} }
public static void getSiteRankDetail( String fn,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){ public static void getSiteRankDetail( String fn,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance("/api/page/siteranks").getHttpApi().getSiteRankDetail(fn,pageNo,sex); Observable<ResponseBody> observable = HttpMethods.getInstance("/api/page/siterank").getHttpApi().getSiteRankDetail(fn,pageNo,sex);
HttpMethods.getInstance().toSubscribe(observable, subscriber); HttpMethods.getInstance().toSubscribe(observable, subscriber);
} }*/
public static void getSearchNovelList( String keyWord,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){ public static void getSearchNovelList( String keyWord,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance(String.format("/api/search/%s/%s",keyWord ,pageNo)).getHttpApi().getSeachNolvelist(keyWord,pageNo,sex); Observable<ResponseBody> observable = HttpMethods.getInstance(String.format("/api/search/%s/%s",keyWord ,pageNo)).getHttpApi().getSeachNolvelist(keyWord,pageNo,sex);
@ -92,5 +92,16 @@ public class BookSubscribe {
Observable<ResponseBody> observable = HttpMethods.getInstance("download/version.xml").getHttpApi().getVersion(); Observable<ResponseBody> observable = HttpMethods.getInstance("download/version.xml").getHttpApi().getVersion();
HttpMethods.getInstance().toSubscribe(observable, subscriber); HttpMethods.getInstance().toSubscribe(observable, subscriber);
} }
public static void getPaihangBangCateList(int sex,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance("page/category").getHttpApi().getPaihangBangCateList(sex,"rank");
HttpMethods.getInstance().toSubscribe(observable, subscriber);
}
public static void getPaihangBangByCate(int sex,int cid ,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance("page/siteranks").getHttpApi().getPaihangBangByCate(sex,cid);
HttpMethods.getInstance().toSubscribe(observable, subscriber);
}
public static void getPaihangBangList(int sex,int pageNo,int cid ,DisposableObserver<ResponseBody> subscriber){
Observable<ResponseBody> observable = HttpMethods.getInstance("page/siterank").getHttpApi().getPaihangBangList(sex,cid,pageNo);
HttpMethods.getInstance().toSubscribe(observable, subscriber);
}
} }

View File

@ -31,36 +31,58 @@ public class RetryInterceptor implements Interceptor {
public Response intercept(Chain chain) throws IOException { public Response intercept(Chain chain) throws IOException {
Request request = chain.request(); Request request = chain.request();
String oldUrl = request.url().toString(); String oldUrl = request.url().toString();
Log.d(TAG, "HttpMethods intercept: request url:"+oldUrl);
String prefix = REUtil.match("(?i)http[s]?://[^/]+", oldUrl); String prefix = REUtil.match("(?i)http[s]?://[^/]+", oldUrl);
Log.d(TAG, "HttpMethods intercept: prefix:"+prefix);
if (prefix == null){ if (prefix == null){
Response response = doRequest(chain, request); Response response = doRequest(chain, request);
if(response!=null) if(response!=null)
{ {
return response; return response;
}else }else
{ {
int i=0;
throw new IOException(); while(response==null && i<3){
request = chain.request();
i++;
}
if(response==null) {
throw new IOException();
}else {
return response;
}
} }
} }
String path = oldUrl.substring(prefix.length()); String path = oldUrl.substring(prefix.length());
Log.d(TAG, "HttpMethods intercept: path:"+path);
RandomHost rh = null; RandomHost rh = null;
boolean isMainApi =path.equals("/api/g/"); boolean isMainApi =path.equals("/api/g/");
if(oldUrl.indexOf("xiaoshuofenxiang.com") == -1 || !path.startsWith("/api/") || NetUtil.getHost(isMainApi)==null){ if(oldUrl.indexOf("xiaoshuofenxiang.com") == -1 || !path.startsWith("/api/") || NetUtil.getHost(isMainApi)==null){
// rh = null; // rh = null;
Response response = doRequest(chain, request); Response response = doRequest(chain, request);
if(response!=null) if(response!=null)
{ {
return response; return response;
}else }else
{ {
int i=0;
while(response==null && i<3){
request = chain.request();
i++;
}
if(response==null) {
throw new IOException();
}else {
return response;
}
throw new IOException();
} }
} }
try { try {
rh = new RandomHost(NetUtil.getHost(isMainApi), path); rh = new RandomHost(NetUtil.getHost(isMainApi), path);
Log.d(TAG, "HttpMethods intercept: api path is "+path);
Log.d(TAG, "HttpMethods intercept: create new RandomHost--------------------------"); Log.d(TAG, "HttpMethods intercept: create new RandomHost--------------------------");
} catch (JSONException e) { } catch (JSONException e) {
@ -104,10 +126,17 @@ public class RetryInterceptor implements Interceptor {
if (response != null) { try {response.close();} catch (IllegalStateException e) {} } if (response != null) { try {response.close();} catch (IllegalStateException e) {} }
response = doRequest(chain, newRequest); response = doRequest(chain, newRequest);
Log.d(TAG, String.format("HttpMethods intercept: response is null? %s", response == null)); Log.d(TAG, String.format("HttpMethods intercept: response is null? %s", response == null));
int i=0;
while(response==null && i<3){
request = chain.request();
i++;
}
if (response != null) { if (response != null) {
Log.d(TAG, String.format("HttpMethods intercept: response .code? %s", response.code())); Log.d(TAG, String.format("HttpMethods intercept: response .code? %s", response.code()));
} }
@ -173,10 +202,12 @@ public class RetryInterceptor implements Interceptor {
private Response doRequest(Chain chain, Request request) throws IOException { private Response doRequest(Chain chain, Request request) throws IOException {
Response response = null; Response response = null;
try { try {
response = chain.proceed(request); response = chain.proceed(request);
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "doRequest: error 1 ",e ); Log.e(TAG, "doRequest: error, " + request.url(),e );
} }
return response; return response;

View File

@ -134,11 +134,13 @@ public class ServiceDownload extends Service {
protected void onHandleIntent( Intent intent) { protected void onHandleIntent( Intent intent) {
Log.d(TAG,"ServiceDownload onHandleIntent...begin"); Log.d(TAG,"ServiceDownload onHandleIntent...begin");
if(null==intent){
return;
}
String key ="taskId"; String key ="taskId";
int taskId =0; int taskId =0;
if(intent.hasExtra(key)){ if ( intent.hasExtra(key)){
taskId= intent.getExtras().getInt(key); taskId= intent.getExtras().getInt(key);
DownloadTask dt = LitePal.find(DownloadTask.class,taskId); DownloadTask dt = LitePal.find(DownloadTask.class,taskId);

View File

@ -9,4 +9,8 @@ public interface AdInterface {
public void showAd(boolean showAd,int height,int adY); public void showAd(boolean showAd,int height,int adY);
public void hideSystemUI(); public void hideSystemUI();
public void showRefresh(int visible); public void showRefresh(int visible);
public void showProgressbar(boolean dismissAble,String msg);
public void hideProgressbar();
public void showLoading(boolean isShow);
} }

View File

@ -553,7 +553,9 @@ public class BookUtil {
if(chaptCache.containsKey(chapterNo)){ if(chaptCache.containsKey(chapterNo)){
chaptCache.remove(chapterNo); chaptCache.remove(chapterNo);
} }
pagefactory.changeChapter(chapterNo); if(pagefactory!=null) {
pagefactory.changeChapter(chapterNo);
}
} }
@ -647,9 +649,10 @@ public class BookUtil {
} }
chId = chId <= mChapters.size() ? chId: mChapters.size(); chId = chId <= mChapters.size() ? chId: mChapters.size();
Log.d(TAG, "changing Source: to open chapter with new site source " + chId + " : "+ mChangeTitle ); Log.d(TAG, "changing Source: to open chapter with new site source " + chId + " : "+ mChangeTitle );
pagefactory.changeChapter(chId); if(pagefactory!=null)
pagefactory.changeChapter(chId);
// mChangeChapId=0; // mChangeChapId=0;
Toast.makeText(mContext,"换源成功",Toast.LENGTH_LONG).show(); // Toast.makeText(mContext,"换源成功",Toast.LENGTH_LONG).show();
}else{ }else{
Log.d(TAG, "changing Source: failed " ); Log.d(TAG, "changing Source: failed " );
} }
@ -1374,7 +1377,7 @@ int muluRetryCount =0;
// isDownloadChapt =true; // isDownloadChapt =true;
Log.d(TAG,String.format("handler msg, download %s",true) ); Log.d(TAG,String.format("handler msg, download %s",true) );
}else if(msg.what==99){ }else if(msg.what==99){
// Toast.makeText(mContext,"网络拥堵,将帮您切换其它源",Toast.LENGTH_SHORT); Toast.makeText(mContext,"网络拥堵,已帮您切换其它源",Toast.LENGTH_LONG).show();
// getSiteRule(); // getSiteRule();
// pagefactory .changeChapter(getChapterNo()); // pagefactory .changeChapter(getChapterNo());

View File

@ -1,6 +1,7 @@
package com.novelbook.android.utils; package com.novelbook.android.utils;
import com.novelbook.android.bean.Progress;
import com.novelbook.android.bean.ProgressType;
import java.util.List; import java.util.List;
@ -22,6 +23,7 @@ public class Constants {
public static List<String> lstNt=null; public static List<String> lstNt=null;
//public static List<Progress> lstProgress=null; //public static List<Progress> lstProgress=null;
public static String[] lstProgress={"连载中","已完本","新书"}; public static String[] lstProgress={"连载中","已完本","新书"};
public static List<ProgressType> lstProgressType=null;
public static int retryCnt =5; public static int retryCnt =5;
public static int muluRetryCnt =5; public static int muluRetryCnt =5;
// public static List<String> lstProgress=null; // public static List<String> lstProgress=null;

View File

@ -5,8 +5,10 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement; 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.BangdanCate;
import com.novelbook.android.bean.NovelBlock; import com.novelbook.android.bean.NovelBlock;
import com.novelbook.android.bean.Progress; import com.novelbook.android.bean.ProgressType;
import com.novelbook.android.bean.ProgressType;
import com.novelbook.android.db.Novel; import com.novelbook.android.db.Novel;
import org.json.JSONArray; import org.json.JSONArray;
@ -49,10 +51,10 @@ public class GsonUtil {
} }
return lst; return lst;
} }
public static List<Progress> parserProgressBlocks(String restult, String blockName ) throws JSONException { public static List<ProgressType> parserProgressType(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);
List<Progress> list = new ArrayList<Progress>(); List<ProgressType> list = new ArrayList<ProgressType>();
//创建一个Gson对象 //创建一个Gson对象
// Gson gson = new Gson(); // Gson gson = new Gson();
//创建一个JsonParser //创建一个JsonParser
@ -78,10 +80,44 @@ public class GsonUtil {
while (it.hasNext()) { while (it.hasNext()) {
JsonElement e = (JsonElement) it.next(); JsonElement e = (JsonElement) it.next();
//JsonElement转换为JavaBean对象 //JsonElement转换为JavaBean对象
list.add((Progress) gson.fromJson(e, Progress.class)); list.add((ProgressType) gson.fromJson(e, ProgressType.class));
} }
return list; return list;
} }
public static List<BangdanCate> parserBangdanCate(String restult, String blockName ) throws JSONException {
JSONObject jsonObject = new JSONObject(restult);
String strJson = jsonObject.getString(blockName);
List<BangdanCate> list = new ArrayList<BangdanCate>();
//创建一个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((BangdanCate) gson.fromJson(e, BangdanCate.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);

View File

@ -102,7 +102,7 @@ public class LogcatHelper {
// cmds = "logcat -s way";//打印标签过滤信息 // cmds = "logcat -s way";//打印标签过滤信息
// cmds = "logcat *:e *:i | grep \"(" + mPID + ")\""; // cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";
cmds = "logcat *:D | grep \"(" + mPID + ")\""; cmds = "logcat *:D | grep \"(" + mPID + ")\"";
// cmds = "logcat *:D";
} }
public void stopLogs() { public void stopLogs() {

View File

@ -183,7 +183,7 @@ public class PageFactory implements ChangeSource{
private AdInterface mAd; private AdInterface mAd;
private BookTask bookTask; private BookTask bookTask;
private int MSG_NEXTPAGE=2; private int MSG_NEXTPAGE=2;
private int MSG_HIDEPROGRESS=3;
public AdInterface getmAd() { public AdInterface getmAd() {
return mAd; return mAd;
} }
@ -221,6 +221,13 @@ public class PageFactory implements ChangeSource{
// drawStatus(); // drawStatus();
Log.d(TAG, "prepare book to load next page"); Log.d(TAG, "prepare book to load next page");
nextPage(); nextPage();
} else if (msg.what == MSG_HIDEPROGRESS) {
dismissProgressDialog();
if(mAd!=null) {
mAd.showRefresh(View.GONE);
// mAd.hideProgressbar();
mAd.showLoading(false);
}
} }
} }
Map<Integer,Integer> fileRetryCnt = new HashMap<Integer,Integer>(); Map<Integer,Integer> fileRetryCnt = new HashMap<Integer,Integer>();
@ -483,11 +490,13 @@ public class PageFactory implements ChangeSource{
mStatus= Status.CHANGESOURCE; mStatus= Status.CHANGESOURCE;
statusChangeSource="正在换源..."; statusChangeSource="正在换源...";
if(!TextUtils.isEmpty(domainName)) { if(!TextUtils.isEmpty(domainName)) {
statusChangeSource = "前往 " + domainName + " ..."; statusChangeSource = "前往 " + domainName.substring(0,domainName.length()>5?5:domainName.length()) + "...";
} }
drawStatus(); drawStatus();
mBookUtil.pagefactory=this;
mBookUtil.changeSource(domain, chapId, chapTitle); mBookUtil.changeSource(domain, chapId, chapTitle);
} }
/* public String getChapterName() { /* public String getChapterName() {
@ -666,11 +675,16 @@ private void hideSysUI(){
private void drawStatus(Bitmap bitmap){ private void drawStatus(Bitmap bitmap){
hideSysUI(); hideSysUI();
mAd.showRefresh(View.VISIBLE); mAd.showRefresh(View.VISIBLE);
mAd.hideProgressbar();
mAd.showLoading(false);
String status = ""; String status = "";
switch (mStatus){ switch (mStatus){
case OPENING: case OPENING:
status = loadingTxt+ "正在拼命加载" ; status = "正在拼命加载" + loadingTxt;
mAd.showRefresh(View.GONE); mAd.showRefresh(View.GONE);
// mAd.showProgressbar(false,status);
mAd.showLoading(true);
// showProgressDialog();
break; break;
case FAIL: case FAIL:
status = "读取错误,请稍后重试"; status = "读取错误,请稍后重试";
@ -685,6 +699,7 @@ private void hideSysUI(){
case FINISH: case FINISH:
status = "加载成功"; status = "加载成功";
mAd.showRefresh(View.GONE); mAd.showRefresh(View.GONE);
mAd.hideProgressbar();
break; break;
case CHANGESOURCE: case CHANGESOURCE:
status = statusChangeSource; status = statusChangeSource;
@ -736,7 +751,10 @@ private void hideSysUI(){
// Log.d(TAG, String.format(" prepare book onDraw chapter _____________ %s ",currentChapter ) ); // Log.d(TAG, String.format(" prepare book onDraw chapter _____________ %s ",currentChapter ) );
//更新数据库进度 //更新数据库进度
if(mAd!=null){
handler.sendEmptyMessage(MSG_HIDEPROGRESS);
}
if ( mStatus ==Status.FINISH && currentPage != null && getNovel() != null) { if ( mStatus ==Status.FINISH && currentPage != null && getNovel() != null) {
@ -761,6 +779,7 @@ private void hideSysUI(){
} }
getNovel().setToDefault("isUpdated"); //去除更新标志 getNovel().setToDefault("isUpdated"); //去除更新标志
getNovel().setLastReadPos(currentPage.getBegin()); getNovel().setLastReadPos(currentPage.getBegin());
getNovel().update(getNovel().getId()); //If you set a default value to a field, the corresponding getNovel().update(getNovel().getId()); //If you set a default value to a field, the corresponding
// * column won't be updated. // * column won't be updated.
// getNovel().save(); // getNovel().save();
@ -797,9 +816,7 @@ private void hideSysUI(){
float space =m_fontSize + lineSpace; float space =m_fontSize + lineSpace;
paragraphSpace = prate * lineSpace; paragraphSpace = prate * lineSpace;
if(mAd!=null){
mAd.showRefresh(View.GONE);
}
if (m_lines.size() > 0) { if (m_lines.size() > 0) {
float y = marginHeight; float y = marginHeight;
@ -907,11 +924,11 @@ private void hideSysUI(){
String source =String.format("本章节内容来自网络"); String source =String.format("本章节内容来自网络");
if(!TextUtils.isEmpty(sn)){ if(!TextUtils.isEmpty(sn)){
source =String.format("本章节内容来自第三方网站:%s",getSite().getName()); source =String.format("本章节内容来自第三方网站:%s",sn);
} }
int anny= (int) CommonUtil.convertDpToPixel(mContext,40); int anny= (int) CommonUtil.convertDpToPixel(mContext,25);
c.drawText(source, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint); c.drawText(source, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint);
anny= (int) CommonUtil.convertDpToPixel(mContext,60); anny= (int) CommonUtil.convertDpToPixel(mContext,45);
c.drawText( Constants.announcement, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint); c.drawText( Constants.announcement, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint);
} }
@ -1054,7 +1071,7 @@ private void hideSysUI(){
Log.d(TAG, "prepare book: start prepare book " + book.getName()); Log.d(TAG, "prepare book: start prepare book " + book.getName());
clear();
if(getNovel()!=null &&getNovel().getNovelId() !=book.getNovelId()){ //取消未上本书完成的web请求待验证效果 if(getNovel()!=null &&getNovel().getNovelId() !=book.getNovelId()){ //取消未上本书完成的web请求待验证效果
try { try {
NetUtil.cancelRequest(getNovel().getNovelId() ); NetUtil.cancelRequest(getNovel().getNovelId() );
@ -1066,6 +1083,7 @@ private void hideSysUI(){
} }
mBookUtil = new BookUtil(); mBookUtil = new BookUtil();
mBookUtil.pagefactory=this;
//this.mBookUtil.setContext(context); //this.mBookUtil.setContext(context);
this.mBookUtil.setNovel(book); this.mBookUtil.setNovel(book);
this.mBookUtil.getTargetSites(); this.mBookUtil.getTargetSites();
@ -1076,9 +1094,10 @@ private void hideSysUI(){
* @throws IOException * @throws IOException
*/ */
public void openBook(Novel book ,Context context) throws IOException { public void openBook(Novel book ,Context context) throws IOException {
if(book==null){
return; if(book==null){
} return;
}
if(book.isLocalBook() || mBookUtil==null){ //离线书籍重新初始化加载mBookUtil if(book.isLocalBook() || mBookUtil==null){ //离线书籍重新初始化加载mBookUtil
mBookUtil = new BookUtil(); mBookUtil = new BookUtil();
} }
@ -1245,8 +1264,10 @@ if(book==null){
float width = 0; float width = 0;
float height = 0; float height = 0;
String line = ""; String line = "";
// boolean isFirstPage =false;
int firstPageLine =0;
if(mBookUtil.getPosition(chaptId)==0) { if(mBookUtil.getPosition(chaptId)==0) {
lines.add("\n");//lines.add("\n"); lines.add("\n");//lines.add("\n");
} }
calculateLineCount(); calculateLineCount();
while (mBookUtil.next(true,chaptId) != -1){ while (mBookUtil.next(true,chaptId) != -1){
@ -1257,7 +1278,9 @@ if(book==null){
// mBookUtil.next(false); // mBookUtil.next(false);
if ( !line.isEmpty()){ if ( !line.isEmpty()){
if (showChapTitleOnTopWhenNextPage && lines.size() >0 && mBookUtil.isChapterTitle(line)) { if (showChapTitleOnTopWhenNextPage && lines.size() >0 && mBookUtil.isChapterTitle(line)) {
Log.d(TAG,String.format("title is %s\n,size is %s ,position is %s" ,line,line.length(),mBookUtil.getPosition(chaptId) )); Log.d(TAG,String.format("title is %s\n,size is %s ,position is %s" ,line,line.length(),mBookUtil.getPosition(chaptId) ));
//isFirstPage =true;
firstPageLine=1;
break; break;
} }
// Log.d(TAG, String.format(" loadchapt getNextLines()chaptId %s new line with enter '%s' ", chaptId, line+word )); // Log.d(TAG, String.format(" loadchapt getNextLines()chaptId %s new line with enter '%s' ", chaptId, line+word ));
@ -1267,7 +1290,7 @@ if(book==null){
width = 0; width = 0;
height += paragraphSpace - lineSpace; height += paragraphSpace - lineSpace;
calculateLineCount(height); calculateLineCount(height);
if (lines.size()>= mLineCount){ if (lines.size()>= mLineCount +firstPageLine){
// Log.d(TAG,String.format("lines count limit a %s,lines size %s",mLineCount,lines.size())); // Log.d(TAG,String.format("lines count limit a %s,lines size %s",mLineCount,lines.size()));
line =""; line ="";
break; break;
@ -1296,7 +1319,7 @@ if(book==null){
} }
} }
if (lines.size() == mLineCount){ if (lines.size() == mLineCount +firstPageLine){
// Log.d(TAG,String.format("loadchapt lines count ,chaptId %s limit c %s,lines size %s",chaptId ,mLineCount,lines.size())); // Log.d(TAG,String.format("loadchapt lines count ,chaptId %s limit c %s,lines size %s",chaptId ,mLineCount,lines.size()));
if (!line.isEmpty()){ if (!line.isEmpty()){
// mBookUtil.setPostition(mBookUtil.getPosition() - line.length()-2);// mBookUtil.setPostition(mBookUtil.getPosition() - 1); // mBookUtil.setPostition(mBookUtil.getPosition() - line.length()-2);// mBookUtil.setPostition(mBookUtil.getPosition() - 1);
@ -1314,7 +1337,7 @@ if(book==null){
} }
}*/ }*/
if (!line.isEmpty() && lines.size() < mLineCount){ if (!line.isEmpty() && lines.size() < mLineCount +firstPageLine){
if (!(showChapTitleOnTopWhenNextPage && mBookUtil.isChapterTitle(line) ) ) { if (!(showChapTitleOnTopWhenNextPage && mBookUtil.isChapterTitle(line) ) ) {
lines.add(line); lines.add(line);
@ -1400,6 +1423,7 @@ if(book==null){
//上一章 //上一章
public void preChapter(){ public void preChapter(){
fileRetryCnt.clear(); fileRetryCnt.clear();
mBookUtil.fileRetryCnt.clear();
if(currentChapter==1){ if(currentChapter==1){
Toast.makeText(mContext,"到头了",Toast.LENGTH_SHORT).show(); Toast.makeText(mContext,"到头了",Toast.LENGTH_SHORT).show();
} }
@ -1425,6 +1449,7 @@ if(book==null){
//下一章 //下一章
public void nextChapter(){ public void nextChapter(){
fileRetryCnt.clear(); fileRetryCnt.clear();
mBookUtil.fileRetryCnt.clear();
int num = currentChapter; int num = currentChapter;
if (num == 0){ if (num == 0){
num = getCurrentChapter(); num = getCurrentChapter();
@ -1648,7 +1673,7 @@ if(book==null){
bookPath = ""; bookPath = "";
bookName = ""; bookName = "";
//getNovel() = null; //getNovel() = null;
mBookPageWidget = null; // mBookPageWidget = null;
mPageEvent = null; mPageEvent = null;
cancelPage = null; cancelPage = null;
prePage = null; prePage = null;

View File

@ -129,7 +129,7 @@ public class PageWidget extends View {
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event); super.onTouchEvent(event);
if ( PageFactory.getStatus() == PageFactory.Status.OPENING){ if ( PageFactory.getStatus() != PageFactory.Status.FINISH){
return true; return true;
} }

View File

@ -10,7 +10,16 @@
android:orientation="vertical" android:orientation="vertical"
> >
<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="0dp"
app:tab_indicator_radius="0dp"
app:tab_text_size="15sp"
app:tab_text_width="60dp"
app:tl_textUnselectColor="@color/darkgray" />
<com.flyco.tablayout.SlidingTabLayout <com.flyco.tablayout.SlidingTabLayout
android:id="@+id/tab_layout" android:id="@+id/tab_layout"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<q.rorbin.verticaltablayout.VerticalTabLayout
android:id="@+id/tablayout"
android:layout_width="80dp"
android:layout_height="match_parent"
android:background="#EDEDED"
app:indicator_color="#FFFFFF"
app:indicator_gravity="fill"
app:tab_height="50dp"
android:layout_weight="0"
android:paddingTop="50dp"
android:layout_margin="1dp"
app:tab_mode="scrollable" />
<!-- <com.flyco.tablayout.SlidingTabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/white"
app:tl_indicator_color="@color/tabSelected"
app:tl_indicator_corner_radius="1.5dp"
app:tl_indicator_height="2dp"
app:tl_indicator_width="45dp"
app:tl_textSelectColor="@color/tabSelected"
app:tl_textUnselectColor="@color/grey"
app:tl_textsize="14sp"
app:tl_textBold="SELECT"
app:tl_tab_space_equal ="true"
app:tl_indicator_bounce_enable ="true"
/>-->
<!-- app:tl_indicator_color="@color/crimson" -->
<android.support.v4.view.ViewPager
android:paddingTop="20dp"
android:paddingLeft="2dp"
android:id="@+id/viewpager"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>

View File

@ -12,9 +12,9 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/common_full_open_on_phone"
>
>
<!--android:background="@drawable/common_full_open_on_phone"-->
<FrameLayout <FrameLayout
android:id="@+id/realtabcontent" android:id="@+id/realtabcontent"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -43,6 +43,17 @@
android:layout_height="match_parent" android:layout_height="match_parent"
/> />
<pl.droidsonroids.gif.GifImageView
android:id="@+id/imgLoading"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@mipmap/loading"
android:scaleType="centerCrop"
android:layout_gravity="center"
android:visibility="gone"
android:layout_marginBottom="60dp"
android:contentDescription="TODO" />
<Button <Button
android:id="@+id/btnRefresh" android:id="@+id/btnRefresh"
android:layout_width="100dp" android:layout_width="100dp"
@ -67,7 +78,6 @@
android:src="@color/whitesmoke" android:src="@color/whitesmoke"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:contentDescription="TODO" /> android:contentDescription="TODO" />
</LinearLayout> </LinearLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -131,98 +131,101 @@
</content> </content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: com.android.support:design:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-fragment:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:localbroadcastmanager:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:2.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\juniversalchardet-1.0.3.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\juniversalchardet-1.0.3.jar:unspecified@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:3.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:loader:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:loader:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:extensions:1.1.1@aar" level="project" /> <orderEntry type="library" name="Gradle: android.arch.lifecycle:extensions:1.1.1@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:1.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.9.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.9.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core:1.1.1@aar" level="project" /> <orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.packetzoom:pz-android-sdk:3.2.43@aar" level="project" /> <orderEntry type="library" name="Gradle: com.packetzoom:pz-android-sdk:3.2.43@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:cursoradapter:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:cursoradapter:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.9.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.9.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.17.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.5.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.5.0@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:3.0.2@aar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:3.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.1@aar" level="project" /> <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-compat:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-compat:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\galaxy-v2.0.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\galaxy-v2.0.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-audience:16.0.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.astuetz:pagerslidingtabstrip:1.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.youth.banner:banner:1.4.10@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.chengzipi:Searchbox:v1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: org.litepal.android:java:3.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: org.litepal.android:java:3.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7:28.0.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor:1.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:28.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-annotations:28.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:D.\android\sdk\build-tools\28.0.3\renderscript\lib\renderscript-v8.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:D.\android\sdk\build-tools\28.0.3\renderscript\lib\renderscript-v8.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: io.alterac.blurkit:blurkit:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:interpolator:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:transition:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:drawerlayout:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-plus:16.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-plus:16.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar" level="project" /> <orderEntry type="library" name="Gradle: com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-v4:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-v4:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.1.0@aar" level="project" /> <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: org.litepal.android:core:3.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.timqi.collapsibletextview:library:1.1.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.5.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.umeng.umsdk:common:2.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.5.0@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: pl.droidsonroids.gif:android-gif-drawable:1.2.16@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" name="Gradle: android.arch.lifecycle:common:1.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:customview:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:design:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-fragment:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:2.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel:1.1.1@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:3.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:runtime:1.1.1@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:1.0.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.17.2@jar" level="project" />
<orderEntry type="library" name="Gradle: q.rorbin:badgeview:1.1.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-audience:16.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.astuetz:pagerslidingtabstrip:1.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.youth.banner:banner:1.4.10@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.chengzipi:Searchbox:v1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils:28.0.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor:1.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: io.alterac.blurkit:blurkit:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:interpolator:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:transition:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata:1.1.1@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:drawerlayout:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.umeng.umsdk:analytics:8.0.2@jar" level="project" /> <orderEntry type="library" name="Gradle: com.umeng.umsdk:analytics:8.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:9.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:9.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:documentfile:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:documentfile:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife:9.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife:9.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:slidingpanelayout:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\Msc.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\Msc.jar:unspecified@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:appcompat-v7:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.14.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:multidex:1.0.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support:multidex-instrumentation:1.0.2@aar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.android.support:multidex-instrumentation:1.0.2@aar" level="project" />
<orderEntry type="library" name="Gradle: org.litepal.android:core:3.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.packetzoom:pz-okhttp3-interceptor:3.2.43@aar" level="project" /> <orderEntry type="library" name="Gradle: com.packetzoom:pz-okhttp3-interceptor:3.2.43@aar" level="project" />
<orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.2.7@jar" level="project" /> <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.2.7@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:collections:28.0.0@jar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:collections:28.0.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.timqi.collapsibletextview:library:1.1.2@aar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.5.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.umeng.umsdk:common:2.0.2@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.14.0@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:asynclayoutinflater:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout:1.1.3@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:print:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:print:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime:9.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime:9.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:versionedparcelable:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:versionedparcelable:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base:16.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base:16.0.1@aar" level="project" />
<orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\com.baidu.tts_2.2.9.20161020_154fa02_release.jar:unspecified@jar" level="project" /> <orderEntry type="library" name="Gradle: __local_aars__:E.\reading\android\asProjects\zhuike\libs\com.baidu.tts_2.2.9.20161020_154fa02_release.jar:unspecified@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.5.0@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.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: com.android.support:coordinatorlayout:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:coordinatorlayout:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:customview:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:swiperefreshlayout:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: q.rorbin:VerticalTabLayout:1.2.5@aar" level="project" />
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat:28.0.0@aar" level="project" /> <orderEntry type="library" name="Gradle: com.android.support:support-media-compat:28.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tasks:16.0.1@aar" level="project" /> <orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tasks:16.0.1@aar" level="project" />
</component> </component>