diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index bf02cc2..2ecfeb2 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index 55294e0..727332d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -94,7 +94,8 @@ dependencies {
implementation 'com.journeyapps:zxing-android-embedded:3.5.0'
- implementation 'org.greenrobot:greendao:3.2.2'
+ implementation 'org.greenrobot:greendao:3.3.0'
+ implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'
implementation 'org.jsoup:jsoup:1.11.3'
@@ -117,10 +118,16 @@ dependencies {
implementation 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:1.0.0'
//Scroller
implementation 'com.futuremind.recyclerfastscroll:fastscroll:0.2.5'
+
+ //Toasty
+ implementation 'com.github.GrenderG:Toasty:1.5.0'
+
+ //字符串比较
+ implementation 'net.ricecode:string-similarity:1.0.0'
}
greendao {
- schemaVersion 9
+ schemaVersion 11
daoPackage 'xyz.fycz.myreader.greendao.gen'
// targetGenDir 'src/main/java'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3c0b836..1bb3d26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,9 +4,11 @@
-
+
+
-
+
+
@@ -24,20 +26,28 @@
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+
-
-
-
+
+
+
+
+
+
@@ -104,6 +114,8 @@
+
+
diff --git a/app/src/main/assets/updatelog.fy b/app/src/main/assets/updatelog.fy
index 74cc7ad..4d023b4 100644
--- a/app/src/main/assets/updatelog.fy
+++ b/app/src/main/assets/updatelog.fy
@@ -1,3 +1,11 @@
+2020.08.24
+风月读书v1.20.082422
+1、重做书籍详情界面
+2、新增书籍启用\关闭更新(此功能在书籍详情页右上角菜单)
+3、优化应用提示信息显示效果
+4、优化字体界面
+5、修复已知bug
+
2020.08.15
风月读书v1.20.081523
1、修复安卓10(Q)无法访问外部储存空间及其导致的一系列问题(如:无法下载字体、无法使用备份\恢复、无法添加本地书籍、无法同步书架等)
diff --git a/app/src/main/java/xyz/fycz/myreader/application/MyApplication.java b/app/src/main/java/xyz/fycz/myreader/application/MyApplication.java
index e1a1828..42a4c55 100644
--- a/app/src/main/java/xyz/fycz/myreader/application/MyApplication.java
+++ b/app/src/main/java/xyz/fycz/myreader/application/MyApplication.java
@@ -256,7 +256,7 @@ public class MyApplication extends Application {
doc = Jsoup.connect(url).get();
String content = doc.getElementsByClass("ql-editor").text();
if (StringHelper.isEmpty(content)) {
- TextHelper.showText("检查更新失败!");
+ ToastUtils.showError("检查更新失败!");
return;
}
String[] contents = content.split(";");
@@ -292,11 +292,11 @@ public class MyApplication extends Application {
mBookcaseFragment);
}
} else if (isManualCheck) {
- TextHelper.showText("已经是最新版本!");
+ ToastUtils.showSuccess("已经是最新版本!");
}
} catch (Exception e) {
e.printStackTrace();
- TextHelper.showText("无网络连接!");
+ ToastUtils.showError("检查更新失败!");
}
});
}
@@ -329,7 +329,7 @@ public class MyApplication extends Application {
}
}, (dialog, which) -> {
if (url == null || "".equals(url)) {
- TextHelper.showText("获取链接失败,请前往浏览器下载!");
+ ToastUtils.showError("获取链接失败,请前往浏览器下载!");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(URLCONST.APP_DIR_UR));
@@ -372,4 +372,13 @@ public class MyApplication extends Application {
}
}
+ /**
+ * 判断Activity是否Destroy
+ * @param mActivity
+ * @return
+ */
+ public static boolean isDestroy(Activity mActivity) {
+ return mActivity == null || mActivity.isFinishing() || mActivity.isDestroyed();
+ }
+
}
diff --git a/app/src/main/java/xyz/fycz/myreader/application/SysManager.java b/app/src/main/java/xyz/fycz/myreader/application/SysManager.java
index 8bcc1c1..40cf371 100644
--- a/app/src/main/java/xyz/fycz/myreader/application/SysManager.java
+++ b/app/src/main/java/xyz/fycz/myreader/application/SysManager.java
@@ -48,21 +48,24 @@ public class SysManager {
private static Setting getDefaultSetting(){
Setting setting = new Setting();
setting.setDayStyle(true);
- setting.setReadBgColor(R.color.sys_protect_eye_bg);
- setting.setReadStyle(ReadStyle.protectedEye);
+ setting.setReadStyle(ReadStyle.leather);
setting.setReadWordSize(25);
- setting.setReadWordColor(R.color.sys_protect_eye_word);
setting.setBrightProgress(50);
setting.setBrightFollowSystem(true);
setting.setLanguage(Language.simplified);
setting.setFont(Font.默认字体);
setting.setAutoScrollSpeed(300);
setting.setPageMode(PageMode.SIMULATION);
- setting.setVolumeTurnPage(false);
+ setting.setVolumeTurnPage(true);
+ setting.setResetScreen(3);
setting.setBookcaseStyle(BookcaseStyle.listMode);
setting.setNewestVersionCode(getVersionCode());
setting.setLocalFontName("");
setting.setAutoSyn(false);
+ setting.setMatchChapter(true);
+ setting.setMatchChapterSuitability(0.7f);
+ setting.setCatheGap(150);
+ setting.setRefreshWhenStart(false);
setting.setSettingVersion(APPCONST.SETTING_VERSION);
return setting;
}
@@ -73,6 +76,11 @@ public class SysManager {
*/
public static void resetSetting(){
- saveSetting(getDefaultSetting());
+ Setting setting = getSetting();
+ setting.setVolumeTurnPage(true);
+ setting.setMatchChapter(true);
+ setting.setResetScreen(3);
+ setting.setSettingVersion(APPCONST.SETTING_VERSION);
+ saveSetting(setting);
}
}
diff --git a/app/src/main/java/xyz/fycz/myreader/backup/BackupAndRestore.java b/app/src/main/java/xyz/fycz/myreader/backup/BackupAndRestore.java
index 9b96821..5e2ddb3 100644
--- a/app/src/main/java/xyz/fycz/myreader/backup/BackupAndRestore.java
+++ b/app/src/main/java/xyz/fycz/myreader/backup/BackupAndRestore.java
@@ -81,17 +81,25 @@ public class BackupAndRestore {
sBookFields[i] = sBookFields[i].substring(sBookFields[i].indexOf("'") + 1, sBookFields[i].lastIndexOf("'"));
}
String source = "null";
+ boolean isCloseUpdate = false;
+ boolean isDownloadAll = true;
if(!sBookFields[2].contains("novel.fycz.xyz")){
source = sBookFields[17];
}
if ("本地书籍".equals(sBookFields[4])){
sBookFields[15] = "0";
}
+ if (sBookFields.length >= 19){
+ isCloseUpdate = Boolean.parseBoolean(sBookFields[18]);
+ }
+ if (sBookFields.length >= 20){
+ isDownloadAll = Boolean.parseBoolean(sBookFields[19]);
+ }
Book book = new Book(sBookFields[0], sBookFields[1], sBookFields[2], sBookFields[3], sBookFields[4],
sBookFields[5], sBookFields[6], sBookFields[7], sBookFields[8], sBookFields[9], sBookFields[10],
sBookFields[11], Integer.parseInt(sBookFields[12]), Integer.parseInt(sBookFields[13]),
Integer.parseInt(sBookFields[14]), Integer.parseInt(sBookFields[15]), Integer.parseInt(sBookFields[16])
- , source);
+ , source, isCloseUpdate, isDownloadAll);
books.add(book);
}
mBookService.deleteAllBooks();
diff --git a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java
index 8309c6c..4d04562 100644
--- a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java
+++ b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity.java
@@ -14,7 +14,7 @@ import android.view.inputmethod.InputMethodManager;
import androidx.appcompat.app.AppCompatActivity;
import xyz.fycz.myreader.ActivityManage;
import xyz.fycz.myreader.util.Anti_hijackingUtils;
-import xyz.fycz.myreader.util.SystemBarTintManager;
+import xyz.fycz.myreader.util.StatusBarUtil;
@@ -41,7 +41,7 @@ public class BaseActivity extends AppCompatActivity {
Log.d("ActivityName: ",getLocalClassName());
DisplayMetrics dm = new DisplayMetrics();
//获取屏幕宽高
- if(height == 0 || height == 0){
+ if(height == 0 || width == 0){
getWindowManager().getDefaultDisplay().getMetrics(dm);
width = dm.widthPixels;
height = dm.heightPixels;
@@ -90,18 +90,6 @@ public class BaseActivity extends AppCompatActivity {
return super.onKeyDown(keyCode, event);
}
- @TargetApi(19)
- protected void setTranslucentStatus(boolean on) {
- Window win = getWindow();
- WindowManager.LayoutParams winParams = win.getAttributes();
- final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
- if (on) {
- winParams.flags |= bits;
- } else {
- winParams.flags &= ~bits;
- }
- win.setAttributes(winParams);
- }
public void setDisallowAntiHijacking(boolean disallowAntiHijacking) {
this.disallowAntiHijacking = disallowAntiHijacking;
@@ -113,13 +101,25 @@ public class BaseActivity extends AppCompatActivity {
* 设置状态栏颜色
* @param colorId
*/
- public void setStatusBar(int colorId){
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- setTranslucentStatus(true);
- SystemBarTintManager tintManager = new SystemBarTintManager(this);
- tintManager.setStatusBarTintEnabled(true);
- tintManager.setStatusBarTintResource(colorId);//通知栏所需颜色ID
+ public void setStatusBar(int colorId, boolean dark){
+ //沉浸式代码配置
+ //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
+ StatusBarUtil.setRootViewFitsSystemWindows(this, true);
+ //设置状态栏透明
+ StatusBarUtil.setTranslucentStatus(this);
+ if (colorId != 0) {
+ StatusBarUtil.setStatusBarColor(this, getResources().getColor(colorId));
}
+ //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
+ //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
+ if (!dark) {
+ if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
+ //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
+ //这样半透明+白=灰, 状态栏的文字能看得清
+ StatusBarUtil.setStatusBarColor(this, 0x55000000);
+ }
+ }
+
}
public InputMethodManager getmInputMethodManager() {
diff --git a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity2.java b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity2.java
index 21e2f3e..88fe9c1 100644
--- a/app/src/main/java/xyz/fycz/myreader/base/BaseActivity2.java
+++ b/app/src/main/java/xyz/fycz/myreader/base/BaseActivity2.java
@@ -1,21 +1,29 @@
package xyz.fycz.myreader.base;
+import android.annotation.SuppressLint;
import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
-import androidx.core.content.ContextCompat;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
+import xyz.fycz.myreader.ActivityManage;
import xyz.fycz.myreader.R;
-import xyz.fycz.myreader.util.StatusBarCompat;
+import xyz.fycz.myreader.util.StatusBarUtil;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
/**
* @author fengyue
@@ -73,6 +81,7 @@ public abstract class BaseActivity2 extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ActivityManage.addActivity(this);
setContentView(getContentId());
initData(savedInstanceState);
unbinder = ButterKnife.bind(this);
@@ -95,6 +104,7 @@ public abstract class BaseActivity2 extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
+ ActivityManage.removeActivity(this);
unbinder.unbind();
if (mDisposable != null){
mDisposable.dispose();
@@ -104,7 +114,7 @@ public abstract class BaseActivity2 extends AppCompatActivity {
/**************************used method area*******************************************/
protected void startActivity(Class extends AppCompatActivity> activity){
- Intent intent = new Intent(this,activity);
+ Intent intent = new Intent(this, activity);
startActivity(intent);
}
@@ -121,7 +131,53 @@ public abstract class BaseActivity2 extends AppCompatActivity {
return actionBar;
}
- protected void setStatusBarColor(int statusColor){
- StatusBarCompat.compat(this, ContextCompat.getColor(this, statusColor));
+ protected void setStatusBarColor(int statusColor, boolean dark){
+ //沉浸式代码配置
+ //当FitsSystemWindows设置 true 时,会在屏幕最上方预留出状态栏高度的 padding
+ StatusBarUtil.setRootViewFitsSystemWindows(this, true);
+ //设置状态栏透明
+ StatusBarUtil.setTranslucentStatus(this);
+ StatusBarUtil.setStatusBarColor(this, getResources().getColor(statusColor));
+
+ //一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
+ //所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
+ if (!dark) {
+ if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
+ //如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
+ //这样半透明+白=灰, 状态栏的文字能看得清
+ StatusBarUtil.setStatusBarColor(this, 0x55000000);
+ }
+ }
+ }
+
+ @SuppressLint("PrivateApi")
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean onMenuOpened(int featureId, Menu menu) {
+ if (menu != null) {
+ //展开菜单显示图标
+ if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
+ try {
+ Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
+ method.setAccessible(true);
+ method.invoke(menu, true);
+ method = menu.getClass().getDeclaredMethod("getNonActionItems");
+ ArrayList