From 814fee226da2bf7a83c720a6ff3bf28d835f546b Mon Sep 17 00:00:00 2001 From: gedoor Date: Sun, 15 Nov 2020 20:02:32 +0800 Subject: [PATCH 01/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/App.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index db6b657f4..d6849f488 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -34,8 +34,6 @@ class App : MultiDexApplication() { lateinit var androidId: String var versionCode = 0 var versionName = "" - - } override fun onCreate() { From bfe8b6800471de90bee7bd0485fd71280b463cda Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 08:25:41 +0800 Subject: [PATCH 02/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/analyzeRule/QueryTTF.kt | 87 +++++++++++-------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt index 8a1e91493..340ae60a5 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt @@ -3,12 +3,13 @@ package io.legado.app.model.analyzeRule import io.legado.app.help.JsExtensions import kotlin.experimental.and -@ExperimentalUnsignedTypes /** * 解析TTF字体 * @see 获取详情 * @see 基于Javascript的TTF解析器 */ +@Suppress("unused", "RedundantExplicitType", "MemberVisibilityCanBePrivate") +@ExperimentalUnsignedTypes class QueryTTF(var font: ByteArray) : JsExtensions { data class Index(var num: Int) @@ -33,7 +34,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { var format: UShort = 0u var count: UShort = 0u var stringOffset: UShort = 0u - var Records = ArrayList() + var records = ArrayList() } class NameRecord { @@ -136,9 +137,9 @@ class QueryTTF(var font: ByteArray) : JsExtensions { lateinit var yCoordinates: Array } - var Header = FileHeader() + var header = FileHeader() - var Tables = mutableMapOf() + var tables = mutableMapOf() var name = NameTable() @@ -165,7 +166,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { } // 索引变量 - var index = 0 + private var index = 0 // 从索引index开始拷贝指定长度的数组 private fun ByteArray.copyOfIndex(length: Int): ByteArray { @@ -182,26 +183,26 @@ class QueryTTF(var font: ByteArray) : JsExtensions { init { // 解析文件头 - Header = FileHeader() + header = FileHeader() // 跳过不需要的数据条目 index = 4 - Header.numOfTables = byteArrToUintx(font.copyOfIndex(2)).toUShort() + header.numOfTables = byteArrToUintx(font.copyOfIndex(2)).toUShort() // 获取数据表 index = 12 - for (i in 0 until Header.numOfTables.toInt()) { + for (i in 0 until header.numOfTables.toInt()) { val table = TableDirectory() table.tag = font.copyOfIndex(4).toString(Charsets.US_ASCII) table.checkSum = byteArrToUintx(font.copyOfIndex(4)).toUInt() table.offset = byteArrToUintx(font.copyOfIndex(4)).toUInt() table.length = byteArrToUintx(font.copyOfIndex(4)).toUInt() table.data = font.copyOfIndex(table.offset.toInt(), table.length.toInt()) - Tables[table.tag] = table + tables[table.tag] = table } // 解析表 name (字体信息,包含版权、名称、作者等...) run { - val data = Tables["name"]!!.data + val data = tables["name"]!!.data index = 0 name.format = byteArrToUintx(data.copyOfIndex(2)).toUShort() name.count = byteArrToUintx(data.copyOfIndex(2)).toUShort() @@ -215,14 +216,17 @@ class QueryTTF(var font: ByteArray) : JsExtensions { record.nameID = byteArrToUintx(data.copyOfIndex(2)).toUShort() record.length = byteArrToUintx(data.copyOfIndex(2)).toUShort() record.offset = byteArrToUintx(data.copyOfIndex(2)).toUShort() - record.nameBuffer = data.copyOfIndex((name.stringOffset + record.offset).toInt(), record.length.toInt()) - name.Records.add(record) + record.nameBuffer = data.copyOfIndex( + (name.stringOffset + record.offset).toInt(), + record.length.toInt() + ) + name.records.add(record) } } // 解析表 head (获取 head.indexToLocFormat) run { - val data = Tables["head"]!!.data + val data = tables["head"]!!.data index = 0 head.majorVersion = byteArrToUintx(data.copyOfIndex(2)).toUShort() head.minorVersion = byteArrToUintx(data.copyOfIndex(2)).toUShort() @@ -246,8 +250,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { // 解析表 maxp (获取 maxp.numGlyphs) run { - val data = Tables["maxp"]!!.data - index = 0 + val data = tables["maxp"]!!.data index = 0 maxp.majorVersion = byteArrToUintx(data.copyOfIndex(2)).toUShort() maxp.minorVersion = byteArrToUintx(data.copyOfIndex(2)).toUShort() @@ -269,7 +272,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { // 解析表 loca (轮廓数据偏移地址表) run { - val data = Tables["maxp"]!!.data + val data = tables["maxp"]!!.data val offset = if (head.indexToLocFormat.equals(0)) 2 else 4 index = 0 while (index < data.size) { @@ -280,7 +283,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { // 解析表 cmap (Unicode编码轮廓索引对照表) run { - val data = Tables["cmap"]!!.data + val data = tables["cmap"]!!.data index = 0 cmap.version = byteArrToUintx(data.copyOfIndex(2)).toUShort() cmap.numTables = byteArrToUintx(data.copyOfIndex(2)).toUShort() @@ -291,7 +294,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { record.encodingID = byteArrToUintx(data.copyOfIndex(2)).toUShort() record.offset = byteArrToUintx(data.copyOfIndex(4)).toUInt() cmap.records.add(record) - val tmpIndex = index; // 缓存索引 + val tmpIndex = index // 缓存索引 index = record.offset.toInt() val fmt = byteArrToUintx(data.copyOfIndex(2)).toUShort() @@ -336,13 +339,13 @@ class QueryTTF(var font: ByteArray) : JsExtensions { } cmap.tables[fmt.toInt()] = ft } - index = tmpIndex; // 读取缓存的索引 + index = tmpIndex // 读取缓存的索引 } } // 解析表 glyf (字体轮廓数据表) run { - val data = Tables["glyf"]!!.data + val data = tables["glyf"]!!.data for (i in 0 until maxp.numGlyphs.toInt()) { index = loca[i].toInt() val numberOfContours = byteArrToUintx(data.copyOfIndex(2)).toShort() @@ -359,9 +362,11 @@ class QueryTTF(var font: ByteArray) : JsExtensions { g.yMax = yMax g.endPtsOfContours = IntArray(numberOfContours.toInt()) for (n in 0 until numberOfContours) { - g.endPtsOfContours[n] = byteArrToUintx(data.copyOfIndex(2)).toInt(); // 这里数据源为UShort + g.endPtsOfContours[n] = + byteArrToUintx(data.copyOfIndex(2)).toInt() // 这里数据源为UShort } - g.instructionLength = byteArrToUintx(data.copyOfIndex(2)).toInt(); // 这里数据源为UShort + g.instructionLength = + byteArrToUintx(data.copyOfIndex(2)).toInt() // 这里数据源为UShort g.instructions = data.copyOfIndex(g.instructionLength) val flagLength = g.endPtsOfContours.last() + 1 g.flags = ByteArray(flagLength) @@ -384,7 +389,8 @@ class QueryTTF(var font: ByteArray) : JsExtensions { val xByte = !(g.flags[n] and 0x02).equals(0) val xSame = !(g.flags[n] and 0x10).equals(0) if (xByte) { - g.xCoordinates[n] = ((if (xSame) 1 else -1) * data.copyOfIndex(1).first()).toShort() + g.xCoordinates[n] = + ((if (xSame) 1 else -1) * data.copyOfIndex(1).first()).toShort() } else { if (xSame) g.xCoordinates[n] = 0 else { @@ -398,7 +404,8 @@ class QueryTTF(var font: ByteArray) : JsExtensions { val yByte = !(g.flags[n] and 0x04).equals(0) val ySame = !(g.flags[n] and 0x20).equals(0) if (yByte) { - g.yCoordinates[n] = ((if (ySame) 1 else -1) * data.copyOfIndex(1).first()).toShort() + g.yCoordinates[n] = + ((if (ySame) 1 else -1) * data.copyOfIndex(1).first()).toShort() } else { if (ySame) g.yCoordinates[n] = 0 else { @@ -427,8 +434,8 @@ class QueryTTF(var font: ByteArray) : JsExtensions { * 获取字体信息(默认获取字体名称) * @see 获取详情 */ - fun GetName(nameID: Int = 1): String { - for (record in name.Records) { + fun getName(nameID: Int = 1): String { + for (record in name.records) { if (!record.nameID.equals(nameID)) continue if (record.platformID.equals(1) && record.encodingID.equals(0)) { return record.nameBuffer.toString(Charsets.UTF_8) @@ -440,10 +447,10 @@ class QueryTTF(var font: ByteArray) : JsExtensions { } /** - * 获取字体轮廓 (fontCode:十进制Unicode字符编码) - */ - fun GetGlyf(fontCode: Int): ArrayList { - var fontIndex = -1; // 轮廓索引 + * 获取字体轮廓 (fontCode:十进制Unicode字符编码) + */ + fun getGlyf(fontCode: Int): ArrayList { + var fontIndex = -1 // 轮廓索引 val fmt4 = cmap.tables.getOrDefault(4, null) if (fmt4 != null) { val fmt = (fmt4 as Format4) @@ -454,14 +461,18 @@ class QueryTTF(var font: ByteArray) : JsExtensions { break } } - if (fontIndex == -1) fontIndex = 0 - else if (fontCode < fmt.startCode[fontIndex]) fontIndex = 0 - else { - if (fmt.idRangeOffset[fontIndex] != 0) { - fontIndex = - fmt.glyphIdArray[fontCode - fmt.startCode[fontIndex] + fmt.idRangeOffset[fontIndex].ushr(1) - (fmt.idRangeOffset.size - fontIndex)].toInt() - } else fontIndex = fontCode + fmt.idDelta[fontIndex] - fontIndex = fontIndex and 0xFFFF + when { + fontIndex == -1 -> fontIndex = 0 + fontCode < fmt.startCode[fontIndex] -> fontIndex = 0 + else -> { + fontIndex = if (fmt.idRangeOffset[fontIndex] != 0) { + val i = (fontCode - fmt.startCode[fontIndex] + + fmt.idRangeOffset[fontIndex].ushr(1) + - (fmt.idRangeOffset.size - fontIndex)) + fmt.glyphIdArray[i].toInt() + } else fontCode + fmt.idDelta[fontIndex] + fontIndex = fontIndex and 0xFFFF + } } } else { val fmt0 = cmap.tables.getOrDefault(0, null) From e82fabc2a5d4382eace08e8bf4574c210b7a990f Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 10:39:53 +0800 Subject: [PATCH 03/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/cache/CacheViewModel.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt index 86e57fb68..1940218f5 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt @@ -92,13 +92,10 @@ class CacheViewModel(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 { content -> - val content1 = content?.let { - contentProcessor.getContent(book, chapter.title, it, false) - .joinToString("\n") - } + val content1 = contentProcessor + .getContent(book, chapter.title, content ?: "", false) + .joinToString("\n") stringBuilder.append("\n\n") - .append(chapter.title) - .append("\n") .append(content1) } } From e50d7a4847667022fdee526cf6362be96199d26c Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 15:09:34 +0800 Subject: [PATCH 04/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/webBook/BookContent.kt | 10 ++++++++++ .../main/java/io/legado/app/model/webBook/WebBook.kt | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) 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 4285b4a2e..a47f9a5a8 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 @@ -10,8 +10,10 @@ import io.legado.app.help.BookHelp import io.legado.app.model.Debug import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeUrl +import io.legado.app.model.analyzeRule.QueryTTF import io.legado.app.utils.NetworkUtils import io.legado.app.utils.htmlFormat +import io.legado.app.utils.toStringArray import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.withContext @@ -34,11 +36,13 @@ object BookContent { val content = StringBuilder() val nextUrlList = arrayListOf(baseUrl) val contentRule = bookSource.getContentRule() + var queryTTF: QueryTTF? = null contentRule.font?.let { //todo 获取字体 val analyzeRule = AnalyzeRule(book) analyzeRule.setContent(body).setBaseUrl(baseUrl) analyzeRule.getByteArray(it)?.let { font -> + queryTTF = QueryTTF(font) BookHelp.saveFont(book, bookChapter, font) } } @@ -110,6 +114,12 @@ object BookContent { Debug.log(bookSource.bookSourceUrl, "└${bookChapter.title}") Debug.log(bookSource.bookSourceUrl, "┌获取正文内容") Debug.log(bookSource.bookSourceUrl, "└\n$contentStr") + queryTTF?.let { + contentStr.toStringArray().forEach { str -> + val fontData = it.getGlyf(str.toInt()) + + } + } if (contentStr.isNotBlank()) { BookHelp.saveContent(book, bookChapter, contentStr) } diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index c9923b776..a2d487113 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -111,7 +111,7 @@ class WebBook(val bookSource: BookSource) { headerMapF = bookSource.getHeaderMap(), book = book ).getResponseAwait(bookSource.bookSourceUrl) - BookInfo.analyzeBookInfo(book, res.body, bookSource, res.url, canReName) + BookInfo.analyzeBookInfo(book, res.body, bookSource, book.bookUrl, canReName) } book } From f8507a8ea5ce9cea8bd6df75a70b98a07806ff5a Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 19:17:45 +0800 Subject: [PATCH 05/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/webBook/BookContent.kt | 10 ---------- 1 file changed, 10 deletions(-) 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 a47f9a5a8..4285b4a2e 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 @@ -10,10 +10,8 @@ import io.legado.app.help.BookHelp import io.legado.app.model.Debug import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeUrl -import io.legado.app.model.analyzeRule.QueryTTF import io.legado.app.utils.NetworkUtils import io.legado.app.utils.htmlFormat -import io.legado.app.utils.toStringArray import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.withContext @@ -36,13 +34,11 @@ object BookContent { val content = StringBuilder() val nextUrlList = arrayListOf(baseUrl) val contentRule = bookSource.getContentRule() - var queryTTF: QueryTTF? = null contentRule.font?.let { //todo 获取字体 val analyzeRule = AnalyzeRule(book) analyzeRule.setContent(body).setBaseUrl(baseUrl) analyzeRule.getByteArray(it)?.let { font -> - queryTTF = QueryTTF(font) BookHelp.saveFont(book, bookChapter, font) } } @@ -114,12 +110,6 @@ object BookContent { Debug.log(bookSource.bookSourceUrl, "└${bookChapter.title}") Debug.log(bookSource.bookSourceUrl, "┌获取正文内容") Debug.log(bookSource.bookSourceUrl, "└\n$contentStr") - queryTTF?.let { - contentStr.toStringArray().forEach { str -> - val fontData = it.getGlyf(str.toInt()) - - } - } if (contentStr.isNotBlank()) { BookHelp.saveContent(book, bookChapter, contentStr) } From 2a5a964f4f5dfbb026764d4823115a79dcf10c83 Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 19:26:21 +0800 Subject: [PATCH 06/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt index 86d98bd9d..c49bbd48d 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt @@ -495,7 +495,7 @@ class QueryTTF(var font: ByteArray) : JsExtensions { /*** * 获取字体轮廓 (fontCode:单个String字符) */ - fun GetGlyf(fontCode: String): ArrayList { - return GetGlyf(fontCode[0].toInt()) + fun getGlyf(str: String): ArrayList { + return getGlyf(str.toInt()) } } \ No newline at end of file From 4a7e706835e571a90fc4e64aeb89fd2d932e42a9 Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 19:55:36 +0800 Subject: [PATCH 07/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 70bf0a2c6..33acda6d9 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,9 @@ * 关注合作公众号 **[小说拾遗]()** 获取好看的小说。 * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 +**2020/11/16** +* 修复导出添加替换净化引起的bug + **2020/11/15** * 正文规则添加字体规则,返回ByteArray * js添加方法: From ff1bae6f5a5ff5025174d937bf38fe5acc232cd1 Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 20:02:50 +0800 Subject: [PATCH 08/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt index 94396919d..aa7a2db15 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt @@ -50,7 +50,7 @@ class RssSourceEditActivity : override fun finish() { val source = getRssSource() - if (!source.equal(viewModel.rssSource ?: RssSource())) { + if (!source.equal(viewModel.rssSource)) { alert(R.string.exit) { messageResource = R.string.exit_no_save positiveButton(R.string.yes) From 0b426907ff814687acb712a3833b08953d7f6b90 Mon Sep 17 00:00:00 2001 From: gedoor Date: Mon, 16 Nov 2020 20:06:53 +0800 Subject: [PATCH 09/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/analyzeRule/QueryTTF.kt | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt index c49bbd48d..4ddcff34e 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/QueryTTF.kt @@ -8,7 +8,10 @@ import kotlin.experimental.and * @see 获取详情 * @see 基于Javascript的TTF解析器 */ -@Suppress("unused", "RedundantExplicitType", "MemberVisibilityCanBePrivate") +@Suppress( + "unused", "RedundantExplicitType", "MemberVisibilityCanBePrivate", + "EqualsBetweenInconvertibleTypes", "ControlFlowWithEmptyBody" +) @ExperimentalUnsignedTypes class QueryTTF(var font: ByteArray) : JsExtensions { data class Index(var num: Int) @@ -385,31 +388,31 @@ class QueryTTF(var font: ByteArray) : JsExtensions { } // 获取x轴相对坐标 g.xCoordinates = Array(flagLength) { 0 } - for (n in 0 until flagLength) { - val xByte = !(g.flags[n] and 0x02).equals(0) - val xSame = !(g.flags[n] and 0x10).equals(0) + for (m in 0 until flagLength) { + val xByte = !(g.flags[m] and 0x02).equals(0) + val xSame = !(g.flags[m] and 0x10).equals(0) if (xByte) { - g.xCoordinates[n] = + g.xCoordinates[m] = ((if (xSame) 1 else -1) * data.copyOfIndex(1).first()).toShort() } else { - if (xSame) g.xCoordinates[n] = 0 + if (xSame) g.xCoordinates[m] = 0 else { - g.xCoordinates[n] = byteArrToUintx(data.copyOfIndex(2)).toShort() + g.xCoordinates[m] = byteArrToUintx(data.copyOfIndex(2)).toShort() } } } // 获取y轴相对坐标 g.yCoordinates = Array(flagLength) { 0 } - for (n in 0 until flagLength) { - val yByte = !(g.flags[n] and 0x04).equals(0) - val ySame = !(g.flags[n] and 0x20).equals(0) + for (m in 0 until flagLength) { + val yByte = !(g.flags[m] and 0x04).equals(0) + val ySame = !(g.flags[m] and 0x20).equals(0) if (yByte) { - g.yCoordinates[n] = + g.yCoordinates[m] = ((if (ySame) 1 else -1) * data.copyOfIndex(1).first()).toShort() } else { - if (ySame) g.yCoordinates[n] = 0 + if (ySame) g.yCoordinates[m] = 0 else { - g.yCoordinates[n] = byteArrToUintx(data.copyOfIndex(2)).toShort() + g.yCoordinates[m] = byteArrToUintx(data.copyOfIndex(2)).toShort() } } } From 9c47a79b4d5ca88fb3035e7f5722270d05715136 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 17 Nov 2020 19:21:05 +0800 Subject: [PATCH 10/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/config/AutoReadDialog.kt | 2 +- .../io/legado/app/ui/book/read/config/BgTextConfigDialog.kt | 2 +- .../legado/app/ui/book/read/config/ClickActionConfigDialog.kt | 2 +- .../java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt | 2 +- .../java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt | 2 +- .../java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt index 9ec107b92..e67dc8752 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt @@ -21,7 +21,6 @@ class AutoReadDialog : BaseDialogFragment() { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) it.setBackgroundDrawableResource(R.color.background) @@ -44,6 +43,7 @@ class AutoReadDialog : BaseDialogFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ callBack = activity as? CallBack return inflater.inflate(R.layout.dialog_auto_read, container) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index 99b8db65d..4e9a166a2 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -50,7 +50,6 @@ class BgTextConfigDialog : BaseDialogFragment(), FilePickerDialog.CallBack { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) it.setBackgroundDrawableResource(R.color.background) @@ -68,6 +67,7 @@ class BgTextConfigDialog : BaseDialogFragment(), FilePickerDialog.CallBack { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ return inflater.inflate(R.layout.dialog_read_bg_text, container) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ClickActionConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ClickActionConfigDialog.kt index 30608a1f8..ef0cc69cb 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ClickActionConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ClickActionConfigDialog.kt @@ -23,7 +23,6 @@ class ClickActionConfigDialog : BaseDialogFragment() { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.setBackgroundDrawableResource(R.color.transparent) it.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) @@ -35,6 +34,7 @@ class ClickActionConfigDialog : BaseDialogFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ return inflater.inflate(R.layout.dialog_click_action_config, container) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt index b920e1784..897895b09 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt @@ -25,7 +25,6 @@ class MoreConfigDialog : DialogFragment() { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) it.setBackgroundDrawableResource(R.color.background) @@ -43,6 +42,7 @@ class MoreConfigDialog : DialogFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ val view = LinearLayout(context) view.setBackgroundColor(requireContext().bottomBackground) view.id = R.id.tag1 diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt index a7020fb98..11ecd6c6a 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt @@ -26,7 +26,6 @@ class ReadAloudDialog : BaseDialogFragment() { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) it.setBackgroundDrawableResource(R.color.background) @@ -49,6 +48,7 @@ class ReadAloudDialog : BaseDialogFragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ callBack = activity as? CallBack return inflater.inflate(R.layout.dialog_read_aloud, container) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt index 7184c9384..b17f82cca 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt @@ -35,7 +35,6 @@ class ReadStyleDialog : BaseDialogFragment(), FontSelectDialog.CallBack { override fun onStart() { super.onStart() - (activity as ReadBookActivity).bottomDialog++ dialog?.window?.let { it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) it.setBackgroundDrawableResource(R.color.background) @@ -53,6 +52,7 @@ class ReadStyleDialog : BaseDialogFragment(), FontSelectDialog.CallBack { container: ViewGroup?, savedInstanceState: Bundle? ): View? { + (activity as ReadBookActivity).bottomDialog++ return inflater.inflate(R.layout.dialog_read_book_style, container) } From f3481cbd04ea14d69803bd2592a59ce72623fe41 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 17 Nov 2020 20:11:29 +0800 Subject: [PATCH 11/31] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/read/ReadBookBaseActivity.kt | 10 ++-------- .../main/java/io/legado/app/ui/book/read/ReadMenu.kt | 6 ++---- .../io/legado/app/ui/book/read/page/ContentView.kt | 3 +++ .../main/java/io/legado/app/ui/widget/BatteryView.kt | 4 +++- app/src/main/res/layout/dialog_read_aloud.xml | 12 ++++++++---- app/src/main/res/layout/view_book_page.xml | 5 +++++ app/src/main/res/layout/view_read_menu.xml | 12 ++++++++---- 7 files changed, 31 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt index 1e68e29ff..681435e22 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt @@ -5,7 +5,6 @@ import android.app.Activity import android.content.Intent import android.content.pm.ActivityInfo import android.graphics.Color -import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Build import android.os.Bundle @@ -166,9 +165,7 @@ abstract class ReadBookBaseActivity : if (!isInMultiWindow) { flag = flag or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN } - if (ReadBookConfig.hideNavigationBar) { - flag = flag or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - } + flag = flag or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION if (toolBarHide) { if (ReadBookConfig.hideStatusBar) { flag = flag or View.SYSTEM_UI_FLAG_FULLSCREEN @@ -185,11 +182,8 @@ abstract class ReadBookBaseActivity : read_menu == null -> return read_menu.isVisible -> ATH.setNavigationBarColorAuto(this) bottomDialog > 0 -> ATH.setNavigationBarColorAuto(this, bottomBackground) - ReadBookConfig.bg is ColorDrawable -> { - ATH.setNavigationBarColorAuto(this, ReadBookConfig.bgMeanColor) - } else -> { - ATH.setNavigationBarColorAuto(this, Color.BLACK) + ATH.setNavigationBarColorAuto(this, Color.TRANSPARENT) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index b349fe629..e21e3ffe1 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -14,7 +14,6 @@ import io.legado.app.R import io.legado.app.constant.PreferKey import io.legado.app.help.AppConfig import io.legado.app.help.LocalConfig -import io.legado.app.help.ReadBookConfig import io.legado.app.lib.theme.* import io.legado.app.service.help.ReadBook import io.legado.app.utils.* @@ -237,10 +236,9 @@ class ReadMenu @JvmOverloads constructor( override fun onAnimationEnd(animation: Animation) { vw_menu_bg.onClick { runMenuOut() } - val hasNavigationBar = ReadBookConfig.hideNavigationBar - && SystemUtils.isNavigationBarExist(activity) vwNavigationBar.layoutParams = vwNavigationBar.layoutParams.apply { - height = if (hasNavigationBar) context.navigationBarHeight else 0 + height = + if (SystemUtils.isNavigationBarExist(activity)) context.navigationBarHeight else 0 } if (LocalConfig.isFirstReadMenuShow) { callBack.showReadMenuHelp() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index 85e2d9d80..7c470c34c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -84,6 +84,9 @@ class ContentView(context: Context) : FrameLayout(context) { ) vw_top_divider.visible(showHeaderLine) vw_bottom_divider.visible(showFooterLine) + page_nv_bar.layoutParams = page_nv_bar.layoutParams.apply { + height = if (hideStatusBar) 0 else context.navigationBarHeight + } content_text_view.upVisibleRect() } upTime() diff --git a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt index 3c3c1d7c3..9e1d9cded 100644 --- a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt @@ -26,7 +26,9 @@ class BatteryView @JvmOverloads constructor( batteryPaint.strokeWidth = 1.dp.toFloat() batteryPaint.isAntiAlias = true batteryPaint.color = paint.color - typeface = Typeface.createFromAsset(context.assets, "font${File.separator}number.ttf") + if (!isInEditMode) { + typeface = Typeface.createFromAsset(context.assets, "font${File.separator}number.ttf") + } } fun setColor(@ColorInt color: Int) { diff --git a/app/src/main/res/layout/dialog_read_aloud.xml b/app/src/main/res/layout/dialog_read_aloud.xml index 8d5b33f43..878cdbf8e 100644 --- a/app/src/main/res/layout/dialog_read_aloud.xml +++ b/app/src/main/res/layout/dialog_read_aloud.xml @@ -225,7 +225,8 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/chapter_list" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -263,7 +264,8 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/main_menu" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -301,7 +303,8 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/to_backstage" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -339,7 +342,8 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" android:text="@string/setting" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:textColor="@color/primaryText" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/view_book_page.xml b/app/src/main/res/layout/view_book_page.xml index 95fd4f1f3..69d35e794 100644 --- a/app/src/main/res/layout/view_book_page.xml +++ b/app/src/main/res/layout/view_book_page.xml @@ -148,4 +148,9 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_read_menu.xml b/app/src/main/res/layout/view_read_menu.xml index 27f387599..e7882c8bc 100644 --- a/app/src/main/res/layout/view_read_menu.xml +++ b/app/src/main/res/layout/view_read_menu.xml @@ -281,7 +281,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:text="@string/chapter_list" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -321,7 +322,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:text="@string/read_aloud" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -361,7 +363,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:text="@string/interface_setting" android:textColor="@color/primaryText" android:textSize="12sp" /> @@ -401,7 +404,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="3dp" - android:maxLines="1" + android:singleLine="true" + android:ellipsize="middle" android:text="@string/setting" android:textColor="@color/primaryText" android:textSize="12sp" /> From c558d64f3a6745a0ec34a40334cc0d4df7338676 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 17 Nov 2020 20:41:53 +0800 Subject: [PATCH 12/31] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt | 3 +-- .../java/io/legado/app/ui/book/read/page/ContentView.kt | 2 +- .../main/java/io/legado/app/utils/ActivityExtensions.kt | 9 +++++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index e21e3ffe1..7570b2f8c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -237,8 +237,7 @@ class ReadMenu @JvmOverloads constructor( override fun onAnimationEnd(animation: Animation) { vw_menu_bg.onClick { runMenuOut() } vwNavigationBar.layoutParams = vwNavigationBar.layoutParams.apply { - height = - if (SystemUtils.isNavigationBarExist(activity)) context.navigationBarHeight else 0 + height = activity!!.navigationBarHeight } if (LocalConfig.isFirstReadMenuShow) { callBack.showReadMenuHelp() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index 7c470c34c..bcc375a69 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -85,7 +85,7 @@ class ContentView(context: Context) : FrameLayout(context) { vw_top_divider.visible(showHeaderLine) vw_bottom_divider.visible(showFooterLine) page_nv_bar.layoutParams = page_nv_bar.layoutParams.apply { - height = if (hideStatusBar) 0 else context.navigationBarHeight + height = if (hideNavigationBar) 0 else activity!!.navigationBarHeight } content_text_view.upVisibleRect() } diff --git a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt index 689d5b443..c8a0531ec 100644 --- a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt @@ -21,3 +21,12 @@ fun Activity.getSize(): DisplayMetrics { } return displayMetrics } + +val Activity.navigationBarHeight: Int + get() { + if (SystemUtils.isNavigationBarExist(this)) { + val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") + return resources.getDimensionPixelSize(resourceId) + } + return 0 + } \ No newline at end of file From 926f7dfedb04008e60fe6d7004beef3e393ce9e1 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 17 Nov 2020 20:54:36 +0800 Subject: [PATCH 13/31] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/read/page/ContentView.kt | 5 +++++ app/src/main/java/io/legado/app/utils/ActivityExtensions.kt | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index bcc375a69..95b7ae318 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -51,6 +51,11 @@ class ContentView(context: Context) : FrameLayout(context) { } } + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + upStyle() + } + fun upStyle() { ReadBookConfig.apply { bv_header_left.typeface = ChapterProvider.typeface diff --git a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt index c8a0531ec..df4bae769 100644 --- a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt @@ -22,6 +22,10 @@ fun Activity.getSize(): DisplayMetrics { return displayMetrics } +/** + * 该方法需要在View完全被绘制出来之后调用,否则判断不了 + * 在比如 onWindowFocusChanged()方法中可以得到正确的结果 + */ val Activity.navigationBarHeight: Int get() { if (SystemUtils.isNavigationBarExist(this)) { From 94496e2a541917609f5ac225d41ae167c80c49f4 Mon Sep 17 00:00:00 2001 From: gedoor Date: Tue, 17 Nov 2020 22:19:23 +0800 Subject: [PATCH 14/31] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/App.kt | 1 + .../java/io/legado/app/base/BaseActivity.kt | 8 ++ .../app/ui/book/read/page/ContentView.kt | 78 +++++++++---------- .../legado/app/ui/book/read/page/PageView.kt | 2 +- 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index d6849f488..e43ce9ac7 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -34,6 +34,7 @@ class App : MultiDexApplication() { lateinit var androidId: String var versionCode = 0 var versionName = "" + var navigationBarHeight = 0 } override fun onCreate() { diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index d156c294a..53d2f860a 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -10,6 +10,7 @@ import android.view.MenuItem import android.view.View import android.widget.FrameLayout import androidx.appcompat.app.AppCompatActivity +import io.legado.app.App import io.legado.app.R import io.legado.app.constant.AppConst import io.legado.app.constant.Theme @@ -71,6 +72,13 @@ abstract class BaseActivity( observeLiveBus() } + override fun onWindowFocusChanged(hasFocus: Boolean) { + super.onWindowFocusChanged(hasFocus) + if (hasFocus) { + App.navigationBarHeight = navigationBarHeight + } + } + override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration?) { super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig) findViewById(R.id.title_bar) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt index 95b7ae318..09daf30de 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentView.kt @@ -6,6 +6,7 @@ import android.graphics.drawable.Drawable import android.widget.FrameLayout import androidx.core.view.isGone import androidx.core.view.isInvisible +import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseActivity import io.legado.app.constant.AppConst.timeFormat @@ -51,49 +52,42 @@ class ContentView(context: Context) : FrameLayout(context) { } } - override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { - super.onSizeChanged(w, h, oldw, oldh) - upStyle() - } - - fun upStyle() { - ReadBookConfig.apply { - bv_header_left.typeface = ChapterProvider.typeface - tv_header_left.typeface = ChapterProvider.typeface - tv_header_middle.typeface = ChapterProvider.typeface - tv_header_right.typeface = ChapterProvider.typeface - bv_footer_left.typeface = ChapterProvider.typeface - tv_footer_left.typeface = ChapterProvider.typeface - tv_footer_middle.typeface = ChapterProvider.typeface - tv_footer_right.typeface = ChapterProvider.typeface - bv_header_left.setColor(textColor) - tv_header_left.setColor(textColor) - tv_header_middle.setColor(textColor) - tv_header_right.setColor(textColor) - bv_footer_left.setColor(textColor) - tv_footer_left.setColor(textColor) - tv_footer_middle.setColor(textColor) - tv_footer_right.setColor(textColor) - upStatusBar() - ll_header.setPadding( - headerPaddingLeft.dp, - headerPaddingTop.dp, - headerPaddingRight.dp, - headerPaddingBottom.dp - ) - ll_footer.setPadding( - footerPaddingLeft.dp, - footerPaddingTop.dp, - footerPaddingRight.dp, - footerPaddingBottom.dp - ) - vw_top_divider.visible(showHeaderLine) - vw_bottom_divider.visible(showFooterLine) - page_nv_bar.layoutParams = page_nv_bar.layoutParams.apply { - height = if (hideNavigationBar) 0 else activity!!.navigationBarHeight - } - content_text_view.upVisibleRect() + fun upStyle() = ReadBookConfig.apply { + bv_header_left.typeface = ChapterProvider.typeface + tv_header_left.typeface = ChapterProvider.typeface + tv_header_middle.typeface = ChapterProvider.typeface + tv_header_right.typeface = ChapterProvider.typeface + bv_footer_left.typeface = ChapterProvider.typeface + tv_footer_left.typeface = ChapterProvider.typeface + tv_footer_middle.typeface = ChapterProvider.typeface + tv_footer_right.typeface = ChapterProvider.typeface + bv_header_left.setColor(textColor) + tv_header_left.setColor(textColor) + tv_header_middle.setColor(textColor) + tv_header_right.setColor(textColor) + bv_footer_left.setColor(textColor) + tv_footer_left.setColor(textColor) + tv_footer_middle.setColor(textColor) + tv_footer_right.setColor(textColor) + upStatusBar() + ll_header.setPadding( + headerPaddingLeft.dp, + headerPaddingTop.dp, + headerPaddingRight.dp, + headerPaddingBottom.dp + ) + ll_footer.setPadding( + footerPaddingLeft.dp, + footerPaddingTop.dp, + footerPaddingRight.dp, + footerPaddingBottom.dp + ) + vw_top_divider.visible(showHeaderLine) + vw_bottom_divider.visible(showFooterLine) + page_nv_bar.layoutParams = page_nv_bar.layoutParams.apply { + height = if (hideNavigationBar) 0 else App.navigationBarHeight } + content_text_view.upVisibleRect() upTime() upBattery(battery) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 4bd777ab8..4abc569e7 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -112,7 +112,7 @@ class PageView(context: Context, attrs: AttributeSet) : brRect.set(width * 0.66f, height * 0.66f, width - 10f, height - 10f) prevPage.x = -w.toFloat() pageDelegate?.setViewSize(w, h) - if (oldw != 0 && oldh != 0) { + if (w != 0 && h != 0) { ReadBook.loadContent(resetPageOffset = false) } } From 526d3e9c90df7021379a54d122f7cbcd3e2fe34b Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 08:25:24 +0800 Subject: [PATCH 15/31] =?UTF-8?q?js=E6=B7=BB=E5=8A=A0java.log(msg:=20Strin?= =?UTF-8?q?g)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/JsExtensions.kt | 4 ++++ app/src/main/java/io/legado/app/model/Debug.kt | 5 +++++ 2 files changed, 9 insertions(+) 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 642905691..c692be75e 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -5,6 +5,7 @@ import androidx.annotation.Keep import io.legado.app.constant.AppConst.dateFormat import io.legado.app.help.http.CookieStore import io.legado.app.help.http.SSLHelper +import io.legado.app.model.Debug import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.utils.* import org.jsoup.Connection @@ -206,4 +207,7 @@ interface JsExtensions { return Base64.decode(str, flags) } + fun log(msg: String) { + Debug.log(msg) + } } diff --git a/app/src/main/java/io/legado/app/model/Debug.kt b/app/src/main/java/io/legado/app/model/Debug.kt index 4e419bef4..cfd64d6ee 100644 --- a/app/src/main/java/io/legado/app/model/Debug.kt +++ b/app/src/main/java/io/legado/app/model/Debug.kt @@ -41,6 +41,11 @@ object Debug { callback?.printLog(state, printMsg) } + @Synchronized + fun log(msg: String?) { + log(debugSource, msg, true) + } + fun cancelDebug(destroy: Boolean = false) { tasks.clear() From 352cf90c9681754df7e48a3ada44546e4e0c10e3 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 08:42:44 +0800 Subject: [PATCH 16/31] =?UTF-8?q?js=E6=B7=BB=E5=8A=A0java.log(msg:=20Strin?= =?UTF-8?q?g)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 33acda6d9..7c40afcbc 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -3,6 +3,10 @@ * 关注合作公众号 **[小说拾遗]()** 获取好看的小说。 * 旧版数据导入教程:先在旧版阅读(2.x)中进行备份,然后在新版阅读(3.x)【我的】->【备份与恢复】,选择【导入旧版本数据】。 +**2020/11/18** +* 优化导航栏 +* js添加java.log(msg: String)用于调试时输出消息 + **2020/11/16** * 修复导出添加替换净化引起的bug From c68a4f26e5adc0fdf4e9ee74f426e4dc46854b3a Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 11:20:39 +0800 Subject: [PATCH 17/31] =?UTF-8?q?js=E6=B7=BB=E5=8A=A0=E4=BC=A0=E5=85=A5coo?= =?UTF-8?q?kie=E7=B1=BB,=E5=8F=AF=E4=BB=A5=E7=94=A8=E6=9D=A5=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/BookSource.kt | 3 +++ .../io/legado/app/data/entities/RssSource.kt | 2 ++ .../app/model/analyzeRule/AnalyzeRule.kt | 2 ++ .../app/model/analyzeRule/AnalyzeUrl.kt | 20 ++++++++++--------- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 1169ba690..8be8b68cb 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -9,6 +9,7 @@ import io.legado.app.constant.BookType import io.legado.app.data.entities.rule.* import io.legado.app.help.AppConfig import io.legado.app.help.JsExtensions +import io.legado.app.help.http.CookieStore import io.legado.app.utils.ACache import io.legado.app.utils.GSON import io.legado.app.utils.fromJsonObject @@ -109,6 +110,7 @@ data class BookSource( val bindings = SimpleBindings() bindings["baseUrl"] = bookSourceUrl bindings["java"] = this + bindings["cookie"] = CookieStore a = AppConst.SCRIPT_ENGINE.eval( it.substring(4, it.lastIndexOf("<")), bindings @@ -136,6 +138,7 @@ data class BookSource( private fun evalJS(jsStr: String): Any { val bindings = SimpleBindings() bindings["java"] = this + bindings["cookie"] = CookieStore return AppConst.SCRIPT_ENGINE.eval(jsStr, bindings) } diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 0b40b3f13..975e14b3b 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -7,6 +7,7 @@ import androidx.room.PrimaryKey import io.legado.app.constant.AppConst import io.legado.app.help.AppConfig import io.legado.app.help.JsExtensions +import io.legado.app.help.http.CookieStore import io.legado.app.utils.GSON import io.legado.app.utils.fromJsonObject import kotlinx.android.parcel.Parcelize @@ -76,6 +77,7 @@ data class RssSource( private fun evalJS(jsStr: String): Any? { val bindings = SimpleBindings() bindings["java"] = this + bindings["cookie"] = CookieStore return AppConst.SCRIPT_ENGINE.eval(jsStr, bindings) } diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 82b521292..17a56b0be 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -7,6 +7,7 @@ import io.legado.app.constant.AppPattern.JS_PATTERN import io.legado.app.data.entities.BaseBook import io.legado.app.data.entities.BookChapter import io.legado.app.help.JsExtensions +import io.legado.app.help.http.CookieStore import io.legado.app.utils.* import org.jsoup.nodes.Entities import org.mozilla.javascript.NativeObject @@ -649,6 +650,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { private fun evalJS(jsStr: String, result: Any?): Any? { val bindings = SimpleBindings() bindings["java"] = this + bindings["cookie"] = CookieStore bindings["book"] = book bindings["result"] = result bindings["baseUrl"] = baseUrl diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index aa4e7ec17..468b78058 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -136,18 +136,19 @@ class AnalyzeUrl( if (ruleUrl.contains("{{") && ruleUrl.contains("}}")) { var jsEval: Any val sb = StringBuffer() - val simpleBindings = SimpleBindings() - simpleBindings["java"] = this - simpleBindings["baseUrl"] = baseUrl - simpleBindings["page"] = page - simpleBindings["key"] = key - simpleBindings["speakText"] = speakText - simpleBindings["speakSpeed"] = speakSpeed - simpleBindings["book"] = book + val bindings = SimpleBindings() + bindings["java"] = this + bindings["cookie"] = CookieStore + bindings["baseUrl"] = baseUrl + bindings["page"] = page + bindings["key"] = key + bindings["speakText"] = speakText + bindings["speakSpeed"] = speakSpeed + bindings["book"] = book val expMatcher = EXP_PATTERN.matcher(ruleUrl) while (expMatcher.find()) { jsEval = expMatcher.group(1)?.let { - SCRIPT_ENGINE.eval(it, simpleBindings) + SCRIPT_ENGINE.eval(it, bindings) } ?: "" if (jsEval is String) { expMatcher.appendReplacement(sb, jsEval) @@ -259,6 +260,7 @@ class AnalyzeUrl( private fun evalJS(jsStr: String, result: Any? = null): Any? { val bindings = SimpleBindings() bindings["java"] = this + bindings["cookie"] = CookieStore bindings["page"] = page bindings["key"] = key bindings["speakText"] = speakText From 19f89af6c037b28befa7efac91ecde55a653eee3 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 15:56:25 +0800 Subject: [PATCH 18/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/source/manage/BookSourceActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 44e49ca3f..89f8b2479 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -328,6 +328,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity layoutInflater.inflate(R.layout.dialog_edit_text, null).apply { editText = edit_view edit_view.setHint(R.string.group_name) + edit_view.setFilterValues(groups.toList()) } } okButton { @@ -337,7 +338,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity } } } - noButton() + cancelButton() }.show() } @@ -349,6 +350,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity layoutInflater.inflate(R.layout.dialog_edit_text, null).apply { editText = edit_view edit_view.setHint(R.string.group_name) + edit_view.setFilterValues(groups.toList()) } } okButton { @@ -358,7 +360,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity } } } - noButton() + cancelButton() }.show() } From 1fce69d0cb15e55f829767af38b81e822bba66da Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 16:39:19 +0800 Subject: [PATCH 19/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/source/manage/BookSourceActivity.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 89f8b2479..ed0f3484d 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -329,6 +329,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity editText = edit_view edit_view.setHint(R.string.group_name) edit_view.setFilterValues(groups.toList()) + edit_view.dropDownHeight = 180.dp } } okButton { @@ -351,6 +352,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity editText = edit_view edit_view.setHint(R.string.group_name) edit_view.setFilterValues(groups.toList()) + edit_view.dropDownHeight = 180.dp } } okButton { From ad24761a10b2366fa4d4b7fe31b3b0a3bdf297e7 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 16:52:33 +0800 Subject: [PATCH 20/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt index 1940218f5..69a91d791 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt @@ -93,7 +93,7 @@ class CacheViewModel(application: Application) : BaseViewModel(application) { App.db.bookChapterDao().getChapterList(book.bookUrl).forEach { chapter -> BookHelp.getContent(book, chapter).let { content -> val content1 = contentProcessor - .getContent(book, chapter.title, content ?: "", false) + .getContent(book, chapter.title, content ?: "null", false) .joinToString("\n") stringBuilder.append("\n\n") .append(content1) From 2878590f2f65fe4b00f65c603848d140486960d5 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 18:56:52 +0800 Subject: [PATCH 21/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + .../io/legado/app/help/http/AjaxWebView.kt | 8 +++--- .../io/legado/app/help/http/CookieStore.kt | 19 +++++++------ .../legado/app/help/http/api/CookieManager.kt | 28 +++++++++++++++++++ .../io/legado/app/ui/login/SourceLogin.kt | 4 +-- 5 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/io/legado/app/help/http/api/CookieManager.kt diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 7c40afcbc..8df9d933c 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,6 +6,7 @@ **2020/11/18** * 优化导航栏 * js添加java.log(msg: String)用于调试时输出消息 +* js添加cookie对象,可用方法见io.legado.app.help.http.api.CookieManager **2020/11/16** * 修复导出添加替换净化引起的bug 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 db6dc165b..ddf64c895 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 @@ -117,10 +117,10 @@ class AjaxWebView { val isSniff: Boolean get() = !TextUtils.isEmpty(sourceRegex) - fun setCookie(url: String) { + fun putCookie(url: String) { tag?.let { val cookie = CookieManager.getInstance().getCookie(url) - CookieStore.setCookie(it, cookie) + CookieStore.putCookie(it, cookie) } } @@ -140,7 +140,7 @@ class AjaxWebView { ) : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { - params.setCookie(url) + params.putCookie(url) val runnable = EvalJsRunnable(view, url, params.getJs(), handler) handler.postDelayed(runnable, 1000) } @@ -193,7 +193,7 @@ class AjaxWebView { } override fun onPageFinished(view: WebView, url: String) { - params.setCookie(url) + params.putCookie(url) if (params.hasJavaScript()) { evaluateJavascript(view, params.javaScript) params.clearJavaScript() diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index a565560b7..71eff8cb5 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -8,42 +8,43 @@ import com.franmontiel.persistentcookiejar.persistence.SerializableCookie import io.legado.app.App import io.legado.app.data.entities.Cookie import io.legado.app.help.coroutine.Coroutine +import io.legado.app.help.http.api.CookieManager import io.legado.app.utils.NetworkUtils -object CookieStore : CookiePersistor { +object CookieStore : CookiePersistor, CookieManager { - fun setCookie(url: String, cookie: String?) { + override fun putCookie(url: String, cookie: String?) { Coroutine.async { val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "") App.db.cookieDao().insert(cookieBean) } } - fun replaceCookie(url: String, cookie: String) { + override fun replaceCookie(url: String, cookie: String) { if (TextUtils.isEmpty(url) || TextUtils.isEmpty(cookie)) { return } val oldCookie = getCookie(url) if (TextUtils.isEmpty(oldCookie)) { - setCookie(url, cookie) + putCookie(url, cookie) } else { val cookieMap = cookieToMap(oldCookie) cookieMap.putAll(cookieToMap(cookie)) val newCookie = mapToCookie(cookieMap) - setCookie(url, newCookie) + putCookie(url, newCookie) } } - fun getCookie(url: String): String { + override fun getCookie(url: String): String { val cookieBean = App.db.cookieDao().get(NetworkUtils.getSubDomain(url)) return cookieBean?.cookie ?: "" } - fun removeCookie(url: String) { + override fun removeCookie(url: String) { App.db.cookieDao().delete(NetworkUtils.getSubDomain(url)) } - fun cookieToMap(cookie: String): MutableMap { + override fun cookieToMap(cookie: String): MutableMap { val cookieMap = mutableMapOf() if (cookie.isBlank()) { return cookieMap @@ -63,7 +64,7 @@ object CookieStore : CookiePersistor { return cookieMap } - fun mapToCookie(cookieMap: Map?): String? { + override fun mapToCookie(cookieMap: Map?): String? { if (cookieMap == null || cookieMap.isEmpty()) { return null } diff --git a/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt b/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt new file mode 100644 index 000000000..66978d46b --- /dev/null +++ b/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt @@ -0,0 +1,28 @@ +package io.legado.app.help.http.api + +interface CookieManager { + + /** + * 保存cookie + */ + fun putCookie(url: String, cookie: String?) + + /** + * 替换cookie + */ + fun replaceCookie(url: String, cookie: String) + + /** + * 获取cookie + */ + fun getCookie(url: String): String + + /** + * 移除cookie + */ + fun removeCookie(url: String) + + fun cookieToMap(cookie: String): MutableMap + + fun mapToCookie(cookieMap: Map?): String? +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt b/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt index dffe03695..3812040ca 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt @@ -39,7 +39,7 @@ class SourceLogin : BaseActivity(R.layout.activity_source_login) { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { val cookie = cookieManager.getCookie(url) sourceUrl?.let { - CookieStore.setCookie(it, cookie) + CookieStore.putCookie(it, cookie) } super.onPageStarted(view, url, favicon) } @@ -47,7 +47,7 @@ class SourceLogin : BaseActivity(R.layout.activity_source_login) { override fun onPageFinished(view: WebView?, url: String?) { val cookie = cookieManager.getCookie(url) sourceUrl?.let { - CookieStore.setCookie(it, cookie) + CookieStore.putCookie(it, cookie) } if (checking) { finish() From 04149d2bf7c87aae0b18559fa3c50a71d1a35631 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 19:00:43 +0800 Subject: [PATCH 22/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/help/http/AjaxWebView.kt | 8 ++++---- .../java/io/legado/app/help/http/CookieStore.kt | 13 +++++-------- .../io/legado/app/help/http/api/CookieManager.kt | 2 +- .../main/java/io/legado/app/ui/login/SourceLogin.kt | 4 ++-- 4 files changed, 12 insertions(+), 15 deletions(-) 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 ddf64c895..db6dc165b 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 @@ -117,10 +117,10 @@ class AjaxWebView { val isSniff: Boolean get() = !TextUtils.isEmpty(sourceRegex) - fun putCookie(url: String) { + fun setCookie(url: String) { tag?.let { val cookie = CookieManager.getInstance().getCookie(url) - CookieStore.putCookie(it, cookie) + CookieStore.setCookie(it, cookie) } } @@ -140,7 +140,7 @@ class AjaxWebView { ) : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { - params.putCookie(url) + params.setCookie(url) val runnable = EvalJsRunnable(view, url, params.getJs(), handler) handler.postDelayed(runnable, 1000) } @@ -193,7 +193,7 @@ class AjaxWebView { } override fun onPageFinished(view: WebView, url: String) { - params.putCookie(url) + params.setCookie(url) if (params.hasJavaScript()) { evaluateJavascript(view, params.javaScript) params.clearJavaScript() diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index 71eff8cb5..17bcc7695 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -7,17 +7,14 @@ import com.franmontiel.persistentcookiejar.persistence.CookiePersistor import com.franmontiel.persistentcookiejar.persistence.SerializableCookie import io.legado.app.App import io.legado.app.data.entities.Cookie -import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.http.api.CookieManager import io.legado.app.utils.NetworkUtils object CookieStore : CookiePersistor, CookieManager { - override fun putCookie(url: String, cookie: String?) { - Coroutine.async { - val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "") - App.db.cookieDao().insert(cookieBean) - } + override fun setCookie(url: String, cookie: String?) { + val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "") + App.db.cookieDao().insert(cookieBean) } override fun replaceCookie(url: String, cookie: String) { @@ -26,12 +23,12 @@ object CookieStore : CookiePersistor, CookieManager { } val oldCookie = getCookie(url) if (TextUtils.isEmpty(oldCookie)) { - putCookie(url, cookie) + setCookie(url, cookie) } else { val cookieMap = cookieToMap(oldCookie) cookieMap.putAll(cookieToMap(cookie)) val newCookie = mapToCookie(cookieMap) - putCookie(url, newCookie) + setCookie(url, newCookie) } } diff --git a/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt b/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt index 66978d46b..525aa712d 100644 --- a/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt +++ b/app/src/main/java/io/legado/app/help/http/api/CookieManager.kt @@ -5,7 +5,7 @@ interface CookieManager { /** * 保存cookie */ - fun putCookie(url: String, cookie: String?) + fun setCookie(url: String, cookie: String?) /** * 替换cookie diff --git a/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt b/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt index 3812040ca..dffe03695 100644 --- a/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt +++ b/app/src/main/java/io/legado/app/ui/login/SourceLogin.kt @@ -39,7 +39,7 @@ class SourceLogin : BaseActivity(R.layout.activity_source_login) { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { val cookie = cookieManager.getCookie(url) sourceUrl?.let { - CookieStore.putCookie(it, cookie) + CookieStore.setCookie(it, cookie) } super.onPageStarted(view, url, favicon) } @@ -47,7 +47,7 @@ class SourceLogin : BaseActivity(R.layout.activity_source_login) { override fun onPageFinished(view: WebView?, url: String?) { val cookie = cookieManager.getCookie(url) sourceUrl?.let { - CookieStore.putCookie(it, cookie) + CookieStore.setCookie(it, cookie) } if (checking) { finish() From dc58cc7672d13f1d305d25c4c72912f5364d1538 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 19:55:07 +0800 Subject: [PATCH 23/31] =?UTF-8?q?js=E6=B7=BB=E5=8A=A0cache=E5=8F=98?= =?UTF-8?q?=E9=87=8F,=E5=8F=AF=E4=BB=A5=E7=94=A8=E6=9D=A5=E5=AD=98?= =?UTF-8?q?=E5=82=A8token=E4=B9=8B=E7=B1=BB=E7=9A=84=E5=8F=98=E9=87=8F,?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE=E6=97=B6=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/data/AppDatabase.kt | 15 ++++++-- .../java/io/legado/app/data/dao/CacheDao.kt | 24 +++++++++++++ .../io/legado/app/data/entities/BookSource.kt | 3 ++ .../java/io/legado/app/data/entities/Cache.kt | 13 +++++++ .../io/legado/app/data/entities/RssSource.kt | 2 ++ .../java/io/legado/app/help/CacheManager.kt | 34 +++++++++++++++++++ .../app/model/analyzeRule/AnalyzeRule.kt | 2 ++ .../app/model/analyzeRule/AnalyzeUrl.kt | 3 ++ 8 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/io/legado/app/data/dao/CacheDao.kt create mode 100644 app/src/main/java/io/legado/app/data/entities/Cache.kt create mode 100644 app/src/main/java/io/legado/app/help/CacheManager.kt diff --git a/app/src/main/java/io/legado/app/data/AppDatabase.kt b/app/src/main/java/io/legado/app/data/AppDatabase.kt index 706d08094..7888cb7f9 100644 --- a/app/src/main/java/io/legado/app/data/AppDatabase.kt +++ b/app/src/main/java/io/legado/app/data/AppDatabase.kt @@ -17,8 +17,8 @@ import java.util.* entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class, ReplaceRule::class, SearchBook::class, SearchKeyword::class, Cookie::class, RssSource::class, Bookmark::class, RssArticle::class, RssReadRecord::class, - RssStar::class, TxtTocRule::class, ReadRecord::class, HttpTTS::class], - version = 23, + RssStar::class, TxtTocRule::class, ReadRecord::class, HttpTTS::class, Cache::class], + version = 24, exportSchema = true ) abstract class AppDatabase : RoomDatabase() { @@ -38,6 +38,7 @@ abstract class AppDatabase : RoomDatabase() { abstract fun txtTocRule(): TxtTocRuleDao abstract fun readRecordDao(): ReadRecordDao abstract fun httpTTSDao(): HttpTTSDao + abstract fun cacheDao(): CacheDao companion object { @@ -58,7 +59,8 @@ abstract class AppDatabase : RoomDatabase() { migration_19_20, migration_20_21, migration_21_22, - migration_22_23 + migration_22_23, + migration_23_24 ) .allowMainThreadQueries() .addCallback(dbCallback) @@ -201,6 +203,13 @@ abstract class AppDatabase : RoomDatabase() { database.execSQL("ALTER TABLE chapters ADD baseUrl TEXT NOT NULL DEFAULT ''") } } + + private val migration_23_24 = object : Migration(23, 24) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("CREATE TABLE IF NOT EXISTS `caches` (`key` TEXT NOT NULL, `value` TEXT, `deadline` INTEGER NOT NULL, PRIMARY KEY(`key`))") + database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_caches_key` ON `caches` (`key`)") + } + } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/data/dao/CacheDao.kt b/app/src/main/java/io/legado/app/data/dao/CacheDao.kt new file mode 100644 index 000000000..863199b75 --- /dev/null +++ b/app/src/main/java/io/legado/app/data/dao/CacheDao.kt @@ -0,0 +1,24 @@ +package io.legado.app.data.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import io.legado.app.data.entities.Cache + +@Dao +interface CacheDao { + + @Query("select value from caches where `key` = :key and (deadline = 0 or deadline > :now)") + fun get(key: String, now: Long): String? + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(vararg cache: Cache) + + @Query("delete from caches where `key` = :key") + fun delete(key: String) + + @Query("delete from caches where deadline > 0 and deadline < :now") + fun clearDeadline(now: Long) + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 8be8b68cb..5d82ec2f5 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -8,6 +8,7 @@ import io.legado.app.constant.AppConst import io.legado.app.constant.BookType import io.legado.app.data.entities.rule.* import io.legado.app.help.AppConfig +import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions import io.legado.app.help.http.CookieStore import io.legado.app.utils.ACache @@ -111,6 +112,7 @@ data class BookSource( bindings["baseUrl"] = bookSourceUrl bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager a = AppConst.SCRIPT_ENGINE.eval( it.substring(4, it.lastIndexOf("<")), bindings @@ -139,6 +141,7 @@ data class BookSource( val bindings = SimpleBindings() bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager return AppConst.SCRIPT_ENGINE.eval(jsStr, bindings) } diff --git a/app/src/main/java/io/legado/app/data/entities/Cache.kt b/app/src/main/java/io/legado/app/data/entities/Cache.kt new file mode 100644 index 000000000..f9687dea7 --- /dev/null +++ b/app/src/main/java/io/legado/app/data/entities/Cache.kt @@ -0,0 +1,13 @@ +package io.legado.app.data.entities + +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey + +@Entity(tableName = "caches", indices = [(Index(value = ["key"], unique = true))]) +data class Cache( + @PrimaryKey + val key: String = "", + var value: String? = null, + var deadline: Long = 0L +) \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 975e14b3b..b61d8baa3 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -6,6 +6,7 @@ import androidx.room.Index import androidx.room.PrimaryKey import io.legado.app.constant.AppConst import io.legado.app.help.AppConfig +import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions import io.legado.app.help.http.CookieStore import io.legado.app.utils.GSON @@ -78,6 +79,7 @@ data class RssSource( val bindings = SimpleBindings() bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager return AppConst.SCRIPT_ENGINE.eval(jsStr, bindings) } diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt new file mode 100644 index 000000000..558b71f0c --- /dev/null +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -0,0 +1,34 @@ +package io.legado.app.help + +import io.legado.app.App +import io.legado.app.data.entities.Cache + +object CacheManager { + + fun put(key: String, value: Any, saveTime: Int = 0) { + val deadline = if (saveTime == 0) 0 else System.currentTimeMillis() + saveTime * 1000 + val cache = Cache(key, value.toString(), deadline) + App.db.cacheDao().insert(cache) + } + + fun get(key: String): String? { + return App.db.cacheDao().get(key, System.currentTimeMillis()) + } + + fun getInt(key: String): Int? { + return get(key)?.toIntOrNull() + } + + fun getLong(key: String): Long? { + return get(key)?.toLongOrNull() + } + + fun getDouble(key: String): Double? { + return get(key)?.toDoubleOrNull() + } + + fun getFloat(key: String): Float? { + return get(key)?.toFloatOrNull() + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 17a56b0be..50fceacc4 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -6,6 +6,7 @@ import io.legado.app.constant.AppConst.SCRIPT_ENGINE import io.legado.app.constant.AppPattern.JS_PATTERN import io.legado.app.data.entities.BaseBook import io.legado.app.data.entities.BookChapter +import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions import io.legado.app.help.http.CookieStore import io.legado.app.utils.* @@ -651,6 +652,7 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { val bindings = SimpleBindings() bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager bindings["book"] = book bindings["result"] = result bindings["baseUrl"] = baseUrl diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 468b78058..338b8386e 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -12,6 +12,7 @@ import io.legado.app.constant.AppPattern.JS_PATTERN import io.legado.app.data.entities.BaseBook import io.legado.app.data.entities.BookChapter import io.legado.app.help.AppConfig +import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions import io.legado.app.help.http.* import io.legado.app.help.http.api.HttpGetApi @@ -139,6 +140,7 @@ class AnalyzeUrl( val bindings = SimpleBindings() bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager bindings["baseUrl"] = baseUrl bindings["page"] = page bindings["key"] = key @@ -261,6 +263,7 @@ class AnalyzeUrl( val bindings = SimpleBindings() bindings["java"] = this bindings["cookie"] = CookieStore + bindings["cache"] = CacheManager bindings["page"] = page bindings["key"] = key bindings["speakText"] = speakText From 946c08e21f1c3081ed06d8cb2202b9d2a56c717b Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 20:00:48 +0800 Subject: [PATCH 24/31] =?UTF-8?q?js=E6=B7=BB=E5=8A=A0cache=E5=8F=98?= =?UTF-8?q?=E9=87=8F,=E5=8F=AF=E4=BB=A5=E7=94=A8=E6=9D=A5=E5=AD=98?= =?UTF-8?q?=E5=82=A8token=E4=B9=8B=E7=B1=BB=E7=9A=84=E5=8F=98=E9=87=8F,?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE=E6=97=B6=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 +++- app/src/main/java/io/legado/app/help/CacheManager.kt | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 8df9d933c..da8aa319c 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,7 +6,9 @@ **2020/11/18** * 优化导航栏 * js添加java.log(msg: String)用于调试时输出消息 -* js添加cookie对象,可用方法见io.legado.app.help.http.api.CookieManager +* js添加cookie变量,方法见io.legado.app.help.http.api.CookieManager +* js添加cache变量,可以用来存储token之类的临时值,可以设置保存时间,方法见io.legado.app.help.CacheManager +* 需要token的网站可以用js来写了,比如阿里tts **2020/11/16** * 修复导出添加替换净化引起的bug diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt index 558b71f0c..8a88811f6 100644 --- a/app/src/main/java/io/legado/app/help/CacheManager.kt +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -5,6 +5,7 @@ import io.legado.app.data.entities.Cache object CacheManager { + @JvmOverloads fun put(key: String, value: Any, saveTime: Int = 0) { val deadline = if (saveTime == 0) 0 else System.currentTimeMillis() + saveTime * 1000 val cache = Cache(key, value.toString(), deadline) From c17761556011c2e5eb9126bed2f0b38657b005b6 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 20:15:07 +0800 Subject: [PATCH 25/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/CacheManager.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt index 8a88811f6..eb11ed826 100644 --- a/app/src/main/java/io/legado/app/help/CacheManager.kt +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -5,6 +5,9 @@ import io.legado.app.data.entities.Cache object CacheManager { + /** + * saveTime 单位为秒 + */ @JvmOverloads fun put(key: String, value: Any, saveTime: Int = 0) { val deadline = if (saveTime == 0) 0 else System.currentTimeMillis() + saveTime * 1000 From 7d10df5e15ba7e592c51cb6b4f3356ca99aea0c2 Mon Sep 17 00:00:00 2001 From: gedoor Date: Wed, 18 Nov 2020 20:23:03 +0800 Subject: [PATCH 26/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/help/CacheManager.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/io/legado/app/help/CacheManager.kt b/app/src/main/java/io/legado/app/help/CacheManager.kt index eb11ed826..53039d4cc 100644 --- a/app/src/main/java/io/legado/app/help/CacheManager.kt +++ b/app/src/main/java/io/legado/app/help/CacheManager.kt @@ -3,6 +3,7 @@ package io.legado.app.help import io.legado.app.App import io.legado.app.data.entities.Cache +@Suppress("unused") object CacheManager { /** From 3f5ff5d6f9c0a311f592a5a87274cdf1f7c6323d Mon Sep 17 00:00:00 2001 From: gedoor Date: Thu, 19 Nov 2020 08:07:35 +0800 Subject: [PATCH 27/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt b/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt index f3f4e0be7..54259fe53 100644 --- a/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt +++ b/app/src/main/java/io/legado/app/ui/welcome/WelcomeActivity.kt @@ -33,6 +33,7 @@ open class WelcomeActivity : BaseActivity(R.layout.activity_welcome) { private fun init() { Coroutine.async { + App.db.cacheDao().clearDeadline(System.currentTimeMillis()) //清除过期数据 if (getPrefBoolean(PreferKey.autoClearExpired, true)) { App.db.searchBookDao() From b8522b89041869d16492f2f61a108c3f89a11fc8 Mon Sep 17 00:00:00 2001 From: gedoor Date: Thu, 19 Nov 2020 19:16:28 +0800 Subject: [PATCH 28/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/lib/theme/ATH.kt | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/lib/theme/ATH.kt b/app/src/main/java/io/legado/app/lib/theme/ATH.kt index 87dd199c1..45e3fec18 100644 --- a/app/src/main/java/io/legado/app/lib/theme/ATH.kt +++ b/app/src/main/java/io/legado/app/lib/theme/ATH.kt @@ -126,10 +126,8 @@ object ATH { activity: Activity, color: Int = ThemeStore.navigationBarColor(activity) ) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - activity.window.navigationBarColor = color - setLightNavigationBar(activity, ColorUtils.isColorLight(color)) - } + activity.window.navigationBarColor = color + setLightNavigationBar(activity, ColorUtils.isColorLight(color)) } fun setLightNavigationBar(activity: Activity, enabled: Boolean) { @@ -170,18 +168,15 @@ object ATH { } fun setTaskDescriptionColor(activity: Activity, @ColorInt color: Int) { - val color1: Int - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - color1 = ColorUtils.stripAlpha(color) - @Suppress("DEPRECATION") - activity.setTaskDescription( - ActivityManager.TaskDescription( - activity.title as String, - null, - color1 - ) + val color1: Int = ColorUtils.stripAlpha(color) + @Suppress("DEPRECATION") + activity.setTaskDescription( + ActivityManager.TaskDescription( + activity.title as String, + null, + color1 ) - } + ) } fun setTint( From 0d0669c23fbc5d8bd6497230acc708706935c979 Mon Sep 17 00:00:00 2001 From: gedoor Date: Thu, 19 Nov 2020 20:23:33 +0800 Subject: [PATCH 29/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt index 681435e22..339a535cd 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookBaseActivity.kt @@ -43,6 +43,9 @@ import kotlinx.android.synthetic.main.view_read_menu.* import org.jetbrains.anko.sdk27.listeners.onClick import org.jetbrains.anko.startActivityForResult +/** + * 阅读界面 + */ abstract class ReadBookBaseActivity : VMBaseActivity(R.layout.activity_book_read) { From 0d38fdd154b9506d88e9e0a7f14b1610c66038f9 Mon Sep 17 00:00:00 2001 From: gedoor Date: Thu, 19 Nov 2020 20:35:11 +0800 Subject: [PATCH 30/31] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 827a987af..d012826b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,7 @@ kapt { } dependencies { - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.0' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1' implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test:runner:1.3.0' @@ -122,7 +122,7 @@ dependencies { //fireBase implementation 'com.google.firebase:firebase-analytics-ktx:18.0.0' - implementation 'com.google.firebase:firebase-crashlytics-ktx:17.2.2' + implementation 'com.google.firebase:firebase-crashlytics-ktx:17.3.0' //androidX implementation 'androidx.core:core-ktx:1.3.2' diff --git a/build.gradle b/build.gradle index 64b5d9d91..c29e8f3c7 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'de.timfreiheit.resourceplaceholders:placeholders:0.3' classpath 'com.google.gms:google-services:4.3.4' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1' } } From 060495bfd3b232017cca22161dd80d041bc77f2d Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 20 Nov 2020 20:26:38 +0800 Subject: [PATCH 31/31] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d38454320..0db8d3622 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## 阅读3.0 * [书源规则](https://alanskycn.gitee.io/teachme/) * [更新日志](/app/src/main/assets/updateLog.md) -* [帮助文档](/app/src/main/assets/help/help.md) +* [帮助文档](/app/src/main/assets/help/appHelp.md) ![image](https://github.com/gedoor/gedoor.github.io/blob/master/images/%E9%98%85%E8%AF%BB%E7%AE%80%E4%BB%8B1.jpg) ![image](https://github.com/gedoor/gedoor.github.io/blob/master/images/%E9%98%85%E8%AF%BB%E7%AE%80%E4%BB%8B2.jpg)