From 65d75da6db44f61defa9f0dc2a27ea42623abb6b Mon Sep 17 00:00:00 2001 From: mwang <8205347@qq.com> Date: Sat, 18 May 2019 23:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=B8=A0=E9=81=93=E6=89=93=E5=8C=85?= =?UTF-8?q?=E5=8F=8A=E4=B8=BBAPI=E8=BF=87=E6=9C=9F=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhuike/build.gradle | 83 +++++--- zhuike/src/main/AndroidManifest.xml | 6 +- zhuike/src/main/assets/litepal.xml | 2 +- .../novelbook/android/Activity_ChgSource.java | 16 +- .../com/novelbook/android/Activity_base.java | 8 +- .../com/novelbook/android/BookActivity.java | 13 +- .../android/Fragments/BookMarkFragment.java | 11 +- .../android/Fragments/CatalogFragment.java | 11 +- .../android/Fragments/Fragment_Shelf.java | 3 +- .../android/Fragments/Fragment_bookStore.java | 2 +- .../android/Fragments/Fragment_jingxuan.java | 2 +- .../Fragments/Fragment_jingxuan_tuijian.java | 2 +- .../android/Fragments/Fragment_shudan.java | 1 + .../com/novelbook/android/Main2Activity.java | 33 +--- .../com/novelbook/android/MarkActivity.java | 28 +++ .../java/com/novelbook/android/MyApp.java | 5 +- .../com/novelbook/android/ReadActivity.java | 75 ++++--- .../com/novelbook/android/db/SiteRule.java | 9 + .../novelbook/android/netapi/URLConstant.java | 8 +- .../android/netutils/HttpMethods.java | 32 ++- .../novelbook/android/netutils/NetUtil.java | 86 +++++++- .../android/netutils/RetryInterceptor.java | 34 +++- .../com/novelbook/android/utils/BookUtil.java | 114 ++++++++--- .../novelbook/android/utils/CommonUtil.java | 34 +++- .../com/novelbook/android/utils/Config.java | 13 +- .../novelbook/android/utils/Constants.java | 4 +- .../android/utils/NovelParseUtil.java | 9 + .../novelbook/android/utils/PageFactory.java | 187 ++++++++++++++---- .../src/main/res/drawable/button_chk_bg.xml | 23 +++ .../main/res/drawable/button_select_bg.xml | 23 +++ .../main/res/drawable/ic_book_black_24dp.xml | 5 + .../ic_bookmark_border_black_24dp.xml | 5 + .../res/drawable/ic_call_split_black_24dp.xml | 5 + .../ic_collections_bookmark_black_24dp.xml | 5 + .../drawable/ic_description_black_24dp.xml | 5 + .../res/drawable/ic_equalizer_black_24dp.xml | 5 + zhuike/src/main/res/drawable/ic_rank_24dp.xml | 5 + .../res/drawable/ic_storage_black_24dp.xml | 5 + zhuike/src/main/res/drawable/paper.jpg | Bin 0 -> 131855 bytes .../main/res/drawable/selector_shelf_menu.xml | 18 ++ zhuike/src/main/res/layout/activity_book.xml | 33 ++-- zhuike/src/main/res/layout/content_book.xml | 26 +-- zhuike/src/main/res/layout/realcontent.xml | 1 + zhuike/src/main/res/layout/zactivity_mark.xml | 4 +- zhuike/src/main/res/menu/catalogemark.xml | 10 + zhuike/src/main/res/menu/navigation.xml | 6 +- zhuike/src/main/res/menu/read.xml | 33 +++- zhuike/src/main/res/values/strings.xml | 3 +- zhuike/src/main/res/values/styles.xml | 6 +- zhuike/zhuike.iml | 2 - 50 files changed, 810 insertions(+), 249 deletions(-) create mode 100644 zhuike/src/main/res/drawable/button_chk_bg.xml create mode 100644 zhuike/src/main/res/drawable/button_select_bg.xml create mode 100644 zhuike/src/main/res/drawable/ic_book_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_bookmark_border_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_call_split_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_collections_bookmark_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_description_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_equalizer_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_rank_24dp.xml create mode 100644 zhuike/src/main/res/drawable/ic_storage_black_24dp.xml create mode 100644 zhuike/src/main/res/drawable/paper.jpg create mode 100644 zhuike/src/main/res/drawable/selector_shelf_menu.xml create mode 100644 zhuike/src/main/res/menu/catalogemark.xml diff --git a/zhuike/build.gradle b/zhuike/build.gradle index 53a1019..5218324 100644 --- a/zhuike/build.gradle +++ b/zhuike/build.gradle @@ -2,6 +2,14 @@ apply plugin: 'com.android.application' //apply plugin: 'com.jakewharton.butterknife' // apply plugin: 'com.neenbedankt.android-apt' android { + signingConfigs { + releaseConfig { + keyAlias 'key0' + keyPassword 'hello123' + storeFile file('E:/reading/android/asProjects/zhuike/mykeystore.jks') + storePassword 'hello123' + } + } compileSdkVersion 28 buildToolsVersion "28.0.3" defaultConfig { @@ -22,14 +30,15 @@ android { renderscriptSupportModeEnabled true //blurkit multiDexEnabled true //突破65535 - manifestPlaceholders = [UMENG_CHANNEL_CALUE:"umeng"] //默认为uMeng - // flavorDimensions "default" //debug时注销 + manifestPlaceholders = [UMENG_CHANNEL_CALUE: "umeng"] //默认为uMeng + // flavorDimensions "default" //debug时注销 } - buildTypes { debug { // 显示Log buildConfigField "boolean", "LOG_DEBUG", "true" + buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"' versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false @@ -43,47 +52,64 @@ android { minifyEnabled true //Zipalign优化 zipAlignEnabled true - // 移除无用的resource文件 shrinkResources true - - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - /* applicationVariants.all{ variant -> - variant.outputs.all{ output -> + /* applicationVariants.all { variant -> + variant.outputs.all { output -> def outFile = output.outputFile - if (outFile != null && outFile.name.endsWith(".apk")){ - def fileName = "${variant.productFlavors[0].name}" + "${releaseTime()}" + ".apk" - outputFileName = fileName; - // output.outputFile = new File(outFile.parent, fileName); + if (outFile != null && outFile.name.endsWith(".apk")) { + def fileName = "${variant.productFlavors[0].name}" + "-${defaultConfig.versionName}-" + "${releaseTime()}" + ".apk" + outputFileName = fileName; } } }*/ + signingConfig signingConfigs.releaseConfig } } - //渠道 - /* productFlavors { - // googleplay {} - huawei { applicationId "com.novelbook.android.huawei" - versionName "version-a-1.0"} - xiaomi { applicationId "com.novelbook.android.xiaomi" - versionName "version-a-1.0"} - - //批量配置 - productFlavors.all { flavor -> - flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] - } + //渠道 + /* productFlavors { + // googleplay {} + A { + applicationId "com.novelbook.android.a" + versionName "version-a-1.0" + buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"' } -*/ + B { + applicationId "com.novelbook.android.b" + versionName "version-b-1.0" + buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"' + } + C { + applicationId "com.novelbook.android.c" + versionName "version-c-1.0" + buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"' + + } + D { + applicationId "com.novelbook.android.d" + versionName "version-d-1.0" + buildConfigField "String", "MAIN_HOST", '"http://xiaoshuofenxiang.com/api/"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/xiaoshuofenxiang.com\\"],\\"page\\":[\\"http:\\\\/\\\\/p.xiaoshuofenxiang.com\\"],\\"report\\":[\\"http:\\\\/\\\\/r.xiaoshuofenxiang.com\\"],\\"search\\":[\\"http:\\\\/\\\\/s.xiaoshuofenxiang.com\\"],\\"novel\\":[\\"http:\\\\/\\\\/n.xiaoshuofenxiang.com\\"],\\"novelsbydot\\":[\\"http:\\\\/\\\\/nbd.xiaoshuofenxiang.com\\"],\\"user\\":[\\"http:\\\\/\\\\/u.xiaoshuofenxiang.com\\"]}"' + + } + //批量配置 + productFlavors.all { flavor -> + flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] + } + + }*/ android { lintOptions { abortOnError false } } - sourceSets { main { jniLibs.srcDirs = ['libs'] @@ -94,12 +120,11 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - - } def releaseTime() { - return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) + return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) } + dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0' diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml index 05e373c..d6c3647 100644 --- a/zhuike/src/main/AndroidManifest.xml +++ b/zhuike/src/main/AndroidManifest.xml @@ -43,6 +43,7 @@ android:label="@string/title_Activity_ChgSource" /> @@ -84,7 +86,9 @@ - + + \ No newline at end of file diff --git a/zhuike/src/main/assets/litepal.xml b/zhuike/src/main/assets/litepal.xml index eec8672..eefb61e 100644 --- a/zhuike/src/main/assets/litepal.xml +++ b/zhuike/src/main/assets/litepal.xml @@ -2,7 +2,7 @@ - + diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java index 47c03af..ba07146 100644 --- a/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java +++ b/zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java @@ -1,6 +1,7 @@ package com.novelbook.android; import android.content.Context; +import android.content.Intent; import android.os.Build; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; @@ -42,8 +43,9 @@ public class Activity_ChgSource extends Activity_base { public final static String EXTR_ID="id"; public final static String EXTR_SITE="site"; //public static final String EXTR_NAME ="" ; + public final static String EXTR_cate ="cate"; PageFactory pageFactory; - + boolean isFromCate; List mSites; @Override @@ -69,6 +71,9 @@ public class Activity_ChgSource extends Activity_base { chaptId = getIntent().getIntExtra(EXTR_ID,1); domain = getIntent().getStringExtra(EXTR_SITE); + + isFromCate =getIntent().getBooleanExtra(EXTR_cate,false); + // name = getIntent().getStringExtra(EXTR_NAME); this.setTitle(chaptTitle); } @@ -84,8 +89,15 @@ public class Activity_ChgSource extends Activity_base { Site site = mSites.get(position); Log.d(TAG, String.format("changing Source:target site name %s, site domain %s " ,site.getName(), site.getDomain())); - pageFactory.changeSource(site.getName(),site.getDomain(),chaptId,chaptTitle); + if(isFromCate){ + pageFactory.changeSourceForCate(site.getName(),site.getDomain()); + Intent intent = new Intent(Activity_ChgSource.this, MarkActivity.class); + // intent.putExtra(Activity_ChgSource.EXTR_NAME, pageFactory.getSite().getName()); + startActivity(intent); + }else{ + pageFactory.changeSource(site.getName(),site.getDomain(),chaptId,chaptTitle); + } finish(); } }); diff --git a/zhuike/src/main/java/com/novelbook/android/Activity_base.java b/zhuike/src/main/java/com/novelbook/android/Activity_base.java index 375b86d..0c25b92 100644 --- a/zhuike/src/main/java/com/novelbook/android/Activity_base.java +++ b/zhuike/src/main/java/com/novelbook/android/Activity_base.java @@ -97,6 +97,12 @@ public abstract class Activity_base extends AppCompatActivity { hideProgress(); // MobclickAgent.onPause(this); } + protected void closeCurrentActitivty(){ + if( this instanceof BookActivity ) { + // return; + } + finish(); + } protected BookListAdapter getBookListAdapter(List mDatas,int itemResourceId){ BookListAdapter mAdapter = new BookListAdapter(this ,mDatas,itemResourceId,new OnItemClickListener() { @@ -107,7 +113,7 @@ public abstract class Activity_base extends AppCompatActivity { // showBook("射雕" +position); showBookDetail(mDatas.get(position)); - finish(); + closeCurrentActitivty(); } @Override diff --git a/zhuike/src/main/java/com/novelbook/android/BookActivity.java b/zhuike/src/main/java/com/novelbook/android/BookActivity.java index 8fab9c8..d5000c9 100644 --- a/zhuike/src/main/java/com/novelbook/android/BookActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/BookActivity.java @@ -221,9 +221,11 @@ public class BookActivity extends Activity_base { return; } rvBooklistAuthor.setVisibility(View.VISIBLE); +// mAdapterAuthor = getBookListAdapter(mDataAuthor,R.layout.recycle_list_item_horizon); +// rvBooklistAuthor.setLayoutManager(new LinearLayoutManager(this)); mAdapterAuthor = getBookListAdapter(mDataAuthor,R.layout.recycle_list_item_horizon); - rvBooklistAuthor.setLayoutManager(new LinearLayoutManager(this)); + rvBooklistAuthor.setAdapter(mAdapterAuthor); } @@ -237,10 +239,10 @@ public class BookActivity extends Activity_base { return; } rvBooklistRelated.setVisibility(View.VISIBLE); - mAdapterRelated = getBookListAdapter(mDataRelated,R.layout.recycle_list_item); - - rvBooklistRelated.setLayoutManager(new GridLayoutManager(this, Constants.NOVEL_SPAN_CNT)); - + /* mAdapterRelated = getBookListAdapter(mDataRelated,R.layout.recycle_list_item); + rvBooklistRelated.setLayoutManager(new GridLayoutManager(this, Constants.NOVEL_SPAN_CNT));*/ + mAdapterRelated = getBookListAdapter(mDataRelated,R.layout.recycle_list_item_horizon); + rvBooklistRelated.setLayoutManager(new LinearLayoutManager(this)); rvBooklistRelated.setAdapter(mAdapterRelated); } /** @@ -707,6 +709,7 @@ void onResponseProcess( String content ,String url){ if( pageFactory.isWorking() && ( pageFactory.getNovle()==null || mNovel.getId() !=pageFactory.getNovle().getId())){ pageFactory.prepareBook(mNovel); } + setShelfButtonText(); } // View v =findViewById(R.id.head_img); diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/BookMarkFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/BookMarkFragment.java index f8a404f..f3f7c1f 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/BookMarkFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/BookMarkFragment.java @@ -3,6 +3,7 @@ package com.novelbook.android.Fragments; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.AdapterView; @@ -27,6 +28,7 @@ import butterknife.BindView; * Created by Administrator on 2016/8/31 0031. */ public class BookMarkFragment extends BasicFragment implements MarkActivity.Sortmark{ + public static String TAG=BookMarkFragment.class.getSimpleName(); public static final String ARGUMENT = "argument"; @BindView(R.id.lv_bookmark) @@ -51,7 +53,14 @@ public class BookMarkFragment extends BasicFragment implements MarkActivity.Sor novelId = bundle.getInt(ARGUMENT); } bookMarksList = new ArrayList<>(); - bookMarksList = LitePal.where("novelId = ? and domain= ?", novelId+"",pageFactory.getSite().getDomain()).order(String.format("id %s",isAsc ?"asc" :"desc")). find(BookMarks.class); + String domain =pageFactory.getSite().getDomain(); + if(TextUtils.isEmpty(domain)){ + Novel nv = LitePal.find(Novel.class,novelId); + if(nv!=null) { + domain = nv.getDomain(); + } + } + bookMarksList = LitePal.where("novelId = ? and domain= ?", novelId+"",domain).order(String.format("id %s",isAsc ?"asc" :"desc")). find(BookMarks.class); Log.d(TAG, "initData: bookmark size " +bookMarksList.size()); markAdapter = new MarkAdapter(getActivity(), bookMarksList); lv_bookmark.setAdapter(markAdapter); diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java index 0c8d967..1dbc82b 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/CatalogFragment.java @@ -154,7 +154,16 @@ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortc @Override public void run() { // ArrayList list =(ArrayList) LitePal.where("novelId=? and domain =? " ,pageFactory.getNovle().getId()+"",pageFactory.getSite().getDomain()).find(Chapter.class); - ArrayList list =(ArrayList) LitePal.where("novelId=? and domain =? " ,pageFactory.getNovle().getId()+"",pageFactory.getNovle().getDomain()).find(Chapter.class); + + String domain =pageFactory.getNovle().getDomain(); + if(TextUtils.isEmpty(domain)){ + domain=""; + } + + ArrayList list = new ArrayList(); + if(!TextUtils.isEmpty(domain)) { + list = (ArrayList) LitePal.where("novelId=? and domain =? ", pageFactory.getNovle().getId() + "", domain).find(Chapter.class); + } File file; for(Chapter cp : list){ if(!TextUtils.isEmpty(cp.getChapterPath())) { diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java index 07a80f5..06689cd 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_Shelf.java @@ -62,7 +62,7 @@ import okhttp3.ResponseBody; public class Fragment_Shelf extends BasicFragment { - + public static String TAG=Fragment_Shelf.class.getSimpleName(); public static String getFTag() { return "com.novelbook.android.Fragments.Fragment_Shelf"; } @@ -448,6 +448,7 @@ void test(int maxAge){ }else{ Log.d(TAG, "shelfZhengliSubmit: to delete novel " + nv.getName()); nv.setToDefault("isOnShelf"); + nv.setToDefault("isTop"); //nv.setOnShelf(false); nv.update(nv.getId()); // nv.update(nv.getId()); //not work,,,If you set a default value to a field, the corresponding column won't be updated. diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java index c31f04c..b733782 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_bookStore.java @@ -18,7 +18,7 @@ import butterknife.BindView; public class Fragment_bookStore extends BasicFragment { - + public static String TAG=Fragment_bookStore.class.getSimpleName(); public static String getFTag() { return "com.novelbook.android.Fragments.Fragment_bookStore"; } diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java index 1ec6c2e..c7639e1 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan.java @@ -61,7 +61,7 @@ import butterknife.OnClick; public class Fragment_jingxuan extends BasicFragment implements OnBannerListener { - + public static String TAG=Fragment_jingxuan.class.getSimpleName(); private String mParam1; private String mParam2; diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java index 3080b77..af6a3b5 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_jingxuan_tuijian.java @@ -18,7 +18,7 @@ import butterknife.ButterKnife; import butterknife.OnClick; public class Fragment_jingxuan_tuijian extends BasicFragment { - + public static String TAG=Fragment_jingxuan.class.getSimpleName(); @BindView(R.id.imageGallary1) ImageView imageView1; @BindView(R.id.imageGallary2) diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java index 6d2fd56..e972e7b 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_shudan.java @@ -22,6 +22,7 @@ import butterknife.BindView; public class Fragment_shudan extends BasicFragment { + public static String TAG=Fragment_shudan.class.getSimpleName(); @BindView(R.id.fab) FloatingActionButton fab; diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java index 45008c2..8cf24eb 100644 --- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java +++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java @@ -29,6 +29,7 @@ import com.novelbook.android.Fragments.Fragment_bookStore; import com.novelbook.android.Fragments.Fragment_booklist; import com.novelbook.android.Fragments.Fragment_paihang; 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.service.ServiceDownload; @@ -40,6 +41,8 @@ import com.novelbook.android.utils.PageFactory; import org.json.JSONObject; +import java.util.Date; + import butterknife.BindView; import butterknife.OnClick; @@ -72,7 +75,7 @@ public class Main2Activity extends Activity_base @Override protected void onCreate(Bundle savedInstanceState) { - getHostPolicy(); + NetUtil.getHostPolicy(); super.onCreate(savedInstanceState); //PageFactory.createPageFactory(this); app =(MyApp) getApplicationContext(); @@ -536,33 +539,5 @@ private int bottomSelectedIndex; //----get master domain - private void getHostPolicy(){ //TODO: get masterdomain info - BookSubscribe.getMastDomain(new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { - @Override - public void onSuccess(String result) { - - // mFirstPage= gson.fromJson(result, FirstPage.class); - try { - JSONObject jsonObject = new JSONObject(result); - String resultstr = jsonObject.getString("hosts"); - Config config =Config.createConfig(Main2Activity.this); - config.setBaseUrl(resultstr); - // config.setRootUrl( jsonObject.getString("masterDomains")); - - } catch (Exception e) { - e.printStackTrace(); - } - handler.sendEmptyMessage(1); - - } - - @Override - public void onFault(String errorMsg) { - //失败 - Log.d(TAG, "error on get firstpage: " + errorMsg); - handler.sendEmptyMessage(2); - } - }, this)); - } } diff --git a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java index 8c26a58..913f903 100644 --- a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java @@ -1,11 +1,14 @@ package com.novelbook.android; +import android.content.Intent; import android.graphics.Typeface; import android.support.design.widget.AppBarLayout; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; @@ -144,4 +147,29 @@ public class MarkActivity extends Activity_base { public void sortList(); public void refresh(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.catalogemark, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + if (id == R.id.action_change_source) { + Intent intent = new Intent(MarkActivity.this, Activity_ChgSource.class); + intent.putExtra(Activity_ChgSource.EXTR_ID, pageFactory.getChapter().getIndex()); + intent.putExtra(Activity_ChgSource.EXTR_TITLE, pageFactory.getChapter().getChapterName()); + intent.putExtra(Activity_ChgSource.EXTR_SITE, pageFactory.getChapter().getDomain()); + intent.putExtra(Activity_ChgSource.EXTR_cate,true); + startActivity(intent); + finish(); + } + return super.onOptionsItemSelected(item); + } } diff --git a/zhuike/src/main/java/com/novelbook/android/MyApp.java b/zhuike/src/main/java/com/novelbook/android/MyApp.java index af60b3d..60424ec 100644 --- a/zhuike/src/main/java/com/novelbook/android/MyApp.java +++ b/zhuike/src/main/java/com/novelbook/android/MyApp.java @@ -18,14 +18,17 @@ public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); - HttpMethods.USERAGENT = NetUtil.getUserAgent(); applicationContext = getApplicationContext(); + HttpMethods.USERAGENT = NetUtil.getUserAgent(); + HttpMethods.LOCALUSERAGENT = NetUtil.getUserAgent(applicationContext); + Config.createConfig(this); PageFactory.createPageFactory(this); LogcatHelper.getInstance(this).start(); // BlurKit.init(this); LitePal.initialize(this); + initApi(); } public void initApi(){ diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java index a1da397..60cb49d 100644 --- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java +++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java @@ -47,6 +47,7 @@ import com.novelbook.android.utils.Config; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.PageFactory; import com.novelbook.android.view.PageWidget; +import com.umeng.analytics.MobclickAgent; import org.litepal.LitePal; @@ -55,7 +56,9 @@ import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import butterknife.BindView; import butterknife.OnClick; @@ -121,7 +124,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis private PageModeDialog mPageModeDialog; private Boolean mDayOrNight; // 语音合成客户端 - private SpeechSynthesizer mSpeechSynthesizer; + // private SpeechSynthesizer mSpeechSynthesizer; private boolean isSpeaking = false; @@ -225,7 +228,7 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis bookpage.setPageMode(config.getPageMode()); pageFactory.setPageWidget(bookpage); sb_progress.setVisibility(book.isLocalBook()?View.VISIBLE:View.INVISIBLE); - Log.d(TAG, String .format("prepare Book: set pagewidget %s" , book.getName())); + Log.d(TAG, String .format("prepare book: set pagewidget %s, to open book" , book.getName())); try { hideSystemUI(); @@ -457,35 +460,46 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis }; + int startTime =0; @Override protected void onResume(){ super.onResume(); if (!isShow){ hideSystemUI(); } - if (mSpeechSynthesizer != null){ + /* if (mSpeechSynthesizer != null){ mSpeechSynthesizer.resume(); - } + }*/ + startTime = (int) new Date().getTime(); } + @Override + public void onPause() { + super.onPause(); + Map map_value = new HashMap(); + map_value.put("bookname" , book!=null ? book.getName():"noname" ); + MobclickAgent.onEventValue(MyApp.applicationContext, "novel_reading_time" , map_value, (int) new Date().getTime() - startTime); + + } @Override protected void onStop(){ super.onStop(); - if (mSpeechSynthesizer != null){ + /* if (mSpeechSynthesizer != null){ mSpeechSynthesizer.stop(); - } + }*/ + } @Override protected void onDestroy() { super.onDestroy(); - pageFactory.clear(); + // pageFactory.clear(); bookpage = null; unregisterReceiver(myReceiver); isSpeaking = false; - if (mSpeechSynthesizer != null){ + /* if (mSpeechSynthesizer != null){ mSpeechSynthesizer.release(); - } + }*/ } @Override @@ -509,7 +523,11 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis if(!pageFactory.canExitSilent()){ - showNormalDialog(); + if(book.isOnShelf()){ + finish(); + }else { + showNormalDialog(); + } } } @@ -524,19 +542,25 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis final AlertDialog.Builder normalDialog = new AlertDialog.Builder(ReadActivity.this); - normalDialog.setTitle("退出阅读"); - normalDialog.setMessage("确定退出阅读吗?"); - normalDialog.setPositiveButton("继续阅读", + normalDialog.setTitle("提示"); + normalDialog.setMessage("是否加入书架?"); + normalDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - hideSystemUI(); + + book.setOnShelf(true); + book.update(book.getId()); + finish(); + } }); - normalDialog.setNegativeButton("退出阅读", + normalDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { + public void onClick(DialogInterface dialog, int which) + { + finish(); } }); @@ -634,6 +658,11 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis // }else{ // Toast.makeText(this,"换源不可用,请返回重试...",Toast.LENGTH_SHORT); // } + }else if(id == R.id.action_refresh){ + pageFactory.refreshChapter(); + }else if(id == R.id.action_bookdetail){ + showBookDetail(this.book); + //finish(); } return super.onOptionsItemSelected(item); @@ -898,11 +927,11 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis /* case R.id.rl_bottom: break;*/ case R.id.tv_stop_read: - if (mSpeechSynthesizer!=null){ + /* if (mSpeechSynthesizer!=null){ mSpeechSynthesizer.stop(); isSpeaking = false; hideReadSetting(); - } + }*/ case R.id.llTopAd: Toast.makeText(this,"ad is clicked ",Toast.LENGTH_LONG).show(); Log.d(TAG,"Ad is clicked"); @@ -992,14 +1021,14 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis */ @Override public void onSpeechFinish(String utteranceId) { - pageFactory.nextPage(); + /* pageFactory.nextPage(); if (pageFactory.islastPage()) { isSpeaking = false; Toast.makeText(ReadActivity.this,"小说已经读完了",Toast.LENGTH_SHORT); }else { isSpeaking = true; mSpeechSynthesizer.speak(pageFactory.getCurrentPage().getLineToString()); - } + }*/ } /** @@ -1010,9 +1039,9 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis */ @Override public void onError(String utteranceId, SpeechError error) { - mSpeechSynthesizer.stop(); + /* mSpeechSynthesizer.stop(); isSpeaking = false; - Log.e(TAG,error.description); + Log.e(TAG,error.description);*/ } final int contentAdHight=350; @@ -1041,4 +1070,6 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis + + } diff --git a/zhuike/src/main/java/com/novelbook/android/db/SiteRule.java b/zhuike/src/main/java/com/novelbook/android/db/SiteRule.java index fc01071..a4c08dd 100644 --- a/zhuike/src/main/java/com/novelbook/android/db/SiteRule.java +++ b/zhuike/src/main/java/com/novelbook/android/db/SiteRule.java @@ -22,6 +22,15 @@ public class SiteRule extends LitePalSupport { private String chapterUrlPattern; private long miniInterval4AccessChapter; private String[] headers; + private String[] userAgents; + + public String[] getUserAgents() { + return userAgents; + } + + public void setUserAgents(String[] userAgents) { + this.userAgents = userAgents; + } public int getId() { return id; diff --git a/zhuike/src/main/java/com/novelbook/android/netapi/URLConstant.java b/zhuike/src/main/java/com/novelbook/android/netapi/URLConstant.java index b6ee494..580b074 100644 --- a/zhuike/src/main/java/com/novelbook/android/netapi/URLConstant.java +++ b/zhuike/src/main/java/com/novelbook/android/netapi/URLConstant.java @@ -14,15 +14,15 @@ import org.json.JSONObject; public class URLConstant { //存放全部的URL(可分为开发、测试、正式) - private static String ROOT_URL = Config.getInstance().getRootUrl() ;//https://api.douban.com/v2/movie/"; - public static String[] BASE_URLS = {"http://xiaoshuofenxiang.com/api/"}; + private static String ROOT_URL ;//= Config.getInstance().getRootUrl() ;//https://api.douban.com/v2/movie/"; + // public static String[] BASE_URLS = {"http://xiaoshuofenxiang.com/api/"}; /** * 取新的baseURL * @return */ - public static String newRootUrl(){ + /* public static String newRootUrl(){ for (String url:BASE_URLS) { if(!url.equals(ROOT_URL)){ @@ -34,7 +34,7 @@ public class URLConstant { Config.getInstance().setBaseUrl(ROOT_URL); } return ROOT_URL; - } + }*/ /** * app初始化取上次保存的baseurl diff --git a/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java b/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java index 0a57c76..273eddc 100644 --- a/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java +++ b/zhuike/src/main/java/com/novelbook/android/netutils/HttpMethods.java @@ -45,8 +45,8 @@ import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import static com.novelbook.android.netapi.URLConstant.getRootUrl; -import static com.novelbook.android.netapi.URLConstant.newRootUrl; -import static com.novelbook.android.netutils.NetUtil.getHost; +//import static com.novelbook.android.netapi.URLConstant.newRootUrl; +//import static com.novelbook.android.netutils.NetUtil.getHost; public class HttpMethods { public String TAG = "HttpMethods"; @@ -56,6 +56,7 @@ public class HttpMethods { private static final int DEFAULT_WRITE_TIMEOUT = 5; private static final int DEFAULT_READ_TIMEOUT = 5; public static String USERAGENT=""; + public static String LOCALUSERAGENT=""; private Retrofit retrofit; private HttpApi httpApi; /** @@ -102,6 +103,7 @@ public class HttpMethods { // okHttpBuilder.addInterceptor(new RetryInterceptor()); okHttpBuilder.followRedirects(false); okHttpBuilder.retryOnConnectionFailure(false); + retrofit = new Retrofit.Builder() .client(okHttpBuilder.build()) .addConverterFactory(GsonConverterFactory.create()) @@ -165,6 +167,7 @@ public class HttpMethods { private OkHttpClient getClient(){ //手动创建一个OkHttpClient并设置超时时间 okHttpBuilder = new OkHttpClient.Builder(); + /** * 设置缓存 */ @@ -173,7 +176,7 @@ public class HttpMethods { Log.d(TAG, "getClient: to set cach control"); // okHttpBuilder.cache(cache).addInterceptor(cacheInterceptor); okHttpBuilder.cache(cache) - .addNetworkInterceptor(REWRITE_RESPONSE_INTERCEPTOR) + // .addNetworkInterceptor(REWRITE_RESPONSE_INTERCEPTOR) .addInterceptor(REWRITE_RESPONSE_INTERCEPTOR_OFFLINE); /** @@ -181,17 +184,17 @@ public class HttpMethods { */ - Interceptor headerInterceptor = new Interceptor() { + /* Interceptor headerInterceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request originalRequest = chain.request(); - /* Request.Builder requestBuilder = originalRequest.newBuilder() + *//* Request.Builder requestBuilder = originalRequest.newBuilder() .addHeader("Accept-Encoding", Locale.getDefault().toString()) // .addHeader("Host", "testapi.wujike.com.cn") .addHeader("Connection", "Keep-Alive") .addHeader("Device", "Android") .method(originalRequest.method(), originalRequest.body()); - */ + *//* Request.Builder requestBuilder = originalRequest.newBuilder() // .addHeader("Accept-Encoding", "gzip") // .addHeader("Accept-Encoding", Locale.getDefault().toString() ) @@ -206,8 +209,8 @@ public class HttpMethods { Request request = requestBuilder.build(); return chain.proceed(request); } - }; - okHttpBuilder.addInterceptor(headerInterceptor); + };*/ + // okHttpBuilder.addInterceptor(headerInterceptor); // if (BuildConfig.DEBUG) { @@ -334,18 +337,7 @@ public class HttpMethods { } }; - private static String getUserAgent(Context context) { - String userAgent = ""; -// APP版本 - String versionName = CommonUtil.getVersionName(context); -// 手机型号 - String systemModel = CommonUtil.getSystemModel(); -// 系统版本 - String systemVersion = CommonUtil.getSystemVersion(); - String deviceBrand = CommonUtil.getDeviceBrand(); - userAgent = "Android/" + versionName + "/" + deviceBrand + "" + systemModel + "/" + systemVersion; - return userAgent; - } + final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { @Override diff --git a/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java b/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java index a18bfce..a98f814 100644 --- a/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java @@ -5,16 +5,16 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.text.TextUtils; import android.util.Log; -import android.widget.ImageView; import com.novelbook.android.MyApp; -import com.novelbook.android.netapi.RandomHost; -import com.novelbook.android.netapi.URLConstant; +import com.novelbook.android.netsubscribe.BookSubscribe; +import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Config; +import com.novelbook.android.utils.Constants; -import org.json.JSONException; import org.json.JSONObject; +import java.util.Date; import java.util.Random; import okhttp3.Call; @@ -29,8 +29,8 @@ public class NetUtil { private static final String TAG= NetUtil.class.getSimpleName(); public static int currentRequestTag =0; public static String hosts; - - public static String getUrl(String key){ + public static boolean isRequestHosts; + /* public static String getUrl(String key){ try { JSONObject jsonObject = getHost(); @@ -48,10 +48,26 @@ public class NetUtil { } return ""; + }*/ + + public static boolean isHostExpires(){ + + if(Constants.LAST_G==0){ + return false; + } + long t =Constants.MAXAGE_G*1000 - (new Date().getTime() - Constants.LAST_G ) ; + Log.d(TAG, "isHostExpires: time left is " +CommonUtil.getTimeCnt4Read(t,true)); + + // t=0; + return t < 0; } - public static JSONObject getHost() { - if (TextUtils.isEmpty(hosts)) { + public static JSONObject getHost(boolean isMainApi) { + if(!isMainApi && isHostExpires()){ + Log.d(TAG, String.format("isHostExpires prepare book: main API maxAge %s, is expired, loading main API again ",CommonUtil.getTimeCnt4Read(Constants.MAXAGE_G*1000,true))); + getHostPolicy(); + } + if (TextUtils.isEmpty(hosts)){ Config config = Config.getInstance(); hosts = config.getBaseUrl(); } @@ -251,7 +267,7 @@ public class NetUtil { }; return uas[new Random().nextInt(uas.length-1)]; - // return"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"; + // return"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"; // return "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"; } @@ -267,5 +283,57 @@ public class NetUtil { return url; } + public static String getUserAgent(Context context) { + String userAgent = ""; +// APP版本 + String versionName = CommonUtil.getVersionName(context); +// 手机型号 + String systemModel = CommonUtil.getSystemModel(); +// 系统版本 + String systemVersion = CommonUtil.getSystemVersion(); + String deviceBrand = CommonUtil.getDeviceBrand(); + String packagenm = CommonUtil.getPackageName(context); + userAgent = "Android/" + versionName + "/"+packagenm+"/" + deviceBrand + "/" + systemModel + "/" + systemVersion; + return userAgent; + } + + public static void getHostPolicy(){ + if(isRequestHosts){ + return; + } + isRequestHosts =true; + BookSubscribe.getMastDomain(new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { + @Override + public void onSuccess(String result) { + + // mFirstPage= gson.fromJson(result, FirstPage.class); + try { + JSONObject jsonObject = new JSONObject(result); + String resultstr = jsonObject.getString("hosts"); + Config config =Config.createConfig(MyApp.applicationContext); + config.setBaseUrl(resultstr); + //config.setBaseUrl(resultstr); + hosts=""; + Constants.LAST_G = new Date().getTime(); + + Constants.announcement =jsonObject.getString("declare"); + // config.setRootUrl( jsonObject.getString("masterDomains")); + isRequestHosts =false; + } catch (Exception e) { + e.printStackTrace(); + } + + + } + + @Override + public void onFault(String errorMsg) { + //失败 + Log.d(TAG, "error on get firstpage: " + errorMsg); + isRequestHosts =false; + } + }, MyApp.applicationContext)); + } + } diff --git a/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java b/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java index 4380f7c..849808f 100644 --- a/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java +++ b/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import android.util.Log; import com.novelbook.android.netapi.RandomHost; +import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.REUtil; import org.json.JSONException; @@ -44,7 +45,8 @@ public class RetryInterceptor implements Interceptor { } String path = oldUrl.substring(prefix.length()); RandomHost rh = null; - if(oldUrl.indexOf("xiaoshuofenxiang.com") == -1 || !path.startsWith("/api/") || NetUtil.getHost()==null){ + boolean isMainApi =path.equals("/api/g/"); + if(oldUrl.indexOf("xiaoshuofenxiang.com") == -1 || !path.startsWith("/api/") || NetUtil.getHost(isMainApi)==null){ // rh = null; Response response = doRequest(chain, request); if(response!=null) @@ -57,14 +59,14 @@ public class RetryInterceptor implements Interceptor { } } try { - rh = new RandomHost(NetUtil.getHost(), 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--------------------------"); } catch (JSONException e) { Log.e(TAG, "intercept: ", e); - // TODO rh == null + } @@ -80,7 +82,20 @@ public class RetryInterceptor implements Interceptor { Request newRequest = null; try { - newRequest = request.newBuilder().url(newUrl).build(); + Request.Builder requestBuilder = request.newBuilder(); + requestBuilder.removeHeader("User-Agent").addHeader("User-Agent", HttpMethods.LOCALUSERAGENT) + .url(newUrl); + if (path.equals("/api/g/")) { + // if(new Date().getTime() - Constants.LAST_G > Constants.MAXAGE_G){ // + if (Constants.LAST_G == 0) { + requestBuilder.header("Cache-Control", "public, max-age=0"); + Log.d(TAG, "prepare book access main api with force maxage=0"); + } + } + + + + newRequest = requestBuilder.build(); } catch (Exception e) { Log.e(TAG, "HttpMethods intercept: " + newUrl); Log.e(TAG, "HttpMethods intercept: ", e); @@ -100,6 +115,17 @@ public class RetryInterceptor implements Interceptor { if (response != null && response.isSuccessful()) { // rh = null; Log.d(TAG, String.format("HttpMethods intercept: set rh null,return response")); + if (path.equals("/api/g")) { + String cacheControl = response.header("Cache-Control"); + if(!TextUtils.isEmpty(cacheControl)) { + try { + Constants.MAXAGE_G = Integer.parseInt(cacheControl.substring("max-age=".length())); + }catch (Exception e) + { + Log.e(TAG, "intercept: parse max age error", e); + } + } + } return response; } } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java index 9ec115d..ae837de 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java @@ -50,6 +50,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Random; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -72,7 +73,7 @@ public class BookUtil { private static final String charachterType = "utf-8";//"UTF-16LE"; private Context mContext; private ProgressDialog progressDialog; - private MuluStatus mMuluStatus; //目录是否下载完成 + MuluStatus mMuluStatus; //目录是否下载完成 private Gson gson = new Gson(); public void setContext(Context context) { this.mContext = context; @@ -112,7 +113,9 @@ public class BookUtil { } private long bookLen; private long chapterLen; - private long position; + // private long position; + private Map charPosition = new HashMap(); + private Novel mNovel; public void setNovel(Novel novel) { @@ -134,7 +137,7 @@ public class BookUtil { public Chapter getChapter(int chapId){ chapId = chapId >0 ?chapId : 1; if(chapId > mChapters.size() || mChapters.size() ==0){ - return Chapter.getChapter(mNovel.getId(), mNovel.getDomain(),chapId); + return Chapter.getChapter(mNovel.getId(), mNovel.getDomain()==null?"":mNovel.getDomain(),chapId); }else{ return mChapters.get(chapId-1); } @@ -446,17 +449,8 @@ public class BookUtil { private boolean isChangeSource =false; private int mChangeChapId; private String mChangeTitle; - public void changeSource(String domain,int chapId,String chapTitle) { - Log.d(TAG, String.format("changing Source: target domain %s chaptId %s, chapt title %s ",domain,chapId,chapTitle) ); - - this.muluRetryCount=0; - this.downloadStatus = DownloadStatus.notStart; - chaptDownStatus.clear(); - chaptCache.clear(); - // isDownloadChapt =false; - mChangeChapId = chapId; - mChangeTitle =chapTitle; + public void changeSite(String domain){ for (Site site:mNovelSites.getSites() ) { if(site.getDomain().equals(domain)){ mSite = site; @@ -469,6 +463,15 @@ public class BookUtil { isChangeSource = true; mChapters.clear(); getSiteRule(); + } + public void changeSource(String domain,int chapId,String chapTitle) { + Log.d(TAG, String.format("changing Source: target domain %s chaptId %s, chapt title %s ",domain,chapId,chapTitle) ); + + clearBook(); + // isDownloadChapt =false; + mChangeChapId = chapId; + mChangeTitle =chapTitle; + changeSite(domain); BookTask btsk = new BookTask(); btsk.execute( domain, chapId+"", chapTitle); @@ -477,6 +480,17 @@ public class BookUtil { + } + + private void clearBook() { + charPosition.clear(); + this.muluRetryCount=0; + this.downloadStatus = DownloadStatus.notStart; + chaptDownStatus.clear(); + chaptCache.clear(); + fileRetryCnt.clear(); + siteRuleRetryCnt=0; + caprint.clear(); } public Site getSite() { @@ -527,6 +541,21 @@ public class BookUtil { } + /** + * delete cache chapter file + * and reload the chapter + */ + public void refreshChapter() { + File file = new File(fileChapterName(chapterNo)); + if(file.exists()){ + file.delete(); + } + if(chaptCache.containsKey(chapterNo)){ + chaptCache.remove(chapterNo); + } + pagefactory.changeChapter(chapterNo); + } + private class BookTask extends AsyncTask { private String domain; @@ -954,14 +983,16 @@ int muluRetryCount =0; } public int next(boolean back,int chaptId){ - position += 1; - if (position > tmpChaptLen){ - position = tmpChaptLen; + // Log.d(TAG, String.format(" loadchapt next(), back %s, chaptId %s, position %s, tmpChaptLen %s",back,chaptId,charPosition.get(chaptId),tmpChaptLen )); + charPosition.put(chaptId,charPosition.get(chaptId)+1) ; + if (charPosition.get(chaptId) > tmpChaptLen){ + charPosition.put(chaptId,tmpChaptLen) ; return -1; } + char result = chaptCurrent(chaptId); //current(); if (back) { - position -= 1; + charPosition.put(chaptId,charPosition.get(chaptId)-1) ; } return result; } @@ -984,7 +1015,7 @@ int muluRetryCount =0; line += wordChar; } return line.toCharArray(); - }*/ + } public char[] preLine(){ if (position <= 0){ @@ -1006,18 +1037,19 @@ int muluRetryCount =0; } return line.toCharArray(); - } + }*/ public char chaptCurrent(int chaptId){ // chapterNo = mChapters.size() < chapterNo ? 1 : chapterNo; - // Log.d(TAG, String.format(" prepare book chaptCurrent() ,chapterNo %s, getChapters().size() %s " ,chapterNo , mChapters.size()) ); + // Log.d(TAG, String.format(" loadchapt chaptCurrent() ,chapterNo %s, getChapters().size() %s " ,chaptId , mChapters.size()) ); char[] charArray = chaptChars(chaptId); - int i = (int)position-1; + int i = (int) (charPosition.get(chaptId) -1);//(int)position-1; i =i>0?i:0; i = i< charArray.length? i:charArray.length-1; + // Log.d(TAG, String.format(" loadchapt chaptCurrent(), char position %s - %s, char '%s' " ,i,charPosition.get(chaptId) -1,charArray[i]) ); return charArray[i]; } public char current(){ @@ -1028,9 +1060,9 @@ int muluRetryCount =0; int len = 0; for (int i = 0;i < myArray.size();i++){ long size = myArray.get(i).getSize(); - if (size + len - 1 >= position){ + if (size + len - 1 >= charPosition.get(chaptId) ){ cachePos = i; - pos = (int) (position - len); + pos = (int) (charPosition.get(chaptId) - len); break; } len += size; @@ -1040,7 +1072,7 @@ int muluRetryCount =0; return charArray[pos]; } - public int pre(boolean back){ + /* public int pre(boolean back){ position -= 1; if (position < 0){ position = 0; @@ -1052,13 +1084,13 @@ int muluRetryCount =0; } return result; } - - public long getPosition(){ - return position; +*/ + public long getPosition(int chaptId){ + return charPosition.get(chaptId); } - public void setPostition(long position){ - this.position = position; + public void setPostition(int chaptId,long position){ + charPosition.put(chaptId,position) ; } //缓存书本 @@ -1433,7 +1465,7 @@ int muluRetryCount =0; return true; } - + List caprint = new ArrayList(); //获取chapter 缓存 public char[] chaptChars(final int index) { @@ -1441,7 +1473,12 @@ int muluRetryCount =0; char[] block=null; if(chaptCache.containsKey(Integer.valueOf(index))) { block = chaptCache .get(index).getData().get(); - Log.d(TAG, String.format("read content get block in cache, chapter: %s", index)); + // Log.d(TAG, String.format("chaptChars get block in cache, chapter: %s", index)); + + if(!caprint.contains(index)) { + caprint.add(index); + // Log.d(TAG, String.format("chaptChars: load from cache chaptId %s,--->%s", index, new String(block))); + } } // Log.d(TAG, String.format("prepare book begin to load content for chapter %s", index)); if (block == null) { @@ -1592,6 +1629,11 @@ int muluRetryCount =0; long l = reader.read(block); + // Log.d(TAG, String.format("loadchapt: load from file chaptId %s,--->%s",index, new String(block ))); + /* for (char c :block + ) { + Log.d(TAG, String.valueOf(c)); + }*/ if (reader.read(block) != block.length) { // throw new RuntimeException("Error during reading " + fileChapterName(index)); } @@ -1613,6 +1655,7 @@ int muluRetryCount =0; cache.setData(new WeakReference(block)); chaptCache.put(index, cache); // myArray.set(index, new WeakReference(block)); + Log.d(TAG, String.format("prepare book content reading finish, chapter %s", index)); } return block; } @@ -1771,6 +1814,15 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte } + if(mSiteRule.getUserAgents()!=null && mSiteRule.getUserAgents().length>0){ + String siteAgent =mSiteRule.getUserAgents()[new Random().nextInt( mSiteRule.getUserAgents().length-1)]; + + Log.d(TAG, "prepare book on getTagRequest:add site user agent " + siteAgent); + builder.removeHeader("User-Agent").addHeader("User-Agent",siteAgent ); //加 随机agent + + }else{ + builder.removeHeader("User-Agent").addHeader("User-Agent", HttpMethods.USERAGENT); + } // .header( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") // .header( "Upgrade-Insecure-Requests", "1") diff --git a/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java index 12f4592..e329369 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java @@ -2,11 +2,13 @@ package com.novelbook.android.utils; import android.app.Activity; import android.content.Context; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; +import android.support.v4.widget.ContentLoadingProgressBar; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; @@ -343,6 +345,19 @@ public class CommonUtil { return 0; } } + public static String getPackageName(Context context) { + try { + + return context.getPackageName(); + } catch (Exception e) { + e.printStackTrace(); + return ""; + }catch (NoSuchMethodError e){ + e.printStackTrace(); + return ""; + } + } + /** * 获取当前手机系统语言。 * @@ -480,7 +495,24 @@ public class CommonUtil { String date1 = format1.format(new Date(System.currentTimeMillis())); return date1;// 2012-10-03 23:41:31 } - + private String getChannel(Context context) { + try { + PackageManager pm = context.getPackageManager(); + ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(context), PackageManager.GET_META_DATA); + return appInfo.metaData.getString("UMENG_CHANNEL"); + } catch (PackageManager.NameNotFoundException ignored) { + } + return ""; + } + public static String getMeta(Context context,String key) { + try { + PackageManager pm = context.getPackageManager(); + ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(context), PackageManager.GET_META_DATA); + return appInfo.metaData.getString(key); + } catch (PackageManager.NameNotFoundException ignored) { + } + return ""; + } /* public static boolean isNavigationBarShow(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Config.java b/zhuike/src/main/java/com/novelbook/android/utils/Config.java index 53ff537..d2cf6bd 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/Config.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/Config.java @@ -3,7 +3,10 @@ package com.novelbook.android.utils; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Typeface; +import android.text.style.BulletSpan; +import com.novelbook.android.BuildConfig; +import com.novelbook.android.MyApp; import com.novelbook.android.R; @@ -187,14 +190,20 @@ public class Config { sp.edit().putString(KEY_BASE_URY,baseUrl).commit(); } public String getBaseUrl(){ - String defaultHost ="{\"master\":[\"http:\\/\\/xiaoshuofenxiang.com\"],\"page\":[\"http:\\/\\/p.xiaoshuofenxiang.com\"],\"report\":[\"http:\\/\\/r.xiaoshuofenxiang.com\"],\"search\":[\"http:\\/\\/s.xiaoshuofenxiang.com\"],\"novel\":[\"http:\\/\\/n.xiaoshuofenxiang.com\"],\"novelsbydot\":[\"http:\\/\\/nbd.xiaoshuofenxiang.com\"],\"user\":[\"http:\\/\\/u.xiaoshuofenxiang.com\"]}"; + // String defaultHost ="{\"master\":[\"http:\\/\\/xiaoshuofenxiang.com\"],\"page\":[\"http:\\/\\/p.xiaoshuofenxiang.com\"],\"report\":[\"http:\\/\\/r.xiaoshuofenxiang.com\"],\"search\":[\"http:\\/\\/s.xiaoshuofenxiang.com\"],\"novel\":[\"http:\\/\\/n.xiaoshuofenxiang.com\"],\"novelsbydot\":[\"http:\\/\\/nbd.xiaoshuofenxiang.com\"],\"user\":[\"http:\\/\\/u.xiaoshuofenxiang.com\"]}"; + // String defaultHost =CommonUtil.getMeta(MyApp.applicationContext,"DEFAULTHOST"); + String defaultHost =BuildConfig.API_HOST; return sp.getString(KEY_BASE_URY,defaultHost); } public String getRootUrl(){ - return sp.getString(KEY_ROOT_URL,"http://xiaoshuofenxiang.com/api/"); + //String defaultHost =CommonUtil.getMeta(MyApp.applicationContext,"MAINHOST"); + + String defaultHost = BuildConfig.MAIN_HOST; + String rt =sp.getString(KEY_ROOT_URL,defaultHost); + return sp.getString(KEY_ROOT_URL,defaultHost); } public void setRootUrl(String baseUrl){ diff --git a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java index 5c10894..1927c42 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java @@ -12,6 +12,8 @@ public class Constants { public static final int MAXAGE_MAX =60*60*24*28; //28 天 ; public static final int MAXAGE_MULU = 60*60*24*7*2; //2周;; public static final String VERSION_ADDRESS ="version.xml"; + public static long LAST_G = 0;//主目录API上次访问时间 + public static long MAXAGE_G = 3600;//主目录API上次访问时间 public static String[] HOT_KEYS_VALUE = {}; public static int SEX=1; //1 男,2女 public static String A_Regex = "]+href[\\s]*=[\\s]*['\"]?([^'\"]+)['\"\\s]?[^>]*>([^<]+)<"; //TODO: 从服务器更新 @@ -25,5 +27,5 @@ public class Constants { // public static List lstProgress=null; public static boolean showDialogOnUi =true; public static boolean showDialogOnUiPage =false; - + public static String announcement ="免责声明:阅读内容均来自互联网,本软件仅提供转码服务"; } diff --git a/zhuike/src/main/java/com/novelbook/android/utils/NovelParseUtil.java b/zhuike/src/main/java/com/novelbook/android/utils/NovelParseUtil.java index d301da2..c19fc2a 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/NovelParseUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/NovelParseUtil.java @@ -6,6 +6,7 @@ import android.util.Log; import com.novelbook.android.db.Chapter; import com.novelbook.android.db.SiteRule; import com.novelbook.android.netutils.HttpMethods; +import com.novelbook.android.netutils.NetUtil; import org.json.JSONArray; import org.json.JSONException; @@ -22,6 +23,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import okhttp3.Request; @@ -292,6 +294,13 @@ public class NovelParseUtil { builder.header(siteRule.getHeaders()[i],siteRule.getHeaders()[i+1]); } + if(siteRule.getUserAgents()!=null && siteRule.getUserAgents().length>0){ + + builder.removeHeader("User-Agent").addHeader("User-Agent", siteRule.getUserAgents()[new Random().nextInt( siteRule.getUserAgents().length-1)]); //加 随机agent + + }else{ + builder.removeHeader("User-Agent").addHeader("User-Agent", HttpMethods.USERAGENT); + } Request request =builder.build() ; Response response = null; try { diff --git a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java index b2f5f5b..15385be 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java @@ -13,6 +13,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.graphics.Typeface; +import android.opengl.Visibility; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; @@ -26,6 +27,7 @@ import android.view.View; import android.view.WindowManager; import android.widget.Toast; +import com.novelbook.android.MyApp; import com.novelbook.android.R; import com.novelbook.android.bean.NovelSites; import com.novelbook.android.bean.Site; @@ -33,6 +35,7 @@ import com.novelbook.android.db.Chapter; import com.novelbook.android.db.Novel; import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.view.PageWidget; +import com.umeng.analytics.MobclickAgent; import org.litepal.LitePal; @@ -89,7 +92,7 @@ public class PageFactory implements ChangeSource{ //段间距 private float paragraphSpace; //段间距相对行间距的倍数 - private final float prate = 1.3f; + private final float prate = 1.8f; //字高度 private float fontHeight; //字体 @@ -179,6 +182,7 @@ public class PageFactory implements ChangeSource{ private AdInterface mAd; private BookTask bookTask; + private int MSG_NEXTPAGE=2; public AdInterface getmAd() { return mAd; @@ -191,11 +195,11 @@ public class PageFactory implements ChangeSource{ @Override public void handleMessage(Message msg) { - int wt = msg.what; + Log.d(TAG, "prepare book get handler msg:" +msg); handlerMsg(msg); - dismissProgressDialog(); + // dismissProgressDialog(); } }; @@ -203,14 +207,20 @@ public class PageFactory implements ChangeSource{ void handlerMsg(Message msg) { if (msg.what == 1) { - Log.d(TAG, String.format("prepare book handler get notic to download chapter %s , getNovel() is null? %s",currentChapter, getNovel()==null ) ); + Log.d(TAG, String.format("prepare book handler get notic to download chapter %s , getNovel() is null? %s", currentChapter, getNovel() == null)); if (getNovel() != null) { changeChapter(currentChapter); - }else{ + } else { /* mStatus = Status.FAIL; // unknow error null Attempt to invoke virtual method 'android.graphics.Bitmap com.novelbook.android.view.PageWidget.getCurPage()' on a null object reference drawStatus(); */ } + } else if (msg.what == MSG_NEXTPAGE) { + + mStatus =Status.FINISH; + // drawStatus(); + Log.d(TAG, "prepare book to load next page"); + nextPage(); } } Map fileRetryCnt = new HashMap(); @@ -234,12 +244,13 @@ public class PageFactory implements ChangeSource{ } chaptId = chaptId > 0 ? chaptId : 1; - final File file = new File(getChapterFileName(chaptId)); + File file = new File(getChapterFileName(chaptId)); if (!file.exists() && getChapters().size()>0) { //待下载 chaptId = chaptId > getChapters().size() ? getChapters().size() : chaptId; chaptId = chaptId > 0 ? chaptId : 1; + file = new File(getChapterFileName(chaptId)); } @@ -303,6 +314,7 @@ public class PageFactory implements ChangeSource{ @Override public void run() { int slepttime =0; + File file = new File(getChapterFileName(chid)); while( !file.exists() && slepttime <60 && mBookUtil.muluRetryCount readChaptCache(int chaptId){ List chaptPages = new ArrayList(); - Log.d(TAG, String.format("changing Source prepare book to open chapter %s, currentChapter %s ",chaptId ,currentChapter ) ); + + Log.d(TAG, String.format("prepare book to open chapter %s, currentChapter %s ",chaptId ,currentChapter ) ); char[] chars = mBookUtil.chaptChars(chaptId); mBookUtil.setTmpChaptLen(chars.length); // mBookUtil.setChapterNo(chaptId); // TRPage page = new TRPage(); long length =0; int pageNo =0; + long starttime = new Date().getTime(); while(length m_lines,Boolean updateChapter) { - mAd.hideSystemUI(); + hideSysUI(); // mAd.showRefresh(View.GONE); if(m_lines.size()==0){ return; } - // Log.d(TAG, String.format(" prepare book onDraw chapter %s, getChapters().size() %s ",currentChapter ,getChapters().size() ) ); + mStatus =Status.FINISH; + // Log.d(TAG, String.format(" prepare book onDraw chapter %s, getChapters().size() %s ",currentChapter ,getChapters().size() ) ); if (getChapters().size() > 0 && updateChapter) { // Log.d(TAG, String.format(" prepare book onDraw chapter to getCurrentChapter(),currentChapter %s ",currentChapter ) ); currentChapter = getCurrentChapter(); @@ -689,6 +729,9 @@ public static boolean busy(){ // Log.d(TAG, String.format(" prepare book onDraw chapter _____________ %s ",currentChapter ) ); //更新数据库进度 + + + if ( mStatus ==Status.FINISH && currentPage != null && getNovel() != null) { new Thread() { @Override @@ -747,6 +790,10 @@ public static boolean busy(){ float space =m_fontSize + lineSpace; paragraphSpace = prate * lineSpace; + if(mAd!=null){ + mAd.showRefresh(View.GONE); + } + if (m_lines.size() > 0) { float y = marginHeight; String lastLine =""; @@ -842,6 +889,21 @@ public static boolean busy(){ } if(mBookPageWidget!=null) mBookPageWidget.postInvalidate(); + if(currentPage!=null && currentPage.getPageNo()==1){ + + String source =String.format("本章节内容来自网络"); + if(getSite()!=null){ + source =String.format("本章节内容来自第三方网站:%s",getSite().getName()); + } + int anny= (int) CommonUtil.convertDpToPixel(mContext,40); + c.drawText(source, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint); + + + + anny= (int) CommonUtil.convertDpToPixel(mContext,60); + c.drawText( Constants.announcement, marginWidth, statusMarginBottom + mBatterryFontSize+anny, mBatterryPaint); + + } } private void showAd(int adHeight,int adY) { @@ -904,10 +966,38 @@ public static boolean busy(){ if (currentPage.getEnd() >= mBookUtil.getChapterLen()) { Log.d(TAG,"已经是本章最后一页了"); + if(mBookUtil.getChapters().size()==0){ - m_islastPage =currentChapter == mBookUtil.getChapters().size() ||mBookUtil.getChapters().size()==0; + mStatus = Status.OPENING; + drawStatus(); + new Thread() { + @Override + public void run() { + int slepttime = 0; + while (mBookUtil.getChapters().size()==0 && (mBookUtil.mMuluStatus == BookUtil.MuluStatus.isDownloading || mBookUtil.muluRetryCount < Constants.retryCnt)) { + try { + sleep(50); + slepttime++; + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + Log.d(TAG, String.format("prepare book waiting for chapters slept %s, chapt size %s " , slepttime *50,mBookUtil.getChapters().size())); + + if(mBookUtil.getChapters().size()>0){ + handler.sendEmptyMessage(MSG_NEXTPAGE) ; + } + + }}.start(); + + return; + } + m_islastPage =currentChapter == mBookUtil.getChapters().size();// ||mBookUtil.getChapters().size()==0; if ( m_islastPage){ Toast.makeText(mContext, "已经是最后一页了", Toast.LENGTH_SHORT).show(); + currentPage(false); return; } else { @@ -927,6 +1017,12 @@ public static boolean busy(){ } onDraw(mBookPageWidget.getNextPage(),currentPage.getLines(),true); Log.d("nextPage","nextPagenext"); + + HashMap map = new HashMap(); + map.put("novel",bookName); + map.put("chapt",getChapter().getChapterName()); + map.put("page",currentPage.getPageNo()+""); + MobclickAgent.onEvent(MyApp.applicationContext, "page_reading", map); } //取消翻页 @@ -947,6 +1043,7 @@ public static boolean busy(){ Log.d(TAG, "prepare book: start prepare book " + book.getName()); + clear(); if(getNovel()!=null &&getNovel().getNovelId() !=book.getNovelId()){ //取消未上本书完成的web请求,待验证效果 try { NetUtil.cancelRequest(getNovel().getNovelId() ); @@ -986,8 +1083,8 @@ if(book==null){ NetUtil.cancelRequest(getNovel().getNovelId() ); } - bookPath = getNovel().getNovelPath(); - bookName =getNovel().getName();// FileUtils.getFileName(bookPath); + bookPath = book.getNovelPath(); + bookName =book.getName();// FileUtils.getFileName(bookPath); // this.mCurrentChapter = chapter; mStatus = Status.OPENING; drawStatus(); @@ -1076,7 +1173,11 @@ if(book==null){ preReadChaptCache(currentChapter + 1); } } - return currentChaptPages.get(nextPageNo); + if(currentChaptPages.size()>nextPageNo) + return currentChaptPages.get(nextPageNo); + else{ + return new TRPage("没有了"); + } } public TRPage getPrePage(){ @@ -1097,7 +1198,7 @@ if(book==null){ prePageNo = currentChaptPages.size(); }else{ if(currentChapter-1>0) { - preReadChaptCache(currentChapter - 1); + preReadChaptCache(currentChapter - 1); } } @@ -1133,20 +1234,22 @@ if(book==null){ float width = 0; float height = 0; String line = ""; - if(mBookUtil.getPosition()==0) { + if(mBookUtil.getPosition(chaptId)==0) { lines.add("\n");lines.add("\n"); } calculateLineCount(); while (mBookUtil.next(true,chaptId) != -1){ char word = (char) mBookUtil.next(false,chaptId); + // Log.d(TAG, String.format(" loadchapt getNextLines(), chaptId %s, word '%s'", chaptId,word )); //判断是否换行 if ((word + "" ).equals("\n") ){// if ((word + "" ).equals("\r") && (((char) mBookUtil.next(true)) + "").equals("\n")){ // mBookUtil.next(false); if ( !line.isEmpty()){ 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() )); + Log.d(TAG,String.format("title is %s\n,size is %s ,position is %s" ,line,line.length(),mBookUtil.getPosition(chaptId) )); break; } + // Log.d(TAG, String.format(" loadchapt getNextLines(),chaptId %s, new line with enter '%s' ", chaptId, line+word )); lines.add(line+word); // lines.add("\n"); line = ""; @@ -1162,9 +1265,12 @@ if(book==null){ }else { float widthChar = mPaint.measureText(word + ""); width += widthChar; + // Log.d(TAG, String.format(" loadchapt getNextLines(),widthChar %s ,width %s,mVisibleWidth %s",widthChar, width ,mVisibleWidth )); + if (width > mVisibleWidth) { width = widthChar; lines.add(line); + // Log.d(TAG, String.format(" loadchapt getNextLines(),chaptId %s,new line '%s' ",chaptId , line )); /* if (lines.size() == mLineCount){ Log.d(TAG,String.format("lines count limit b %s,lines size %s",mLineCount,lines.size())); line =""; @@ -1173,15 +1279,17 @@ if(book==null){ */ line = word + ""; } else { + line += word; + // Log.d(TAG, String.format(" loadchapt getNextLines(),chaptId %s,growing line '%s' ",chaptId , line )); } } if (lines.size() == mLineCount){ - // Log.d(TAG,String.format("lines count limit c %s,lines size %s",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()){ // mBookUtil.setPostition(mBookUtil.getPosition() - line.length()-2);// mBookUtil.setPostition(mBookUtil.getPosition() - 1); - mBookUtil.setPostition(mBookUtil.getPosition() - 1); + mBookUtil.setPostition(chaptId,mBookUtil.getPosition(chaptId) - 1); } break; } @@ -1211,7 +1319,7 @@ if(book==null){ return lines; } - public List getPreLines(){ + /*public List getPreLines(){ List lines = new ArrayList<>(); float width = 0; String line = ""; @@ -1233,11 +1341,11 @@ if(book==null){ // Log.d(TAG,"preLine is \n" + line); } - /* if ( mBookUtil.isChapterTitle(line)) { + *//* if ( mBookUtil.isChapterTitle(line)) { mBookUtil.setPostition(mBookUtil.getPosition() - line.length()-2); break; - }*/ + }*//* // lines.add(line); // Log.d(TAG,"preLine is \n" + line); @@ -1275,7 +1383,7 @@ if(book==null){ } return reLines; - } + }*/ //上一章 @@ -1359,7 +1467,7 @@ if(book==null){ //更新电量 public void updateBattery(int mLevel){ - if(mAd!=null) mAd.hideSystemUI(); + hideSysUI(); if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) { Log.d(TAG, String.format("updateBattery: level old %s, new %s",level,mLevel)); @@ -1371,7 +1479,7 @@ if(book==null){ } public void updateTime(){ - if(mAd!=null) mAd.hideSystemUI(); + hideSysUI(); if (currentPage != null && mBookPageWidget != null && !mBookPageWidget.isRunning()) { String mDate = sdf.format(new java.util.Date()); if (date != mDate) { @@ -1518,7 +1626,7 @@ if(book==null){ } public void clear(){ - Log.d(TAG, String .format("prepare Book: clearing book info %s" , getNovle().getName())); +// Log.d(TAG, String .format("prepare Book: clearing book info %s" , getNovle().getName())); fileRetryCnt.clear(); lastPageTime=0; if(chaptMap!=null){ @@ -1641,7 +1749,12 @@ if(book==null){ return new Novel(); } public Site getSite(){ - return mBookUtil.getSite(); + if(mBookUtil!=null){ + return mBookUtil.getSite(); + } + else{ + return new Site(); + } } public boolean isWorking(){ return mBookUtil !=null; diff --git a/zhuike/src/main/res/drawable/button_chk_bg.xml b/zhuike/src/main/res/drawable/button_chk_bg.xml new file mode 100644 index 0000000..e90e44f --- /dev/null +++ b/zhuike/src/main/res/drawable/button_chk_bg.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/drawable/button_select_bg.xml b/zhuike/src/main/res/drawable/button_select_bg.xml new file mode 100644 index 0000000..38d8f58 --- /dev/null +++ b/zhuike/src/main/res/drawable/button_select_bg.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/drawable/ic_book_black_24dp.xml b/zhuike/src/main/res/drawable/ic_book_black_24dp.xml new file mode 100644 index 0000000..2253d34 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_book_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_bookmark_border_black_24dp.xml b/zhuike/src/main/res/drawable/ic_bookmark_border_black_24dp.xml new file mode 100644 index 0000000..4b89583 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_bookmark_border_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_call_split_black_24dp.xml b/zhuike/src/main/res/drawable/ic_call_split_black_24dp.xml new file mode 100644 index 0000000..052486c --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_call_split_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_collections_bookmark_black_24dp.xml b/zhuike/src/main/res/drawable/ic_collections_bookmark_black_24dp.xml new file mode 100644 index 0000000..49e6c06 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_collections_bookmark_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_description_black_24dp.xml b/zhuike/src/main/res/drawable/ic_description_black_24dp.xml new file mode 100644 index 0000000..302bb4a --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_description_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_equalizer_black_24dp.xml b/zhuike/src/main/res/drawable/ic_equalizer_black_24dp.xml new file mode 100644 index 0000000..d3354d9 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_equalizer_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_rank_24dp.xml b/zhuike/src/main/res/drawable/ic_rank_24dp.xml new file mode 100644 index 0000000..13cfc8f --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_rank_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/ic_storage_black_24dp.xml b/zhuike/src/main/res/drawable/ic_storage_black_24dp.xml new file mode 100644 index 0000000..ab0ccd5 --- /dev/null +++ b/zhuike/src/main/res/drawable/ic_storage_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/zhuike/src/main/res/drawable/paper.jpg b/zhuike/src/main/res/drawable/paper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f64914226cdcd3b9fe6e9e0056f0c75e8776a25d GIT binary patch literal 131855 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 LnSG%4{}%rbFt|Mw literal 0 HcmV?d00001 diff --git a/zhuike/src/main/res/drawable/selector_shelf_menu.xml b/zhuike/src/main/res/drawable/selector_shelf_menu.xml new file mode 100644 index 0000000..64c8364 --- /dev/null +++ b/zhuike/src/main/res/drawable/selector_shelf_menu.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zhuike/src/main/res/layout/activity_book.xml b/zhuike/src/main/res/layout/activity_book.xml index 90ffdf6..adbf5c1 100644 --- a/zhuike/src/main/res/layout/activity_book.xml +++ b/zhuike/src/main/res/layout/activity_book.xml @@ -168,6 +168,7 @@ android:layout_height="@dimen/botoomNavi" android:layout_gravity="bottom" android:layout_weight="0" + android:background="@color/white" android:orientation="horizontal">