diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ccfb6dd..c57cb32 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,11 +25,7 @@ jobs: echo "读取配置" source ${{ github.workspace }}/app/version_code.properties version=$VERSION_CODE - hun=$(expr ${version} / 100) - ten=$(expr ${version} / 10) - ten=$(expr ${ten} % 10) - one=$(expr ${version} % 10) - versionN=v$hun.$ten.$one + versionN=v${version:0:1}.${version:1:1}.${version:2:1} echo ::set-output name=need_create_release::"$CREATE_RELEASE" echo ::set-output name=version_name::"$versionN" @@ -37,7 +33,7 @@ jobs: echo need_create_release=$CREATE_RELEASE echo version_name=$versionN - if [ $NEED_CREATE_RELEASE == 'true' -a ${{ github.ref }} == 'refs/heads/master' ];then + if [ $CREATE_RELEASE == 'true' -a ${{ github.ref }} == 'refs/heads/master' ];then echo ::set-output name=lanzou_folder_id::"1608604" echo ::set-output name=lanzou_share_url::"https://fycz.lanzoui.com/b00ngso7e" else diff --git a/.gitignore b/.gitignore index ba63cba..1d39116 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ .DS_Store /build /captures +/user .externalNativeBuild keystore # Compiled class file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 2818960..d16e683 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -14,6 +14,7 @@ diff --git a/.idea/modules.xml b/.idea/modules.xml index 8bd560e..a847a9a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -15,6 +15,10 @@ + + + + \ No newline at end of file diff --git a/app/release.md b/app/release.md index b36dc1f..e4ad621 100644 --- a/app/release.md +++ b/app/release.md @@ -1,6 +1 @@ -* 1、新增部分提示 -* 2、修复书籍无法导出缓存的问题 -* 3、修复部分书源bug -* 4、修复同名书籍详情页加载bug -* 5、修复搜索时当前分组不存在时无法搜索的问题 -* 6、Cookie支持备份&恢复 \ No newline at end of file +* 1、修复书源过多时搜索界面卡死的问题 \ No newline at end of file diff --git a/app/src/main/java/xyz/fycz/myreader/model/user/UserService.kt b/app/src/main/java/xyz/fycz/myreader/model/user/UserService.kt index b4a5baf..7aceaf4 100644 --- a/app/src/main/java/xyz/fycz/myreader/model/user/UserService.kt +++ b/app/src/main/java/xyz/fycz/myreader/model/user/UserService.kt @@ -266,6 +266,7 @@ object UserService { App.getApplication().packageName, AppInfoUtils.SHA1 ) + "&appVersion=" + App.getVersionCode() + - "&deviceId=" + getUUID() + "&isDebug=" + App.isDebug() + "&isDebug=" + App.isDebug() + + "&deviceId=" + getUUID() } } \ No newline at end of file diff --git a/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java b/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java index 18cb0de..44d5d96 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java +++ b/app/src/main/java/xyz/fycz/myreader/ui/activity/SearchBookActivity.java @@ -156,6 +156,25 @@ public class SearchBookActivity extends BaseActivity } } + @Override + protected void onStop() { + if (mSearchBookAdapter != null) { + mSearchBookAdapter.setStop(true); + } + super.onStop(); + } + + @Override + protected void onStart() { + super.onStart(); + if (mSearchBookAdapter != null) { + mSearchBookAdapter.setStop(false); + if (showBooks) { + mSearchBookAdapter.addAll(new ArrayList<>(), searchKey); + } + } + } + @Override protected void initData(Bundle savedInstanceState) { super.initData(savedInstanceState); @@ -757,28 +776,8 @@ public class SearchBookActivity extends BaseActivity /*for (ReadCrawler readCrawler : readCrawlers) { searchBookByCrawler(readCrawler, readCrawler.getSearchCharset()); }*/ - if (readCrawlers.size() > 2000 && !SharedPreUtils.getInstance().getBoolean("searchBookWarning")) { - DialogCreator.createThreeButtonDialog(this, "书源过多警告", - "当前搜索书源数量超过2000(建议1000以内),继续搜索可能会导致软件异常(如搜索时前往阅读页返回后将会导致卡死黑屏),确定要继续搜索吗?", - true, "继续搜索并不再提示", "书源管理", "继续搜索", - (dialog, which) -> { - SharedPreUtils.getInstance().putBoolean("searchBookWarning", true); - searchEngine.initSearchEngine(readCrawlers); - searchEngine.search(searchKey); - }, (dialog, which) -> { - startActivityForResult(new Intent(this, BookSourceActivity.class), - APPCONST.REQUEST_BOOK_SOURCE); - }, - (dialog, which) -> { - searchEngine.initSearchEngine(readCrawlers); - searchEngine.search(searchKey); - } - ); - } else { - searchEngine.initSearchEngine(readCrawlers); - searchEngine.search(searchKey); - } - + searchEngine.initSearchEngine(readCrawlers); + searchEngine.search(searchKey); } /** diff --git a/app/src/main/java/xyz/fycz/myreader/ui/adapter/SearchAdapter.kt b/app/src/main/java/xyz/fycz/myreader/ui/adapter/SearchAdapter.kt index 6b6db5f..8e9c0fa 100644 --- a/app/src/main/java/xyz/fycz/myreader/ui/adapter/SearchAdapter.kt +++ b/app/src/main/java/xyz/fycz/myreader/ui/adapter/SearchAdapter.kt @@ -24,6 +24,7 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.text.TextUtils +import android.util.Log import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil @@ -52,11 +53,12 @@ class SearchAdapter( val keyword: String ) : DiffRecyclerAdapter(context) { private val mBooks: ConMVMap = ConMVMap() - private lateinit var mList: List + private var mList: MutableList = ArrayList() private val tagList: MutableList = ArrayList() private val handler = Handler(Looper.getMainLooper()) private var postTime = 0L private val sendRunnable = Runnable { upAdapter() } + var isStop = false override val diffItemCallback: DiffUtil.ItemCallback get() = object : DiffUtil.ItemCallback() { @@ -300,7 +302,7 @@ class SearchAdapter( } fun addAll(newDataS: List, keyWord: String?) { - val copyDataS: MutableList = ArrayList(getItems()) + val copyData: MutableList = ArrayList(mList) val filterDataS: MutableList = ArrayList() when (SysManager.getSetting().searchFilter) { 0 -> filterDataS.addAll(newDataS) @@ -328,16 +330,16 @@ class SearchAdapter( } if (filterDataS.size > 0) { val searchBookBeansAdd: MutableList = ArrayList() - if (copyDataS.size == 0) { - copyDataS.addAll(filterDataS) + if (mList.size == 0) { + mList.addAll(filterDataS) } else { //存在 for (temp in filterDataS) { var hasSame = false var i = 0 - val size = copyDataS.size + val size = copyData.size while (i < size) { - val searchBook = copyDataS[i] + val searchBook = copyData[i] if (TextUtils.equals(temp.name, searchBook.name) && TextUtils.equals(temp.author, searchBook.author) ) { @@ -353,30 +355,30 @@ class SearchAdapter( //添加 for (temp in searchBookBeansAdd) { if (TextUtils.equals(keyWord, temp.name)) { - for (i in copyDataS.indices) { - val searchBook = copyDataS[i] + for (i in copyData.indices) { + val searchBook = copyData[i] if (!TextUtils.equals(keyWord, searchBook.name)) { - copyDataS.add(i, temp) + mList.add(i, temp) break } } } else if (TextUtils.equals(keyWord, temp.author)) { - for (i in copyDataS.indices) { - val searchBook = copyDataS[i] + for (i in copyData.indices) { + val searchBook = copyData[i] if (!TextUtils.equals(keyWord, searchBook.name) && !TextUtils.equals(keyWord, searchBook.author) ) { - copyDataS.add(i, temp) + mList.add(i, temp) break } } } else { - copyDataS.add(temp) + mList.add(temp) } } } - mList = copyDataS - upAdapter() + if (!isStop) + upAdapter() } } @@ -385,7 +387,7 @@ class SearchAdapter( if (System.currentTimeMillis() >= postTime + 500) { handler.removeCallbacks(sendRunnable) postTime = System.currentTimeMillis() - setItems(mList) + setItems(ArrayList(mList)) } else { handler.removeCallbacks(sendRunnable) handler.postDelayed(sendRunnable, 500 - System.currentTimeMillis() + postTime) diff --git a/app/version_code.properties b/app/version_code.properties index a50cefc..64df2c5 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -17,5 +17,5 @@ # #Fri Jun 18 21:45:31 CST 2021 -VERSION_CODE=245 +VERSION_CODE=246 CREATE_RELEASE=true \ No newline at end of file diff --git a/build.gradle b/build.gradle index e372b7b..bc8b29f 100644 --- a/build.gradle +++ b/build.gradle @@ -28,12 +28,19 @@ buildscript { maven { url 'https://s3.amazonaws.com/fabric-artifacts/public' } maven { url 'https://plugins.gradle.org/m2/' } maven { url "https://maven.java.net/content/groups/public/" } + maven { url 'https://jitpack.io' } } dependencies { classpath 'com.android.tools.build:gradle:4.1.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' + + classpath 'com.github.megatronking.stringfog:gradle-plugin:3.0.0' + // 选用加解密算法库,默认实现了xor算法,也可以使用自己的加解密库。 + classpath 'com.github.megatronking.stringfog:xor:3.0.0' + + classpath "com.github.CodingGay:BlackObfuscator-ASPlugin:3.7" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/dynamic/src/main/java/xyz/fycz/dynamic/AppLoadImpl.kt b/dynamic/src/main/java/xyz/fycz/dynamic/AppLoadImpl.kt index b3d299c..69f485a 100644 --- a/dynamic/src/main/java/xyz/fycz/dynamic/AppLoadImpl.kt +++ b/dynamic/src/main/java/xyz/fycz/dynamic/AppLoadImpl.kt @@ -26,10 +26,7 @@ import com.kongzue.dialogx.dialogs.BottomDialog import me.fycz.maple.MapleBridge import me.fycz.maple.MapleUtils import me.fycz.maple.MethodHook -import xyz.fycz.dynamic.fix.App243Fix -import xyz.fycz.dynamic.fix.App244Fix -import xyz.fycz.dynamic.fix.App244Fix2 -import xyz.fycz.dynamic.fix.AppFix +import xyz.fycz.dynamic.fix.* import xyz.fycz.myreader.application.App import xyz.fycz.myreader.ui.activity.MainActivity @@ -49,6 +46,7 @@ class AppLoadImpl : IAppLoader { App243Fix::class.java, App244Fix::class.java, App244Fix2::class.java, + App245Fix::class.java, ) override fun onLoad(appParam: AppParam) { diff --git a/dynamic/src/main/java/xyz/fycz/dynamic/fix/App245Fix.kt b/dynamic/src/main/java/xyz/fycz/dynamic/fix/App245Fix.kt new file mode 100644 index 0000000..16b986f --- /dev/null +++ b/dynamic/src/main/java/xyz/fycz/dynamic/fix/App245Fix.kt @@ -0,0 +1,81 @@ +/* + * This file is part of FYReader. + * FYReader is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FYReader is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FYReader. If not, see . + * + * Copyright (C) 2020 - 2022 fengyuecanzhu + */ + +package xyz.fycz.dynamic.fix + +import me.fycz.maple.MapleBridge +import me.fycz.maple.MapleUtils +import me.fycz.maple.MethodReplacement +import xyz.fycz.myreader.application.App +import xyz.fycz.myreader.model.user.UserService +import xyz.fycz.myreader.util.AppInfoUtils +import xyz.fycz.myreader.util.utils.EncoderUtils + +/** + * @author fengyue + * @date 2022/5/23 18:20 + */ +@AppFix([243, 244, 245], ["修改用户服务验证机制(beta)"], "2022-05-23") +class App245Fix : AppFixHandle { + + override fun onFix(key: String): BooleanArray { + val result = try { + fixMakeAuth() + true + } catch (e: Exception) { + MapleUtils.log(e) + false + } + fixResult(key, "makeAuth", result) + return booleanArrayOf(result) + } + + private fun fixMakeAuth() { + MapleUtils.findAndHookMethod( + UserService::class.java, + "makeAuth", + object : MethodReplacement() { + override fun replaceHookedMethod(param: MapleBridge.MethodHookParam): Any { + return makeAuth() + } + } + ) + } + + fun makeAuth(): String { + var auth = "signal=" + AppInfoUtils.getSingInfo( + App.getmContext(), + App.getApplication().packageName, + AppInfoUtils.SHA1 + ) + "&appVersion=" + App.getVersionCode() + auth = try { + EncoderUtils.encryptAES2Base64( + auth.toByteArray(), DO_FILTER_KEY, + "AES/ECB/PKCS5Padding" + )?.let { String(it) }.toString() + } catch (e: Exception) { + "" + } + return "&auth=$auth" + + "&deviceId=" + UserService.getUUID() + + "&isDebug=" + App.isDebug() + } + + val DO_FILTER_KEY = "79qdunN8534y44T3".toByteArray() + +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 896738c..7c5b224 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,3 +19,4 @@ include ':app' include ':DialogX' include ':dynamic' +include ':user'