From 62113f9d9a3959d926735220fd45f92ff16848cd Mon Sep 17 00:00:00 2001 From: mwang <8205347@qq.com> Date: Sat, 25 May 2019 23:57:12 +0800 Subject: [PATCH] shelfbook to open directly --- zhuike/build.gradle | 35 +++++----- zhuike/src/A/res/values/strings.xml | 4 -- zhuike/src/B/res/values/strings.xml | 4 -- zhuike/src/C/res/values/strings.xml | 4 -- zhuike/src/D/res/values/strings.xml | 4 -- zhuike/src/main/AndroidManifest.xml | 2 +- .../com/novelbook/android/Activity_base.java | 21 +----- .../android/Fragments/BasicFragment.java | 37 +++++----- .../android/Fragments/Fragment_bookStore.java | 31 +++++---- .../android/Fragments/Fragment_paihang.java | 49 ++++++------- .../com/novelbook/android/Main2Activity.java | 48 ++++--------- .../novelbook/android/netapi/UrlFactory.java | 6 +- .../novelbook/android/netutils/NetUtil.java | 27 +++++++- .../android/netutils/RetryInterceptor.java | 2 +- .../android/upgrade/UpdateManager.java | 39 ++++++++--- .../com/novelbook/android/utils/BookUtil.java | 6 +- .../novelbook/android/utils/CommonUtil.java | 68 ++++++++++++++++++- .../novelbook/android/utils/Constants.java | 1 + .../novelbook/android/utils/PageFactory.java | 20 +++++- .../src/main/res/drawable/button_chk_bg.xml | 4 +- 20 files changed, 248 insertions(+), 164 deletions(-) delete mode 100644 zhuike/src/A/res/values/strings.xml delete mode 100644 zhuike/src/B/res/values/strings.xml delete mode 100644 zhuike/src/C/res/values/strings.xml delete mode 100644 zhuike/src/D/res/values/strings.xml diff --git a/zhuike/build.gradle b/zhuike/build.gradle index 5ef57cc..8c33394 100644 --- a/zhuike/build.gradle +++ b/zhuike/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.novelbook.android" minSdkVersion 19 //target 19 Android 4.4 以下版本仅占比4.1% targetSdkVersion 28 - versionCode 3 - versionName "3.0" + versionCode 5 + versionName "5.0" // testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -31,14 +31,15 @@ android { multiDexEnabled true //突破65535 manifestPlaceholders = [UMENG_CHANNEL_CALUE: "umeng"] //默认为uMeng - flavorDimensions "default" //debug时注销 + 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\\"]}"' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.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\\"]}"' + // buildConfigField "String", "API_HOST", '""' versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false @@ -70,36 +71,36 @@ android { } } //渠道 - productFlavors { + productFlavors { // googleplay {} qxs { applicationId "com.novelbook.android.qxs" - versionName "version-a-1.0" + versionName "vn-qxs-5.0" buildConfigField "String", "MAIN_HOST", '"http://chqxs.xiaoshuofenxiang.com/api/"' - // buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/qxs.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\\"]}"' - buildConfigField "String", "API_HOST", '""' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/qxs.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\\"]}"' + //buildConfigField "String", "API_HOST", '""' } wzzw { applicationId "com.novelbook.android.wzzw" - versionName "version-b-1.0" + versionName "vn-wzzw-5.0" buildConfigField "String", "MAIN_HOST", '"http://chwzzw.xiaoshuofenxiang.com/api/"' - // buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/wzzw.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\\"]}"' - buildConfigField "String", "API_HOST", '""' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/wzzw.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\\"]}"' + // buildConfigField "String", "API_HOST", '""' } bo { applicationId "com.novelbook.android.bo" - versionName "version-c-1.0" + versionName "vn-bo-5.0" buildConfigField "String", "MAIN_HOST", '"http://chbo.xiaoshuofenxiang.com/api/"' - // buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/bo.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\\"]}"' - buildConfigField "String", "API_HOST", '""' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/bo.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\\"]}"' + // buildConfigField "String", "API_HOST", '""' } g { applicationId "com.novelbook.android.g" - versionName "version-d-1.0" + versionName "vn-g-5.0" buildConfigField "String", "MAIN_HOST", '"http://chg.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\\"]}"' - buildConfigField "String", "API_HOST", '""' + buildConfigField "String", "API_HOST", '"{\\"master\\":[\\"http:\\\\/\\\\/g.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\\"]}"' + // buildConfigField "String", "API_HOST", '""' } //批量配置 productFlavors.all { flavor -> diff --git a/zhuike/src/A/res/values/strings.xml b/zhuike/src/A/res/values/strings.xml deleted file mode 100644 index 325e7cd..0000000 --- a/zhuike/src/A/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ -<resources> - <string name="app_name">A小说</string> - -</resources> diff --git a/zhuike/src/B/res/values/strings.xml b/zhuike/src/B/res/values/strings.xml deleted file mode 100644 index 7eb1948..0000000 --- a/zhuike/src/B/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ -<resources> - <string name="app_name">B小说</string> - -</resources> diff --git a/zhuike/src/C/res/values/strings.xml b/zhuike/src/C/res/values/strings.xml deleted file mode 100644 index 841586e..0000000 --- a/zhuike/src/C/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ -<resources> - <string name="app_name">C小说</string> - -</resources> diff --git a/zhuike/src/D/res/values/strings.xml b/zhuike/src/D/res/values/strings.xml deleted file mode 100644 index 467090f..0000000 --- a/zhuike/src/D/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ -<resources> - <string name="app_name">D小说</string> - -</resources> diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml index 732f6e7..1c1bf3e 100644 --- a/zhuike/src/main/AndroidManifest.xml +++ b/zhuike/src/main/AndroidManifest.xml @@ -99,7 +99,7 @@ <!-- UMENG --> <meta-data android:value="5cd6238a570df375c3000cc9" android:name="UMENG_APPKEY"/> - <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> + <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> <!--<meta-data android:value="debug" android:name="UMENG_CHANNEL"/>--> <!-- <meta-data android:name="MAINHOST" android:value="${main_host}"/> <meta-data android:name="DEFAULTHOST" android:value="${default_host}"/>--> 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 3b442a9..fad8ed6 100644 --- a/zhuike/src/main/java/com/novelbook/android/Activity_base.java +++ b/zhuike/src/main/java/com/novelbook/android/Activity_base.java @@ -28,6 +28,7 @@ import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; import com.novelbook.android.upgrade.UpdateManager; +import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.ImageUtil; import com.novelbook.android.utils.MyImageLoader; import com.novelbook.android.utils.OnItemClickListener; @@ -240,25 +241,7 @@ public abstract class Activity_base extends AppCompatActivity { * @param errorText */ protected void checkPermission (Activity thisActivity, String permission, int requestCode, String errorText) { - //判断当前Activity是否已经获得了该权限 - if(ContextCompat.checkSelfPermission(thisActivity,permission) != PackageManager.PERMISSION_GRANTED) { - //如果App的权限申请曾经被用户拒绝过,就需要在这里跟用户做出解释 - if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, - permission)) { - Toast.makeText(this,errorText,Toast.LENGTH_SHORT).show(); - //进行权限请求 - ActivityCompat.requestPermissions(thisActivity, - new String[]{permission}, - requestCode); - } else { - //进行权限请求 - ActivityCompat.requestPermissions(thisActivity, - new String[]{permission}, - requestCode); - } - } else { - - } + CommonUtil.checkPermission(thisActivity,permission,requestCode,errorText); } protected void loadImageView(String url, ImageView imageView){ diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java index 6202e47..c9a409e 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/BasicFragment.java @@ -75,7 +75,7 @@ import butterknife.ButterKnife; */ public abstract class BasicFragment extends Fragment { - public static String TAG = "need to be replaced"; + public static String TAG = BasicFragment.class.getSimpleName(); protected View rootView; protected int pageNo=1; protected int pageCount; @@ -91,6 +91,9 @@ public abstract class BasicFragment extends Fragment { @Nullable @BindView(R.id.swipeLayout) SwipeRefreshLayout mSwipeRefresh; + + int MSG_INIT_TAB =99; + public BasicFragment() { // Required empty public constructor } @@ -150,17 +153,12 @@ public abstract class BasicFragment extends Fragment { Log.e(TAG, "handleMessage: filldata error ", e); } - } else if (msg.what == 2) // + } else if (msg.what == MSG_INIT_TAB) // { - - + initTabs(); // Toast.makeText(getActivity(), "数据请求失败 ", Toast.LENGTH_LONG).show(); - } else if (msg.what == 3) { - - // Toast.makeText(getActivity(), " ", Toast.LENGTH_LONG).show(); } - if(getActivity()!=null && !NetUtil.isNetworkConnected()){ Toast.makeText(getActivity(),"好像没有网络啦",Toast.LENGTH_LONG).show(); } @@ -170,7 +168,9 @@ public abstract class BasicFragment extends Fragment { } }; +void initTabs(){ +} //--------------------------------------------------------------book list adapter------------------------------------------------ /* interface mOnItemClickListener @@ -207,8 +207,13 @@ public abstract class BasicFragment extends Fragment { void getBookInfo(Novel novel){ int novelId = novel.getNovelId(); long id = novel.getId(); + Log.d(TAG, String.format("prepare book %s ,start to loading book info from host ",novel.getName())); + // showProgressDialog(false,"正在加载..."); + PageFactory pageFactory =PageFactory.getInstance(activity ) ; + pageFactory.initBookUtil(); + ReadActivity.openBook(novel ,activity); + - showProgressDialog(false,"正在加载..."); BookSubscribe.getNovel(novel.getNovelId(),new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { @@ -222,7 +227,7 @@ public abstract class BasicFragment extends Fragment { }else { nv.save(); } - + Log.d(TAG, String.format("prepare book %s ,start to loading book info from host -----------done",novel.getName())); Log.d(TAG, String.format("prepare book %s ,lastchapt %s, last pos %s ,开始prepare.",nv.getName(),nv.getLastReadChapt(),nv.getLastReadPos()) ); // final Novel novel = nv; /* new Thread(){ @@ -232,12 +237,12 @@ public abstract class BasicFragment extends Fragment { } }.start();*/ - + // ReadActivity.openBook(nv ,activity); // PageFactory.getInstance(activity.getApplicationContext()).prepareBook(nv ); //打开本地小说内容 - PageFactory.getInstance(activity ).prepareBook(nv ); //打开本地小说内容 - + //PageFactory.getInstance(activity ).prepareBook(nv ); //打开本地小说内容 + pageFactory.prepareBook(nv ); Log.d(TAG, String.format("prepare book %s 开始open book.",nv.getName()) ); - ReadActivity.openBook(nv ,activity); + handler.sendEmptyMessage(99); } @@ -245,8 +250,8 @@ public abstract class BasicFragment extends Fragment { public void onFault(String errorMsg) { //失败 Toast.makeText(getActivity(),"Novel 请求失败:"+errorMsg,Toast.LENGTH_SHORT).show(); - PageFactory.getInstance(activity ).prepareBook(novel ); //打开本地小说内容 - ReadActivity.openBook(novel ,activity); + // PageFactory.getInstance(activity ).prepareBook(novel ); //打开本地小说内容 + // ReadActivity.openBook(novel ,activity); handler.sendEmptyMessage(99); } },getActivity())); 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 545bd81..90373ac 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 @@ -31,7 +31,9 @@ public class Fragment_bookStore extends BasicFragment { private ArrayList<BasicFragment> mFragments_cp; ArrayList<View> mList; String[] mTitle; - + Fragment_jingxuan fragment_jingxuan; + FragmentCates fragmentCates; + Fragment_bangdans fragment_bangdans; protected void processArguments(){ if (getArguments() != null) { Bundle bundle = getArguments() ; @@ -56,10 +58,10 @@ public class Fragment_bookStore extends BasicFragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"Fragment_bookStore fragment onCreate "); - if (getArguments() != null) { - // mParam1 = getArguments().getString(ARG_PARAM1); - // mParam2 = getArguments().getString(ARG_PARAM2); - } + fragment_jingxuan = new Fragment_jingxuan(); + fragmentCates =FragmentCates.newInstance(); + fragment_bangdans = new Fragment_bangdans(); + } @@ -76,17 +78,22 @@ public class Fragment_bookStore extends BasicFragment { } public void onSexSwitch(){ if(mAdapter!=null) { - for(BasicFragment bf: mFragments_cp){ + /* for(BasicFragment bf: mFragments_cp){ bf.initData(); - } + }*/ /* for(int i=0;i<mAdapter.getCount();i++){ ((BasicFragment) mAdapter.getItem(i)).initData(); }*/ + /* fragment_jingxuan.initData(); + fragmentCates.initData(); + fragment_bangdans.initData() ; - - mAdapter.notifyDataSetChanged(); + mAdapter.notifyDataSetChanged();*/ } + fragment_jingxuan.initData(); + fragmentCates.initData(); + fragment_bangdans.initData() ; } @Override @@ -101,9 +108,9 @@ public class Fragment_bookStore extends BasicFragment { if(mFragments ==null || mFragments.size() ==0){ // mTitle = new String[]{"精选", "榜单", "书单"}; mFragments = new ArrayList<>(); - mFragments.add(new Fragment_jingxuan()); - mFragments.add(FragmentCates.newInstance()); - mFragments.add(new Fragment_bangdans()); + mFragments.add(fragment_jingxuan); + mFragments.add(fragmentCates); + mFragments.add(fragment_bangdans); mFragments_cp = new ArrayList<>(); mFragments_cp.addAll(mFragments); // mFragments.add(new Fragment_shudan()); diff --git a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java index a9ab208..8754c84 100644 --- a/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java +++ b/zhuike/src/main/java/com/novelbook/android/Fragments/Fragment_paihang.java @@ -1,5 +1,6 @@ package com.novelbook.android.Fragments; +import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -22,6 +23,7 @@ import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; +import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.GsonUtil; import com.novelbook.android.utils.OnItemClickListener; @@ -215,37 +217,36 @@ public static final String TAG = Fragment_paihang.class.getSimpleName(); public void initViews(){ appBarLayout.setVisibility(View.GONE); if(lstNt==null) { - // getSearchTabTtitle(); + CommonUtil.getSearchTabTtitle(getActivity()); + showProgressDialog(false,"正在加载..."); + new Thread(){ + @Override + public void run() { + Log.d(TAG, "prepare book to load options for search" ); + while(lstNt==null){ + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + handler.sendEmptyMessage(MSG_INIT_TAB); + } + }.start(); + } else { initTabs(); } - showProgressDialog(false,"正在加载..."); - new Thread(){ - @Override - public void run() { - Log.d(TAG, "prepare book to load options for search" ); - while(lstNt==null){ - try { - Thread.sleep(10); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - // initTabs(); - handler.sendEmptyMessage(2); - } - }.start(); - // getSearchTabTtitle(); - //setScrollListner(); initLoadMoreListener(); - //initTabs(); + } - - private void initTabs() { + @Override + void initTabs() { tmp=0; /* while(lstNt==null){ @@ -312,7 +313,7 @@ public static final String TAG = Fragment_paihang.class.getSimpleName(); mData2.get(tab2Pos).getTabTitle() +" " + mData3.get(tab3Pos).getTabTitle() ; */ - if(lstSex==null) return; + if(lstSex==null || lstSex.size()==0) return; pageNo=1; @@ -328,7 +329,7 @@ public static final String TAG = Fragment_paihang.class.getSimpleName(); tvHint.setText(selectedKey); Log.d(TAG, String.format("tabChanged: to load data %s,pageno %s, tmp %s" , selectedKey,pageNo ,tmp)); - if( tmp<lstProgress.length+1) return; + if( tmp<lstProgress.length) return; loadSearchData(); diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java index a8ebba6..7716665 100644 --- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java +++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java @@ -1,7 +1,11 @@ package com.novelbook.android; +import android.Manifest; +import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; @@ -34,6 +38,7 @@ import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; import com.novelbook.android.service.ServiceDownload; +import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Config; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.GsonUtil; @@ -47,6 +52,8 @@ import java.util.Date; import butterknife.BindView; import butterknife.OnClick; +import static com.novelbook.android.FileActivity.EXTERNAL_STORAGE_REQ_CODE; + public class Main2Activity extends Activity_base implements NavigationView.OnNavigationItemSelectedListener{//} , BasicFragment.OnFragmentInteractionListener { public MyApp app ; @@ -73,11 +80,12 @@ public class Main2Activity extends Activity_base protected void initViews() { } - + public static volatile Activity activityContext = null; @Override protected void onCreate(Bundle savedInstanceState) { NetUtil.getHostPolicy(); super.onCreate(savedInstanceState); + activityContext =this; //PageFactory.createPageFactory(this); app =(MyApp) getApplicationContext(); // requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); @@ -85,8 +93,8 @@ public class Main2Activity extends Activity_base // ButterKnife.bind(this); initialSexOption(); - checkUpdate(true); - getSearchTabTtitle(); + // checkUpdate(true); + CommonUtil.getSearchTabTtitle(this); } @@ -111,6 +119,7 @@ public class Main2Activity extends Activity_base setupNavi(); showHome(); // tvUser.setText(this.getPackageName()); + } String currentActiveFragment; @@ -551,39 +560,6 @@ private int bottomSelectedIndex; } //----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)); - -} - } diff --git a/zhuike/src/main/java/com/novelbook/android/netapi/UrlFactory.java b/zhuike/src/main/java/com/novelbook/android/netapi/UrlFactory.java index ecd3bac..dc0b6ab 100644 --- a/zhuike/src/main/java/com/novelbook/android/netapi/UrlFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/netapi/UrlFactory.java @@ -36,13 +36,13 @@ public class UrlFactory { return us.getString(index) ;//+ uri; } } - - int value = (us == null || us.length()==0) ? index : index - us.length(); + return ""; + /*int value = (us == null || us.length()==0) ? index : index - us.length(); int second = 90 + 7; int a1 = value / 2 +1; int a2 = value % 2; - return String.format("http://%s%s%s.%s%s%s%s.com", key.charAt(0), (char)(second + a2), a1, "xiao", "shuo", "fen", "xiang"); + return String.format("http://%s%s%s.%s%s%s%s.com", key.charAt(0), (char)(second + a2), a1, "xiao", "shuo", "fen", "xiang");*/ } public static void main(String[] args) { 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 314063b..23f13e8 100644 --- a/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/netutils/NetUtil.java @@ -1,13 +1,18 @@ package com.novelbook.android.netutils; +import android.Manifest; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.os.Build; import android.text.TextUtils; import android.util.Log; +import com.novelbook.android.BookActivity; +import com.novelbook.android.Main2Activity; import com.novelbook.android.MyApp; import com.novelbook.android.netsubscribe.BookSubscribe; +import com.novelbook.android.upgrade.UpdateManager; import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Config; import com.novelbook.android.utils.Constants; @@ -20,6 +25,8 @@ import java.util.Random; import okhttp3.Call; +import static com.novelbook.android.FileActivity.EXTERNAL_STORAGE_REQ_CODE; + /** * Created by 眼神 on 2018/3/27. @@ -346,13 +353,31 @@ public class NetUtil { }, MyApp.applicationContext)); } + static long lastUpgradCheck =0; static void initHostConstants( JSONObject jsonObject ) throws JSONException { Constants.announcement =jsonObject.getString("declare"); Constants.email =jsonObject.getString("email"); String tmp =jsonObject.getString("upgradeUrl"); Constants.updateUrl =TextUtils.isEmpty(tmp)?Constants.updateUrl:tmp; - // Constants.minVersion = jsonObject.getString("minVersion"); //TODO minVersion to be int type + Constants.minVersion = jsonObject.getInt("minVersion"); + // try { + Constants.version = CommonUtil.getVersionCode(MyApp.applicationContext); + if (lastUpgradCheck == 0 ||Constants.version <Constants.minVersion) { + lastUpgradCheck = new Date().getTime(); + checkUpdate(true); + + } +// }catch (Exception er){ +// Log.e(TAG, "initHostConstants: update error ",er ); +// } } + static void checkUpdate(boolean isSilence){ + UpdateManager manager = new UpdateManager(Main2Activity.activityContext); + if(isSilence) + manager.checkUpdateSilence(); + else + manager.checkUpdate(); + } } 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 409b670..3c22f64 100644 --- a/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java +++ b/zhuike/src/main/java/com/novelbook/android/netutils/RetryInterceptor.java @@ -132,7 +132,7 @@ public class RetryInterceptor implements Interceptor { Log.d(TAG, String.format("HttpMethods intercept: response is null? %s", response == null)); int i=0; - while(response==null && i<3){ + while((response==null || !response.isSuccessful() )&& i<3){ request = chain.request(); i++; } diff --git a/zhuike/src/main/java/com/novelbook/android/upgrade/UpdateManager.java b/zhuike/src/main/java/com/novelbook/android/upgrade/UpdateManager.java index 143e35c..93dda05 100644 --- a/zhuike/src/main/java/com/novelbook/android/upgrade/UpdateManager.java +++ b/zhuike/src/main/java/com/novelbook/android/upgrade/UpdateManager.java @@ -11,7 +11,8 @@ import java.net.URL; import java.util.HashMap; - +import android.Manifest; +import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; @@ -33,6 +34,7 @@ import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; +import com.novelbook.android.BookActivity; import com.novelbook.android.BuildConfig; import com.novelbook.android.MyApp; import com.novelbook.android.R; @@ -52,14 +54,15 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; +import static com.novelbook.android.FileActivity.EXTERNAL_STORAGE_REQ_CODE; import static com.novelbook.android.netapi.URLConstant.getRootUrl; import static java.lang.System.exit; public class UpdateManager { - public static final String TAG ="com.qiyou.UpdateManager"; - public static final String dTAG ="com.qiyou"; + public static final String TAG =UpdateManager.class.getSimpleName(); + private static final int DOWNLOAD = 1; private static final int DOWNLOAD_FINISH = 2; private static final int showDialog =3; @@ -68,10 +71,11 @@ public class UpdateManager { private String mSavePath; private int progress; private boolean cancelUpdate = false; - private Context mContext; + private Activity mContext; private ProgressBar mProgress; private Dialog mDownloadDialog; private boolean isForceRefresh; + int serviceCode; private Handler mHandler = new Handler() { @Override @@ -94,7 +98,7 @@ public class UpdateManager { }; }; - public UpdateManager(Context context) + public UpdateManager(Activity context) { this.mContext = context; // app =(QiYouApplication)context; @@ -195,12 +199,17 @@ public class UpdateManager { String packgename = mContext.getPackageName(); mHashMap = multiHashMap.get(packgename); if (mHashMap != null) { - int serviceCode = Integer.valueOf(mHashMap.get("version")); - if(mHashMap.containsKey("miniVersion")) - Constants.minVersion = Integer.valueOf(mHashMap.get("miniVersion")); + serviceCode = Integer.valueOf(mHashMap.get("version")); + if(mHashMap.containsKey("minVersion")) + Constants.minVersion = Integer.valueOf(mHashMap.get("minVersion")); // need update or not - isUpdate = serviceCode > versionCode; - isForceRefresh = serviceCode <Constants.minVersion; + isUpdate = serviceCode > versionCode; + isForceRefresh = versionCode <Constants.minVersion; + + Log.d(TAG, String.format("processMultiTxtOnSuccess : isUpdate %s, serviceCode %s,minVersion %s,versionCode %s,isForceRefresh %s" + ,isUpdate,serviceCode,Constants.minVersion,Constants.version,isForceRefresh)); + + } } @@ -262,11 +271,13 @@ public class UpdateManager { */ public int getVersionCode(Context context) { + int versionCode = 0; try { // 閼惧嘲褰囨潪顖欐閻楀牊婀伴崣鍑ょ礉鐎电懓绨睞ndroidManifest.xml娑撳獘ndroid:versionCode versionCode =(int)CommonUtil.getVersionCodeLong(context);// context.getPackageManager().getPackageInfo("com.novelbook.android", 0).versionCode; + /*int versionCode2 = CommonUtil.getVersionCode(context); long versioncode3 = CommonUtil.getVersionCodeLong(context); @@ -306,6 +317,9 @@ public class UpdateManager { */ private void showNoticeDialog() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + CommonUtil.checkPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE, EXTERNAL_STORAGE_REQ_CODE, "下载更新需要此权限,请允许"); + } // 閺嬪嫰锟界�纭呯樈濡楋拷 Builder builder = new Builder(mContext); @@ -317,7 +331,9 @@ public class UpdateManager { } String upgradeDetails=mHashMap.get("details"); String forceRefresh =isForceRefresh? "本地版本过低,请升级新版本\n":""; - builder.setMessage( forceRefresh + mContext.getPackageName() + " "+getVersionCode(mContext) +" " +mContext.getString(R.string.soft_update_info) + upgradeDetails ); + builder.setMessage( forceRefresh +mContext.getPackageName() + "\n当前版本:"+getVersionCode(mContext) +"\n" + +"最新版本:"+ serviceCode +"\n" + + mContext.getString(R.string.soft_update_info) + upgradeDetails ); builder.setPositiveButton(R.string.soft_update_updatebtn, new OnClickListener() { @Override @@ -384,6 +400,7 @@ public class UpdateManager { */ private void downloadApk() { + // 閸氼垰濮╅弬鎵殠缁嬪绗呮潪鍊熻拫娴狅拷 new downloadApkThread().start(); } 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 878641e..3552217 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java @@ -1377,7 +1377,11 @@ int muluRetryCount =0; // isDownloadChapt =true; Log.d(TAG,String.format("handler msg, download %s",true) ); }else if(msg.what==99){ - Toast.makeText(mContext,"网络拥堵,已帮您切换其它源",Toast.LENGTH_LONG).show(); + try { + Toast.makeText(mContext, "网络拥堵,已帮您切换其它源", Toast.LENGTH_LONG).show(); + }catch (Exception e){ + Log.e(TAG, "handlerMsg:toast error ", e); + } // getSiteRule(); // pagefactory .changeChapter(getChapterNo()); 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 e329369..2e8f6f9 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/CommonUtil.java @@ -8,6 +8,8 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.support.v4.widget.ContentLoadingProgressBar; import android.text.TextUtils; import android.util.DisplayMetrics; @@ -22,6 +24,10 @@ import android.view.Window; import android.view.WindowManager; import android.widget.Toast; +import com.novelbook.android.netsubscribe.BookSubscribe; +import com.novelbook.android.netutils.OnSuccessAndFaultListener; +import com.novelbook.android.netutils.OnSuccessAndFaultSub; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.security.Timestamp; @@ -332,11 +338,14 @@ public class CommonUtil { return 0; } } - public static long getVersionCodeLong(Context context) { + public static int getVersionCodeLong(Context context) { + if(Constants.version >0){ + return Constants.version; + } try { PackageManager manager = context.getPackageManager(); PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); - return info.getLongVersionCode(); + Constants.version = (int) info.getLongVersionCode(); } catch (Exception e) { e.printStackTrace(); return 0; @@ -344,6 +353,7 @@ public class CommonUtil { e.printStackTrace(); return 0; } + return Constants.version; } public static String getPackageName(Context context) { try { @@ -513,7 +523,61 @@ public class CommonUtil { } return ""; } + public static void checkPermission (Activity thisActivity, String permission, int requestCode, String errorText) { + //判断当前Activity是否已经获得了该权限 + if(ContextCompat.checkSelfPermission(thisActivity,permission) != PackageManager.PERMISSION_GRANTED) { + //如果App的权限申请曾经被用户拒绝过,就需要在这里跟用户做出解释 + if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, + permission)) { + Toast.makeText(thisActivity,errorText,Toast.LENGTH_SHORT).show(); + //进行权限请求 + ActivityCompat.requestPermissions(thisActivity, + new String[]{permission}, + requestCode); + } else { + //进行权限请求 + ActivityCompat.requestPermissions(thisActivity, + new String[]{permission}, + requestCode); + } + } else { + } + } + + public static void getSearchTabTtitle(Context context){ + + 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) { + //失败 + + // getSearchTabTtitle(); + + } + },context)); + + } /* public static boolean isNavigationBarShow(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = getActivity().getWindowManager().getDefaultDisplay(); 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 8524f26..f8af054 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/Constants.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/Constants.java @@ -32,5 +32,6 @@ public class Constants { public static String announcement ="免责声明:阅读内容均来自互联网,本软件仅提供转码服务"; public static String email =""; public static int minVersion =0; + public static int version =0; public static String updateUrl="http://xiaoshuofenxiang.com/version.xml";; } 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 e087f70..44040ac 100644 --- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java +++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java @@ -709,6 +709,12 @@ private void hideSysUI(){ case FAIL: status = "读取错误,请稍后重试"; mAd.showRefresh(View.VISIBLE); + try { + throw new Exception("error on reading"); + } catch (Exception e) { + e.printStackTrace(); + Log.d(TAG, "prepare book: why fail ",e); + } break; case NETWORKFAILE: status = "请开启网络"; @@ -1112,7 +1118,9 @@ private void hideSysUI(){ this.mBookUtil.setNovel(book); this.mBookUtil.getTargetSites(); } - + public void initBookUtil() { + mBookUtil = null; + } /** * 打开书本 * @throws IOException @@ -1200,9 +1208,18 @@ private void hideSysUI(){ chapter = params[0]; begin = params[1]; currentChapter = (int) chapter; + try { + int slept=0; + while(getNovel() ==null){ + Thread.sleep(10); + slept++; + } + + Log.d(TAG, "prepare book:waiting for bookutil book slept "+slept*10); mBookUtil.openBook(getNovel(),chapter); } catch (Exception e) { + Log.e(TAG, "prepare book: backgroud error", e); e.printStackTrace(); return false; } @@ -1695,7 +1712,6 @@ private void hideSysUI(){ if(chaptMap!=null){ chaptMap.clear(); } - //mBookUtil=null; currentChapter = 0; bookPath = ""; bookName = ""; diff --git a/zhuike/src/main/res/drawable/button_chk_bg.xml b/zhuike/src/main/res/drawable/button_chk_bg.xml index e90e44f..c73f313 100644 --- a/zhuike/src/main/res/drawable/button_chk_bg.xml +++ b/zhuike/src/main/res/drawable/button_chk_bg.xml @@ -10,11 +10,11 @@ <!-- 描边 --> <stroke - android:width="2dp" + android:width="1dp" android:color="@color/white" /> <!-- 圆角 --> <corners - android:radius="8dp" /> + android:radius="2dp" /> <padding android:left="11dp" android:top="2dp"