diff --git a/app/build.gradle b/app/build.gradle
index 6ab639629..0b28f1a3e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -124,7 +124,7 @@ android {
}
manifestPlaceholders.put("app_name", "@string/app_name")
- //applicationIdSuffix '.debug'
+ applicationIdSuffix '.debug'
versionNameSuffix "_debug+${getGitCommitHash()}"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt
index fc0928144..3296e499b 100644
--- a/app/src/main/java/io/legado/app/constant/PreferKey.kt
+++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt
@@ -13,6 +13,13 @@ object PreferKey {
const val loadCoverOnlyWifi = "loadCoverOnlyWifi"
const val coverShowName = "coverShowName"
const val coverShowAuthor = "coverShowAuthor"
+ const val coverShowShadow = "coverShowShadow"
+ const val coverShowStroke = "coverShowStroke"
+ const val coverTextColor = "coverTextColor"
+ const val coverTextColorN = "coverTextColorN"
+ const val coverShadowColor = "coverShadowColor"
+ const val coverShadowColorN = "coverShadowColorN"
+ const val coverDefaultColor = "coverDefaultColor"
const val coverShowNameN = "coverShowNameN"
const val coverShowAuthorN = "coverShowAuthorN"
const val remoteServerId = "remoteServerId"
diff --git a/app/src/main/java/io/legado/app/model/BookCover.kt b/app/src/main/java/io/legado/app/model/BookCover.kt
index 51d255508..71f9e7114 100644
--- a/app/src/main/java/io/legado/app/model/BookCover.kt
+++ b/app/src/main/java/io/legado/app/model/BookCover.kt
@@ -3,6 +3,7 @@ package io.legado.app.model
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Bitmap
+import android.graphics.Color
import android.graphics.drawable.Drawable
import androidx.annotation.Keep
import androidx.core.graphics.drawable.toDrawable
@@ -35,10 +36,11 @@ import io.legado.app.utils.BitmapUtils
import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.getPrefBoolean
+import io.legado.app.utils.getPrefInt
import io.legado.app.utils.getPrefString
+import kotlinx.coroutines.currentCoroutineContext
import splitties.init.appCtx
import java.io.File
-import kotlin.coroutines.coroutineContext
@Keep
object BookCover {
@@ -48,6 +50,20 @@ object BookCover {
private set
var drawBookAuthor = true
private set
+ var drawBookShadow = true
+ private set
+ var drawBookStroke = true
+ private set
+ var coverTextColor: Int = Color.WHITE
+ private set
+ var coverShadowColor: Int = Color.WHITE
+ private set
+ var coverTextColorN: Int = Color.WHITE
+ private set
+ var coverShadowColorN: Int = Color.WHITE
+ private set
+ var coverDefaultColor = true
+ private set
lateinit var defaultDrawable: Drawable
private set
@@ -69,6 +85,21 @@ object BookCover {
} else {
appCtx.getPrefBoolean(PreferKey.coverShowAuthor, true)
}
+ drawBookShadow =
+ appCtx.getPrefBoolean(PreferKey.coverShowShadow, false)
+ drawBookStroke =
+ appCtx.getPrefBoolean(PreferKey.coverShowStroke, true)
+ coverDefaultColor =
+ appCtx.getPrefBoolean(PreferKey.coverDefaultColor, true)
+ coverTextColor =
+ appCtx.getPrefInt(PreferKey.coverTextColor, Color.WHITE)
+ coverTextColorN =
+ appCtx.getPrefInt(PreferKey.coverTextColorN, Color.BLACK)
+ coverShadowColor =
+ appCtx.getPrefInt(PreferKey.coverShadowColor, Color.WHITE)
+ coverShadowColorN =
+ appCtx.getPrefInt(PreferKey.coverShadowColorN, Color.BLACK)
+
val key = if (isNightTheme) PreferKey.defaultCoverDark else PreferKey.defaultCover
val path = appCtx.getPrefString(key)
if (path.isNullOrBlank()) {
@@ -222,12 +253,12 @@ object BookCover {
config.searchUrl,
book.name,
source = config,
- coroutineContext = coroutineContext,
+ coroutineContext = currentCoroutineContext(),
hasLoginHeader = false
)
val res = analyzeUrl.getStrResponseAwait()
val analyzeRule = AnalyzeRule(book)
- analyzeRule.setCoroutineContext(coroutineContext)
+ analyzeRule.setCoroutineContext(currentCoroutineContext())
analyzeRule.setContent(res.body)
analyzeRule.setRedirectUrl(res.url)
return analyzeRule.getString(config.coverRule, isUrl = true)
diff --git a/app/src/main/java/io/legado/app/ui/config/CoverConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/CoverConfigFragment.kt
index 04c7b8e46..97f2eec62 100644
--- a/app/src/main/java/io/legado/app/ui/config/CoverConfigFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/config/CoverConfigFragment.kt
@@ -74,6 +74,13 @@ class CoverConfigFragment : PreferenceFragment(),
?.isEnabled = getPrefBoolean(key)
BookCover.upDefaultCover()
}
+ PreferKey.coverTextColor,
+ PreferKey.coverTextColorN,
+ PreferKey.coverShadowColor,
+ PreferKey.coverShadowColorN,
+ PreferKey.coverDefaultColor,
+ PreferKey.coverShowShadow,
+ PreferKey.coverShowStroke,
PreferKey.coverShowAuthor,
PreferKey.coverShowAuthorN -> {
BookCover.upDefaultCover()
diff --git a/app/src/main/java/io/legado/app/ui/widget/image/CoverImageView.kt b/app/src/main/java/io/legado/app/ui/widget/image/CoverImageView.kt
index 06897489a..bf43c5e6d 100644
--- a/app/src/main/java/io/legado/app/ui/widget/image/CoverImageView.kt
+++ b/app/src/main/java/io/legado/app/ui/widget/image/CoverImageView.kt
@@ -22,7 +22,6 @@ import io.legado.app.constant.AppPattern
import io.legado.app.help.config.AppConfig
import io.legado.app.help.glide.ImageLoader
import io.legado.app.help.glide.OkHttpModelLoader
-//import io.legado.app.lib.theme.accentColor
import io.legado.app.model.BookCover
import io.legado.app.utils.spToPx
import io.legado.app.utils.textHeight
@@ -47,6 +46,9 @@ class CoverImageView @JvmOverloads constructor(
private var author: String? = null
private var nameHeight = 0f
private var authorHeight = 0f
+ private val isNightTheme = AppConfig.isNightTheme
+ val colorKey = if (isNightTheme) BookCover.coverTextColorN else BookCover.coverTextColor
+ val shadowKey = if (isNightTheme) BookCover.coverShadowColorN else BookCover.coverShadowColor
private val namePaint by lazy {
val textPaint = TextPaint()
textPaint.typeface = Typeface.DEFAULT_BOLD
@@ -119,21 +121,35 @@ class CoverImageView @JvmOverloads constructor(
}
private fun drawNameAuthor(canvas: Canvas) {
+ var startX = width * 0.2f
+ var startY = viewHeight * 0.2f
if (BookCover.drawBookName) {
- var startX = width * 0.2f
- var startY = viewHeight * 0.2f
-
name?.toStringArray()?.let { nameChars ->
val textSize = viewWidth / 8
namePaint.textSize = textSize
namePaint.strokeWidth = textSize / 8
- nameChars.forEach { char ->
- namePaint.color = Color.WHITE
- namePaint.style = Paint.Style.STROKE
- canvas.drawText(char, startX, startY, namePaint)
+ if (BookCover.drawBookShadow) {
+ namePaint.setShadowLayer(
+ 4f,
+ 0f,
+ 0f,
+ shadowKey
+ )
+ } else {
+ namePaint.clearShadowLayer()
+ }
- namePaint.color = context.themeColor(androidx.appcompat.R.attr.colorPrimary)
+ nameChars.forEach { char ->
+ if (BookCover.drawBookStroke) {
+ namePaint.color = Color.WHITE
+ namePaint.style = Paint.Style.STROKE
+ canvas.drawText(char, startX, startY, namePaint)
+ }
+ if (BookCover.coverDefaultColor)
+ namePaint.color = context.themeColor(com.google.android.material.R.attr.colorSecondary)
+ else
+ namePaint.color = colorKey
namePaint.style = Paint.Style.FILL
canvas.drawText(char, startX, startY, namePaint)
@@ -144,33 +160,48 @@ class CoverImageView @JvmOverloads constructor(
startY = viewHeight * 0.2f
}
}
+ namePaint.clearShadowLayer()
}
}
if (BookCover.drawBookAuthor) {
- author?.toStringArray()?.let { authorChars ->
- val textSize = viewWidth / 10
- authorPaint.textSize = textSize
- authorPaint.strokeWidth = textSize / 5
+ author?.toStringArray()?.let { author ->
+ authorPaint.textSize = viewWidth / 10
+ authorPaint.strokeWidth = authorPaint.textSize / 5
+ startX = width * 0.8f
+ startY = viewHeight * 0.95f - author.size * authorPaint.textHeight
+ startY = maxOf(startY, viewHeight * 0.2f)
+ if (BookCover.drawBookShadow) {
+ authorPaint.setShadowLayer(
+ 4f,
+ 0f,
+ 0f,
+ shadowKey
+ )
+ } else {
+ authorPaint.clearShadowLayer()
+ }
- var startX = width * 0.8f
- var startY = viewHeight * 0.8f
-
- authorChars.forEach { char ->
-
- authorPaint.color = Color.WHITE
- authorPaint.style = Paint.Style.STROKE
- canvas.drawText(char, startX, startY, authorPaint)
-
- authorPaint.color =
- context.themeColor(com.google.android.material.R.attr.colorSecondary)
+ author.forEach {
+ if (BookCover.drawBookStroke) {
+ authorPaint.color = Color.WHITE
+ authorPaint.style = Paint.Style.STROKE
+ canvas.drawText(it, startX, startY, authorPaint)
+ }
+ if (BookCover.coverDefaultColor)
+ authorPaint.color = context.themeColor(com.google.android.material.R.attr.colorSecondary)
+ else
+ authorPaint.color = colorKey
authorPaint.style = Paint.Style.FILL
- canvas.drawText(char, startX, startY, authorPaint)
+ canvas.drawText(it, startX, startY, authorPaint)
startY += authorPaint.textHeight
- if (startY > viewHeight * 0.95f) return@let
+ if (startY > viewHeight * 0.95) {
+ return@let
+ }
}
+ authorPaint.clearShadowLayer()
}
}
}
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index dcc7bd2d3..2b22a2309 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -1356,4 +1356,7 @@
已读
漫画
小说
+ 显示字体阴影
+ 显示字体描边
+ 使用默认字体颜色
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 0b337d455..1a604ad0e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -589,7 +589,6 @@
@color/md_light_disabled
#66666666
-
#FF578FCC
#eb4333
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fe4893b02..db6cab588 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1359,4 +1359,7 @@
已读
漫画
小说
+ 显示字体阴影
+ 显示字体描边
+ 使用默认字体颜色
diff --git a/app/src/main/res/xml/pref_config_cover.xml b/app/src/main/res/xml/pref_config_cover.xml
index 1d8db29ed..be769d9c9 100644
--- a/app/src/main/res/xml/pref_config_cover.xml
+++ b/app/src/main/res/xml/pref_config_cover.xml
@@ -25,6 +25,29 @@
app:allowDividerBelow="false"
app:iconSpaceReserved="false" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+