diff --git a/.gitignore b/.gitignore
index 700c700fe..1431028b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,6 @@
/tmp
node_modules/
/app/app
+/app/coolApk
/app/google
-/app/gradle.properties
package-lock.json
diff --git a/app/build.gradle b/app/build.gradle
index 26acce2d3..a14855f22 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,7 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'de.timfreiheit.resourceplaceholders'
-apply plugin: 'io.fabric'
+//apply plugin: 'io.fabric'
androidExtensions {
experimental = true
@@ -33,8 +33,9 @@ android {
}
}
defaultConfig {
- applicationId "io.legado.app"
- minSdkVersion 21
+ applicationId "io.legado.application"
+ //minSdkVersion 21
+ minSdkVersion 28
targetSdkVersion 29
versionCode gitCommits
versionName version
@@ -56,7 +57,7 @@ android {
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.myConfig
}
- applicationIdSuffix '.release'
+ //applicationIdSuffix '.release'
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
@@ -76,15 +77,20 @@ android {
}
}
productFlavors {
- app {
+ app { //书架
dimension "version"
manifestPlaceholders = [APP_CHANNEL_VALUE: "app"]
}
google {
dimension "version"
- applicationId "io.legado.play"
+ applicationId "io.legado.celeter"
manifestPlaceholders = [APP_CHANNEL_VALUE: "google"]
}
+ coolApk { //整理
+ dimension "version"
+ applicationId "io.legado.google"
+ manifestPlaceholders = [APP_CHANNEL_VALUE: "coolApk"]
+ }
}
compileOptions {
// Flag to enable support for the new language APIs
@@ -110,7 +116,7 @@ kapt {
}
dependencies {
- coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test:runner:1.2.0'
@@ -120,8 +126,9 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
//fireBase
- implementation 'com.google.firebase:firebase-core:17.4.4'
- implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
+ //implementation 'com.google.firebase:firebase-core:17.4.4'
+ //implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
+ implementation 'androidx.documentfile:documentfile:1.0.1'
//androidX
implementation 'androidx.core:core-ktx:1.3.1'
@@ -207,4 +214,4 @@ dependencies {
//implementation 'fadeapp.widgets:scrollless-recyclerView:1.0.2'
}
-apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
+//apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index db69e078b..89fdcf69f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -194,7 +194,7 @@
+ android:scheme="legado" />
@@ -209,7 +209,7 @@
+ android:scheme="legado" />
@@ -224,7 +224,7 @@
+ android:scheme="legado" />
diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md
index d8ce22ea8..b7c947857 100644
--- a/app/src/main/assets/updateLog.md
+++ b/app/src/main/assets/updateLog.md
@@ -1,7 +1,4 @@
## 更新日志
-* 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。
-* 请关注公众号[开源阅读]()支持我,同时关注合作公众号[小说拾遗](),阅读公众号小编。
-* 新公众号[开源阅读]()已启用,[开源阅读软件]()备用
**2020/07/30**
* 所有版本都加上书源屏蔽列表,有其它想法的可以自己编译软件,反正是开源的
@@ -212,14 +209,15 @@
**2020/04/13**
* 去除rss朗读时的引号
-
-**2020/04/13**
* 修复调用webView返回结果多了引号的bug
**2020/04/12**
* 解决无法取消加粗的bug
* 修复换源自动加入书架的bug
+**2020/04/11**
+* 列表及预加载规则以外的地方使用`VS`可查看源码,例:`tag.div@VS`
+
**2020/04/09**
* 修复书架刷新闪烁
diff --git a/app/src/main/java/io/legado/app/constant/AppConst.kt b/app/src/main/java/io/legado/app/constant/AppConst.kt
index 10ffccd1f..797450c92 100644
--- a/app/src/main/java/io/legado/app/constant/AppConst.kt
+++ b/app/src/main/java/io/legado/app/constant/AppConst.kt
@@ -20,7 +20,7 @@ object AppConst {
const val UA_NAME = "User-Agent"
val userAgent: String by lazy {
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.5167.89 Safari/537.36 Edg/86.0.522.88"
}
val SCRIPT_ENGINE: ScriptEngine by lazy {
@@ -41,9 +41,8 @@ object AppConst {
val keyboardToolChars: List by lazy {
arrayListOf(
- "※", "@", "&", "|", "%", "/", ":", "[", "]", "{", "}", "<", ">", "\\",
- "$", "#", "!", ".", "href", "src", "textNodes", "xpath", "json", "css",
- "id", "class", "tag"
+ "※", "@css:", "", "&&", "||", "%%", "/", ":", "[]", "{}", "$.",
+ "VS", "all", "ownText", "href", "src", "textNodes"
)
}
diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt
index 396edb73d..bf1dcc27e 100644
--- a/app/src/main/java/io/legado/app/constant/AppPattern.kt
+++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt
@@ -6,5 +6,5 @@ object AppPattern {
val JS_PATTERN: Pattern = Pattern.compile("([\\w\\W]*?|@js:[\\w\\W]*$)", Pattern.CASE_INSENSITIVE)
val EXP_PATTERN: Pattern = Pattern.compile("\\{\\{([\\w\\W]*?)\\}\\}")
- val authorRegex = "作\\s*者\\s*[::]".toRegex()
+ val authorRegex = "作\\s*者\\s*[::]\\s*".toRegex()
}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt
index 7a643b940..a03c7403d 100644
--- a/app/src/main/java/io/legado/app/help/BookHelp.kt
+++ b/app/src/main/java/io/legado/app/help/BookHelp.kt
@@ -112,7 +112,7 @@ object BookHelp {
fun formatAuthor(author: String?): String {
return author
- ?.replace("作\\s*者\\s*[::]\n*".toRegex(), "")
+ ?.replace("作\\s*者\\s*[::]\\s*".toRegex(), "")
?.replace("\\s+".toRegex(), " ")
?.trim { it <= ' ' }
?: ""
diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt
index d12fc07ea..685e04bf7 100644
--- a/app/src/main/java/io/legado/app/help/JsExtensions.kt
+++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt
@@ -30,14 +30,18 @@ interface JsExtensions {
* js实现解码,不能删
*/
fun base64Decode(str: String): String {
- return EncoderUtils.base64Decode(str)
+ return EncoderUtils.base64Decode(str, Base64.NO_WRAP)
+ }
+
+ fun base64Decode(str: String, flags: Int): String {
+ return EncoderUtils.base64Decode(str, flags)
}
fun base64Encode(str: String): String? {
- return EncoderUtils.base64Encode(str)
+ return EncoderUtils.base64Encode(str, Base64.NO_WRAP)
}
- fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? {
+ fun base64Encode(str: String, flags: Int): String? {
return EncoderUtils.base64Encode(str, flags)
}
diff --git a/app/src/main/java/io/legado/app/help/SourceHelp.kt b/app/src/main/java/io/legado/app/help/SourceHelp.kt
index ebeb30d02..b7bd83d99 100644
--- a/app/src/main/java/io/legado/app/help/SourceHelp.kt
+++ b/app/src/main/java/io/legado/app/help/SourceHelp.kt
@@ -5,8 +5,8 @@ import android.os.Looper
import io.legado.app.App
import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.RssSource
-import io.legado.app.utils.EncoderUtils
-import io.legado.app.utils.NetworkUtils
+//import io.legado.app.utils.EncoderUtils
+//import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.splitNotBlank
import org.jetbrains.anko.toast
@@ -47,20 +47,20 @@ object SourceHelp {
}
private fun is18Plus(url: String?): Boolean {
- url ?: return false
- val baseUrl = NetworkUtils.getBaseUrl(url)
- baseUrl ?: return false
- if (AppConfig.isGooglePlay) return false
- try {
- val host = baseUrl.split("//", ".")
- val base64Url = EncoderUtils.base64Encode("${host[host.lastIndex - 1]}.${host.last()}")
- list18Plus.forEach {
- if (base64Url == it) {
- return true
- }
- }
- } catch (e: Exception) {
- }
+// url ?: return false
+// val baseUrl = NetworkUtils.getBaseUrl(url)
+// baseUrl ?: return false
+// if (AppConfig.isGooglePlay) return false
+// try {
+// val host = baseUrl.split("//", ".")
+// val base64Url = EncoderUtils.base64Encode("${host[host.lastIndex - 1]}.${host.last()}")
+// list18Plus.forEach {
+// if (base64Url == it) {
+// return true
+// }
+// }
+// } catch (e: Exception) {
+// }
return false
}
diff --git a/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt b/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt
index a12816486..0d4e6ce9f 100644
--- a/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt
+++ b/app/src/main/java/io/legado/app/help/http/AjaxWebView.kt
@@ -80,7 +80,7 @@ class AjaxWebView {
}
fun load(params: AjaxParams) {
- if (params.sourceRegex != "") {
+ if (!params.sourceRegex.isNullOrEmpty()) {
mHandler.obtainMessage(MSG_SNIFF_START, params)
.sendToTarget()
} else {
@@ -158,7 +158,7 @@ class AjaxWebView {
mWebView.get()?.evaluateJavascript(mJavaScript) {
if (it.isNotEmpty() && it != "null") {
val content = StringEscapeUtils.unescapeJson(it)
- .replace("^\"|\"$".toRegex(), "")
+ .replace("^\"|\"$".toRegex(), "") // ʱֶȡ
handler.obtainMessage(MSG_SUCCESS, Res(url, content))
.sendToTarget()
handler.removeCallbacks(this)
diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt
index bf00f0d43..e219a82c6 100644
--- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt
+++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeByJSoup.kt
@@ -383,6 +383,7 @@ class AnalyzeByJSoup {
textS.add(html)
}
"all" -> textS.add(elements.outerHtml())
+ "VS" -> textS.add("view-source:\n" + elements.outerHtml())
else -> for (element in elements) {
val url = element.attr(lastRule)
if (!isEmpty(url) && !textS.contains(url)) {
diff --git a/app/src/main/java/io/legado/app/model/rss/RssParser.kt b/app/src/main/java/io/legado/app/model/rss/RssParser.kt
index 09cd756bb..e6667164e 100644
--- a/app/src/main/java/io/legado/app/model/rss/RssParser.kt
+++ b/app/src/main/java/io/legado/app/model/rss/RssParser.kt
@@ -117,11 +117,11 @@ object RssParser {
private fun getImageUrl(input: String): String? {
var url: String? = null
- val patternImg = "(
)".toPattern()
+ val patternImg = "(
]*>)".toPattern()
val matcherImg = patternImg.matcher(input)
if (matcherImg.find()) {
val imgTag = matcherImg.group(1)
- val patternLink = "src\\s*=\\s*\"(.+?)\"".toPattern()
+ val patternLink = "src\\s*=\\s*\"([^\"]+)\"".toPattern()
val matcherLink = patternLink.matcher(imgTag!!)
if (matcherLink.find()) {
url = matcherLink.group(1)!!.trim()
diff --git a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt
index 9e5336b62..c6b40fbc4 100644
--- a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt
+++ b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt
@@ -132,7 +132,13 @@ object BookContent {
}
Debug.log(bookSource.bookSourceUrl, "└" + nextUrlList.joinToString(","), printLog)
}
- val content = analyzeRule.getString(contentRule.content)
+ val content = analyzeRule.getString(contentRule.content).let {
+ if (it.startsWith("view-source:\n")) {
+ it
+ } else {
+ ("\n" + it).htmlFormat()
+ }
+ }
return ContentData(content, nextUrlList)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/model/webBook/BookInfo.kt b/app/src/main/java/io/legado/app/model/webBook/BookInfo.kt
index 70c1a92be..dd61ea279 100644
--- a/app/src/main/java/io/legado/app/model/webBook/BookInfo.kt
+++ b/app/src/main/java/io/legado/app/model/webBook/BookInfo.kt
@@ -61,9 +61,14 @@ object BookInfo {
Debug.log(bookSource.bookSourceUrl, "└${book.latestChapterTitle}")
Debug.log(bookSource.bookSourceUrl, "┌获取简介")
analyzeRule.getString(infoRule.intro).let {
- if (it.isNotEmpty()) book.intro = it.htmlFormat()
+ if (it.isNotEmpty())
+ book.intro = if (it.startsWith("view-source:\n")) {
+ it
+ } else {
+ ("\n" + it).htmlFormat()
+ }
}
- Debug.log(bookSource.bookSourceUrl, "└${book.intro}", isHtml = true)
+ Debug.log(bookSource.bookSourceUrl, "└${book.intro}")
Debug.log(bookSource.bookSourceUrl, "┌获取封面链接")
analyzeRule.getString(infoRule.coverUrl).let {
diff --git a/app/src/main/java/io/legado/app/model/webBook/BookList.kt b/app/src/main/java/io/legado/app/model/webBook/BookList.kt
index 162db6dd0..533357fd9 100644
--- a/app/src/main/java/io/legado/app/model/webBook/BookList.kt
+++ b/app/src/main/java/io/legado/app/model/webBook/BookList.kt
@@ -145,8 +145,9 @@ object BookList {
Debug.log(bookSource.bookSourceUrl, "└${searchBook.latestChapterTitle}")
if (!scope.isActive) throw CancellationException()
Debug.log(bookSource.bookSourceUrl, "┌获取简介")
- searchBook.intro = analyzeRule.getString(intro)
- Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", true)
+ val introStr = analyzeRule.getString(intro)
+ searchBook.intro = introStr
+ Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", isHtml = !introStr.startsWith("view-source:\n"))
if (!scope.isActive) throw CancellationException()
Debug.log(bookSource.bookSourceUrl, "┌获取封面链接")
searchBook.coverUrl = analyzeRule.getString(coverUrl, true)
@@ -204,8 +205,9 @@ object BookList {
Debug.log(bookSource.bookSourceUrl, "└${searchBook.latestChapterTitle}", log)
if (!scope.isActive) throw CancellationException()
Debug.log(bookSource.bookSourceUrl, "┌获取简介", log)
- searchBook.intro = analyzeRule.getString(ruleIntro)
- Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", log, true)
+ val introStr = analyzeRule.getString(ruleIntro)
+ searchBook.intro = introStr
+ Debug.log(bookSource.bookSourceUrl, "└${searchBook.intro}", log, isHtml = !introStr.startsWith("view-source:\n"))
if (!scope.isActive) throw CancellationException()
Debug.log(bookSource.bookSourceUrl, "┌获取封面链接", log)
analyzeRule.getString(ruleCoverUrl).let {
diff --git a/app/src/main/java/io/legado/app/ui/book/download/DownloadViewModel.kt b/app/src/main/java/io/legado/app/ui/book/download/DownloadViewModel.kt
index e5886d100..ab9d60856 100644
--- a/app/src/main/java/io/legado/app/ui/book/download/DownloadViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/book/download/DownloadViewModel.kt
@@ -36,12 +36,12 @@ class DownloadViewModel(application: Application) : BaseViewModel(application) {
}
private fun export(doc: DocumentFile, book: Book) {
- DocumentUtils.createFileIfNotExist(doc, "${book.name}.txt")
+ DocumentUtils.createFileIfNotExist(doc, "${book.name}_作者:${book.author}.txt")
?.writeText(context, getAllContents(book))
}
private fun export(file: File, book: Book) {
- FileUtils.createFileIfNotExist(file, "${book.name}.txt")
+ FileUtils.createFileIfNotExist(file, "${book.name}_作者:${book.author}.txt")
.writeText(getAllContents(book))
}
@@ -52,10 +52,11 @@ class DownloadViewModel(application: Application) : BaseViewModel(application) {
.append(context.getString(R.string.author_show, book.author))
App.db.bookChapterDao().getChapterList(book.bookUrl).forEach { chapter ->
BookHelp.getContent(book, chapter).let {
- stringBuilder.append("\n\n")
- .append(chapter.title)
- .append("\n")
- .append(it)
+ if (!it.isNullOrEmpty())
+ stringBuilder.append("\n\n")
+ .append(chapter.title)
+ .append("\n")
+ .append(it)
}
}
return stringBuilder.toString()
diff --git a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt
index 4f897c791..06a876c3e 100644
--- a/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/config/FileAssociationViewModel.kt
@@ -62,15 +62,15 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
}
// content模式下,需要传递完整的路径,方便后续解析
url = if (uri.scheme == "content") {
- "yuedu://${scheme}/importonline?src=$uri"
+ "legado://${scheme}/importonline?src=$uri"
} else {
- "yuedu://${scheme}/importonline?src=${uri.path}"
+ "legado://${scheme}/importonline?src=${uri.path}"
}
} else if (uri.scheme == "yuedu") {
url = uri.toString()
} else {
- url = "yuedu://booksource/importonline?src=${uri.path}"
+ url = "legado://booksource/importonline?src=${uri.path}"
}
val data = Uri.parse(url)
val newIndent = Intent(Intent.ACTION_VIEW)
diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt
index 56b6e5715..4731af989 100644
--- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt
@@ -96,7 +96,9 @@ class MainActivity : VMBaseActivity(R.layout.activity_main),
putPrefInt(PreferKey.versionCode, App.INSTANCE.versionCode)
if (!BuildConfig.DEBUG) {
val log = String(assets.open("updateLog.md").readBytes())
- TextDialog.show(supportFragmentManager, log, TextDialog.MD, 5000, true)
+ // 5s后自动关闭日志
+ // TextDialog.show(supportFragmentManager, log, TextDialog.MD, 5000, true)
+ TextDialog.show(supportFragmentManager, log, TextDialog.MD, 0)
}
}
}
diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt
index e11293cc4..d3fbecad1 100644
--- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt
@@ -169,6 +169,7 @@ class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_r
url
)//不想用baseUrl进else
} else {
+ //webView.loadData(html, "text/html;charset=utf-8", "utf-8")//经测试可以解决中文乱码
web_view.loadDataWithBaseURL(
null,
html,
diff --git a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt
index 406aa3815..55d5b2855 100644
--- a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt
+++ b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt
@@ -25,8 +25,8 @@ object EncoderUtils {
return tmp.toString()
}
- fun base64Decode(str: String): String {
- val bytes = Base64.decode(str, Base64.DEFAULT)
+ fun base64Decode(str: String, flags: Int): String {
+ val bytes = Base64.decode(str, flags)
return try {
String(bytes, StandardCharsets.UTF_8)
} catch (e: Exception) {
@@ -34,7 +34,7 @@ object EncoderUtils {
}
}
- fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? {
+ fun base64Encode(str: String, flags: Int): String? {
return Base64.encodeToString(str.toByteArray(), flags)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_image.xml b/app/src/main/res/color/selector_image.xml
index edbef31f6..6cca99e22 100644
--- a/app/src/main/res/color/selector_image.xml
+++ b/app/src/main/res/color/selector_image.xml
@@ -4,4 +4,10 @@
+
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 1ebe0fe81..e1e22e7e1 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -1,6 +1,6 @@
- 閲讀
+ 源書架
閲讀·搜尋
閲讀需要訪問存儲卡權限,請前往「設定」—「應用程式權限」—開啟所需要的權限
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a600cb802..ee3f04274 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1,6 +1,6 @@
- 閱讀
+ 源書架
閱讀·搜尋
閱讀需要存取記憶卡權限,請前往“設定”—“應用權限”—打開所需權限
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 9a45c4903..7c24d47e2 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -1,6 +1,6 @@
- 阅读
+ 源书架
阅读·搜索
阅读需要访问存储卡权限,请前往“设置”—“应用权限”—打开所需权限
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 810277b59..431bb2d2e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,6 +1,6 @@
- Legado
+ BookSource
Legado·search
Legado needs storage access to find and read books. please go "App Settings" to allow "Storage permission".
diff --git a/app/src/main/res/xml/about.xml b/app/src/main/res/xml/about.xml
index 89bc507eb..c27e142fe 100644
--- a/app/src/main/res/xml/about.xml
+++ b/app/src/main/res/xml/about.xml
@@ -2,11 +2,11 @@
-
+ app:iconSpaceReserved="false" /-->
-
+ app:iconSpaceReserved="false" /-->
-
+ app:iconSpaceReserved="false" /-->