From 02df9f1114037388ddfd8235084ba2002e328f85 Mon Sep 17 00:00:00 2001
From: mwang <8205347@qq.com>
Date: Thu, 18 Apr 2019 17:19:42 +0800
Subject: [PATCH] =?UTF-8?q?add=20=E6=8D=A2=E6=BA=90=20fix=20bugs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
zhuike/src/main/AndroidManifest.xml | 4 +-
.../novelbook/android/Activity_ChgSource.java | 219 ++++++++++++
.../com/novelbook/android/Activity_base.java | 2 +
.../com/novelbook/android/BookActivity.java | 2 +-
.../com/novelbook/android/Main2Activity.java | 9 +-
.../com/novelbook/android/Main5Activity.java | 47 ---
.../com/novelbook/android/MarkActivity.java | 7 +-
.../java/com/novelbook/android/MyApp.java | 4 +-
.../com/novelbook/android/ReadActivity.java | 16 +-
.../android/adapter/CatalogueAdapter.java | 4 +-
.../android/adapter/MarkAdapter.java | 3 +-
.../java/com/novelbook/android/bean/Site.java | 9 +
.../android/dialog/PageModeDialog.java | 2 +-
.../android/dialog/ReadSettingDialog.java | 2 +-
.../android/dialog/SettingDialog.java | 2 +-
.../com/novelbook/android/utils/BookUtil.java | 317 +++++++++++++++---
.../novelbook/android/utils/ChangeSource.java | 5 +
.../novelbook/android/{ => utils}/Config.java | 4 +-
.../novelbook/android/utils/PageFactory.java | 45 ++-
.../novelbook/android/view/PageWidget.java | 3 +-
zhuike/src/main/res/layout/activity_book.xml | 6 +-
.../main/res/layout/activity_chgsource.xml | 39 +++
zhuike/src/main/res/layout/activity_main2.xml | 4 +-
zhuike/src/main/res/layout/app_bar_main2.xml | 3 +-
.../main/res/layout/recycle_list_one_item.xml | 22 ++
zhuike/src/main/res/menu/read.xml | 6 +-
zhuike/src/main/res/values/dimens.xml | 1 +
zhuike/src/main/res/values/strings.xml | 1 +
zhuike/src/main/res/values/styles.xml | 2 +-
29 files changed, 651 insertions(+), 139 deletions(-)
create mode 100644 zhuike/src/main/java/com/novelbook/android/Activity_ChgSource.java
delete mode 100644 zhuike/src/main/java/com/novelbook/android/Main5Activity.java
create mode 100644 zhuike/src/main/java/com/novelbook/android/utils/ChangeSource.java
rename zhuike/src/main/java/com/novelbook/android/{ => utils}/Config.java (98%)
create mode 100644 zhuike/src/main/res/layout/activity_chgsource.xml
create mode 100644 zhuike/src/main/res/layout/recycle_list_one_item.xml
diff --git a/zhuike/src/main/AndroidManifest.xml b/zhuike/src/main/AndroidManifest.xml
index 0bc1729..14c8e3d 100644
--- a/zhuike/src/main/AndroidManifest.xml
+++ b/zhuike/src/main/AndroidManifest.xml
@@ -64,8 +64,8 @@
android:value=".Main7Activity" />
+ android:name=".Activity_ChgSource"
+ android:label="@string/title_Activity_ChgSource" />
mFragments;
+ String chaptTitle;
+ int chaptId;
+ String domain;
+ public final static String EXTR_TITLE="title";
+ public final static String EXTR_ID="id";
+ public final static String EXTR_SITE="site";
+
+ PageFactory pageFactory;
+
+ List mSites;
+
+ @Override
+ public int getLayoutRes() {
+ return R.layout.activity_chgsource;
+ }
+
+ @Override
+ protected void initViews() {
+
+ }
+
+ @Override
+ protected void setTitle() {
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
+ localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
+
+ }
+ chaptTitle = getIntent().getStringExtra(EXTR_TITLE);
+
+ chaptId = getIntent().getIntExtra(EXTR_ID,1);
+
+ domain = getIntent().getStringExtra(EXTR_SITE);
+ this.setTitle(chaptTitle);
+ }
+
+ @Override
+ protected void initData() {
+ pageFactory =PageFactory.getInstance();
+ mSites = new ArrayList(Arrays.asList(pageFactory.getNovelSites().getSites()));
+ SiteAdapter mAdapter = new SiteAdapter(this, mSites, R.layout.recycle_list_one_item, new OnItemClickListener() {
+
+ @Override
+ public void onItemClick(View view, int position) {
+
+ Site site = mSites.get(position);
+ Log.d(TAG, "changing Source: " + site.getDomain());
+ pageFactory.changeSource(site.getDomain(),chaptId,chaptTitle);
+
+ finish();
+ }
+ });
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setAdapter(mAdapter);
+
+
+
+
+ }
+
+ interface OnItemClickListener
+ {
+ void onItemClick(View view, int position);
+
+ }
+
+
+ class SiteAdapter extends RecyclerView.Adapter {
+ private final int EMPTY_VIEW = 1;
+ private final int PROGRESS_VIEW = 2;
+ private final int IMAGE_VIEW = 3;
+
+ private Context context;
+ private List mDatas ;
+ private OnItemClickListener mOnItemClickListener;
+ private int listItemID;
+
+ private List mSites;
+
+ public SiteAdapter(Context context, List mSites, int listItemID, OnItemClickListener clickLitener) {
+ this.context = context;
+ this.mDatas = mSites;
+ this.mOnItemClickListener = clickLitener;
+ this.listItemID = listItemID;
+ }
+
+
+
+ public SiteAdapter(Context context, OnItemClickListener clickLitener) {
+ this.context = context;
+ this.mOnItemClickListener = clickLitener;
+
+ }
+
+ public void setListener(OnItemClickListener clickLitener){
+ this.mOnItemClickListener = clickLitener;
+
+ }
+
+
+ @Override
+ public int getItemViewType(int position) {
+ if (mDatas.size() == 0) {
+ return EMPTY_VIEW;
+ } else if (mDatas.get(position) == null) {
+ return PROGRESS_VIEW;
+ } else {
+ return super.getItemViewType(position);
+ }
+ }
+
+ @Override
+ public SiteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ SiteAdapter.SiteViewHolder holder = new SiteViewHolder(LayoutInflater.from(
+ context).inflate(listItemID, parent,
+ false));
+ return holder;
+ }
+
+
+ public void setParameters(List mDatas, int listItemID) {
+ this.mDatas = mDatas;
+ this.listItemID = listItemID;
+ }
+
+ public void setOnItemClickLitener(OnItemClickListener mOnItemClickLitener) {
+ this.mOnItemClickListener = mOnItemClickLitener;
+ }
+
+ @Override
+ public void onBindViewHolder( SiteViewHolder holder, int position) {
+ String title =mDatas.get(position).getDomain();
+ Log.d(TAG, String.format("onBindViewHolder: domain is '%s', title is '%s'",domain ,title));
+ if(title.equals(domain)){
+ title +=" (当前源)";
+ }
+
+ holder.tvTitle.setText(title); //.getName()
+
+ // 如果设置了回调,则设置点击事件
+ if (mOnItemClickListener != null) {
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int pos = holder.getLayoutPosition();
+ mOnItemClickListener.onItemClick(holder.itemView, pos);
+ }
+ });
+
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mDatas.size();
+ }
+
+ public void addData(int position) {
+ // mDatas.add(position, "Insert One");
+ notifyItemInserted(position);
+ }
+
+ public void removeData(int position) {
+ mDatas.remove(position);
+ notifyItemRemoved(position);
+ }
+
+ public class SiteViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.tvText)
+ TextView tvTitle;
+ public SiteViewHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, view);
+ //tvTitle = (TextView) view.findViewById(R.id.title);
+ // tvAuthor = (TextView) view.findViewById(R.id.author);
+
+ }
+
+ }
+
+ }
+
+}
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 d68a4ed..a44e10f 100644
--- a/zhuike/src/main/java/com/novelbook/android/Activity_base.java
+++ b/zhuike/src/main/java/com/novelbook/android/Activity_base.java
@@ -87,8 +87,10 @@ public abstract class Activity_base extends AppCompatActivity {
@Override
public void onItemClick(View view, int position)
{
+
// showBook("射雕" +position);
showBookDetail(mDatas.get(position));
+ finish();
}
@Override
diff --git a/zhuike/src/main/java/com/novelbook/android/BookActivity.java b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
index c9af8ba..761457e 100644
--- a/zhuike/src/main/java/com/novelbook/android/BookActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/BookActivity.java
@@ -279,7 +279,7 @@ public class BookActivity extends Activity_base {
.load( Uri.decode(NetUtil.getCoverUrl(mNovel.getCover())))
.dontAnimate()
// .error(R.mipmap.side_bg2)
- .transform(new GaoSiTransForm(this, 50, 3)) // "14":模糊度;"3":图片缩放3倍后再进行模糊
+ .transform(new GaoSiTransForm(this, 100, 3)) // "14":模糊度;"3":图片缩放3倍后再进行模糊
.into(imageViewHead);
diff --git a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
index efaf399..475d086 100644
--- a/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
+++ b/zhuike/src/main/java/com/novelbook/android/Main2Activity.java
@@ -1,7 +1,5 @@
package com.novelbook.android;
-import android.app.SearchManager;
-import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -10,7 +8,6 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.AppCompatSpinner;
-import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
@@ -18,7 +15,6 @@ import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
-import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
@@ -31,14 +27,11 @@ import com.novelbook.android.Fragments.BasicFragment;
import com.novelbook.android.Fragments.Fragment_Shelf;
import com.novelbook.android.Fragments.Fragment_bookStore;
import com.novelbook.android.Fragments.Fragment_paihang;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.utils.Constants;
-import org.litepal.util.Const;
-
import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnCheckedChanged;
import butterknife.OnClick;
public class Main2Activity extends Activity_base
diff --git a/zhuike/src/main/java/com/novelbook/android/Main5Activity.java b/zhuike/src/main/java/com/novelbook/android/Main5Activity.java
deleted file mode 100644
index d192775..0000000
--- a/zhuike/src/main/java/com/novelbook/android/Main5Activity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.novelbook.android;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.design.widget.BottomNavigationView;
-import android.support.v7.app.AppCompatActivity;
-import android.view.MenuItem;
-import android.widget.TextView;
-
-import io.alterac.blurkit.BlurLayout;
-
-public class Main5Activity extends AppCompatActivity {
- private BlurLayout blurLayout;
- private float movement = 150;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main5);
- blurLayout = (BlurLayout) findViewById(R.id.blurLayout);
-
- blurLayout.animate().translationY(movement).setDuration(1500).setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- movement = movement > 0 ? -150 : 150;
- blurLayout.animate().translationY(movement).setDuration(1500).setListener(this).start();
- }
- }).start();
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- blurLayout.startBlur();
- blurLayout.lockView();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- blurLayout.pauseBlur();
- }
-
-}
diff --git a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
index 95ebf59..33de73d 100644
--- a/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/MarkActivity.java
@@ -1,22 +1,17 @@
package com.novelbook.android;
-import android.content.Intent;
-import android.graphics.Color;
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.util.TypedValue;
import android.view.View;
-import com.astuetz.PagerSlidingTabStrip;
import com.flyco.tablayout.SlidingTabLayout;
import com.novelbook.android.adapter.MyPagerAdapter;
import com.novelbook.android.db.Chapter;
-import com.novelbook.android.db.Novel;
-import com.novelbook.android.utils.FileUtils;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.utils.PageFactory;
import java.util.ArrayList;
diff --git a/zhuike/src/main/java/com/novelbook/android/MyApp.java b/zhuike/src/main/java/com/novelbook/android/MyApp.java
index cca3c26..5f91123 100644
--- a/zhuike/src/main/java/com/novelbook/android/MyApp.java
+++ b/zhuike/src/main/java/com/novelbook/android/MyApp.java
@@ -3,13 +3,11 @@ package com.novelbook.android;
import android.app.Application;
import android.content.Context;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.utils.PageFactory;
import org.litepal.LitePal;
-
-import io.alterac.blurkit.BlurKit;
-
public class MyApp extends Application {
public static volatile Context applicationContext = null;
@Override
diff --git a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
index 8785a2e..1b53224 100644
--- a/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
+++ b/zhuike/src/main/java/com/novelbook/android/ReadActivity.java
@@ -2,7 +2,6 @@ package com.novelbook.android;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -42,6 +41,7 @@ import com.novelbook.android.dialog.PageModeDialog;
import com.novelbook.android.dialog.SettingDialog;
import com.novelbook.android.utils.AdInterface;
import com.novelbook.android.utils.BrightnessUtil;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.utils.PageFactory;
import com.novelbook.android.view.PageWidget;
@@ -430,8 +430,10 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
+
+ Log.d(TAG, "onKeyDown: pressed key");
if (keyCode == KeyEvent.KEYCODE_BACK) {
+ Log.d(TAG, "onKeyDown: pressed back");
if (isShow){
hideReadSetting();
return true;
@@ -533,7 +535,8 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
}
}
}
- }else if (id == R.id.action_read_book){
+ }
+ /* else if (id == R.id.action_read_book){
initialTts();
if (mSpeechSynthesizer != null){
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "5");
@@ -552,6 +555,13 @@ public class ReadActivity extends Activity_base implements SpeechSynthesizerLis
isSpeaking = true;
}
}
+ }*/
+ else if (id == R.id.action_change_source) {
+ Intent intent = new Intent(ReadActivity.this, Activity_ChgSource.class);
+ intent.putExtra(Activity_ChgSource.EXTR_ID,pageFactory.getCurrentChapter());
+ intent.putExtra(Activity_ChgSource.EXTR_TITLE,pageFactory.getChapterName());
+ intent.putExtra(Activity_ChgSource.EXTR_SITE,pageFactory.getSite());
+ startActivity(intent);
}
return super.onOptionsItemSelected(item);
diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java b/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java
index aba2c70..629bc17 100644
--- a/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java
+++ b/zhuike/src/main/java/com/novelbook/android/adapter/CatalogueAdapter.java
@@ -8,7 +8,7 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
-import com.novelbook.android.Config;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
import com.novelbook.android.db.Chapter;
@@ -62,7 +62,7 @@ public class CatalogueAdapter extends BaseAdapter {
}else {
viewHolder = (ViewHolder)convertView.getTag();
}
- if (currentCharter == position){
+ if (currentCharter == position+1){
viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.colorPrimaryDark));
}else{
viewHolder.catalogue_tv.setTextColor(mContext.getResources().getColor(R.color.dark_gray));
diff --git a/zhuike/src/main/java/com/novelbook/android/adapter/MarkAdapter.java b/zhuike/src/main/java/com/novelbook/android/adapter/MarkAdapter.java
index 5ddc4d3..c5806f1 100644
--- a/zhuike/src/main/java/com/novelbook/android/adapter/MarkAdapter.java
+++ b/zhuike/src/main/java/com/novelbook/android/adapter/MarkAdapter.java
@@ -9,12 +9,11 @@ import android.widget.BaseAdapter;
import android.widget.TextView;
-import com.novelbook.android.Config;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
import com.novelbook.android.db.BookMarks;
import com.novelbook.android.utils.PageFactory;
-import java.text.DecimalFormat;
import java.util.List;
diff --git a/zhuike/src/main/java/com/novelbook/android/bean/Site.java b/zhuike/src/main/java/com/novelbook/android/bean/Site.java
index b6e18f0..f8be507 100644
--- a/zhuike/src/main/java/com/novelbook/android/bean/Site.java
+++ b/zhuike/src/main/java/com/novelbook/android/bean/Site.java
@@ -1,6 +1,7 @@
package com.novelbook.android.bean;
public class Site {
+ private String name;
private String domain;
private String muluUrl;
private Boolean selectedByDefault;
@@ -28,4 +29,12 @@ public class Site {
public void setSelectedByDefault(Boolean selectedByDefault) {
this.selectedByDefault = selectedByDefault;
}
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
}
diff --git a/zhuike/src/main/java/com/novelbook/android/dialog/PageModeDialog.java b/zhuike/src/main/java/com/novelbook/android/dialog/PageModeDialog.java
index 2e7ceee..42a8bc6 100644
--- a/zhuike/src/main/java/com/novelbook/android/dialog/PageModeDialog.java
+++ b/zhuike/src/main/java/com/novelbook/android/dialog/PageModeDialog.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
-import com.novelbook.android.Config;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
diff --git a/zhuike/src/main/java/com/novelbook/android/dialog/ReadSettingDialog.java b/zhuike/src/main/java/com/novelbook/android/dialog/ReadSettingDialog.java
index 6ff3bbe..fec6885 100644
--- a/zhuike/src/main/java/com/novelbook/android/dialog/ReadSettingDialog.java
+++ b/zhuike/src/main/java/com/novelbook/android/dialog/ReadSettingDialog.java
@@ -13,7 +13,7 @@ import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
-import com.novelbook.android.Config;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
import com.novelbook.android.view.BookPageWidget;
diff --git a/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java b/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
index 9094fa5..9fcf728 100644
--- a/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
+++ b/zhuike/src/main/java/com/novelbook/android/dialog/SettingDialog.java
@@ -14,7 +14,7 @@ import android.widget.TextView;
import com.baidu.android.common.logging.Log;
-import com.novelbook.android.Config;
+import com.novelbook.android.utils.Config;
import com.novelbook.android.R;
import com.novelbook.android.utils.DisplayUtils;
import com.novelbook.android.view.CircleImageView;
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 1b064b9..d3584f6 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/BookUtil.java
@@ -5,6 +5,7 @@ import android.content.ContentValues;
import android.content.Context;
+import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -115,6 +116,10 @@ public class BookUtil {
private Site mSite;
private SiteRule mSiteRule;
+ public NovelSites getmNovelSites() {
+ return mNovelSites;
+ }
+
public synchronized void openBook(Novel novel) throws IOException, InterruptedException {
this.mNovel = novel;
//如果当前缓存不是要打开的书本就缓存书本同时删除缓存
@@ -306,15 +311,190 @@ 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) );
+ if(mSite.getDomain().equals(domain)){ //当前源
+ Log.d(TAG, "changing Source: same site with original " + domain);
+ return;
+ }
+ mChangeChapId = chapId;
+ mChangeTitle =chapTitle;
+ for (Site site:mNovelSites.getSites() ) {
+ if(site.getDomain().equals(domain)){
+ mSite = site;
+ break;
+ }
+ }
+ setSiteInfo();
+
+ showProgressDialog("正在换源",false);
+ isChangeSource = true;
+ mChapters.clear();
+ getSiteRule();
+
+ BookTask btsk = new BookTask();
+ btsk.execute( domain, chapId+"", chapTitle);
+
+
+
+
+
+ }
+
+ public String getSite() {
+ return mSite !=null? mSite.getDomain():"";
+ }
+
+ private class BookTask extends AsyncTask {
+ private String domain;
+ private int chapId;
+ private String chapTitle;
+ @Override
+ protected void onPostExecute(Boolean result) {
+ super.onPostExecute(result);
+ Log.d("onPostExecute",isCancelled() + "");
+ if (isCancelled()){
+ return;
+ }
+ if (result) {
+ Log.d(TAG, "changing Source:successed get chapters for " + mSite.getDomain() );
+
+ int chId=chapterNo;
+ String title ="";
+ if( mChapters.size() >= mChangeChapId && mChapters.get(mChangeChapId-1)!=null ){
+ title= mChapters.get(mChangeChapId-1).getChapterName();
+ Log.d(TAG, "changing Source:chapter name in new site " + title );
+ }
+ if(title.equals(mChangeTitle)) {
+ Log.d(TAG, "changing Source:successed find chapter by original chaptId " + mChangeChapId + ":" + mChangeTitle);
+ chId = mChangeChapId;
+ }
+ else {
+ int i = 1;
+ for (Chapter chapter : mChapters) {
+ Log.d(TAG, "changing Source: finding chapter " + i + ":" + chapter.getChapterName());
+ if (chapter.getChapterName().equals(mChangeTitle)) {
+ Log.d(TAG, "changing Source:successed find chapter by original title " + i + ":" + mChangeTitle);
+ chId = i;
+ break;
+ }
+ i++;
+ }
+ }
+ chId = chId <= mChapters.size() ? chId: mChapters.size();
+ Log.d(TAG, "changing Source: to open chapter with new site source " + chId + " : "+ mChangeTitle );
+ pagefactory.changeChapter(chId);
+
+ Toast.makeText(mContext,"换源成功",Toast.LENGTH_LONG).show();
+ }else{
+ Log.d(TAG, "changing Source: failed " );
+ }
+ }
+
+ @Override
+ protected Boolean doInBackground(String... params) {
+ domain = params[0];
+ chapId = Integer.parseInt( params[1]);
+ chapTitle = params[2];
+
+ int splet =0;
+ while(isChangeSource){
+ try {
+ Thread.sleep(50);
+ splet++;
+ Log.d(TAG, String.format("changing Source slept %s,isChangeSource %s ", splet, isChangeSource ));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+
+ }
+
+ @Override
+ protected void onProgressUpdate(Void... values) {
+ super.onProgressUpdate(values);
+ }
+
+
+
+ }
+
+
+
+ /**
+ * 新线程换源 ,handler 有问题
+ * @param domain
+ * @param chapId
+ * @param chapTitle
+ */
+ public void changeSourceNewThread(String domain,int chapId,String chapTitle) {
+ Log.d(TAG, String.format("changing Source: target domain %s chaptId %s, chapt title %s ",domain,chapId,chapTitle) );
+ if(mSite.getDomain().equals(domain)){ //当前源
+ Log.d(TAG, "changing Source: same site with original " + domain);
+ // return;
+ }
+ mChangeChapId = chapId;
+ mChangeTitle =chapTitle;
+ for (Site site:mNovelSites.getSites() ) {
+ if(site.getDomain().equals(domain)){
+ mSite = site;
+ break;
+ }
+ }
+ setSiteInfo();
+
+ // showProgressDialog();
+ isChangeSource = true;
+ new Thread(){
+ @Override
+ public void run() {
+ Log.d(TAG, "changing Source: to get site rule" );
+ getSiteRule();
+ }
+ }.start();
+
+
+ /*
+ while(isChangeSource){
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ new Thread(){
+ @Override
+ public void run() {
+ Log.d(TAG, "changing Source: to get site rule" );
+ getSiteRule();
+ }
+ }.start();*/
+
+ }
+
enum MuluStatus{
isDownloading,
isDone,
failed
}
- private void showProgressDialog() {
+ private void showProgressDialog(String title,boolean canBreak) {
if ( null == progressDialog) {
progressDialog =new ProgressDialog(mContext);
+
}
+ progressDialog.setMessage(title);
+ progressDialog.setCancelable(canBreak);
progressDialog.show();
// progressDialog.show(mContext,"网络不给力","正努力加载",false,true);
}
@@ -335,38 +515,7 @@ public class BookUtil {
- // String getMuluUrl() {
- // return "https://www.qu.la/book/390/";
- // }
- /* void readChapters( String url){
- Request request = getTagRequest(url);
- ResponseBody body =null;
- try {
-
- long startTime= new Date().getTime();
- Log.d(TAG,String.format("loadChaptContent----start download %s 目录 from %s", mNovel.getName() ,url ));
-
-
- Response response = HttpMethods.getOkClient().newCall(request).execute();
- Log.d(TAG,String.format("loadChaptContent----end download %s 目录, 目录数量 %s, cost %s", mNovel.getName() , mChapters.size(), new Date().getTime() -startTime ));
- startTime= new Date().getTime();
- body = response.body();
- String bodyStr = body.string();
- Log.d(TAG, "onResponse: " +bodyStr);
-
- buildCharacters(bodyStr,url);
- Log.d(TAG,String.format("loadChaptContent----end build %s 目录, 目录数量 %s, cost %s", mNovel.getName() , mChapters.size(), new Date().getTime() -startTime ));
-
- } catch (IOException e) {
- e.printStackTrace();
- }finally {
- if(body!=null){
- body.close();;
- }
- }
-
- }*/
void readChaptersAsync( ) {
String url = mSite.getMuluUrl();
@@ -383,6 +532,7 @@ public class BookUtil {
Log.e(TAG, "loadChapts---- failed: ",e );
Log.d(TAG,String.format("loadChapts---- failed %s 目录 from %s", mNovel.getName() ,url ));
+ handler.sendEmptyMessage(3);
//TODO 如果是取消了访问,则返回
if( mNovelSites.getSites().length ==1){ //仅有一个rule,且失败了
@@ -406,7 +556,7 @@ public class BookUtil {
ResponseBody body = response.body();
if(response.code()!=200){
Log.d(TAG,String.format("loadChapts----failed, %s 目录 from %s,return code %s", mNovel.getName() ,url,response.code() ));
-
+ handler.sendEmptyMessage(3);
mMuluStatus = MuluStatus.failed;
return;
}
@@ -426,6 +576,7 @@ public class BookUtil {
e.printStackTrace();
}finally {
body.close();
+ handler.sendEmptyMessage(3);
}
}
@@ -858,26 +1009,65 @@ public class BookUtil {
isDownloadChapt = flag;
Log.d("loadChaptContent",String.format("set download flat",isDownloadChapt) );
}
-
- final Handler handler = new Handler() {
+ public ChangeSource pagefactory;
+ Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int wt = msg.what;
+ handlerMsg(msg);
+
+
dismissProgressDialog();
-
- if (msg.what == 123) {
- isDownloadChapt =true;
- Log.d("loadChaptContent",String.format("handler msg, download %s",isDownloadChapt) );
- }else if(msg.what==1){
- isDownloadChapt =true;
- // Toast.makeText(mContext,"网络错误",Toast.LENGTH_LONG).show();
- }
-
}
};
+
+
+ void handlerMsg(Message msg){
+ if (msg.what == 123) {
+ isDownloadChapt =true;
+ Log.d("loadChaptContent",String.format("handler msg, download %s",isDownloadChapt) );
+ }else if(msg.what==1){
+ isDownloadChapt =true;
+ // Toast.makeText(mContext,"网络错误",Toast.LENGTH_LONG).show();
+ }else if(msg.what==3){ //change source
+ isChangeSource =false;
+ Log.d(TAG, "changing Source:successed get chapters for " + mSite.getDomain() );
+ /*if(isChangeSource){
+ Log.d(TAG, "changing Source:successed get chapters for " + mSite.getDomain() );
+ isChangeSource =false;
+ int chapId=chapterNo;
+ if( mChapters.size() >= mChangeChapId && mChapters.get(mChangeChapId-1)!=null ){
+ String title = mChapters.get(mChangeChapId-1).getChapterName();
+ Log.d(TAG, "changing Source:chapter name in new site " + title );
+ if(title.equals(mChangeTitle)) {
+ Log.d(TAG, "changing Source:successed find chapter by original chaptId " + mChangeChapId + ":" + mChangeTitle);
+ chapId = mChangeChapId;
+ }
+ }else{
+ int i =1;
+ for (Chapter chapter : mChapters) {
+
+ if (chapter.getChapterName().equals(mChangeTitle)) {
+ Log.d(TAG, "changing Source:successed find chapter by original title " +i + ":"+ mChangeTitle );
+ chapId = i;
+ break;
+ }
+ i++;
+ }
+ }
+ chapId = chapId <= mChapters.size() ? chapId: mChapters.size();
+ Log.d(TAG, "changing Source: to open chapter with new site source " + chapId + " : "+ mChangeTitle );
+ pagefactory.changeChapter(chapId);
+
+ }
+ */
+ }
+ }
+
+
private Map chaptCache = new HashMap();
private Map chaptDownStatus = new HashMap();
DownloadStatus downloadStatus = DownloadStatus.notStart;
@@ -887,6 +1077,42 @@ public class BookUtil {
failure,
success
}
+
+ public boolean isChapterContentExist(int index) {
+ char[] block = null;
+ if (chaptCache.containsKey(Integer.valueOf(index))) {
+ block = chaptCache.get(index).getData().get();
+ }
+ if (block == null) {
+ // cleanCacheFile(); //to remove
+
+ File file = new File(fileChapterName(index));
+
+ if (!file.exists()) {
+ showProgressDialog("请稍候",false);
+ new Thread(){
+ @Override
+ public void run() {
+ try {
+ loadChaptContent(index);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }.start();
+ return false;
+ }
+
+ }
+
+ return true;
+ }
+
+
+
//获取chapter 缓存
public char[] chaptChars(final int index) {
char[] block=null;
@@ -924,7 +1150,7 @@ public class BookUtil {
Log.d(TAG,String.format("loadChaptContent----start %s" ,new Date().toString() ));
- //showProgressDialog();//why not show
+
Log.d( "loadChaptContent",String.format("begin to load content for chapter %s",index));
Log.d( "loadChaptContent",String.format("isDownloadChapt: %s",isDownloadChapt));
@@ -1015,6 +1241,7 @@ private void loadChaptContent(final int chapterIndex) throws JSONException, Inte
Chapter chapter = mChapters.get(index -1);
String url = chapter.getChapterUrl();
if( TextUtils.isEmpty( url)){
+ handler.sendEmptyMessage(1);
return ;
}
long startTime= new Date().getTime();
diff --git a/zhuike/src/main/java/com/novelbook/android/utils/ChangeSource.java b/zhuike/src/main/java/com/novelbook/android/utils/ChangeSource.java
new file mode 100644
index 0000000..db01bd5
--- /dev/null
+++ b/zhuike/src/main/java/com/novelbook/android/utils/ChangeSource.java
@@ -0,0 +1,5 @@
+package com.novelbook.android.utils;
+
+public interface ChangeSource {
+ public void changeChapter(int chapNum);
+}
diff --git a/zhuike/src/main/java/com/novelbook/android/Config.java b/zhuike/src/main/java/com/novelbook/android/utils/Config.java
similarity index 98%
rename from zhuike/src/main/java/com/novelbook/android/Config.java
rename to zhuike/src/main/java/com/novelbook/android/utils/Config.java
index 6c5765a..4451b86 100644
--- a/zhuike/src/main/java/com/novelbook/android/Config.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/Config.java
@@ -1,9 +1,11 @@
-package com.novelbook.android;
+package com.novelbook.android.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface;
+import com.novelbook.android.R;
+
public class Config {
private final static String SP_NAME = "config";
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 6ea37fa..6c31488 100644
--- a/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
+++ b/zhuike/src/main/java/com/novelbook/android/utils/PageFactory.java
@@ -1,5 +1,6 @@
package com.novelbook.android.utils;
+import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@@ -15,12 +16,12 @@ import android.graphics.Typeface;
import android.os.AsyncTask;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
-import com.novelbook.android.Config;
import com.novelbook.android.R;
+import com.novelbook.android.bean.NovelSites;
+import com.novelbook.android.bean.Site;
import com.novelbook.android.db.Chapter;
import com.novelbook.android.db.Novel;
import com.novelbook.android.netutils.NetUtil;
@@ -37,7 +38,7 @@ import java.util.List;
//import static com.baidu.tts.loopj.AsyncHttpClient.log;
-public class PageFactory {
+public class PageFactory implements ChangeSource{
private static final String TAG = "PageFactory";
private static PageFactory pageFactory;
@@ -171,7 +172,7 @@ public class PageFactory {
chaptId = mChapters!=null && mChapters.size() <= chaptId ? 1 : chaptId;
- // Log.d(TAG, String.format("prepare book to open chapter %s ",chaptId ) );
+ Log.d(TAG, String.format("changing Source prepare book to open chapter %s ",chaptId ) );
char[] chars = mBookUtil.chaptChars(chaptId);
String s = new String(chars);
// Log.d(TAG, String.format("prepare book to open chapter %s,chars %s ",chaptId ,s ) );
@@ -215,6 +216,39 @@ public class PageFactory {
private static Status mStatus = Status.OPENING;
+ public NovelSites getNovelSites() {
+ return mBookUtil.getmNovelSites();
+ }
+ private ProgressDialog progressDialog;
+ private void showProgressDialog() {
+ if ( null == progressDialog) {
+ progressDialog =new ProgressDialog(mContext);
+ }
+ progressDialog.show();
+ // progressDialog.show(mContext,"网络不给力","正努力加载",false,true);
+ }
+
+
+ private void dismissProgressDialog() {
+ if ( null != progressDialog) {
+ progressDialog.dismiss();
+ }
+ }
+ public void changeSource(String domain,int chapId,String chapTitle) {
+
+ mBookUtil.changeSource(domain, chapId, chapTitle);
+
+
+
+ }
+
+ public String getChapterName() {
+ return getChapters().get(currentChapter-1).getChapterName();
+ }
+
+ public String getSite() {
+ return mBookUtil.getSite();
+ }
public enum Status {
@@ -494,7 +528,7 @@ public class PageFactory {
}else*/
if (getChapters().size() > 0)
{
- String chapterName = CommonUtil.subString(getChapters().get(currentChapter-1).getChapterName(),16);
+ String chapterName = CommonUtil.subString(getChapterName(),16);
int nChaterWidth = (int) mBatterryPaint.measureText(chapterName) + 1;
c.drawText(chapterName, mWidth - marginWidth - nChaterWidth, statusMarginBottom + mBatterryFontSize, mBatterryPaint);
@@ -612,6 +646,7 @@ public class PageFactory {
mBookUtil = new BookUtil();
}
mBookUtil.setContext(context);
+ mBookUtil.pagefactory=this;
//清空数据
currentChapter = 0;
// m_mbBufLen = 0;
diff --git a/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java b/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java
index 2be7b39..0c72a6c 100644
--- a/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java
+++ b/zhuike/src/main/java/com/novelbook/android/view/PageWidget.java
@@ -13,7 +13,6 @@ import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.Scroller;
-import com.novelbook.android.Config;
import com.novelbook.android.utils.PageFactory;
import com.novelbook.android.view.animation.AnimationProvider;
import com.novelbook.android.view.animation.CoverAnimation;
@@ -21,7 +20,7 @@ import com.novelbook.android.view.animation.NoneAnimation;
import com.novelbook.android.view.animation.SimulationAnimation;
import com.novelbook.android.view.animation.SlideAnimation;
-import static com.novelbook.android.Config.*;
+import static com.novelbook.android.utils.Config.*;
diff --git a/zhuike/src/main/res/layout/activity_book.xml b/zhuike/src/main/res/layout/activity_book.xml
index 68ea51d..7e141d3 100644
--- a/zhuike/src/main/res/layout/activity_book.xml
+++ b/zhuike/src/main/res/layout/activity_book.xml
@@ -100,13 +100,15 @@
diff --git a/zhuike/src/main/res/layout/activity_chgsource.xml b/zhuike/src/main/res/layout/activity_chgsource.xml
new file mode 100644
index 0000000..4e20b17
--- /dev/null
+++ b/zhuike/src/main/res/layout/activity_chgsource.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/layout/activity_main2.xml b/zhuike/src/main/res/layout/activity_main2.xml
index 2ffba61..12eddf6 100644
--- a/zhuike/src/main/res/layout/activity_main2.xml
+++ b/zhuike/src/main/res/layout/activity_main2.xml
@@ -20,6 +20,8 @@
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main2"
- app:menu="@menu/activity_main2_drawer" />
+ app:menu="@menu/activity_main2_drawer"
+
+ />
diff --git a/zhuike/src/main/res/layout/app_bar_main2.xml b/zhuike/src/main/res/layout/app_bar_main2.xml
index 494f14a..acce11a 100644
--- a/zhuike/src/main/res/layout/app_bar_main2.xml
+++ b/zhuike/src/main/res/layout/app_bar_main2.xml
@@ -21,8 +21,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/menu/read.xml b/zhuike/src/main/res/menu/read.xml
index 497a7db..5e5ef4d 100644
--- a/zhuike/src/main/res/menu/read.xml
+++ b/zhuike/src/main/res/menu/read.xml
@@ -12,9 +12,5 @@
android:orderInCategory="90"
app:showAsAction="ifRoom" />
-
+
\ No newline at end of file
diff --git a/zhuike/src/main/res/values/dimens.xml b/zhuike/src/main/res/values/dimens.xml
index a517176..c295b05 100644
--- a/zhuike/src/main/res/values/dimens.xml
+++ b/zhuike/src/main/res/values/dimens.xml
@@ -46,6 +46,7 @@
42dp
10dp
+ 40dp
diff --git a/zhuike/src/main/res/values/strings.xml b/zhuike/src/main/res/values/strings.xml
index 6501cc3..92e67e7 100644
--- a/zhuike/src/main/res/values/strings.xml
+++ b/zhuike/src/main/res/values/strings.xml
@@ -185,6 +185,7 @@
如风小说阅读是专注于提供更舒适的阅读体验,主打本地阅读,操作方式简单易上手,目前支持txt格式。
没有数据
+ 换源
- 小燕—女青、中英、普通话
diff --git a/zhuike/src/main/res/values/styles.xml b/zhuike/src/main/res/values/styles.xml
index 6e15bcd..05d991a 100644
--- a/zhuike/src/main/res/values/styles.xml
+++ b/zhuike/src/main/res/values/styles.xml
@@ -404,7 +404,7 @@
- 14sp
-
+