优化
This commit is contained in:
@@ -3,6 +3,7 @@ package io.legado.app.constant
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import com.script.javascript.RhinoScriptEngine
|
import com.script.javascript.RhinoScriptEngine
|
||||||
import io.legado.app.BuildConfig
|
import io.legado.app.BuildConfig
|
||||||
import splitties.init.appCtx
|
import splitties.init.appCtx
|
||||||
@@ -87,6 +88,7 @@ object AppConst {
|
|||||||
val charsets =
|
val charsets =
|
||||||
arrayListOf("UTF-8", "GB2312", "GB18030", "GBK", "Unicode", "UTF-16", "UTF-16LE", "ASCII")
|
arrayListOf("UTF-8", "GB2312", "GB18030", "GBK", "Unicode", "UTF-16", "UTF-16LE", "ASCII")
|
||||||
|
|
||||||
|
@Keep
|
||||||
data class AppInfo(
|
data class AppInfo(
|
||||||
var versionCode: Long = 0L,
|
var versionCode: Long = 0L,
|
||||||
var versionName: String = ""
|
var versionName: String = ""
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package io.legado.app.data.entities
|
package io.legado.app.data.entities
|
||||||
|
|
||||||
import android.util.Base64
|
|
||||||
import com.script.SimpleBindings
|
|
||||||
import cn.hutool.crypto.symmetric.AES
|
import cn.hutool.crypto.symmetric.AES
|
||||||
|
import com.script.SimpleBindings
|
||||||
import io.legado.app.constant.AppConst
|
import io.legado.app.constant.AppConst
|
||||||
import io.legado.app.constant.AppLog
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.data.entities.rule.RowUi
|
import io.legado.app.data.entities.rule.RowUi
|
||||||
|
|||||||
@@ -60,12 +60,12 @@ object DefaultData {
|
|||||||
RssSource.fromJsonArray(json).getOrDefault(emptyList())
|
RssSource.fromJsonArray(json).getOrDefault(emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
val coverRuleConfig: BookCover.CoverRuleConfig by lazy {
|
val coverRule: BookCover.CoverRule by lazy {
|
||||||
val json = String(
|
val json = String(
|
||||||
appCtx.assets.open("defaultData${File.separator}coverRuleConfig.json")
|
appCtx.assets.open("defaultData${File.separator}coverRule.json")
|
||||||
.readBytes()
|
.readBytes()
|
||||||
)
|
)
|
||||||
GSON.fromJsonObject<BookCover.CoverRuleConfig>(json).getOrThrow()!!
|
GSON.fromJsonObject<BookCover.CoverRule>(json).getOrThrow()!!
|
||||||
}
|
}
|
||||||
|
|
||||||
val keyboardAssists: List<KeyboardAssist> by lazy {
|
val keyboardAssists: List<KeyboardAssist> by lazy {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
||||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||||
@@ -23,6 +24,7 @@ import io.legado.app.model.analyzeRule.AnalyzeUrl
|
|||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.*
|
||||||
import splitties.init.appCtx
|
import splitties.init.appCtx
|
||||||
|
|
||||||
|
@Keep
|
||||||
object BookCover {
|
object BookCover {
|
||||||
|
|
||||||
private const val coverRuleConfigKey = "legadoCoverRuleConfig"
|
private const val coverRuleConfigKey = "legadoCoverRuleConfig"
|
||||||
@@ -32,12 +34,6 @@ object BookCover {
|
|||||||
private set
|
private set
|
||||||
lateinit var defaultDrawable: Drawable
|
lateinit var defaultDrawable: Drawable
|
||||||
private set
|
private set
|
||||||
val coverRuleConfig: CoverRuleConfig
|
|
||||||
get() {
|
|
||||||
return GSON.fromJsonObject<CoverRuleConfig>(CacheManager.get(coverRuleConfigKey))
|
|
||||||
.getOrNull()
|
|
||||||
?: DefaultData.coverRuleConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -117,8 +113,14 @@ object BookCover {
|
|||||||
.thumbnail(loadBlur)
|
.thumbnail(loadBlur)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getCoverRule(): CoverRule {
|
||||||
|
return GSON.fromJsonObject<CoverRule>(CacheManager.get(coverRuleConfigKey))
|
||||||
|
.getOrNull()
|
||||||
|
?: DefaultData.coverRule
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun searchCover(book: Book): String? {
|
suspend fun searchCover(book: Book): String? {
|
||||||
val config = coverRuleConfig
|
val config = getCoverRule()
|
||||||
if (!config.enable || config.searchUrl.isBlank() || config.coverRule.isBlank()) {
|
if (!config.enable || config.searchUrl.isBlank() || config.coverRule.isBlank()) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@@ -135,16 +137,17 @@ object BookCover {
|
|||||||
return analyzeRule.getString(config.coverRule, isUrl = true)
|
return analyzeRule.getString(config.coverRule, isUrl = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveCoverRuleConfig(config: CoverRuleConfig) {
|
fun saveCoverRule(config: CoverRule) {
|
||||||
val json = GSON.toJson(config)
|
val json = GSON.toJson(config)
|
||||||
CacheManager.put(coverRuleConfigKey, json)
|
CacheManager.put(coverRuleConfigKey, json)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun delCoverRuleConfig() {
|
fun delCoverRule() {
|
||||||
CacheManager.delete(coverRuleConfigKey)
|
CacheManager.delete(coverRuleConfigKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class CoverRuleConfig(
|
@Keep
|
||||||
|
data class CoverRule(
|
||||||
var enable: Boolean = true,
|
var enable: Boolean = true,
|
||||||
var searchUrl: String,
|
var searchUrl: String,
|
||||||
var coverRule: String,
|
var coverRule: String,
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.legado.app.ui.book.audio
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.graphics.Color
|
|
||||||
import android.icu.text.SimpleDateFormat
|
import android.icu.text.SimpleDateFormat
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -79,7 +78,7 @@ class AudioPlayActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
binding.titleBar.setBackgroundColor(Color.argb(60, 0, 0, 0))
|
binding.titleBar.setBackgroundResource(R.color.transparent)
|
||||||
AudioPlay.titleData.observe(this) {
|
AudioPlay.titleData.observe(this) {
|
||||||
binding.titleBar.title = it
|
binding.titleBar.title = it
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.legado.app.ui.book.info
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Color
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@@ -102,7 +101,7 @@ class BookInfoActivity :
|
|||||||
|
|
||||||
@SuppressLint("PrivateResource")
|
@SuppressLint("PrivateResource")
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
binding.titleBar.setBackgroundColor(Color.argb(60, 0, 0, 0))
|
binding.titleBar.setBackgroundResource(R.color.transparent)
|
||||||
binding.arcView.setBgColor(backgroundColor)
|
binding.arcView.setBgColor(backgroundColor)
|
||||||
binding.llInfo.setBackgroundColor(backgroundColor)
|
binding.llInfo.setBackgroundColor(backgroundColor)
|
||||||
binding.scrollView.setBackgroundColor(backgroundColor)
|
binding.scrollView.setBackgroundColor(backgroundColor)
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities
|
package io.legado.app.ui.book.read.page.entities
|
||||||
|
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 章节信息
|
* 章节信息
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
data class TextChapter(
|
data class TextChapter(
|
||||||
val position: Int,
|
val position: Int,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities
|
package io.legado.app.ui.book.read.page.entities
|
||||||
|
|
||||||
import android.text.TextPaint
|
import android.text.TextPaint
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import io.legado.app.ui.book.read.page.entities.column.BaseColumn
|
import io.legado.app.ui.book.read.page.entities.column.BaseColumn
|
||||||
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
||||||
import io.legado.app.utils.textHeight
|
import io.legado.app.utils.textHeight
|
||||||
@@ -8,6 +9,7 @@ import io.legado.app.utils.textHeight
|
|||||||
/**
|
/**
|
||||||
* 行信息
|
* 行信息
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
@Suppress("unused", "MemberVisibilityCanBePrivate")
|
@Suppress("unused", "MemberVisibilityCanBePrivate")
|
||||||
data class TextLine(
|
data class TextLine(
|
||||||
var text: String = "",
|
var text: String = "",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package io.legado.app.ui.book.read.page.entities
|
|||||||
|
|
||||||
import android.text.Layout
|
import android.text.Layout
|
||||||
import android.text.StaticLayout
|
import android.text.StaticLayout
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.help.config.ReadBookConfig
|
import io.legado.app.help.config.ReadBookConfig
|
||||||
import io.legado.app.model.ReadBook
|
import io.legado.app.model.ReadBook
|
||||||
@@ -15,6 +16,7 @@ import kotlin.math.min
|
|||||||
/**
|
/**
|
||||||
* 页面信息
|
* 页面信息
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
@Suppress("unused", "MemberVisibilityCanBePrivate")
|
@Suppress("unused", "MemberVisibilityCanBePrivate")
|
||||||
data class TextPage(
|
data class TextPage(
|
||||||
var index: Int = 0,
|
var index: Int = 0,
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities
|
package io.legado.app.ui.book.read.page.entities
|
||||||
|
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 位置信息
|
* 位置信息
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
|
@Suppress("unused")
|
||||||
data class TextPos(
|
data class TextPos(
|
||||||
var relativePagePos: Int,
|
var relativePagePos: Int,
|
||||||
var lineIndex: Int,
|
var lineIndex: Int,
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities.column
|
package io.legado.app.ui.book.read.page.entities.column
|
||||||
|
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按钮列
|
* 按钮列
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
data class ButtonColumn(
|
data class ButtonColumn(
|
||||||
override var start: Float,
|
override var start: Float,
|
||||||
override var end: Float
|
override var end: Float
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities.column
|
package io.legado.app.ui.book.read.page.entities.column
|
||||||
|
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片列
|
* 图片列
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
data class ImageColumn(
|
data class ImageColumn(
|
||||||
override var start: Float,
|
override var start: Float,
|
||||||
override var end: Float,
|
override var end: Float,
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package io.legado.app.ui.book.read.page.entities.column
|
|||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
import android.graphics.Path
|
import android.graphics.Path
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评论按钮列
|
* 评论按钮列
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
data class ReviewColumn(
|
data class ReviewColumn(
|
||||||
override var start: Float,
|
override var start: Float,
|
||||||
override var end: Float,
|
override var end: Float,
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package io.legado.app.ui.book.read.page.entities.column
|
package io.legado.app.ui.book.read.page.entities.column
|
||||||
|
|
||||||
|
import com.android.tools.r8.Keep
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文字列
|
* 文字列
|
||||||
*/
|
*/
|
||||||
|
@Keep
|
||||||
data class TextColumn(
|
data class TextColumn(
|
||||||
override var start: Float,
|
override var start: Float,
|
||||||
override var end: Float,
|
override var end: Float,
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
package io.legado.app.ui.config
|
package io.legado.app.ui.config
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
import io.legado.app.databinding.DialogCoverRuleConfigBinding
|
import io.legado.app.databinding.DialogCoverRuleConfigBinding
|
||||||
|
import io.legado.app.lib.theme.primaryColor
|
||||||
import io.legado.app.model.BookCover
|
import io.legado.app.model.BookCover
|
||||||
|
import io.legado.app.utils.GSON
|
||||||
import io.legado.app.utils.setLayout
|
import io.legado.app.utils.setLayout
|
||||||
import io.legado.app.utils.toastOnUi
|
import io.legado.app.utils.toastOnUi
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import splitties.views.onClick
|
import splitties.views.onClick
|
||||||
|
|
||||||
class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_config) {
|
class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_config) {
|
||||||
@@ -22,9 +28,8 @@ class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_conf
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
binding.cbEnable.isChecked = BookCover.coverRuleConfig.enable
|
binding.toolBar.setBackgroundColor(primaryColor)
|
||||||
binding.editSearchUrl.setText(BookCover.coverRuleConfig.searchUrl)
|
initData()
|
||||||
binding.editCoverUrlRule.setText(BookCover.coverRuleConfig.coverRule)
|
|
||||||
binding.tvCancel.onClick {
|
binding.tvCancel.onClick {
|
||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
}
|
}
|
||||||
@@ -35,16 +40,28 @@ class CoverRuleConfigDialog : BaseDialogFragment(R.layout.dialog_cover_rule_conf
|
|||||||
if (searchUrl.isNullOrBlank() || coverRule.isNullOrBlank()) {
|
if (searchUrl.isNullOrBlank() || coverRule.isNullOrBlank()) {
|
||||||
toastOnUi("搜索url和cover规则不能为空")
|
toastOnUi("搜索url和cover规则不能为空")
|
||||||
} else {
|
} else {
|
||||||
BookCover.CoverRuleConfig(enable, searchUrl, coverRule).let { config ->
|
BookCover.CoverRule(enable, searchUrl, coverRule).let { config ->
|
||||||
BookCover.saveCoverRuleConfig(config)
|
BookCover.saveCoverRule(config)
|
||||||
}
|
}
|
||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.tvFooterLeft.onClick {
|
binding.tvFooterLeft.onClick {
|
||||||
BookCover.delCoverRuleConfig()
|
BookCover.delCoverRule()
|
||||||
dismissAllowingStateLoss()
|
dismissAllowingStateLoss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initData() {
|
||||||
|
launch {
|
||||||
|
val rule = withContext(IO) {
|
||||||
|
BookCover.getCoverRule()
|
||||||
|
}
|
||||||
|
Log.e("coverRule", GSON.toJson(rule))
|
||||||
|
binding.cbEnable.isChecked = rule.enable
|
||||||
|
binding.editSearchUrl.setText(rule.searchUrl)
|
||||||
|
binding.editCoverUrlRule.setText(rule.coverRule)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -85,12 +85,13 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<io.legado.app.ui.widget.text.AccentTextView
|
<TextView
|
||||||
android:id="@+id/tv_cancel"
|
android:id="@+id/tv_cancel"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="12dp"
|
android:padding="12dp"
|
||||||
android:text="@string/cancel"
|
android:text="@string/cancel"
|
||||||
|
android:textColor="@color/secondaryText"
|
||||||
tools:ignore="RtlHardcoded" />
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
||||||
<io.legado.app.ui.widget.text.AccentTextView
|
<io.legado.app.ui.widget.text.AccentTextView
|
||||||
|
|||||||
Reference in New Issue
Block a user