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 - +