Update UI Style

This commit is contained in:
HapeLee
2025-06-01 23:23:15 +08:00
parent 3e168fb569
commit 09a39a851e
363 changed files with 3262 additions and 3330 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ android {
} }
defaultConfig { defaultConfig {
applicationId "io.legado.app" applicationId "io.legado.app"
minSdk 21 minSdk 24
targetSdk 35 targetSdk 35
versionCode 10000 + gitCommits versionCode 10000 + gitCommits
versionName version versionName version
+1 -1
View File
@@ -29,7 +29,7 @@
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme.Light" android:theme="@style/Base.AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute"> tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
<!-- 主入口 --> <!-- 主入口 -->
<activity <activity
+2
View File
@@ -10,6 +10,7 @@ import android.content.pm.ApplicationInfo
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build import android.os.Build
import com.github.liuyueyi.quick.transfer.constants.TransType import com.github.liuyueyi.quick.transfer.constants.TransType
import com.google.android.material.color.DynamicColors
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.jeremyliao.liveeventbus.logger.DefaultLogger import com.jeremyliao.liveeventbus.logger.DefaultLogger
import com.script.rhino.ReadOnlyJavaObject import com.script.rhino.ReadOnlyJavaObject
@@ -67,6 +68,7 @@ class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
DynamicColors.applyToActivitiesIfAvailable(this)
CrashHandler(this) CrashHandler(this)
if (isDebuggable) { if (isDebuggable) {
ThreadUtils.setThreadAssertsDisabledForTesting(true) ThreadUtils.setThreadAssertsDisabledForTesting(true)
@@ -16,6 +16,7 @@ import androidx.activity.addCallback
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
@@ -23,8 +24,8 @@ import io.legado.app.constant.Theme
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ThemeConfig import io.legado.app.help.config.ThemeConfig
import io.legado.app.lib.theme.ThemeStore import io.legado.app.lib.theme.ThemeStore
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.TitleBar import io.legado.app.ui.widget.TitleBar
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import io.legado.app.utils.applyBackgroundTint import io.legado.app.utils.applyBackgroundTint
@@ -71,7 +72,7 @@ abstract class BaseActivity<VB : ViewBinding>(
attrs: AttributeSet attrs: AttributeSet
): View? { ): View? {
if (AppConst.menuViewNames.contains(name) && parent?.parent is FrameLayout) { if (AppConst.menuViewNames.contains(name) && parent?.parent is FrameLayout) {
(parent.parent as View).setBackgroundColor(backgroundColor) //(parent.parent as View).setBackgroundColor(backgroundColor)
} }
return super.onCreateView(parent, name, context, attrs) return super.onCreateView(parent, name, context, attrs)
} }
@@ -85,8 +86,8 @@ abstract class BaseActivity<VB : ViewBinding>(
setContentView(binding.root) setContentView(binding.root)
upBackgroundImage() upBackgroundImage()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
findViewById<TitleBar>(R.id.title_bar) findViewById<AppBarLayout>(R.id.title_bar)
?.onMultiWindowModeChanged(isInMultiWindowMode, fullScreen) //?.onMultiWindowModeChanged(isInMultiWindowMode, fullScreen)
} }
onBackPressedDispatcher.addCallback(this) { onBackPressedDispatcher.addCallback(this) {
finish() finish()
@@ -98,15 +99,15 @@ abstract class BaseActivity<VB : ViewBinding>(
@RequiresApi(Build.VERSION_CODES.O) @RequiresApi(Build.VERSION_CODES.O)
override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) { override fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, newConfig: Configuration) {
super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig) super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig)
findViewById<TitleBar>(R.id.title_bar) // findViewById<TitleBar>(R.id.title_bar)
?.onMultiWindowModeChanged(isInMultiWindowMode, fullScreen) // ?.onMultiWindowModeChanged(isInMultiWindowMode, fullScreen)
setupSystemBar() setupSystemBar()
} }
override fun onConfigurationChanged(newConfig: Configuration) { override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig) super.onConfigurationChanged(newConfig)
findViewById<TitleBar>(R.id.title_bar) //findViewById<TitleBar>(R.id.title_bar)
?.onMultiWindowModeChanged(isInMultiWindow, fullScreen) //?.onMultiWindowModeChanged(isInMultiWindow, fullScreen)
setupSystemBar() setupSystemBar()
} }
@@ -140,21 +141,21 @@ abstract class BaseActivity<VB : ViewBinding>(
Theme.Transparent -> setTheme(R.style.AppTheme_Transparent) Theme.Transparent -> setTheme(R.style.AppTheme_Transparent)
Theme.Dark -> { Theme.Dark -> {
setTheme(R.style.AppTheme_Dark) setTheme(R.style.AppTheme_Dark)
window.decorView.applyBackgroundTint(backgroundColor) //window.decorView.applyBackgroundTint(backgroundColor)
} }
Theme.Light -> { Theme.Light -> {
setTheme(R.style.AppTheme_Light) setTheme(R.style.AppTheme_Light)
window.decorView.applyBackgroundTint(backgroundColor) //window.decorView.applyBackgroundTint(backgroundColor)
} }
else -> { else -> {
if (ColorUtils.isColorLight(primaryColor)) { // if (ColorUtils.isColorLight(primaryColor)) {
setTheme(R.style.AppTheme_Light) // setTheme(R.style.AppTheme_Light)
} else { // } else {
setTheme(R.style.AppTheme_Dark) // setTheme(R.style.AppTheme_Dark)
} // }
window.decorView.applyBackgroundTint(backgroundColor) //window.decorView.applyBackgroundTint(backgroundColor)
} }
} }
} }
@@ -177,24 +178,24 @@ abstract class BaseActivity<VB : ViewBinding>(
if (fullScreen && !isInMultiWindow) { if (fullScreen && !isInMultiWindow) {
fullScreen() fullScreen()
} }
val isTransparentStatusBar = AppConfig.isTransparentStatusBar //val isTransparentStatusBar = AppConfig.isTransparentStatusBar
val statusBarColor = ThemeStore.statusBarColor(this, isTransparentStatusBar) //val statusBarColor = ThemeStore.statusBarColor(this, isTransparentStatusBar)
setStatusBarColorAuto(statusBarColor, isTransparentStatusBar, fullScreen) //setStatusBarColorAuto(statusBarColor, isTransparentStatusBar, fullScreen)
if (toolBarTheme == Theme.Dark) { // if (toolBarTheme == Theme.Dark) {
setLightStatusBar(false) // setLightStatusBar(false)
} else if (toolBarTheme == Theme.Light) { // } else if (toolBarTheme == Theme.Light) {
setLightStatusBar(true) // setLightStatusBar(true)
} // }
upNavigationBarColor() upNavigationBarColor()
} }
open fun upNavigationBarColor() { open fun upNavigationBarColor() {
if (AppConfig.immNavigationBar) { // if (AppConfig.immNavigationBar) {
setNavigationBarColorAuto(ThemeStore.navigationBarColor(this)) // setNavigationBarColorAuto(ThemeStore.navigationBarColor(this))
} else { // } else {
val nbColor = ColorUtils.darkenColor(ThemeStore.navigationBarColor(this)) // val nbColor = ColorUtils.darkenColor(ThemeStore.navigationBarColor(this))
setNavigationBarColorAuto(nbColor) // setNavigationBarColorAuto(nbColor)
} // }
} }
open fun observeLiveBus() { open fun observeLiveBus() {
@@ -0,0 +1,77 @@
package io.legado.app.base
import android.app.Dialog
import android.content.DialogInterface
import android.content.DialogInterface.OnDismissListener
import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.annotation.LayoutRes
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.lifecycleScope
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.legado.app.R
import io.legado.app.constant.AppLog
import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.lib.theme.ThemeStore
import io.legado.app.utils.setBackgroundKeepPadding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext
abstract class BaseBottomSheetDialogFragment(
@LayoutRes layoutID: Int
) : BottomSheetDialogFragment(layoutID) {
private var onDismissListener: OnDismissListener? = null
fun setOnDismissListener(onDismissListener: OnDismissListener?) {
this.onDismissListener = onDismissListener
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
// setStyle(STYLE_NO_TITLE, 0)
// }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
onFragmentCreated(view, savedInstanceState)
observeLiveBus()
}
abstract fun onFragmentCreated(view: View, savedInstanceState: Bundle?)
override fun show(manager: FragmentManager, tag: String?) {
kotlin.runCatching {
manager.beginTransaction().remove(this).commit()
super.show(manager, tag)
}.onFailure {
AppLog.put("显示BottomSheetDialog失败 tag:$tag\n$it")
}
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
onDismissListener?.onDismiss(dialog)
}
fun <T> execute(
scope: CoroutineScope = lifecycleScope,
context: CoroutineContext = Dispatchers.IO,
block: suspend CoroutineScope.() -> T
) = Coroutine.async(scope, context) { block() }
open fun observeLiveBus() {
}
}
@@ -13,6 +13,7 @@ import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
@@ -38,40 +39,36 @@ abstract class BaseDialogFragment(
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
if (adaptationSoftKeyboard) { // if (adaptationSoftKeyboard) {
dialog?.window?.setBackgroundDrawableResource(R.color.transparent) // dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
} else if (AppConfig.isEInkMode) { // } else if (AppConfig.isEInkMode) {
dialog?.window?.let { // dialog?.window?.let {
it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
val attr = it.attributes // val attr = it.attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.windowAnimations = 0 // attr.windowAnimations = 0
it.attributes = attr // it.attributes = attr
it.decorView.setBackgroundKeepPadding(R.color.transparent) // it.decorView.setBackgroundKeepPadding(R.color.transparent)
} // }
// 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行. // // 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行.
lifecycle.addObserver(LifecycleEventObserver { _, event -> // lifecycle.addObserver(LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_START) { // if (event == Lifecycle.Event.ON_START) {
when (dialog?.window?.attributes?.gravity) { // when (dialog?.window?.attributes?.gravity) {
Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom) // Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom)
Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top) // Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top)
else -> { // else -> {
val padding = 2.dpToPx(); // val padding = 2.dpToPx();
view?.setPadding(padding, padding, padding, padding) // view?.setPadding(padding, padding, padding, padding)
view?.setBackgroundResource(R.drawable.bg_eink_border_dialog) // view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
} // }
} // }
} // }
}) // })
} // }
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
//不加这个android 5.0对话框顶部会有空白
setStyle(STYLE_NO_TITLE, 0)
}
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -45,10 +45,10 @@ abstract class BaseFragment(@LayoutRes layoutID: Int) : Fragment(layoutID) {
} }
private fun onMultiWindowModeChanged() { private fun onMultiWindowModeChanged() {
(activity as? BaseActivity<*>)?.let { // (activity as? BaseActivity<*>)?.let {
view?.findViewById<TitleBar>(R.id.title_bar) // view?.findViewById<TitleBar>(R.id.title_bar)
?.onMultiWindowModeChanged(it.isInMultiWindow, it.fullScreen) // ?.onMultiWindowModeChanged(it.isInMultiWindow, it.fullScreen)
} // }
} }
fun setSupportToolbar(toolbar: Toolbar) { fun setSupportToolbar(toolbar: Toolbar) {
@@ -5,39 +5,40 @@ import android.view.WindowManager
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
abstract class BasePrefDialogFragment( abstract class BasePrefDialogFragment(
) : DialogFragment() { ) : BottomSheetDialogFragment() {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
dialog?.window?.let { // dialog?.window?.let {
it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
val attr = it.attributes // val attr = it.attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.windowAnimations = 0 // attr.windowAnimations = 0
it.attributes = attr // it.attributes = attr
it.setBackgroundDrawableResource(R.color.transparent) // it.setBackgroundDrawableResource(R.color.transparent)
} // }
// 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行. // 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行.
lifecycle.addObserver(LifecycleEventObserver { _, event -> lifecycle.addObserver(LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_START) { // if (event == Lifecycle.Event.ON_START) {
when (dialog?.window?.attributes?.gravity) { // when (dialog?.window?.attributes?.gravity) {
Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom) // Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom)
Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top) // Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top)
else -> { // else -> {
val padding = 2.dpToPx(); // val padding = 2.dpToPx();
view?.setPadding(padding, padding, padding, padding) // view?.setPadding(padding, padding, padding, padding)
view?.setBackgroundResource(R.drawable.bg_eink_border_dialog) // view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
} // }
} // }
} // }
}) })
} }
} }
@@ -76,9 +76,9 @@ object PreferKey {
const val textFullJustify = "textFullJustify" const val textFullJustify = "textFullJustify"
const val textBottomJustify = "textBottomJustify" const val textBottomJustify = "textBottomJustify"
const val autoReadSpeed = "autoReadSpeed" const val autoReadSpeed = "autoReadSpeed"
const val barElevation = "barElevation" //const val barElevation = "barElevation"
const val transparentStatusBar = "transparentStatusBar" //const val transparentStatusBar = "transparentStatusBar"
const val immNavigationBar = "immNavigationBar" //const val immNavigationBar = "immNavigationBar"
const val defaultCover = "defaultCover" const val defaultCover = "defaultCover"
const val defaultCoverDark = "defaultCoverDark" const val defaultCoverDark = "defaultCoverDark"
const val replaceEnableDefault = "replaceEnableDefault" const val replaceEnableDefault = "replaceEnableDefault"
@@ -149,11 +149,11 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val textSelectAble: Boolean val textSelectAble: Boolean
get() = appCtx.getPrefBoolean(PreferKey.textSelectAble, true) get() = appCtx.getPrefBoolean(PreferKey.textSelectAble, true)
val isTransparentStatusBar: Boolean // val isTransparentStatusBar: Boolean
get() = appCtx.getPrefBoolean(PreferKey.transparentStatusBar, true) // get() = appCtx.getPrefBoolean(PreferKey.transparentStatusBar, true)
//
val immNavigationBar: Boolean // val immNavigationBar: Boolean
get() = appCtx.getPrefBoolean(PreferKey.immNavigationBar, true) // get() = appCtx.getPrefBoolean(PreferKey.immNavigationBar, true)
val screenOrientation: String? val screenOrientation: String?
get() = appCtx.getPrefString(PreferKey.screenOrientation) get() = appCtx.getPrefString(PreferKey.screenOrientation)
@@ -291,14 +291,14 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
appCtx.putPrefInt(PreferKey.systemTypefaces, value) appCtx.putPrefInt(PreferKey.systemTypefaces, value)
} }
var elevation: Int // var elevation: Int
get() = if (isEInkMode) 0 else appCtx.getPrefInt( // get() = if (isEInkMode) 0 else appCtx.getPrefInt(
PreferKey.barElevation, // PreferKey.barElevation,
AppConst.sysElevation // AppConst.sysElevation
) // )
set(value) { // set(value) {
appCtx.putPrefInt(PreferKey.barElevation, value) // appCtx.putPrefInt(PreferKey.barElevation, value)
} // }
var readUrlInBrowser: Boolean var readUrlInBrowser: Boolean
get() = appCtx.getPrefBoolean(PreferKey.readUrlOpenInBrowser) get() = appCtx.getPrefBoolean(PreferKey.readUrlOpenInBrowser)
@@ -1,10 +1,13 @@
package io.legado.app.help.config package io.legado.app.help.config
import android.annotation.SuppressLint
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.Keep import androidx.annotation.Keep
import androidx.core.content.ContextCompat
import com.google.android.material.color.MaterialColors
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.PageAnim import io.legado.app.constant.PageAnim
@@ -673,8 +676,10 @@ object ReadBookConfig {
fun curBgDrawable(width: Int, height: Int): Drawable { fun curBgDrawable(width: Int, height: Int): Drawable {
if (width == 0 || height == 0) { if (width == 0 || height == 0) {
return ColorDrawable(appCtx.getCompatColor(R.color.background)) val backgroundColor = MaterialColors.getColor(appCtx, com.google.android.material.R.attr.colorSurface, Color.WHITE)
return ColorDrawable(backgroundColor)
} }
var bgDrawable: Drawable? = null var bgDrawable: Drawable? = null
val resources = appCtx.resources val resources = appCtx.resources
try { try {
@@ -685,7 +690,6 @@ object ReadBookConfig {
val bitmap = BitmapUtils.decodeAssetsBitmap(appCtx, path, width, height) val bitmap = BitmapUtils.decodeAssetsBitmap(appCtx, path, width, height)
BitmapDrawable(resources, bitmap?.resizeAndRecycle(width, height)) BitmapDrawable(resources, bitmap?.resizeAndRecycle(width, height))
} }
else -> { else -> {
val path = curBgStr().let { val path = curBgStr().let {
if (it.contains(File.separator)) it if (it.contains(File.separator)) it
@@ -700,7 +704,10 @@ object ReadBookConfig {
} catch (e: Exception) { } catch (e: Exception) {
e.printOnDebug() e.printOnDebug()
} }
return bgDrawable ?: ColorDrawable(appCtx.getCompatColor(R.color.background))
// fallback 使用 MD3 的 colorSurface 作为背景色
val fallbackColor = MaterialColors.getColor(appCtx, com.google.android.material.R.attr.colorSurface, Color.WHITE)
return bgDrawable ?: ColorDrawable(fallbackColor)
} }
} }
} }
@@ -29,6 +29,7 @@ import io.legado.app.utils.putPrefInt
import io.legado.app.utils.stackBlur import io.legado.app.utils.stackBlur
import splitties.init.appCtx import splitties.init.appCtx
import java.io.File import java.io.File
import androidx.core.graphics.toColorInt
@Keep @Keep
object ThemeConfig { object ThemeConfig {
@@ -146,10 +147,10 @@ object ThemeConfig {
} }
fun applyConfig(context: Context, config: Config) { fun applyConfig(context: Context, config: Config) {
val primary = Color.parseColor(config.primaryColor) val primary = config.primaryColor.toColorInt()
val accent = Color.parseColor(config.accentColor) val accent = config.accentColor.toColorInt()
val background = Color.parseColor(config.backgroundColor) val background = config.backgroundColor.toColorInt()
val bBackground = Color.parseColor(config.bottomBackground) val bBackground = config.bottomBackground.toColorInt()
if (config.isNightTheme) { if (config.isNightTheme) {
context.putPrefInt(PreferKey.cNPrimary, primary) context.putPrefInt(PreferKey.cNPrimary, primary)
context.putPrefInt(PreferKey.cNAccent, accent) context.putPrefInt(PreferKey.cNAccent, accent)
@@ -6,12 +6,13 @@ import android.graphics.drawable.Drawable
import android.view.KeyEvent import android.view.KeyEvent
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
internal class AndroidAlertBuilder(override val ctx: Context) : AlertBuilder<AlertDialog> { internal class AndroidAlertBuilder(override val ctx: Context) : AlertBuilder<AlertDialog> {
private val builder = AlertDialog.Builder(ctx) private val builder = MaterialAlertDialogBuilder(ctx)
override fun setTitle(title: CharSequence) { override fun setTitle(title: CharSequence) {
builder.setTitle(title) builder.setTitle(title)
@@ -6,7 +6,7 @@ import android.widget.TextView
import androidx.preference.EditTextPreference.OnBindEditTextListener import androidx.preference.EditTextPreference.OnBindEditTextListener
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class EditTextPreference(context: Context, attrs: AttributeSet) : class EditTextPreference(context: Context, attrs: AttributeSet) :
@@ -14,7 +14,7 @@ class EditTextPreference(context: Context, attrs: AttributeSet) :
private var mOnBindEditTextListener: OnBindEditTextListener? = null private var mOnBindEditTextListener: OnBindEditTextListener? = null
private val onBindEditTextListener = OnBindEditTextListener { editText -> private val onBindEditTextListener = OnBindEditTextListener { editText ->
editText.applyTint(context.accentColor) //editText.applyTint(context.accentColor)
mOnBindEditTextListener?.onBindEditText(editText) mOnBindEditTextListener?.onBindEditText(editText)
} }
@@ -9,9 +9,9 @@ import androidx.preference.EditTextPreferenceDialogFragmentCompat
import androidx.preference.PreferenceDialogFragmentCompat import androidx.preference.PreferenceDialogFragmentCompat
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.filletBackground //import io.legado.app.lib.theme.filletBackground
import io.legado.app.utils.dpToPx
class EditTextPreferenceDialog : EditTextPreferenceDialogFragmentCompat() { class EditTextPreferenceDialog : EditTextPreferenceDialogFragmentCompat() {
@@ -29,14 +29,14 @@ class EditTextPreferenceDialog : EditTextPreferenceDialogFragmentCompat() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) val dialog = super.onCreateDialog(savedInstanceState)
dialog.window?.setBackgroundDrawable(requireContext().filletBackground) // dialog.window?.setBackgroundDrawable(requireContext().filletBackground)
dialog.window?.decorView?.post { // dialog.window?.decorView?.post {
(dialog as AlertDialog).run { // (dialog as AlertDialog).run {
getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor)
} // }
} // }
return dialog return dialog
} }
@@ -54,8 +54,8 @@ class EditTextPreferenceDialog : EditTextPreferenceDialogFragmentCompat() {
Gravity.TOP -> it.decorView.setBackgroundResource(R.drawable.bg_eink_border_bottom) Gravity.TOP -> it.decorView.setBackgroundResource(R.drawable.bg_eink_border_bottom)
Gravity.BOTTOM -> it.decorView.setBackgroundResource(R.drawable.bg_eink_border_top) Gravity.BOTTOM -> it.decorView.setBackgroundResource(R.drawable.bg_eink_border_top)
else -> { else -> {
val padding = 2.dpToPx(); // val padding = 2.dpToPx();
it.decorView.setPadding(padding, padding, padding, padding) // it.decorView.setPadding(padding, padding, padding, padding)
it.decorView.setBackgroundResource(R.drawable.bg_eink_border_dialog) it.decorView.setBackgroundResource(R.drawable.bg_eink_border_dialog)
} }
} }
@@ -13,12 +13,13 @@ import androidx.preference.ListPreference
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemIconPreferenceBinding import io.legado.app.databinding.ItemIconPreferenceBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.getCompatDrawable import io.legado.app.utils.getCompatDrawable
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
@@ -119,7 +120,7 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference
return "icon_$key" return "icon_$key"
} }
class IconDialog : BaseDialogFragment(R.layout.dialog_recycler_view) { class IconDialog : BaseBottomSheetDialogFragment(R.layout.dialog_recycler_view) {
var onChanged: ((value: String) -> Unit)? = null var onChanged: ((value: String) -> Unit)? = null
var dialogValue: String? = null var dialogValue: String? = null
@@ -130,11 +131,10 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.8f, ViewGroup.LayoutParams.WRAP_CONTENT)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.change_icon) binding.toolBar.setTitle(R.string.change_icon)
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
val adapter = Adapter(requireContext()) val adapter = Adapter(requireContext())
@@ -10,8 +10,8 @@ import androidx.preference.ListPreferenceDialogFragmentCompat
import androidx.preference.PreferenceDialogFragmentCompat import androidx.preference.PreferenceDialogFragmentCompat
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.filletBackground //import io.legado.app.lib.theme.filletBackground
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
@@ -31,17 +31,17 @@ class ListPreferenceDialog : ListPreferenceDialogFragmentCompat() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) val dialog = super.onCreateDialog(savedInstanceState)
dialog.window?.setBackgroundDrawable(requireContext().filletBackground) // dialog.window?.setBackgroundDrawable(requireContext().filletBackground)
dialog.window?.decorView?.post { // dialog.window?.decorView?.post {
(dialog as AlertDialog).run { // (dialog as AlertDialog).run {
getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor)
listView?.forEach { // listView?.forEach {
it.applyTint(accentColor) // it.applyTint(accentColor)
} // }
} // }
} // }
return dialog return dialog
} }
@@ -10,8 +10,8 @@ import androidx.preference.MultiSelectListPreferenceDialogFragmentCompat
import androidx.preference.PreferenceDialogFragmentCompat import androidx.preference.PreferenceDialogFragmentCompat
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.filletBackground //import io.legado.app.lib.theme.filletBackground
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
@@ -33,17 +33,17 @@ class MultiSelectListPreferenceDialog : MultiSelectListPreferenceDialogFragmentC
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) val dialog = super.onCreateDialog(savedInstanceState)
dialog.window?.setBackgroundDrawable(requireContext().filletBackground) // dialog.window?.setBackgroundDrawable(requireContext().filletBackground)
dialog.window?.decorView?.post { // dialog.window?.decorView?.post {
(dialog as AlertDialog).run { // (dialog as AlertDialog).run {
getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEGATIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(accentColor)
getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor) // getButton(AlertDialog.BUTTON_NEUTRAL)?.setTextColor(accentColor)
listView?.forEach { // listView?.forEach {
it.applyTint(accentColor) // it.applyTint(accentColor)
} // }
} // }
} // }
return dialog return dialog
} }
@@ -6,8 +6,8 @@ import android.widget.TextView
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
@@ -31,9 +31,9 @@ class NameListPreference(context: Context, attrs: AttributeSet) : ListPreference
if (v is TextView) { if (v is TextView) {
v.text = entry v.text = entry
if (isBottomBackground) { if (isBottomBackground) {
val bgColor = context.bottomBackground // val bgColor = context.bottomBackground
val pTextColor = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) // val pTextColor = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
v.setTextColor(pTextColor) //v.setTextColor(pTextColor)
} }
} }
super.onBindViewHolder(holder) super.onBindViewHolder(holder)
@@ -12,10 +12,10 @@ import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.getSecondaryTextColor //import io.legado.app.lib.theme.getSecondaryTextColor
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import splitties.views.onLongClick import splitties.views.onLongClick
import kotlin.math.roundToInt import kotlin.math.roundToInt
@@ -59,17 +59,17 @@ open class Preference(context: Context, attrs: AttributeSet) :
tvSummary.isGone = summary.isNullOrEmpty() tvSummary.isGone = summary.isNullOrEmpty()
} }
if (isBottomBackground && !viewHolder.itemView.isInEditMode) { if (isBottomBackground && !viewHolder.itemView.isInEditMode) {
val isLight = ColorUtils.isColorLight(context.bottomBackground) // val isLight = ColorUtils.isColorLight(context.bottomBackground)
val pTextColor = context.getPrimaryTextColor(isLight) // val pTextColor = context.getPrimaryTextColor(isLight)
tvTitle?.setTextColor(pTextColor) // tvTitle?.setTextColor(pTextColor)
val sTextColor = context.getSecondaryTextColor(isLight) // val sTextColor = context.getSecondaryTextColor(isLight)
tvSummary?.setTextColor(sTextColor) // tvSummary?.setTextColor(sTextColor)
} }
val iconView = viewHolder.findViewById(R.id.preference_icon) val iconView = viewHolder.findViewById(R.id.preference_icon)
if (iconView is ImageView) { if (iconView is ImageView) {
iconView.isVisible = icon != null iconView.isVisible = icon != null
iconView.setImageDrawable(icon) iconView.setImageDrawable(icon)
iconView.setColorFilter(context.accentColor) //iconView.setColorFilter(context.accentColor)
} }
if (weightLayoutRes != null && weightLayoutRes != 0 && viewId != null && viewId != 0) { if (weightLayoutRes != null && weightLayoutRes != 0 && viewId != null && viewId != 0) {
@@ -9,8 +9,8 @@ import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
@@ -28,28 +28,28 @@ class PreferenceCategory(context: Context, attrs: AttributeSet) :
if (view is TextView) { // && !view.isInEditMode if (view is TextView) { // && !view.isInEditMode
view.text = title view.text = title
if (view.isInEditMode) return if (view.isInEditMode) return
view.setTextColor(context.accentColor) //view.setTextColor(context.accentColor)
view.isVisible = !title.isNullOrEmpty() view.isVisible = !title.isNullOrEmpty()
val da = holder.findViewById(R.id.preference_divider_above) val da = holder.findViewById(R.id.preference_divider_above)
val dividerColor = if (AppConfig.isNightTheme) { val dividerColor = if (AppConfig.isNightTheme) {
ColorUtils.withAlpha( // ColorUtils.withAlpha(
ColorUtils.shiftColor(context.backgroundColor, 1.05f), // ColorUtils.shiftColor(context.backgroundColor, 1.05f),
0.5f // 0.5f
) // )
} else { } else {
ColorUtils.withAlpha( // ColorUtils.withAlpha(
ColorUtils.shiftColor(context.backgroundColor, 0.95f), // ColorUtils.shiftColor(context.backgroundColor, 0.95f),
0.5f // 0.5f
) // )
} }
if (da is View) { if (da is View) {
da.setBackgroundColor(dividerColor) //da.setBackgroundColor(dividerColor)
da.isVisible = holder.isDividerAllowedAbove da.isVisible = holder.isDividerAllowedAbove
} }
val db = holder.findViewById(R.id.preference_divider_below) val db = holder.findViewById(R.id.preference_divider_below)
if (db is View) { if (db is View) {
db.setBackgroundColor(dividerColor) //db.setBackgroundColor(dividerColor)
db.isVisible = holder.isDividerAllowedBelow db.isVisible = holder.isDividerAllowedBelow
} }
} }
@@ -6,7 +6,7 @@ import androidx.appcompat.widget.SwitchCompat
import androidx.preference.PreferenceViewHolder import androidx.preference.PreferenceViewHolder
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class SwitchPreference(context: Context, attrs: AttributeSet) : class SwitchPreference(context: Context, attrs: AttributeSet) :
@@ -17,6 +17,7 @@ class SwitchPreference(context: Context, attrs: AttributeSet) :
init { init {
layoutResource = R.layout.view_preference layoutResource = R.layout.view_preference
widgetLayoutResource = R.layout.preference_widget_material_switch
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.Preference) val typedArray = context.obtainStyledAttributes(attrs, R.styleable.Preference)
isBottomBackground = typedArray.getBoolean(R.styleable.Preference_isBottomBackground, false) isBottomBackground = typedArray.getBoolean(R.styleable.Preference_isBottomBackground, false)
typedArray.recycle() typedArray.recycle()
@@ -30,7 +31,7 @@ class SwitchPreference(context: Context, attrs: AttributeSet) :
isBottomBackground = isBottomBackground isBottomBackground = isBottomBackground
) )
if (v is SwitchCompat && !v.isInEditMode) { if (v is SwitchCompat && !v.isInEditMode) {
v.applyTint(context.accentColor) //v.applyTint(context.accentColor)
} }
super.onBindViewHolder(holder) super.onBindViewHolder(holder)
onLongClick?.let { listener -> onLongClick?.let { listener ->
@@ -16,133 +16,3 @@ import io.legado.app.utils.dpToPx
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
@ColorInt
fun Context.getPrimaryTextColor(dark: Boolean): Int {
return if (dark) {
ContextCompat.getColor(this, R.color.md_light_primary_text)
} else {
ContextCompat.getColor(this, R.color.md_dark_primary_text)
}
}
@ColorInt
fun Context.getSecondaryTextColor(dark: Boolean): Int {
return if (dark) {
ContextCompat.getColor(this, R.color.md_light_secondary)
} else {
ContextCompat.getColor(this, R.color.md_dark_primary_text)
}
}
@ColorInt
fun Context.getPrimaryDisabledTextColor(dark: Boolean): Int {
return if (dark) {
ContextCompat.getColor(this, R.color.md_light_disabled)
} else {
ContextCompat.getColor(this, R.color.md_dark_disabled)
}
}
@ColorInt
fun Context.getSecondaryDisabledTextColor(dark: Boolean): Int {
return if (dark) {
ContextCompat.getColor(
this,
androidx.appcompat.R.color.secondary_text_disabled_material_light
)
} else {
ContextCompat.getColor(
this,
androidx.appcompat.R.color.secondary_text_disabled_material_dark
)
}
}
val Context.primaryColor: Int
get() = ThemeStore.primaryColor(this)
val Context.primaryColorDark: Int
get() = ThemeStore.primaryColorDark(this)
val Context.accentColor: Int
get() = ThemeStore.accentColor(this)
val Context.backgroundColor: Int
get() = ThemeStore.backgroundColor(this)
val Context.bottomBackground: Int
get() = ThemeStore.bottomBackground(this)
val Context.primaryTextColor: Int
get() = getPrimaryTextColor(isDarkTheme)
val Context.secondaryTextColor: Int
get() = getSecondaryTextColor(isDarkTheme)
val Context.primaryDisabledTextColor: Int
get() = getPrimaryDisabledTextColor(isDarkTheme)
val Context.secondaryDisabledTextColor: Int
get() = getSecondaryDisabledTextColor(isDarkTheme)
val Fragment.primaryColor: Int
get() = ThemeStore.primaryColor(requireContext())
val Fragment.primaryColorDark: Int
get() = ThemeStore.primaryColorDark(requireContext())
val Fragment.accentColor: Int
get() = ThemeStore.accentColor(requireContext())
val Fragment.backgroundColor: Int
get() = ThemeStore.backgroundColor(requireContext())
val Fragment.bottomBackground: Int
get() = ThemeStore.bottomBackground(requireContext())
val Fragment.primaryTextColor: Int
get() = requireContext().getPrimaryTextColor(isDarkTheme)
val Fragment.secondaryTextColor: Int
get() = requireContext().getSecondaryTextColor(isDarkTheme)
val Fragment.primaryDisabledTextColor: Int
get() = requireContext().getPrimaryDisabledTextColor(isDarkTheme)
val Fragment.secondaryDisabledTextColor: Int
get() = requireContext().getSecondaryDisabledTextColor(isDarkTheme)
val Context.buttonDisabledColor: Int
get() = if (isDarkTheme) {
ContextCompat.getColor(this, R.color.md_dark_disabled)
} else {
ContextCompat.getColor(this, R.color.md_light_disabled)
}
val Context.isDarkTheme: Boolean
get() = ColorUtils.isColorLight(ThemeStore.primaryColor(this))
val Fragment.isDarkTheme: Boolean
get() = requireContext().isDarkTheme
val Context.elevation: Float
@SuppressLint("PrivateResource")
get() {
return if (AppConfig.elevation < 0) {
ThemeUtils.resolveFloat(
this,
android.R.attr.elevation,
resources.getDimension(com.google.android.material.R.dimen.design_appbar_elevation)
)
} else {
AppConfig.elevation.toFloat().dpToPx()
}
}
val Context.filletBackground: GradientDrawable
get() {
val background = GradientDrawable()
background.cornerRadius = 3f.dpToPx()
background.setColor(backgroundColor)
return background
}
@@ -12,6 +12,7 @@ import androidx.core.content.ContextCompat
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import io.legado.app.utils.LogUtils import io.legado.app.utils.LogUtils
import splitties.init.appCtx import splitties.init.appCtx
import androidx.core.graphics.toColorInt
/** /**
* @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid) * @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid)
@@ -22,6 +23,18 @@ private constructor(private val mContext: Context) : ThemeStoreInterface {
private val mEditor = prefs(mContext).edit() private val mEditor = prefs(mContext).edit()
// override fun enableDynamicColors(context: Context, enable: Boolean): ThemeStore {
// mEditor.putBoolean(ThemeStorePrefKeys.KEY_DYNAMIC_COLORS_ENABLED, enable)
// if (enable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// // 使用系统动态颜色
// val dynamicColors = DynamicColorsOptions.Builder()
// .setThemeOverlay(R.style.Theme_App_Dynamic)
// .build()
// DynamicColors.applyToActivitiesIfAvailable(context.applicationContext, dynamicColors)
// }
// return this
// }
override fun primaryColor(@ColorInt color: Int): ThemeStore { override fun primaryColor(@ColorInt color: Int): ThemeStore {
mEditor.putInt(ThemeStorePrefKeys.KEY_PRIMARY_COLOR, color) mEditor.putInt(ThemeStorePrefKeys.KEY_PRIMARY_COLOR, color)
if (autoGeneratePrimaryDark(mContext)) if (autoGeneratePrimaryDark(mContext))
@@ -195,7 +208,7 @@ private constructor(private val mContext: Context) : ThemeStoreInterface {
ThemeUtils.resolveColor( ThemeUtils.resolveColor(
context, context,
androidx.appcompat.R.attr.colorPrimary, androidx.appcompat.R.attr.colorPrimary,
Color.parseColor("#455A64") "#455A64".toColorInt()
) )
) )
} }
@@ -4,6 +4,7 @@ package io.legado.app.lib.theme
* @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid) * @author Aidan Follestad (afollestad), Karim Abou Zeid (kabouzeid)
*/ */
object ThemeStorePrefKeys { object ThemeStorePrefKeys {
const val KEY_DYNAMIC_COLORS_ENABLED = ""
const val CONFIG_PREFS_KEY_DEFAULT = "app_themes" const val CONFIG_PREFS_KEY_DEFAULT = "app_themes"
const val IS_CONFIGURED_KEY = "is_configured" const val IS_CONFIGURED_KEY = "is_configured"
@@ -27,4 +28,10 @@ object ThemeStorePrefKeys {
const val KEY_APPLY_PRIMARYDARK_STATUSBAR = "apply_primarydark_statusbar" const val KEY_APPLY_PRIMARYDARK_STATUSBAR = "apply_primarydark_statusbar"
const val KEY_APPLY_PRIMARY_NAVBAR = "apply_primary_navbar" const val KEY_APPLY_PRIMARY_NAVBAR = "apply_primary_navbar"
const val KEY_AUTO_GENERATE_PRIMARYDARK = "auto_generate_primarydark" const val KEY_AUTO_GENERATE_PRIMARYDARK = "auto_generate_primarydark"
const val KEY_COLOR_PRIMARY = "key_color_primary"
const val KEY_COLOR_ON_PRIMARY = "key_color_on_primary"
const val KEY_COLOR_PRIMARY_CONTAINER = "key_color_primary_container"
const val KEY_COLOR_ON_PRIMARY_CONTAINER = "key_color_on_primary_container"
const val KEY_COLOR_SECONDARY = "key_color_secondary"
} }
@@ -12,28 +12,30 @@ import io.legado.app.databinding.ViewNavigationBadgeBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.Selector import io.legado.app.lib.theme.Selector
import io.legado.app.lib.theme.ThemeStore import io.legado.app.lib.theme.ThemeStore
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getSecondaryTextColor //import io.legado.app.lib.theme.getSecondaryTextColor
import io.legado.app.ui.widget.text.BadgeView import io.legado.app.ui.widget.text.BadgeView
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import androidx.core.graphics.drawable.toDrawable
class ThemeBottomNavigationVIew(context: Context, attrs: AttributeSet) : class ThemeBottomNavigationVIew(context: Context, attrs: AttributeSet) :
BottomNavigationView(context, attrs) { BottomNavigationView(context, attrs) {
init { init {
val bgColor = context.bottomBackground // val bgColor = context.bottomBackground
setBackgroundColor(bgColor) // setBackgroundColor(bgColor)
val textIsDark = ColorUtils.isColorLight(bgColor) // val textIsDark = ColorUtils.isColorLight(bgColor)
val textColor = context.getSecondaryTextColor(textIsDark) // val textColor = context.getSecondaryTextColor(textIsDark)
val colorStateList = Selector.colorBuild() //
.setDefaultColor(textColor) // val colorStateList = Selector.colorBuild()
.setSelectedColor(ThemeStore.accentColor(context)).create() // .setDefaultColor(textColor)
itemIconTintList = colorStateList // .setSelectedColor(ThemeStore.accentColor(context)).create()
itemTextColor = colorStateList // itemIconTintList = colorStateList
// itemTextColor = colorStateList
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
isItemHorizontalTranslationEnabled = false isItemHorizontalTranslationEnabled = false
itemBackground = ColorDrawable(Color.TRANSPARENT) itemBackground = Color.TRANSPARENT.toDrawable()
} }
ViewCompat.setOnApplyWindowInsetsListener(this, null) ViewCompat.setOnApplyWindowInsetsListener(this, null)
@@ -3,14 +3,15 @@ package io.legado.app.lib.theme.view
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatCheckBox import androidx.appcompat.widget.AppCompatCheckBox
import io.legado.app.lib.theme.accentColor import com.google.android.material.checkbox.MaterialCheckBox
//import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class ThemeCheckBox(context: Context, attrs: AttributeSet) : AppCompatCheckBox(context, attrs) { class ThemeCheckBox(context: Context, attrs: AttributeSet) : MaterialCheckBox(context, attrs) {
init { // init {
if (!isInEditMode) { // if (!isInEditMode) {
applyTint(context.accentColor) // applyTint(context.accentColor)
} // }
} // }
} }
@@ -4,7 +4,7 @@ import android.content.Context
import android.os.Build import android.os.Build
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatEditText
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class ThemeEditText @JvmOverloads constructor( class ThemeEditText @JvmOverloads constructor(
@@ -12,12 +12,12 @@ class ThemeEditText @JvmOverloads constructor(
attrs: AttributeSet? = null attrs: AttributeSet? = null
) : AppCompatEditText(context, attrs) { ) : AppCompatEditText(context, attrs) {
init { // init {
if (!isInEditMode) { // if (!isInEditMode) {
applyTint(context.accentColor) // applyTint(context.accentColor)
} // }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
isLocalePreferredLineHeightForMinimumUsed = false // isLocalePreferredLineHeightForMinimumUsed = false
} // }
} // }
} }
@@ -3,14 +3,14 @@ package io.legado.app.lib.theme.view
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.widget.ProgressBar import android.widget.ProgressBar
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class ThemeProgressBar(context: Context, attrs: AttributeSet) : ProgressBar(context, attrs) { class ThemeProgressBar(context: Context, attrs: AttributeSet) : ProgressBar(context, attrs) {
init { // init {
if (!isInEditMode) { // if (!isInEditMode) {
applyTint(context.accentColor) // applyTint(context.accentColor)
} // }
} // }
} }
@@ -3,15 +3,16 @@ package io.legado.app.lib.theme.view
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatRadioButton import androidx.appcompat.widget.AppCompatRadioButton
import io.legado.app.lib.theme.accentColor import com.google.android.material.radiobutton.MaterialRadioButton
//import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
class ThemeRadioButton(context: Context, attrs: AttributeSet) : class ThemeRadioButton(context: Context, attrs: AttributeSet) :
AppCompatRadioButton(context, attrs) { MaterialRadioButton(context, attrs) {
init { // init {
if (!isInEditMode) { // if (!isInEditMode) {
applyTint(context.accentColor) // applyTint(context.accentColor)
} // }
} // }
} }
@@ -3,19 +3,19 @@ package io.legado.app.lib.theme.view
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatRadioButton
import androidx.appcompat.widget.TooltipCompat import androidx.appcompat.widget.TooltipCompat
import com.google.android.material.radiobutton.MaterialRadioButton
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.Selector import io.legado.app.lib.theme.Selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.getCompatColor import io.legado.app.utils.getCompatColor
class ThemeRadioNoButton(context: Context, attrs: AttributeSet) : class ThemeRadioNoButton(context: Context, attrs: AttributeSet) :
AppCompatRadioButton(context, attrs) { MaterialRadioButton(context, attrs) {
private val isBottomBackground: Boolean private val isBottomBackground: Boolean
@@ -29,54 +29,54 @@ class ThemeRadioNoButton(context: Context, attrs: AttributeSet) :
} }
private fun initTheme() { private fun initTheme() {
when { // when {
isInEditMode -> Unit // isInEditMode -> Unit
isBottomBackground -> { // isBottomBackground -> {
val accentColor = context.accentColor // val accentColor = context.accentColor
val isLight = ColorUtils.isColorLight(context.bottomBackground) // val isLight = ColorUtils.isColorLight(context.bottomBackground)
val textColor = context.getPrimaryTextColor(isLight) // val textColor = context.getPrimaryTextColor(isLight)
val checkedTextColor = if (ColorUtils.isColorLight(accentColor)) { // val checkedTextColor = if (ColorUtils.isColorLight(accentColor)) {
Color.BLACK // Color.BLACK
} else { // } else {
Color.WHITE // Color.WHITE
} // }
background = Selector.shapeBuild() // background = Selector.shapeBuild()
.setCornerRadius(2.dpToPx()) // .setCornerRadius(2.dpToPx())
.setStrokeWidth(2.dpToPx()) // .setStrokeWidth(2.dpToPx())
.setCheckedBgColor(accentColor) // .setCheckedBgColor(accentColor)
.setCheckedStrokeColor(accentColor) // .setCheckedStrokeColor(accentColor)
.setDefaultStrokeColor(textColor) // .setDefaultStrokeColor(textColor)
.create() // .create()
setTextColor( // setTextColor(
Selector.colorBuild() // Selector.colorBuild()
.setDefaultColor(textColor) // .setDefaultColor(textColor)
.setCheckedColor(checkedTextColor) // .setCheckedColor(checkedTextColor)
.create() // .create()
) // )
} // }
else -> { // else -> {
val accentColor = context.accentColor // val accentColor = context.accentColor
val defaultTextColor = context.getCompatColor(R.color.primaryText) // val defaultTextColor = context.getCompatColor(R.color.primaryText)
val checkedTextColor = if (ColorUtils.isColorLight(accentColor)) { // val checkedTextColor = if (ColorUtils.isColorLight(accentColor)) {
Color.BLACK // Color.BLACK
} else { // } else {
Color.WHITE // Color.WHITE
} // }
background = Selector.shapeBuild() // background = Selector.shapeBuild()
.setCornerRadius(2.dpToPx()) // .setCornerRadius(2.dpToPx())
.setStrokeWidth(2.dpToPx()) // .setStrokeWidth(2.dpToPx())
.setCheckedBgColor(accentColor) // .setCheckedBgColor(accentColor)
.setCheckedStrokeColor(accentColor) // .setCheckedStrokeColor(accentColor)
.setDefaultStrokeColor(defaultTextColor) // .setDefaultStrokeColor(defaultTextColor)
.create() // .create()
setTextColor( // setTextColor(
Selector.colorBuild() // Selector.colorBuild()
.setDefaultColor(defaultTextColor) // .setDefaultColor(defaultTextColor)
.setCheckedColor(checkedTextColor) // .setCheckedColor(checkedTextColor)
.create() // .create()
) // )
} // }
} // }
} }
@@ -1,19 +0,0 @@
package io.legado.app.lib.theme.view
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatSeekBar
import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint
/**
* @author Aidan Follestad (afollestad)
*/
class ThemeSeekBar(context: Context, attrs: AttributeSet) : AppCompatSeekBar(context, attrs) {
init {
if (!isInEditMode) {
applyTint(context.accentColor)
}
}
}
@@ -0,0 +1,19 @@
package io.legado.app.lib.theme.view
import android.content.Context
import android.util.AttributeSet
import com.google.android.material.slider.Slider
//import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint
/**
* @author Aidan Follestad (afollestad)
*/
class ThemeSlider(context: Context, attrs: AttributeSet) : Slider(context, attrs) {
// init {
// if (!isInEditMode) {
// applyTint(context.accentColor)
// }
// }
}
@@ -2,20 +2,20 @@ package io.legado.app.lib.theme.view
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.appcompat.widget.SwitchCompat import com.google.android.material.materialswitch.MaterialSwitch
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
/** /**
* @author Aidan Follestad (afollestad) * @author Aidan Follestad (afollestad)
*/ */
class ThemeSwitch(context: Context, attrs: AttributeSet) : SwitchCompat(context, attrs) { class ThemeSwitch(context: Context, attrs: AttributeSet) : MaterialSwitch(context, attrs) {
init { // init {
if (!isInEditMode) { // if (!isInEditMode) {
applyTint(context.accentColor) // applyTint(context.accentColor)
} // }
//
} // }
} }
@@ -4,13 +4,14 @@ import android.os.Bundle
import android.text.Spannable import android.text.Spannable
import android.text.SpannableString import android.text.SpannableString
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.util.TypedValue
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseActivity import io.legado.app.base.BaseActivity
import io.legado.app.databinding.ActivityAboutBinding import io.legado.app.databinding.ActivityAboutBinding
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.filletBackground //import io.legado.app.lib.theme.filletBackground
import io.legado.app.utils.openUrl import io.legado.app.utils.openUrl
import io.legado.app.utils.share import io.legado.app.utils.share
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
@@ -21,7 +22,7 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
override val binding by viewBinding(ActivityAboutBinding::inflate) override val binding by viewBinding(ActivityAboutBinding::inflate)
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.llAbout.background = filletBackground //binding.llAbout.background = filletBackground
val fTag = "aboutFragment" val fTag = "aboutFragment"
var aboutFragment = supportFragmentManager.findFragmentByTag(fTag) var aboutFragment = supportFragmentManager.findFragmentByTag(fTag)
if (aboutFragment == null) aboutFragment = AboutFragment() if (aboutFragment == null) aboutFragment = AboutFragment()
@@ -30,12 +31,19 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
.commit() .commit()
binding.tvAppSummary.post { binding.tvAppSummary.post {
kotlin.runCatching { kotlin.runCatching {
val span = ForegroundColorSpan(accentColor) val typedValue = TypedValue()
val context = binding.root.context
context.theme.resolveAttribute(
com.google.android.material.R.attr.colorPrimary,
typedValue,
true
)
val accentColor = typedValue.data
val spannableString = SpannableString(binding.tvAppSummary.text) val spannableString = SpannableString(binding.tvAppSummary.text)
val gzh = getString(R.string.legado_gzh) val gzh = getString(R.string.legado_gzh)
val start = spannableString.indexOf(gzh) val start = spannableString.indexOf(gzh)
spannableString.setSpan( spannableString.setSpan(
span, start, start + gzh.length, accentColor, start, start + gzh.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
) )
binding.tvAppSummary.text = spannableString binding.tvAppSummary.text = spannableString
@@ -14,7 +14,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemAppLogBinding import io.legado.app.databinding.ItemAppLogBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.LogUtils import io.legado.app.utils.LogUtils
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -38,7 +38,7 @@ class AppLogDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.run { binding.run {
toolBar.setBackgroundColor(primaryColor) //toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.log) toolBar.setTitle(R.string.log)
toolBar.inflateMenu(R.menu.app_log) toolBar.inflateMenu(R.menu.app_log)
toolBar.setOnMenuItemClickListener(this@AppLogDialog) toolBar.setOnMenuItemClickListener(this@AppLogDialog)
@@ -19,7 +19,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.Item1lineTextBinding import io.legado.app.databinding.Item1lineTextBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.FileDoc import io.legado.app.utils.FileDoc
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
@@ -47,7 +47,7 @@ class CrashLogsDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.crash_log) binding.toolBar.setTitle(R.string.crash_log)
binding.toolBar.inflateMenu(R.menu.crash_log) binding.toolBar.inflateMenu(R.menu.crash_log)
binding.toolBar.setOnMenuItemClickListener(this) binding.toolBar.setOnMenuItemClickListener(this)
@@ -18,7 +18,7 @@ import io.legado.app.databinding.ItemReadRecordBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.utils.applyNavigationBarPadding import io.legado.app.utils.applyNavigationBarPadding
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
@@ -112,7 +112,7 @@ class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
} }
private fun initSearchView() { private fun initSearchView() {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.queryHint = getString(R.string.search) searchView.queryHint = getString(R.string.search)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
@@ -7,7 +7,7 @@ import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogUpdateBinding import io.legado.app.databinding.DialogUpdateBinding
import io.legado.app.help.update.AppUpdate import io.legado.app.help.update.AppUpdate
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.Download import io.legado.app.model.Download
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
@@ -36,7 +36,7 @@ class UpdateDialog() : BaseDialogFragment(R.layout.dialog_update) {
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.title = arguments?.getString("newVersion") binding.toolBar.title = arguments?.getString("newVersion")
val updateBody = arguments?.getString("updateBody") val updateBody = arguments?.getString("updateBody")
if (updateBody == null) { if (updateBody == null) {
@@ -22,7 +22,7 @@ import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.* import io.legado.app.utils.*
@@ -62,9 +62,9 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_book_source) binding.toolBar.setTitle(R.string.import_book_source)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
initMenu() initMenu()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -93,14 +93,14 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -15,7 +15,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.DictRule import io.legado.app.data.entities.DictRule
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.* import io.legado.app.utils.*
@@ -50,9 +50,9 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view)
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_dict_rule) binding.toolBar.setTitle(R.string.import_dict_rule)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.tvCancel.visible() binding.tvCancel.visible()
@@ -80,14 +80,14 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view)
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -15,7 +15,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.HttpTTS import io.legado.app.data.entities.HttpTTS
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
@@ -53,9 +53,9 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_tts) binding.toolBar.setTitle(R.string.import_tts)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.tvCancel.visible() binding.tvCancel.visible()
@@ -83,14 +83,14 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -21,7 +21,7 @@ import io.legado.app.databinding.DialogCustomGroupBinding
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.* import io.legado.app.utils.*
@@ -57,9 +57,9 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_replace_rule) binding.toolBar.setTitle(R.string.import_replace_rule)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
initMenu() initMenu()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -88,14 +88,14 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() // binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allRules) adapter.setItems(viewModel.allRules)
upSelectText() upSelectText()
@@ -22,7 +22,7 @@ import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.* import io.legado.app.utils.*
@@ -61,9 +61,9 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_rss_source) binding.toolBar.setTitle(R.string.import_rss_source)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
initMenu() initMenu()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -92,14 +92,14 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -9,13 +9,14 @@ import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.help.config.ThemeConfig import io.legado.app.help.config.ThemeConfig
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
@@ -25,7 +26,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible import io.legado.app.utils.visible
import splitties.views.onClick import splitties.views.onClick
class ImportThemeDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) { class ImportThemeDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_recycler_view) {
constructor(source: String, finishOnDismiss: Boolean = false) : this() { constructor(source: String, finishOnDismiss: Boolean = false) : this() {
arguments = Bundle().apply { arguments = Bundle().apply {
@@ -52,9 +53,9 @@ class ImportThemeDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) {
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_theme) binding.toolBar.setTitle(R.string.import_theme)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.tvCancel.visible() binding.tvCancel.visible()
@@ -82,14 +83,14 @@ class ImportThemeDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) {
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -15,7 +15,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.TxtTocRule import io.legado.app.data.entities.TxtTocRule
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
@@ -52,9 +52,9 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.import_txt_toc_rule) binding.toolBar.setTitle(R.string.import_txt_toc_rule)
binding.rotateLoading.visible() //binding.rotateLoading.visible()
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.tvCancel.visible() binding.tvCancel.visible()
@@ -82,14 +82,14 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
upSelectText() upSelectText()
} }
viewModel.errorLiveData.observe(this) { viewModel.errorLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
binding.tvMsg.apply { binding.tvMsg.apply {
text = it text = it
visible() visible()
} }
} }
viewModel.successLiveData.observe(this) { viewModel.successLiveData.observe(this) {
binding.rotateLoading.gone() //binding.rotateLoading.gone()
if (it > 0) { if (it > 0) {
adapter.setItems(viewModel.allSources) adapter.setItems(viewModel.allSources)
upSelectText() upSelectText()
@@ -13,7 +13,7 @@ import io.legado.app.base.BaseDialogFragment
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.databinding.DialogOpenUrlConfirmBinding import io.legado.app.databinding.DialogOpenUrlConfirmBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
@@ -55,7 +55,7 @@ class OpenUrlConfirmDialog() : BaseDialogFragment(R.layout.dialog_open_url_confi
dismiss() dismiss()
return return
} }
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.subtitle = viewModel.sourceName binding.toolBar.subtitle = viewModel.sourceName
initView() initView()
} }
@@ -21,7 +21,7 @@ import io.legado.app.help.glide.ImageLoader
import io.legado.app.help.glide.OkHttpModelLoader import io.legado.app.help.glide.OkHttpModelLoader
import io.legado.app.help.source.SourceVerificationHelp import io.legado.app.help.source.SourceVerificationHelp
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ImageProvider import io.legado.app.model.ImageProvider
import io.legado.app.ui.widget.dialog.PhotoDialog import io.legado.app.ui.widget.dialog.PhotoDialog
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
@@ -66,7 +66,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
initMenu() initMenu()
val arguments = arguments ?: return@run val arguments = arguments ?: return@run
viewModel.initData(arguments) viewModel.initData(arguments)
toolBar.setBackgroundColor(primaryColor) //toolBar.setBackgroundColor(primaryColor)
toolBar.subtitle = arguments.getString("sourceName") toolBar.subtitle = arguments.getString("sourceName")
sourceOrigin = arguments.getString("sourceOrigin") sourceOrigin = arguments.getString("sourceOrigin")
val imageUrl = arguments.getString("imageUrl") ?: return@run val imageUrl = arguments.getString("imageUrl") ?: return@run
@@ -10,6 +10,7 @@ import android.view.MenuItem
import android.widget.SeekBar import android.widget.SeekBar
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.slider.Slider
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.BookType import io.legado.app.constant.BookType
@@ -152,20 +153,40 @@ class AudioPlayActivity :
binding.ivSkipPrevious.setOnClickListener { binding.ivSkipPrevious.setOnClickListener {
AudioPlay.prev() AudioPlay.prev()
} }
binding.playerProgress.setOnSeekBarChangeListener(object : SeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
binding.tvDurTime.text = progressTimeFormat.format(progress.toLong())
}
override fun onStartTrackingTouch(seekBar: SeekBar) { // binding.playerProgress.setOnSeekBarChangeListener(object : SeekBarChangeListener {
// override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
// binding.tvDurTime.text = progressTimeFormat.format(progress.toLong())
// }
//
// override fun onStartTrackingTouch(seekBar: SeekBar) {
// adjustProgress = true
// }
//
// override fun onStopTrackingTouch(seekBar: SeekBar) {
// adjustProgress = false
// AudioPlay.adjustProgress(seekBar.progress)
// }
// })
// 替换原来的 SeekBar 监听器
binding.playerProgress.addOnChangeListener { _, value, fromUser ->
if (fromUser) {
binding.tvDurTime.text = progressTimeFormat.format(value.toLong())
}
}
binding.playerProgress.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
adjustProgress = true adjustProgress = true
} }
override fun onStopTrackingTouch(seekBar: SeekBar) { override fun onStopTrackingTouch(slider: Slider) {
adjustProgress = false adjustProgress = false
AudioPlay.adjustProgress(seekBar.progress) AudioPlay.adjustProgress(slider.value.toInt())
} }
}) })
binding.ivChapter.setOnClickListener { binding.ivChapter.setOnClickListener {
AudioPlay.book?.let { AudioPlay.book?.let {
tocActivityResult.launch(it.bookUrl) tocActivityResult.launch(it.bookUrl)
@@ -275,18 +296,32 @@ class AudioPlayActivity :
binding.ivSkipNext.isEnabled = binding.ivSkipNext.isEnabled =
AudioPlay.durChapterIndex < AudioPlay.simulatedChapterSize - 1 AudioPlay.durChapterIndex < AudioPlay.simulatedChapterSize - 1
} }
// observeEventSticky<Int>(EventBus.AUDIO_SIZE) {
// binding.playerProgress.max = it
// binding.tvAllTime.text = progressTimeFormat.format(it.toLong())
// }
// observeEventSticky<Int>(EventBus.AUDIO_PROGRESS) {
// if (!adjustProgress) binding.playerProgress.progress = it
// binding.tvDurTime.text = progressTimeFormat.format(it.toLong())
// }
// observeEventSticky<Int>(EventBus.AUDIO_BUFFER_PROGRESS) {
// binding.playerProgress.secondaryProgress = it
//
// }
observeEventSticky<Int>(EventBus.AUDIO_SIZE) { observeEventSticky<Int>(EventBus.AUDIO_SIZE) {
binding.playerProgress.max = it binding.playerProgress.valueTo = it.toFloat()
binding.tvAllTime.text = progressTimeFormat.format(it.toLong()) binding.tvAllTime.text = progressTimeFormat.format(it.toLong())
} }
observeEventSticky<Int>(EventBus.AUDIO_PROGRESS) { observeEventSticky<Int>(EventBus.AUDIO_PROGRESS) {
if (!adjustProgress) binding.playerProgress.progress = it if (!adjustProgress) binding.playerProgress.value = it.toFloat()
binding.tvDurTime.text = progressTimeFormat.format(it.toLong()) binding.tvDurTime.text = progressTimeFormat.format(it.toLong())
} }
observeEventSticky<Int>(EventBus.AUDIO_BUFFER_PROGRESS) {
binding.playerProgress.secondaryProgress = it
observeEventSticky<Int>(EventBus.AUDIO_BUFFER_PROGRESS) {
//updateBufferProgress(it)
} }
observeEventSticky<Float>(EventBus.AUDIO_SPEED) { observeEventSticky<Float>(EventBus.AUDIO_SPEED) {
binding.tvSpeed.text = String.format(Locale.ROOT, "%.1fX", it) binding.tvSpeed.text = String.format(Locale.ROOT, "%.1fX", it)
binding.tvSpeed.visible() binding.tvSpeed.visible()
@@ -24,32 +24,32 @@ class TimerSliderPopup(private val context: Context) :
isOutsideTouchable = false isOutsideTouchable = false
isFocusable = true isFocusable = true
binding.seekBar.max = 180 // 初始化 slider 值
setProcessTextValue(binding.seekBar.progress) binding.slider.valueFrom = 1f
binding.seekBar.setOnSeekBarChangeListener(object : SeekBarChangeListener { binding.slider.valueTo = 180f
binding.slider.stepSize = 1f
binding.slider.value = AudioPlayService.timeMinute.toFloat()
setSliderTextValue(AudioPlayService.timeMinute)
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { binding.slider.addOnChangeListener { _, value, fromUser ->
setProcessTextValue(progress) setSliderTextValue(value.toInt())
if (fromUser) { if (fromUser) {
AudioPlay.setTimer(progress) AudioPlay.setTimer(value.toInt())
}
} }
}
})
} }
override fun showAsDropDown(anchor: View?, xoff: Int, yoff: Int, gravity: Int) { override fun showAsDropDown(anchor: View?, xoff: Int, yoff: Int, gravity: Int) {
super.showAsDropDown(anchor, xoff, yoff, gravity) super.showAsDropDown(anchor, xoff, yoff, gravity)
binding.seekBar.progress = AudioPlayService.timeMinute binding.slider.value = AudioPlayService.timeMinute.toFloat()
} }
override fun showAtLocation(parent: View?, gravity: Int, x: Int, y: Int) { override fun showAtLocation(parent: View?, gravity: Int, x: Int, y: Int) {
super.showAtLocation(parent, gravity, x, y) super.showAtLocation(parent, gravity, x, y)
binding.seekBar.progress = AudioPlayService.timeMinute binding.slider.value = AudioPlayService.timeMinute.toFloat()
} }
private fun setProcessTextValue(process: Int) { private fun setSliderTextValue(value: Int) {
binding.tvSeekValue.text = context.getString(R.string.timer_m, process) binding.tvSeekValue.text = context.getString(R.string.timer_m, value)
} }
}
}
@@ -7,8 +7,8 @@ import android.text.TextPaint
import android.view.View import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.spToPx import io.legado.app.utils.spToPx
import splitties.init.appCtx import splitties.init.appCtx
@@ -20,11 +20,11 @@ class BookmarkDecoration(val adapter: BookmarkAdapter) : RecyclerView.ItemDecora
private val headerHeight = 32f.dpToPx() private val headerHeight = 32f.dpToPx()
private val headerPaint = Paint().apply { private val headerPaint = Paint().apply {
color = appCtx.backgroundColor //color = appCtx.backgroundColor
} }
private val textPaint = TextPaint().apply { private val textPaint = TextPaint().apply {
textSize = 16f.spToPx() textSize = 16f.spToPx()
color = appCtx.accentColor //color = appCtx.accentColor
isAntiAlias = true isAntiAlias = true
} }
private val textRect = Rect() private val textRect = Rect()
@@ -9,7 +9,7 @@ import io.legado.app.base.BaseDialogFragment
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Bookmark import io.legado.app.data.entities.Bookmark
import io.legado.app.databinding.DialogBookmarkBinding import io.legado.app.databinding.DialogBookmarkBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible import io.legado.app.utils.visible
@@ -34,7 +34,7 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
val arguments = arguments ?: let { val arguments = arguments ?: let {
dismiss() dismiss()
return return
@@ -5,7 +5,9 @@ import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import com.google.android.material.button.MaterialButton
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.adapter.DiffRecyclerAdapter import io.legado.app.base.adapter.DiffRecyclerAdapter
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
@@ -96,19 +98,19 @@ class CacheAdapter(context: Context, private val callBack: CallBack) :
} }
} }
private fun upDownloadIv(iv: ImageView, book: Book) { private fun upDownloadIv(button: MaterialButton, book: Book) {
if (book.isLocal) { if (book.isLocal) {
iv.gone() button.gone()
} else { } else {
iv.visible() button.visible()
CacheBook.cacheBookMap[book.bookUrl]?.let { CacheBook.cacheBookMap[book.bookUrl]?.let {
if (!it.isStop()) { if (!it.isStop()) {
iv.setImageResource(R.drawable.ic_stop_black_24dp) button.icon = ContextCompat.getDrawable(context, R.drawable.ic_stop_black_24dp)
} else { } else {
iv.setImageResource(R.drawable.ic_play_24dp) button.icon = ContextCompat.getDrawable(context, R.drawable.ic_play_24dp)
} }
} ?: let { } ?: run {
iv.setImageResource(R.drawable.ic_play_24dp) button.icon = ContextCompat.getDrawable(context, R.drawable.ic_play_24dp)
} }
} }
} }
@@ -13,7 +13,7 @@ import androidx.recyclerview.widget.GridLayoutManager
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.DialogChangeCoverBinding import io.legado.app.databinding.DialogChangeCoverBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
@@ -49,7 +49,7 @@ class ChangeCoverDialog() : BaseDialogFragment(R.layout.dialog_change_cover),
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.change_cover_source) binding.toolBar.setTitle(R.string.change_cover_source)
viewModel.initData(arguments) viewModel.initData(arguments)
initMenu() initMenu()
@@ -27,9 +27,8 @@ import io.legado.app.data.entities.SearchBook
import io.legado.app.databinding.DialogBookChangeSourceBinding import io.legado.app.databinding.DialogBookChangeSourceBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.elevation //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.book.source.manage.BookSourceActivity
@@ -101,7 +100,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
viewModel.initData(arguments, callBack?.oldBook, activity is ReadBookActivity) viewModel.initData(arguments, callBack?.oldBook, activity is ReadBookActivity)
showTitle() showTitle()
initMenu() initMenu()
@@ -123,7 +122,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
binding.toolBar.subtitle = viewModel.author binding.toolBar.subtitle = viewModel.author
binding.toolBar.navigationIcon = binding.toolBar.navigationIcon =
getCompatDrawable(androidx.appcompat.R.drawable.abc_ic_ab_back_material) getCompatDrawable(androidx.appcompat.R.drawable.abc_ic_ab_back_material)
binding.toolBar.elevation = requireContext().elevation //binding.toolBar.elevation = requireContext().elevation
} }
private fun initMenu() { private fun initMenu() {
@@ -195,9 +194,9 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
val mNavButtonViewField = Toolbar::class.java.getDeclaredField("mNavButtonView") val mNavButtonViewField = Toolbar::class.java.getDeclaredField("mNavButtonView")
mNavButtonViewField.isAccessible = true mNavButtonViewField.isAccessible = true
val navigationView = mNavButtonViewField.get(binding.toolBar) as ImageButton val navigationView = mNavButtonViewField.get(binding.toolBar) as ImageButton
val isLight = ColorUtils.isColorLight(primaryColor) // val isLight = ColorUtils.isColorLight(primaryColor)
val textColor = requireContext().getPrimaryTextColor(isLight) // val textColor = requireContext().getPrimaryTextColor(isLight)
navigationView.setColorFilter(textColor) //navigationView.setColorFilter(textColor)
} }
} }
@@ -29,8 +29,7 @@ import io.legado.app.databinding.DialogChapterChangeSourceBinding
import io.legado.app.help.book.BookHelp import io.legado.app.help.book.BookHelp
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.elevation //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.book.source.manage.BookSourceActivity
@@ -111,7 +110,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
viewModel.initData(arguments, callBack?.oldBook, activity is ReadBookActivity) viewModel.initData(arguments, callBack?.oldBook, activity is ReadBookActivity)
showTitle() showTitle()
initMenu() initMenu()
@@ -157,7 +156,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
binding.ivHideToc.setOnClickListener { binding.ivHideToc.setOnClickListener {
binding.clToc.gone() binding.clToc.gone()
} }
binding.flHideToc.elevation = requireContext().elevation //binding.flHideToc.elevation = requireContext().elevation
} }
private fun initRecyclerView() { private fun initRecyclerView() {
@@ -8,7 +8,7 @@ import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.databinding.ItemChapterListBinding import io.legado.app.databinding.ItemChapterListBinding
import io.legado.app.lib.theme.ThemeUtils import io.legado.app.lib.theme.ThemeUtils
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.getCompatColor import io.legado.app.utils.getCompatColor
import io.legado.app.utils.gone import io.legado.app.utils.gone
import io.legado.app.utils.visible import io.legado.app.utils.visible
@@ -31,7 +31,7 @@ class ChangeChapterTocAdapter(context: Context, val callback: Callback) :
binding.run { binding.run {
val isDur = durChapterIndex == item.index val isDur = durChapterIndex == item.index
if (isDur) { if (isDur) {
tvChapterName.setTextColor(context.accentColor) //tvChapterName.setTextColor(context.accentColor)
} else { } else {
tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText)) tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
} }
@@ -5,11 +5,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.data.entities.BookGroup import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.DialogBookGroupEditBinding import io.legado.app.databinding.DialogBookGroupEditBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
import io.legado.app.utils.MD5Utils import io.legado.app.utils.MD5Utils
import io.legado.app.utils.SelectImageContract import io.legado.app.utils.SelectImageContract
@@ -26,7 +27,7 @@ import splitties.init.appCtx
import splitties.views.onClick import splitties.views.onClick
import java.io.FileOutputStream import java.io.FileOutputStream
class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) { class GroupEditDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_group_edit) {
constructor(bookGroup: BookGroup? = null) : this() { constructor(bookGroup: BookGroup? = null) : this() {
arguments = Bundle().apply { arguments = Bundle().apply {
@@ -59,11 +60,11 @@ class GroupEditDialog() : BaseDialogFragment(R.layout.dialog_book_group_edit) {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
bookGroup = arguments?.getParcelable("group") bookGroup = arguments?.getParcelable("group")
bookGroup?.let { bookGroup?.let {
@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
@@ -20,9 +21,9 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.BookGroup import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemBookGroupManageBinding import io.legado.app.databinding.ItemBookGroupManageBinding
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
@@ -40,7 +41,7 @@ import kotlinx.coroutines.launch
/** /**
* 书籍分组管理 * 书籍分组管理
*/ */
class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), class GroupManageDialog : BaseBottomSheetDialogFragment(R.layout.dialog_recycler_view),
Toolbar.OnMenuItemClickListener { Toolbar.OnMenuItemClickListener {
private val viewModel: GroupViewModel by viewModels() private val viewModel: GroupViewModel by viewModels()
@@ -49,11 +50,11 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.9f, 0.9f)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.group_manage) binding.toolBar.setTitle(R.string.group_manage)
initView() initView()
initData() initData()
@@ -67,7 +68,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
val itemTouchCallback = ItemTouchCallback(adapter) val itemTouchCallback = ItemTouchCallback(adapter)
itemTouchCallback.isCanDrag = true itemTouchCallback.isCanDrag = true
ItemTouchHelper(itemTouchCallback).attachToRecyclerView(binding.recyclerView) ItemTouchHelper(itemTouchCallback).attachToRecyclerView(binding.recyclerView)
binding.tvOk.setTextColor(requireContext().accentColor) //binding.tvOk.setTextColor(requireContext().accentColor)
binding.tvOk.visible() binding.tvOk.visible()
binding.tvOk.setOnClickListener { binding.tvOk.setOnClickListener {
dismissAllowingStateLoss() dismissAllowingStateLoss()
@@ -120,7 +121,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.run { binding.run {
root.setBackgroundColor(context.backgroundColor) //root.setBackgroundColor(context.backgroundColor)
tvGroup.text = item.getManageName(context) tvGroup.text = item.getManageName(context)
swShow.isChecked = item.show swShow.isChecked = item.show
} }
@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
@@ -19,9 +20,9 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.BookGroup import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.DialogBookGroupPickerBinding import io.legado.app.databinding.DialogBookGroupPickerBinding
import io.legado.app.databinding.ItemGroupSelectBinding import io.legado.app.databinding.ItemGroupSelectBinding
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
@@ -32,7 +33,7 @@ import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker), class GroupSelectDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_book_group_picker),
Toolbar.OnMenuItemClickListener { Toolbar.OnMenuItemClickListener {
constructor(groupId: Long, requestCode: Int = -1) : this() { constructor(groupId: Long, requestCode: Int = -1) : this() {
@@ -51,11 +52,11 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.9f, 0.9f)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
arguments?.let { arguments?.let {
groupId = it.getLong("groupId") groupId = it.getLong("groupId")
requestCode = it.getInt("requestCode", -1) requestCode = it.getInt("requestCode", -1)
@@ -78,7 +79,7 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker
binding.tvCancel.setOnClickListener { binding.tvCancel.setOnClickListener {
dismissAllowingStateLoss() dismissAllowingStateLoss()
} }
binding.tvOk.setTextColor(requireContext().accentColor) //binding.tvOk.setTextColor(requireContext().accentColor)
binding.tvOk.setOnClickListener { binding.tvOk.setOnClickListener {
callBack?.upGroup(requestCode, groupId) callBack?.upGroup(requestCode, groupId)
dismissAllowingStateLoss() dismissAllowingStateLoss()
@@ -119,7 +120,7 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.run { binding.run {
root.setBackgroundColor(context.backgroundColor) //root.setBackgroundColor(context.backgroundColor)
cbGroup.text = item.groupName cbGroup.text = item.groupName
cbGroup.isChecked = (groupId and item.groupId) > 0 cbGroup.isChecked = (groupId and item.groupId) > 0
} }
@@ -13,7 +13,7 @@ import io.legado.app.databinding.ActivityImportBookBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.utils.ArchiveUtils import io.legado.app.utils.ArchiveUtils
@@ -161,7 +161,7 @@ abstract class BaseImportBookActivity<VM : ViewModel> :
} }
private fun initSearchView() { private fun initSearchView() {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean { override fun onQueryTextSubmit(query: String?): Boolean {
@@ -19,7 +19,7 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.Permissions
import io.legado.app.lib.permission.PermissionsCompat import io.legado.app.lib.permission.PermissionsCompat
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.book.import.BaseImportBookActivity import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.SelectActionBar
@@ -128,7 +128,7 @@ class ImportBookActivity : BaseImportBookActivity<ImportBookViewModel>(),
} }
private fun initView() { private fun initView() {
binding.layTop.setBackgroundColor(backgroundColor) //binding.layTop.setBackgroundColor(backgroundColor)
binding.tvEmptyMsg.setText(R.string.empty_msg_import_book) binding.tvEmptyMsg.setText(R.string.empty_msg_import_book)
binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -16,7 +16,7 @@ import io.legado.app.data.appDb
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.model.remote.RemoteBook import io.legado.app.model.remote.RemoteBook
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.import.BaseImportBookActivity import io.legado.app.ui.book.import.BaseImportBookActivity
@@ -80,7 +80,7 @@ class RemoteBookActivity : BaseImportBookActivity<RemoteBookViewModel>(),
} }
private fun initView() { private fun initView() {
binding.layTop.setBackgroundColor(backgroundColor) //binding.layTop.setBackgroundColor(backgroundColor)
binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.selectActionBar.setMainActionText(R.string.add_to_bookshelf) binding.selectActionBar.setMainActionText(R.string.add_to_bookshelf)
@@ -13,7 +13,7 @@ import io.legado.app.data.entities.Server
import io.legado.app.data.entities.rule.RowUi import io.legado.app.data.entities.rule.RowUi
import io.legado.app.databinding.DialogWebdavServerBinding import io.legado.app.databinding.DialogWebdavServerBinding
import io.legado.app.databinding.ItemSourceEditBinding import io.legado.app.databinding.ItemSourceEditBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -44,7 +44,7 @@ class ServerConfigDialog() : BaseDialogFragment(R.layout.dialog_webdav_server, t
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //inding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.inflateMenu(R.menu.server_config) binding.toolBar.inflateMenu(R.menu.server_config)
binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.menu.applyTint(requireContext())
binding.toolBar.setOnMenuItemClickListener(this) binding.toolBar.setOnMenuItemClickListener(this)
@@ -22,8 +22,8 @@ import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemServerSelectBinding import io.legado.app.databinding.ItemServerSelectBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -54,7 +54,7 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.setTitle(R.string.server_config) binding.toolBar.setTitle(R.string.server_config)
initView() initView()
initData() initData()
@@ -148,7 +148,7 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
binding.root.setBackgroundColor(context.backgroundColor) //binding.root.setBackgroundColor(context.backgroundColor)
binding.rbServer.text = item.name binding.rbServer.text = item.name
binding.rbServer.isChecked = item.id == selectServerId binding.rbServer.isChecked = item.id == selectServerId
} else { } else {
@@ -83,7 +83,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
class BookInfoActivity : class BookInfoActivity :
VMBaseActivity<ActivityBookInfoBinding, BookInfoViewModel>(toolBarTheme = Theme.Dark), VMBaseActivity<ActivityBookInfoBinding, BookInfoViewModel>(),
GroupSelectDialog.CallBack, GroupSelectDialog.CallBack,
ChangeBookSourceDialog.CallBack, ChangeBookSourceDialog.CallBack,
ChangeCoverDialog.CallBack, ChangeCoverDialog.CallBack,
@@ -157,7 +157,9 @@ class BookInfoActivity :
@SuppressLint("PrivateResource") @SuppressLint("PrivateResource")
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.titleBar.setBackgroundResource(R.color.transparent)
setSupportActionBar(binding.topBar)
// binding.refreshLayout?.setColorSchemeColors(accentColor) // binding.refreshLayout?.setColorSchemeColors(accentColor)
// binding.llInfo.setBackgroundColor(backgroundColor) // binding.llInfo.setBackgroundColor(backgroundColor)
// binding.flAction.setBackgroundColor(bottomBackground) // binding.flAction.setBackgroundColor(bottomBackground)
@@ -14,7 +14,7 @@ import io.legado.app.data.entities.BookGroup
import io.legado.app.databinding.ItemArrangeBookBinding import io.legado.app.databinding.ItemArrangeBookBinding
import io.legado.app.help.book.isLocal import io.legado.app.help.book.isLocal
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.ItemTouchCallback
import java.util.* import java.util.*
@@ -49,7 +49,7 @@ class BookAdapter(context: Context, val callBack: CallBack) :
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.apply { binding.apply {
root.setBackgroundColor(context.backgroundColor) //root.setBackgroundColor(context.backgroundColor)
tvName.text = item.name tvName.text = item.name
tvAuthor.text = item.author tvAuthor.text = item.author
tvAuthor.visibility = if (item.author.isEmpty()) View.GONE else View.VISIBLE tvAuthor.visibility = if (item.author.isEmpty()) View.GONE else View.VISIBLE
@@ -28,8 +28,8 @@ import io.legado.app.help.book.isLocal
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.book.group.GroupManageDialog import io.legado.app.ui.book.group.GroupManageDialog
import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.group.GroupSelectDialog
import io.legado.app.ui.book.info.BookInfoActivity import io.legado.app.ui.book.info.BookInfoActivity
@@ -177,7 +177,7 @@ class BookshelfManageActivity :
} }
private fun initSearchView() { private fun initSearchView() {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean { override fun onQueryTextSubmit(query: String?): Boolean {
@@ -193,7 +193,7 @@ class BookshelfManageActivity :
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor) //binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.addItemDecoration(VerticalDivider(this)) binding.recyclerView.addItemDecoration(VerticalDivider(this))
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -21,8 +21,8 @@ import io.legado.app.data.entities.BookSourcePart
import io.legado.app.databinding.DialogSourcePickerBinding import io.legado.app.databinding.DialogSourcePickerBinding
import io.legado.app.databinding.Item1lineTextBinding import io.legado.app.databinding.Item1lineTextBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.widget.number.NumberPickerDialog import io.legado.app.ui.widget.number.NumberPickerDialog
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
@@ -65,11 +65,11 @@ class SourcePickerDialog : BaseDialogFragment(R.layout.dialog_source_picker),
} }
private fun initView() { private fun initView() {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.title = "选择书源" binding.toolBar.title = "选择书源"
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.queryHint = getString(R.string.search_book_source) searchView.queryHint = getString(R.string.search_book_source)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
@@ -27,7 +27,7 @@ import io.legado.app.help.config.ReadBookConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.ThemeStore import io.legado.app.lib.theme.ThemeStore
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.model.CacheBook import io.legado.app.model.CacheBook
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.book.read.config.BgTextConfigDialog import io.legado.app.ui.book.read.config.BgTextConfigDialog
@@ -94,7 +94,7 @@ abstract class BaseReadBookActivity :
} }
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.navigationBar.setBackgroundColor(bottomBackground) //binding.navigationBar.setBackgroundColor(bottomBackground)
viewModel.permissionDenialLiveData.observe(this) { viewModel.permissionDenialLiveData.observe(this) {
selectBookFolderResult.launch { selectBookFolderResult.launch {
mode = HandleFileContract.DIR_SYS mode = HandleFileContract.DIR_SYS
@@ -178,20 +178,20 @@ abstract class BaseReadBookActivity :
} }
} }
upSystemUiVisibilityO(isInMultiWindow, toolBarHide) upSystemUiVisibilityO(isInMultiWindow, toolBarHide)
if (toolBarHide) { // if (toolBarHide) {
setLightStatusBar(ReadBookConfig.durConfig.curStatusIconDark()) // setLightStatusBar(ReadBookConfig.durConfig.curStatusIconDark())
} else { // } else {
val statusBarColor = // val statusBarColor =
if (AppConfig.readBarStyleFollowPage // if (AppConfig.readBarStyleFollowPage
&& ReadBookConfig.durConfig.curBgType() == 0 // && ReadBookConfig.durConfig.curBgType() == 0
|| useBgMeanColor // || useBgMeanColor
) { // ) {
ReadBookConfig.bgMeanColor // ReadBookConfig.bgMeanColor
} else { // } else {
ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar) // ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar)
} // }
setLightStatusBar(ColorUtils.isColorLight(statusBarColor)) // setLightStatusBar(ColorUtils.isColorLight(statusBarColor))
} // }
} }
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -223,7 +223,7 @@ abstract class BaseReadBookActivity :
binding.readMenu.isVisible -> super.upNavigationBarColor() binding.readMenu.isVisible -> super.upNavigationBarColor()
binding.searchMenu.bottomMenuVisible -> super.upNavigationBarColor() binding.searchMenu.bottomMenuVisible -> super.upNavigationBarColor()
bottomDialog > 0 -> super.upNavigationBarColor() bottomDialog > 0 -> super.upNavigationBarColor()
!AppConfig.immNavigationBar -> super.upNavigationBarColor() //!AppConfig.immNavigationBar -> super.upNavigationBarColor()
else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor) else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor)
} }
} }
@@ -20,7 +20,7 @@ import io.legado.app.help.book.ContentProcessor
import io.legado.app.help.book.isLocal import io.legado.app.help.book.isLocal
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
@@ -45,7 +45,7 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) {
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.title = ReadBook.curTextChapter?.title binding.toolBar.title = ReadBook.curTextChapter?.title
initMenu() initMenu()
binding.toolBar.setOnClickListener { binding.toolBar.setOnClickListener {
@@ -18,7 +18,7 @@ import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.Item1lineTextBinding import io.legado.app.databinding.Item1lineTextBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.replace.edit.ReplaceEditActivity import io.legado.app.ui.replace.edit.ReplaceEditActivity
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -50,7 +50,7 @@ class EffectiveReplacesDialog : BaseDialogFragment(R.layout.dialog_recycler_view
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.run { binding.run {
toolBar.setBackgroundColor(primaryColor) //toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.effective_replaces) toolBar.setTitle(R.string.effective_replaces)
recyclerView.layoutManager = LinearLayoutManager(requireContext()) recyclerView.layoutManager = LinearLayoutManager(requireContext())
recyclerView.adapter = adapter recyclerView.adapter = adapter
@@ -10,12 +10,13 @@ import android.widget.FrameLayout
import android.widget.SeekBar import android.widget.SeekBar
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.google.android.material.slider.Slider
import io.legado.app.R import io.legado.app.R
import io.legado.app.databinding.ViewMangaMenuBinding import io.legado.app.databinding.ViewMangaMenuBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.source.getSourceType import io.legado.app.help.source.getSourceType
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.model.ReadManga import io.legado.app.model.ReadManga
import io.legado.app.ui.browser.WebViewActivity import io.legado.app.ui.browser.WebViewActivity
@@ -53,7 +54,7 @@ class MangaMenu @JvmOverloads constructor(
loadAnimation(context, R.anim.anim_readbook_bottom_out) loadAnimation(context, R.anim.anim_readbook_bottom_out)
} }
private var isMenuOutAnimating = false private var isMenuOutAnimating = false
private var bgColor = context.bottomBackground //private var bgColor = context.bottomBackground
private val menuOutListener = object : Animation.AnimationListener { private val menuOutListener = object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) { override fun onAnimationStart(animation: Animation) {
@@ -99,12 +100,12 @@ class MangaMenu @JvmOverloads constructor(
initAnimation() initAnimation()
val brightnessBackground = GradientDrawable() val brightnessBackground = GradientDrawable()
brightnessBackground.cornerRadius = 5F.dpToPx() brightnessBackground.cornerRadius = 5F.dpToPx()
brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f)) //brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f))
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom) titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom)
bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top) bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top)
} else { } else {
bottomMenu.setBackgroundColor(bgColor) //bottomMenu.setBackgroundColor(bgColor)
} }
if (AppConfig.showReadTitleBarAddition) { if (AppConfig.showReadTitleBarAddition) {
titleBarAddition.visible() titleBarAddition.visible()
@@ -210,27 +211,30 @@ class MangaMenu @JvmOverloads constructor(
ReadManga.moveToPrevChapter(true) ReadManga.moveToPrevChapter(true)
} }
seekReadPage.setOnSeekBarChangeListener(object : SeekBarChangeListener { seekReadPage.addOnChangeListener { slider, value, fromUser ->
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) {
if (fromUser) { callBack.skipToPage(value.toInt())
callBack.skipToPage(seekBar.progress) }
} }
seekReadPage.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
vwMenuBg.setOnClickListener(null)
} }
override fun onStartTrackingTouch(seekBar: SeekBar) { override fun onStopTrackingTouch(slider: Slider) {
binding.vwMenuBg.setOnClickListener(null) vwMenuBg.setOnClickListener { runMenuOut() }
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
binding.vwMenuBg.setOnClickListener { runMenuOut() }
} }
}) })
} }
fun upSeekBar(value: Int, count: Int) { fun upSeekBar(value: Int, count: Int) {
binding.seekReadPage.apply { binding.seekReadPage.apply {
max = count.minus(1) valueFrom = 0f
progress = value valueTo = (count - 1).toFloat()
this.value = value.toFloat()
stepSize = 1f
} }
} }
@@ -56,7 +56,7 @@ import io.legado.app.help.storage.Backup
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeRule
@@ -258,8 +258,8 @@ class ReadBookActivity : BaseReadBookActivity(),
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
binding.cursorLeft.setColorFilter(accentColor) //binding.cursorLeft.setColorFilter(accentColor)
binding.cursorRight.setColorFilter(accentColor) //binding.cursorRight.setColorFilter(accentColor)
binding.cursorLeft.setOnTouchListener(this) binding.cursorLeft.setOnTouchListener(this)
binding.cursorRight.setOnTouchListener(this) binding.cursorRight.setOnTouchListener(this)
window.setBackgroundDrawable(null) window.setBackgroundDrawable(null)
@@ -15,6 +15,7 @@ import android.widget.SeekBar
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.google.android.material.slider.Slider
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.databinding.ViewReadMenuBinding import io.legado.app.databinding.ViewReadMenuBinding
@@ -26,12 +27,12 @@ import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.source.getSourceType import io.legado.app.help.source.getSourceType
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.Selector import io.legado.app.lib.theme.Selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.buttonDisabledColor //import io.legado.app.lib.theme.buttonDisabledColor
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.browser.WebViewActivity import io.legado.app.ui.browser.WebViewActivity
import io.legado.app.ui.widget.seekbar.SeekBarChangeListener import io.legado.app.ui.widget.seekbar.SeekBarChangeListener
@@ -51,6 +52,7 @@ import io.legado.app.utils.startActivity
import io.legado.app.utils.visible import io.legado.app.utils.visible
import splitties.views.onClick import splitties.views.onClick
import splitties.views.onLongClick import splitties.views.onLongClick
import androidx.core.graphics.toColorInt
/** /**
* 阅读界面菜单 * 阅读界面菜单
@@ -78,23 +80,23 @@ class ReadMenu @JvmOverloads constructor(
} }
private val immersiveMenu: Boolean private val immersiveMenu: Boolean
get() = AppConfig.readBarStyleFollowPage && ReadBookConfig.durConfig.curBgType() == 0 get() = AppConfig.readBarStyleFollowPage && ReadBookConfig.durConfig.curBgType() == 0
private var bgColor: Int = if (immersiveMenu) { // private var bgColor: Int = if (immersiveMenu) {
kotlin.runCatching { // kotlin.runCatching {
Color.parseColor(ReadBookConfig.durConfig.curBgStr()) // ReadBookConfig.durConfig.curBgStr().toColorInt()
}.getOrDefault(context.bottomBackground) // }.getOrDefault(context.bottomBackground)
} else { // } else {
context.bottomBackground // context.bottomBackground
} // }
private var textColor: Int = if (immersiveMenu) { // private var textColor: Int = if (immersiveMenu) {
ReadBookConfig.durConfig.curTextColor() // ReadBookConfig.durConfig.curTextColor()
} else { // } else {
context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) // context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
} // }
private var bottomBackgroundList: ColorStateList = Selector.colorBuild() // private var bottomBackgroundList: ColorStateList = Selector.colorBuild()
.setDefaultColor(bgColor) // .setDefaultColor(bgColor)
.setPressedColor(ColorUtils.darkenColor(bgColor)) // .setPressedColor(ColorUtils.darkenColor(bgColor))
.create() // .create()
private var onMenuOutEnd: (() -> Unit)? = null private var onMenuOutEnd: (() -> Unit)? = null
private val showBrightnessView private val showBrightnessView
get() = context.getPrefBoolean( get() = context.getPrefBoolean(
@@ -115,6 +117,7 @@ class ReadMenu @JvmOverloads constructor(
} }
} }
} }
private val menuInListener = object : Animation.AnimationListener { private val menuInListener = object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) { override fun onAnimationStart(animation: Animation) {
binding.tvSourceAction.text = binding.tvSourceAction.text =
@@ -168,50 +171,50 @@ class ReadMenu @JvmOverloads constructor(
} }
initAnimation() initAnimation()
if (immersiveMenu) { if (immersiveMenu) {
val lightTextColor = ColorUtils.withAlpha(ColorUtils.lightenColor(textColor), 0.75f) // val lightTextColor = ColorUtils.withAlpha(ColorUtils.lightenColor(textColor), 0.75f)
titleBar.setTextColor(textColor) // titleBar.setTextColor(textColor)
titleBar.setBackgroundColor(bgColor) // titleBar.setBackgroundColor(bgColor)
titleBar.setColorFilter(textColor) // titleBar.setColorFilter(textColor)
tvChapterName.setTextColor(lightTextColor) // tvChapterName.setTextColor(lightTextColor)
tvChapterUrl.setTextColor(lightTextColor) // tvChapterUrl.setTextColor(lightTextColor)
} else if (reset) { } else if (reset) {
val bgColor = context.primaryColor // val bgColor = context.primaryColor
val textColor = context.primaryTextColor // val textColor = context.primaryTextColor
titleBar.setTextColor(textColor) // titleBar.setTextColor(textColor)
titleBar.setBackgroundColor(bgColor) // titleBar.setBackgroundColor(bgColor)
titleBar.setColorFilter(textColor) // titleBar.setColorFilter(textColor)
tvChapterName.setTextColor(textColor) // tvChapterName.setTextColor(textColor)
tvChapterUrl.setTextColor(textColor) // tvChapterUrl.setTextColor(textColor)
} }
val brightnessBackground = GradientDrawable() val brightnessBackground = GradientDrawable()
brightnessBackground.cornerRadius = 5F.dpToPx() brightnessBackground.cornerRadius = 5F.dpToPx()
brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f)) //brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f))
llBrightness.background = brightnessBackground llBrightness.background = brightnessBackground
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom) titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom)
llBottomBg.setBackgroundResource(R.drawable.bg_eink_border_top) llBottomBg.setBackgroundResource(R.drawable.bg_eink_border_top)
} else { } else {
llBottomBg.setBackgroundColor(bgColor) //llBottomBg.setBackgroundColor(bgColor)
} }
fabSearch.backgroundTintList = bottomBackgroundList // fabSearch.backgroundTintList = bottomBackgroundList
fabSearch.setColorFilter(textColor) // fabSearch.setColorFilter(textColor)
fabAutoPage.backgroundTintList = bottomBackgroundList // fabAutoPage.backgroundTintList = bottomBackgroundList
fabAutoPage.setColorFilter(textColor) // fabAutoPage.setColorFilter(textColor)
fabReplaceRule.backgroundTintList = bottomBackgroundList // fabReplaceRule.backgroundTintList = bottomBackgroundList
fabReplaceRule.setColorFilter(textColor) // fabReplaceRule.setColorFilter(textColor)
fabNightTheme.backgroundTintList = bottomBackgroundList // fabNightTheme.backgroundTintList = bottomBackgroundList
fabNightTheme.setColorFilter(textColor) // fabNightTheme.setColorFilter(textColor)
tvPre.setTextColor(textColor) //tvPre.setTextColor(textColor)
tvNext.setTextColor(textColor) //tvNext.setTextColor(textColor)
ivCatalog.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivCatalog.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvCatalog.setTextColor(textColor) // tvCatalog.setTextColor(textColor)
ivReadAloud.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivReadAloud.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvReadAloud.setTextColor(textColor) // tvReadAloud.setTextColor(textColor)
ivFont.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivFont.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvFont.setTextColor(textColor) // tvFont.setTextColor(textColor)
ivSetting.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSetting.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvSetting.setTextColor(textColor) // tvSetting.setTextColor(textColor)
vwBrightnessPosAdjust.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // vwBrightnessPosAdjust.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
llBrightness.setOnClickListener(null) llBrightness.setOnClickListener(null)
seekBrightness.post { seekBrightness.post {
seekBrightness.progress = AppConfig.readBrightness seekBrightness.progress = AppConfig.readBrightness
@@ -235,35 +238,35 @@ class ReadMenu @JvmOverloads constructor(
fun refreshMenuColorFilter() { fun refreshMenuColorFilter() {
if (immersiveMenu) { if (immersiveMenu) {
binding.titleBar.setColorFilter(textColor) //binding.titleBar.setColorFilter(textColor)
} }
} }
private fun upColorConfig() { private fun upColorConfig() {
bgColor = if (immersiveMenu) { // bgColor = if (immersiveMenu) {
kotlin.runCatching { // kotlin.runCatching {
Color.parseColor(ReadBookConfig.durConfig.curBgStr()) // Color.parseColor(ReadBookConfig.durConfig.curBgStr())
}.getOrDefault(context.bottomBackground) // }.getOrDefault(context.bottomBackground)
} else { // } else {
context.bottomBackground // context.bottomBackground
} // }
textColor = if (immersiveMenu) { // textColor = if (immersiveMenu) {
ReadBookConfig.durConfig.curTextColor() // ReadBookConfig.durConfig.curTextColor()
} else { // } else {
context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) // context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
} // }
bottomBackgroundList = Selector.colorBuild() // bottomBackgroundList = Selector.colorBuild()
.setDefaultColor(bgColor) // .setDefaultColor(bgColor)
.setPressedColor(ColorUtils.darkenColor(bgColor)) // .setPressedColor(ColorUtils.darkenColor(bgColor))
.create() // .create()
} }
fun upBrightnessState() { fun upBrightnessState() {
if (brightnessAuto()) { if (brightnessAuto()) {
binding.ivBrightnessAuto.setColorFilter(context.accentColor) //binding.ivBrightnessAuto.setColorFilter(context.accentColor)
binding.seekBrightness.isEnabled = false binding.seekBrightness.isEnabled = false
} else { } else {
binding.ivBrightnessAuto.setColorFilter(context.buttonDisabledColor) //binding.ivBrightnessAuto.setColorFilter(context.buttonDisabledColor)
binding.seekBrightness.isEnabled = true binding.seekBrightness.isEnabled = true
} }
setScreenBrightness(AppConfig.readBrightness.toFloat()) setScreenBrightness(AppConfig.readBrightness.toFloat())
@@ -399,24 +402,25 @@ class ReadMenu @JvmOverloads constructor(
upBrightnessVwPos() upBrightnessVwPos()
} }
//阅读进度 //阅读进度
seekReadPage.setOnSeekBarChangeListener(object : SeekBarChangeListener { seekReadPage.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
override fun onStartTrackingTouch(seekBar: SeekBar) { vwMenuBg.setOnClickListener(null)
binding.vwMenuBg.setOnClickListener(null)
} }
override fun onStopTrackingTouch(seekBar: SeekBar) { override fun onStopTrackingTouch(slider: Slider) {
binding.vwMenuBg.setOnClickListener { runMenuOut() } vwMenuBg.setOnClickListener { runMenuOut() }
val progress = slider.value.toInt()
when (AppConfig.progressBarBehavior) { when (AppConfig.progressBarBehavior) {
"page" -> ReadBook.skipToPage(seekBar.progress) "page" -> ReadBook.skipToPage(progress - 1)
"chapter" -> { "chapter" -> {
if (confirmSkipToChapter) { if (confirmSkipToChapter) {
callBack.skipToChapter(seekBar.progress) callBack.skipToChapter(progress)
} else { } else {
context.alert("章节跳转确认", "确定要跳转章节吗?") { context.alert("章节跳转确认", "确定要跳转章节吗?") {
yesButton { yesButton {
confirmSkipToChapter = true confirmSkipToChapter = true
callBack.skipToChapter(seekBar.progress) callBack.skipToChapter(progress)
} }
noButton { noButton {
upSeekBar() upSeekBar()
@@ -429,9 +433,9 @@ class ReadMenu @JvmOverloads constructor(
} }
} }
} }
}) })
//搜索 //搜索
fabSearch.setOnClickListener { fabSearch.setOnClickListener {
runMenuOut { runMenuOut {
@@ -479,6 +483,7 @@ class ReadMenu @JvmOverloads constructor(
callBack.showReadAloudDialog() callBack.showReadAloudDialog()
} }
} }
//界面 //界面
llFont.setOnClickListener { llFont.setOnClickListener {
runMenuOut { runMenuOut {
@@ -523,22 +528,54 @@ class ReadMenu @JvmOverloads constructor(
binding.seekReadPage.apply { binding.seekReadPage.apply {
when (AppConfig.progressBarBehavior) { when (AppConfig.progressBarBehavior) {
"page" -> { "page" -> {
ReadBook.curTextChapter?.let { ReadBook.curTextChapter?.let { chapter ->
max = it.pageSize.minus(1) if (chapter.pageSize > 0) {
progress = ReadBook.durPageIndex valueFrom = 1f
valueTo = chapter.pageSize.toFloat()
value = (ReadBook.durPageIndex).coerceIn(1, chapter.pageSize).toFloat()
stepSize = 1f
} else {
valueFrom = 1f
valueTo = 1f
value = 1f
}
} ?: run {
valueFrom = 1f
valueTo = 1f
value = 1f
} }
} }
"chapter" -> { "chapter" -> {
max = ReadBook.simulatedChapterSize - 1 valueFrom = 1f
progress = ReadBook.durChapterIndex valueTo = ReadBook.simulatedChapterSize.toFloat()
value = ReadBook.durChapterIndex.toFloat()
stepSize = 1f
} }
} }
} }
} }
// fun upSeekBar() {
// binding.seekReadPage.apply {
// when (AppConfig.progressBarBehavior) {
// "page" -> {
// ReadBook.curTextChapter?.let {
// max = it.pageSize.minus(1)
// progress = ReadBook.durPageIndex
// }
// }
//
// "chapter" -> {
// max = ReadBook.simulatedChapterSize - 1
// progress = ReadBook.durChapterIndex
// }
// }
// }
// }
fun setSeekPage(seek: Int) { fun setSeekPage(seek: Int) {
binding.seekReadPage.progress = seek binding.seekReadPage.value = seek.toFloat() + 1
} }
fun setAutoPage(autoPage: Boolean) = binding.run { fun setAutoPage(autoPage: Boolean) = binding.run {
@@ -549,7 +586,7 @@ class ReadMenu @JvmOverloads constructor(
fabAutoPage.setImageResource(R.drawable.ic_auto_page) fabAutoPage.setImageResource(R.drawable.ic_auto_page)
fabAutoPage.contentDescription = context.getString(R.string.auto_next_page) fabAutoPage.contentDescription = context.getString(R.string.auto_next_page)
} }
fabAutoPage.setColorFilter(textColor) //fabAutoPage.setColorFilter(textColor)
} }
private fun upBrightnessVwPos() { private fun upBrightnessVwPos() {
@@ -12,8 +12,8 @@ import androidx.core.view.isVisible
import io.legado.app.R import io.legado.app.R
import io.legado.app.databinding.ViewSearchMenuBinding import io.legado.app.databinding.ViewSearchMenuBinding
import io.legado.app.lib.theme.Selector import io.legado.app.lib.theme.Selector
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.book.searchContent.SearchResult import io.legado.app.ui.book.searchContent.SearchResult
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
@@ -35,11 +35,11 @@ class SearchMenu @JvmOverloads constructor(
private val menuBottomIn: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_in) private val menuBottomIn: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_in)
private val menuBottomOut: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_out) private val menuBottomOut: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_out)
private val bgColor: Int = context.bottomBackground //private val bgColor: Int = context.bottomBackground
private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) //private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
private val bottomBackgroundList: ColorStateList = // private val bottomBackgroundList: ColorStateList =
Selector.colorBuild().setDefaultColor(bgColor) // Selector.colorBuild().setDefaultColor(bgColor)
.setPressedColor(ColorUtils.darkenColor(bgColor)).create() // .setPressedColor(ColorUtils.darkenColor(bgColor)).create()
private var onMenuOutEnd: (() -> Unit)? = null private var onMenuOutEnd: (() -> Unit)? = null
private var isMenuOutAnimating = false private var isMenuOutAnimating = false
@@ -68,22 +68,22 @@ class SearchMenu @JvmOverloads constructor(
} }
private fun initView() = binding.run { private fun initView() = binding.run {
llSearchBaseInfo.setBackgroundColor(bgColor) // llSearchBaseInfo.setBackgroundColor(bgColor)
tvCurrentSearchInfo.setTextColor(bottomBackgroundList) // tvCurrentSearchInfo.setTextColor(bottomBackgroundList)
llBottomBg.setBackgroundColor(bgColor) // llBottomBg.setBackgroundColor(bgColor)
fabLeft.backgroundTintList = bottomBackgroundList // fabLeft.backgroundTintList = bottomBackgroundList
fabLeft.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // fabLeft.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
fabRight.backgroundTintList = bottomBackgroundList // fabRight.backgroundTintList = bottomBackgroundList
fabRight.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // fabRight.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvMainMenu.setTextColor(textColor) // tvMainMenu.setTextColor(textColor)
tvSearchResults.setTextColor(textColor) // tvSearchResults.setTextColor(textColor)
tvSearchExit.setTextColor(textColor) // tvSearchExit.setTextColor(textColor)
ivMainMenu.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivMainMenu.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
ivSearchResults.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSearchResults.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
ivSearchExit.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSearchExit.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
ivSearchContentUp.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSearchContentUp.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
ivSearchContentDown.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSearchContentDown.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvCurrentSearchInfo.setTextColor(textColor) // tvCurrentSearchInfo.setTextColor(textColor)
applyNavigationBarPadding() applyNavigationBarPadding()
} }
@@ -8,12 +8,14 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import android.widget.SeekBar import android.widget.SeekBar
import com.google.android.material.slider.Slider
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogAutoReadBinding import io.legado.app.databinding.DialogAutoReadBinding
import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.config.ReadBookConfig
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.service.BaseReadAloudService import io.legado.app.service.BaseReadAloudService
@@ -25,23 +27,23 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
import java.util.Locale import java.util.Locale
class AutoReadDialog : BaseDialogFragment(R.layout.dialog_auto_read) { class AutoReadDialog : BaseBottomSheetDialogFragment(R.layout.dialog_auto_read) {
private val binding by viewBinding(DialogAutoReadBinding::bind) private val binding by viewBinding(DialogAutoReadBinding::bind)
private val callBack: CallBack? get() = activity as? CallBack private val callBack: CallBack? get() = activity as? CallBack
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.run { // dialog?.window?.run {
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawableResource(R.color.background) // setBackgroundDrawableResource(R.color.background)
decorView.setPadding(0, 0, 0, 0) // decorView.setPadding(0, 0, 0, 0)
val attr = attributes // val attr = attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.gravity = Gravity.BOTTOM // attr.gravity = Gravity.BOTTOM
attributes = attr // attributes = attr
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) // setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
} // }
} }
override fun onDismiss(dialog: DialogInterface) { override fun onDismiss(dialog: DialogInterface) {
@@ -55,20 +57,20 @@ class AutoReadDialog : BaseDialogFragment(R.layout.dialog_auto_read) {
dismiss() dismiss()
return return
} }
val bg = requireContext().bottomBackground //val bg = requireContext().bottomBackground
val isLight = ColorUtils.isColorLight(bg) //val isLight = ColorUtils.isColorLight(bg)
val textColor = requireContext().getPrimaryTextColor(isLight) //val textColor = requireContext().getPrimaryTextColor(isLight)
root.setBackgroundColor(bg) //root.setBackgroundColor(bg)
tvReadSpeedTitle.setTextColor(textColor) // tvReadSpeedTitle.setTextColor(textColor)
tvReadSpeed.setTextColor(textColor) // tvReadSpeed.setTextColor(textColor)
ivCatalog.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivCatalog.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvCatalog.setTextColor(textColor) // tvCatalog.setTextColor(textColor)
ivMainMenu.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivMainMenu.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvMainMenu.setTextColor(textColor) // tvMainMenu.setTextColor(textColor)
ivAutoPageStop.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivAutoPageStop.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvAutoPageStop.setTextColor(textColor) // tvAutoPageStop.setTextColor(textColor)
ivSetting.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) // ivSetting.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
tvSetting.setTextColor(textColor) // tvSetting.setTextColor(textColor)
initOnChange() initOnChange()
initData() initData()
initEvent() initEvent()
@@ -77,19 +79,22 @@ class AutoReadDialog : BaseDialogFragment(R.layout.dialog_auto_read) {
private fun initData() { private fun initData() {
val speed = if (ReadBookConfig.autoReadSpeed < 1) 1 else ReadBookConfig.autoReadSpeed val speed = if (ReadBookConfig.autoReadSpeed < 1) 1 else ReadBookConfig.autoReadSpeed
binding.tvReadSpeed.text = String.format(Locale.ROOT, "%ds", speed) binding.tvReadSpeed.text = String.format(Locale.ROOT, "%ds", speed)
binding.seekAutoRead.progress = speed binding.seekAutoRead.value = speed.toFloat()
} }
private fun initOnChange() { private fun initOnChange() {
binding.seekAutoRead.setOnSeekBarChangeListener(object : SeekBarChangeListener { binding.seekAutoRead.addOnChangeListener { slider, value, fromUser ->
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { val speed = if (value < 1) 1 else value.toInt()
val speed = if (progress < 1) 1 else progress binding.tvReadSpeed.text = String.format(Locale.ROOT, "%ds", speed)
binding.tvReadSpeed.text = String.format(Locale.ROOT, "%ds", speed) }
binding.seekAutoRead.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
// 开始滑动时的操作
} }
override fun onStopTrackingTouch(seekBar: SeekBar) { override fun onStopTrackingTouch(slider: Slider) {
ReadBookConfig.autoReadSpeed = ReadBookConfig.autoReadSpeed = if (slider.value < 1) 1 else slider.value.toInt()
if (binding.seekAutoRead.progress < 1) 1 else binding.seekAutoRead.progress
upTtsSpeechRate() upTtsSpeechRate()
} }
}) })
@@ -13,6 +13,7 @@ import android.view.WindowManager
import android.widget.SeekBar import android.widget.SeekBar
import androidx.appcompat.widget.TooltipCompat import androidx.appcompat.widget.TooltipCompat
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import com.google.android.material.slider.Slider
import com.jaredrummler.android.colorpicker.ColorPickerDialog import com.jaredrummler.android.colorpicker.ColorPickerDialog
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
@@ -28,9 +29,9 @@ import io.legado.app.help.http.okHttpClient
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.getSecondaryTextColor //import io.legado.app.lib.theme.getSecondaryTextColor
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.file.HandleFileContract import io.legado.app.ui.file.HandleFileContract
import io.legado.app.ui.widget.seekbar.SeekBarChangeListener import io.legado.app.ui.widget.seekbar.SeekBarChangeListener
@@ -100,7 +101,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
super.onStart() super.onStart()
dialog?.window?.run { dialog?.window?.run {
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawableResource(R.color.background) //setBackgroundDrawableResource(R.color.background)
decorView.setPadding(0, 0, 0, 0) decorView.setPadding(0, 0, 0, 0)
val attr = attributes val attr = attributes
attr.dimAmount = 0.0f attr.dimAmount = 0.0f
@@ -124,22 +125,22 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
} }
private fun initView() = binding.run { private fun initView() = binding.run {
val bg = requireContext().bottomBackground // val bg = requireContext().bottomBackground
val isLight = ColorUtils.isColorLight(bg) // val isLight = ColorUtils.isColorLight(bg)
primaryTextColor = requireContext().getPrimaryTextColor(isLight) // primaryTextColor = requireContext().getPrimaryTextColor(isLight)
secondaryTextColor = requireContext().getSecondaryTextColor(isLight) // secondaryTextColor = requireContext().getSecondaryTextColor(isLight)
rootView.setBackgroundColor(bg) // rootView.setBackgroundColor(bg)
tvNameTitle.setTextColor(primaryTextColor) // tvNameTitle.setTextColor(primaryTextColor)
tvName.setTextColor(secondaryTextColor) // tvName.setTextColor(secondaryTextColor)
ivEdit.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN) // ivEdit.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN)
tvRestore.setTextColor(primaryTextColor) // tvRestore.setTextColor(primaryTextColor)
swDarkStatusIcon.setTextColor(primaryTextColor) // swDarkStatusIcon.setTextColor(primaryTextColor)
swUnderline.setTextColor(primaryTextColor) // swUnderline.setTextColor(primaryTextColor)
ivImport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN) // ivImport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
ivExport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN) // ivExport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
ivDelete.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN) // ivDelete.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
tvBgAlpha.setTextColor(primaryTextColor) // tvBgAlpha.setTextColor(primaryTextColor)
tvBgImage.setTextColor(primaryTextColor) // tvBgImage.setTextColor(primaryTextColor)
recyclerView.adapter = adapter recyclerView.adapter = adapter
adapter.addHeaderView { adapter.addHeaderView {
ItemBgImageBinding.inflate(layoutInflater, it, false).apply { ItemBgImageBinding.inflate(layoutInflater, it, false).apply {
@@ -162,7 +163,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
binding.tvName.text = name.ifBlank { "文字" } binding.tvName.text = name.ifBlank { "文字" }
binding.swDarkStatusIcon.isChecked = curStatusIconDark() binding.swDarkStatusIcon.isChecked = curStatusIconDark()
binding.swUnderline.isChecked = underline binding.swUnderline.isChecked = underline
binding.sbBgAlpha.progress = bgAlpha binding.sbBgAlpha.value = bgAlpha.toFloat()
} }
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
@@ -245,13 +246,17 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
toastOnUi("数量已是最少,不能删除.") toastOnUi("数量已是最少,不能删除.")
} }
} }
binding.sbBgAlpha.setOnSeekBarChangeListener(object : SeekBarChangeListener { binding.sbBgAlpha.addOnChangeListener { slider, value, fromUser ->
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { ReadBookConfig.bgAlpha = value.toInt()
ReadBookConfig.bgAlpha = progress postEvent(EventBus.UP_CONFIG, arrayListOf(3))
postEvent(EventBus.UP_CONFIG, arrayListOf(3)) }
binding.sbBgAlpha.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {
// 可留空
} }
override fun onStopTrackingTouch(seekBar: SeekBar) { override fun onStopTrackingTouch(slider: Slider) {
postEvent(EventBus.UP_CONFIG, arrayListOf(3)) postEvent(EventBus.UP_CONFIG, arrayListOf(3))
} }
}) })
@@ -8,14 +8,14 @@ import android.util.AttributeSet
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.ui.widget.text.StrokeTextView import io.legado.app.ui.widget.text.StrokeTextView
class ChineseConverter(context: Context, attrs: AttributeSet?) : StrokeTextView(context, attrs) { class ChineseConverter(context: Context, attrs: AttributeSet?) : StrokeTextView(context, attrs) {
private val spannableString = SpannableString("简/繁") private val spannableString = SpannableString("简/繁")
private var enabledSpan: ForegroundColorSpan = ForegroundColorSpan(context.accentColor) // private var enabledSpan: ForegroundColorSpan = ForegroundColorSpan(context.accentColor)
private var onChanged: (() -> Unit)? = null private var onChanged: (() -> Unit)? = null
init { init {
@@ -29,11 +29,11 @@ class ChineseConverter(context: Context, attrs: AttributeSet?) : StrokeTextView(
} }
private fun upUi(type: Int) { private fun upUi(type: Int) {
spannableString.removeSpan(enabledSpan) //spannableString.removeSpan(enabledSpan)
when (type) { // when (type) {
1 -> spannableString.setSpan(enabledSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) // 1 -> spannableString.setSpan(enabledSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
2 -> spannableString.setSpan(enabledSpan, 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) // 2 -> spannableString.setSpan(enabledSpan, 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
} // }
text = spannableString text = spannableString
} }
@@ -11,7 +11,7 @@ import io.legado.app.base.BaseDialogFragment
import io.legado.app.data.entities.HttpTTS import io.legado.app.data.entities.HttpTTS
import io.legado.app.databinding.DialogHttpTtsEditBinding import io.legado.app.databinding.DialogHttpTtsEditBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.login.SourceLoginActivity
import io.legado.app.ui.widget.code.addJsPattern import io.legado.app.ui.widget.code.addJsPattern
@@ -45,7 +45,7 @@ class HttpTtsEditDialog() : BaseDialogFragment(R.layout.dialog_http_tts_edit, tr
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.tvUrl.run { binding.tvUrl.run {
addLegadoPattern() addLegadoPattern()
addJsonPattern() addJsonPattern()
@@ -19,8 +19,8 @@ import io.legado.app.constant.PreferKey
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.config.ReadBookConfig
import io.legado.app.lib.prefs.fragment.PreferenceFragment import io.legado.app.lib.prefs.fragment.PreferenceFragment
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.read.page.provider.ChapterProvider import io.legado.app.ui.book.read.page.provider.ChapterProvider
@@ -37,16 +37,16 @@ class MoreConfigDialog : BasePrefDialogFragment() {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.run { // dialog?.window?.run {
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawableResource(R.color.background) // setBackgroundDrawableResource(R.color.background)
decorView.setPadding(0, 0, 0, 0) // decorView.setPadding(0, 0, 0, 0)
val attr = attributes // val attr = attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.gravity = Gravity.BOTTOM // attr.gravity = Gravity.BOTTOM
attributes = attr // attributes = attr
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 360.dpToPx()) // setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 360.dpToPx())
} // }
} }
override fun onCreateView( override fun onCreateView(
@@ -56,7 +56,7 @@ class MoreConfigDialog : BasePrefDialogFragment() {
): View { ): View {
(activity as ReadBookActivity).bottomDialog++ (activity as ReadBookActivity).bottomDialog++
val view = LinearLayout(context) val view = LinearLayout(context)
view.setBackgroundColor(requireContext().bottomBackground) //view.setBackgroundColor(requireContext().bottomBackground)
view.id = R.id.tag1 view.id = R.id.tag1
container?.addView(view) container?.addView(view)
return view return view
@@ -93,7 +93,7 @@ class MoreConfigDialog : BasePrefDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
listView.setEdgeEffectColor(primaryColor) //listView.setEdgeEffectColor(primaryColor)
} }
override fun onResume() { override fun onResume() {
@@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.databinding.DialogReadPaddingBinding import io.legado.app.databinding.DialogReadPaddingBinding
@@ -20,13 +21,13 @@ class PaddingConfigDialog : BaseDialogFragment(R.layout.dialog_read_padding) {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.let { // dialog?.window?.let {
it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // it.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
val attr = it.attributes // val attr = it.attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
it.attributes = attr // it.attributes = attr
} // }
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT) // setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
@@ -111,11 +112,11 @@ class PaddingConfigDialog : BaseDialogFragment(R.layout.dialog_read_padding) {
ReadBookConfig.footerPaddingRight = it ReadBookConfig.footerPaddingRight = it
postEvent(EventBus.UP_CONFIG, arrayListOf(2)) postEvent(EventBus.UP_CONFIG, arrayListOf(2))
} }
cbShowTopLine.onCheckedChangeListener = { _, isChecked -> cbShowTopLine.setOnCheckedChangeListener { _, isChecked ->
ReadBookConfig.showHeaderLine = isChecked ReadBookConfig.showHeaderLine = isChecked
postEvent(EventBus.UP_CONFIG, arrayListOf(2)) postEvent(EventBus.UP_CONFIG, arrayListOf(2))
} }
cbShowBottomLine.onCheckedChangeListener = { _, isChecked -> cbShowBottomLine.setOnCheckedChangeListener { _, isChecked ->
ReadBookConfig.showFooterLine = isChecked ReadBookConfig.showFooterLine = isChecked
postEvent(EventBus.UP_CONFIG, arrayListOf(2)) postEvent(EventBus.UP_CONFIG, arrayListOf(2))
} }
@@ -6,7 +6,7 @@ import android.view.KeyEvent
import android.view.ViewGroup import android.view.ViewGroup
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.databinding.DialogPageKeyBinding import io.legado.app.databinding.DialogPageKeyBinding
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.utils.getPrefString import io.legado.app.utils.getPrefString
import io.legado.app.utils.hideSoftInput import io.legado.app.utils.hideSoftInput
import io.legado.app.utils.putPrefString import io.legado.app.utils.putPrefString
@@ -26,7 +26,7 @@ class PageKeyDialog(context: Context) : Dialog(context) {
init { init {
setContentView(binding.root) setContentView(binding.root)
binding.run { binding.run {
contentView.setBackgroundColor(context.backgroundColor) //contentView.setBackgroundColor(context.backgroundColor)
etPrev.setText(context.getPrefString(PreferKey.prevKeys)) etPrev.setText(context.getPrefString(PreferKey.prevKeys))
etNext.setText(context.getPrefString(PreferKey.nextKeys)) etNext.setText(context.getPrefString(PreferKey.nextKeys))
tvReset.onClick { tvReset.onClick {
@@ -18,8 +18,8 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.prefs.SwitchPreference import io.legado.app.lib.prefs.SwitchPreference
import io.legado.app.lib.prefs.fragment.PreferenceFragment import io.legado.app.lib.prefs.fragment.PreferenceFragment
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.service.BaseReadAloudService import io.legado.app.service.BaseReadAloudService
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
@@ -36,8 +36,8 @@ class ReadAloudConfigDialog : BasePrefDialogFragment() {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.run { dialog?.window?.run {
setBackgroundDrawableResource(R.color.transparent) //setBackgroundDrawableResource(R.color.transparent)
setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT) //setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
} }
} }
@@ -47,7 +47,7 @@ class ReadAloudConfigDialog : BasePrefDialogFragment() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
val view = LinearLayout(requireContext()) val view = LinearLayout(requireContext())
view.setBackgroundColor(requireContext().backgroundColor) //view.setBackgroundColor(requireContext().backgroundColor)
view.id = R.id.tag1 view.id = R.id.tag1
container?.addView(view) container?.addView(view)
return view return view
@@ -88,7 +88,7 @@ class ReadAloudConfigDialog : BasePrefDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
listView.setEdgeEffectColor(primaryColor) //listView.setEdgeEffectColor(primaryColor)
} }
override fun onResume() { override fun onResume() {
@@ -8,14 +8,17 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import android.widget.SeekBar import android.widget.SeekBar
import androidx.core.content.ContextCompat
import com.google.android.material.slider.Slider
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.databinding.DialogReadAloudBinding import io.legado.app.databinding.DialogReadAloudBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.service.BaseReadAloudService import io.legado.app.service.BaseReadAloudService
@@ -25,22 +28,22 @@ import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) { class ReadAloudDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_aloud) {
private val callBack: CallBack? get() = activity as? CallBack private val callBack: CallBack? get() = activity as? CallBack
private val binding by viewBinding(DialogReadAloudBinding::bind) private val binding by viewBinding(DialogReadAloudBinding::bind)
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.run { // dialog?.window?.run {
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawableResource(R.color.background) // setBackgroundDrawableResource(R.color.background)
decorView.setPadding(0, 0, 0, 0) // decorView.setPadding(0, 0, 0, 0)
val attr = attributes // val attr = attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.gravity = Gravity.BOTTOM // attr.gravity = Gravity.BOTTOM
attributes = attr // attributes = attr
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) // setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
} // }
} }
override fun onDismiss(dialog: DialogInterface) { override fun onDismiss(dialog: DialogInterface) {
@@ -54,32 +57,32 @@ class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) {
dismiss() dismiss()
return return
} }
val bg = requireContext().bottomBackground //val bg = requireContext().bottomBackground
val isLight = ColorUtils.isColorLight(bg) //val isLight = ColorUtils.isColorLight(bg)
val textColor = requireContext().getPrimaryTextColor(isLight) //val textColor = requireContext().getPrimaryTextColor(isLight)
binding.run { binding.run {
rootView.setBackgroundColor(bg) // rootView.setBackgroundColor(bg)
tvPre.setTextColor(textColor) // tvPre.setTextColor(textColor)
tvNext.setTextColor(textColor) // tvNext.setTextColor(textColor)
ivPlayPrev.setColorFilter(textColor) // ivPlayPrev.setColorFilter(textColor)
ivPlayPause.setColorFilter(textColor) // ivPlayPause.setColorFilter(textColor)
ivPlayNext.setColorFilter(textColor) // ivPlayNext.setColorFilter(textColor)
ivStop.setColorFilter(textColor) // ivStop.setColorFilter(textColor)
ivTimer.setColorFilter(textColor) // ivTimer.setColorFilter(textColor)
tvTimer.setTextColor(textColor) // tvTimer.setTextColor(textColor)
ivTtsSpeechReduce.setColorFilter(textColor) // ivTtsSpeechReduce.setColorFilter(textColor)
tvTtsSpeed.setTextColor(textColor) // tvTtsSpeed.setTextColor(textColor)
tvTtsSpeedValue.setTextColor(textColor) // tvTtsSpeedValue.setTextColor(textColor)
ivTtsSpeechAdd.setColorFilter(textColor) // ivTtsSpeechAdd.setColorFilter(textColor)
ivCatalog.setColorFilter(textColor) // ivCatalog.setColorFilter(textColor)
tvCatalog.setTextColor(textColor) // tvCatalog.setTextColor(textColor)
ivMainMenu.setColorFilter(textColor) // ivMainMenu.setColorFilter(textColor)
tvMainMenu.setTextColor(textColor) // tvMainMenu.setTextColor(textColor)
ivToBackstage.setColorFilter(textColor) // ivToBackstage.setColorFilter(textColor)
tvToBackstage.setTextColor(textColor) // tvToBackstage.setTextColor(textColor)
ivSetting.setColorFilter(textColor) // ivSetting.setColorFilter(textColor)
tvSetting.setTextColor(textColor) // tvSetting.setTextColor(textColor)
cbTtsFollowSys.setTextColor(textColor) // cbTtsFollowSys.setTextColor(textColor)
} }
initData() initData()
initEvent() initEvent()
@@ -117,50 +120,71 @@ class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) {
upTtsSpeechRateEnabled(!isChecked) upTtsSpeechRateEnabled(!isChecked)
upTtsSpeechRate() upTtsSpeechRate()
} }
ivTtsSpeechReduce.setOnClickListener {
seekTtsSpeechRate.progress = AppConfig.ttsSpeechRate - 1
AppConfig.ttsSpeechRate -= 1
upTtsSpeechRate()
}
ivTtsSpeechAdd.setOnClickListener {
seekTtsSpeechRate.progress = AppConfig.ttsSpeechRate + 1
AppConfig.ttsSpeechRate += 1
upTtsSpeechRate()
}
ivTimer.setOnClickListener { ivTimer.setOnClickListener {
AppConfig.ttsTimer = seekTimer.progress AppConfig.ttsTimer = seekTimer.value.toInt()
toastOnUi("保存设定时间成功!") toastOnUi("保存设定时间成功!")
} }
tvTimer.setOnClickListener {
// 设置初始值
seekTtsSpeechRate.value = AppConfig.ttsSpeechRate.toFloat()
seekTimer.value = if (BaseReadAloudService.timeMinute > 0)
BaseReadAloudService.timeMinute.toFloat()
else AppConfig.ttsTimer.toFloat()
// 减速按钮逻辑
ivTtsSpeechReduce.setOnClickListener {
val newValue = (seekTtsSpeechRate.value - 1).coerceAtLeast(seekTtsSpeechRate.valueFrom)
seekTtsSpeechRate.value = newValue
AppConfig.ttsSpeechRate = newValue.toInt()
upTtsSpeechRate()
}
// 加速按钮逻辑
ivTtsSpeechAdd.setOnClickListener {
val newValue = (seekTtsSpeechRate.value + 1).coerceAtMost(seekTtsSpeechRate.valueTo)
seekTtsSpeechRate.value = newValue
AppConfig.ttsSpeechRate = newValue.toInt()
upTtsSpeechRate()
}
btnTimer.setOnClickListener {
val times = intArrayOf(0, 5, 10, 15, 30, 60, 90, 180) val times = intArrayOf(0, 5, 10, 15, 30, 60, 90, 180)
val timeKeys = times.map { "$it 分钟" } val timeKeys = times.map { "$it 分钟" }
context?.selector("设定时间", timeKeys) { _, index -> context?.selector("设定时间", timeKeys) { _, index ->
ReadAloud.setTimer(requireContext(), times[index]) ReadAloud.setTimer(requireContext(), times[index])
upTimerText(times[index])
} }
} }
//设置保存的默认值 //设置保存的默认值
seekTtsSpeechRate.progress = AppConfig.ttsSpeechRate seekTtsSpeechRate.addOnChangeListener { _, value, fromUser ->
seekTtsSpeechRate.setOnSeekBarChangeListener(object : SeekBarChangeListener { if (fromUser) {
upTtsSpeechRateText(value.toInt())
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
super.onProgressChanged(seekBar, progress, fromUser)
upTtsSpeechRateText(progress)
} }
}
override fun onStopTrackingTouch(seekBar: SeekBar) { seekTtsSpeechRate.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
AppConfig.ttsSpeechRate = seekBar.progress override fun onStartTrackingTouch(slider: Slider) {}
override fun onStopTrackingTouch(slider: Slider) {
AppConfig.ttsSpeechRate = slider.value.toInt()
upTtsSpeechRate() upTtsSpeechRate()
} }
}) })
seekTimer.setOnSeekBarChangeListener(object : SeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
upTimerText(progress)
}
override fun onStopTrackingTouch(seekBar: SeekBar) { seekTimer.addOnChangeListener { _, value, fromUser ->
ReadAloud.setTimer(requireContext(), seekTimer.progress) if (fromUser) {
upTimerText(value.toInt())
}
}
seekTimer.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
override fun onStartTrackingTouch(slider: Slider) {}
override fun onStopTrackingTouch(slider: Slider) {
ReadAloud.setTimer(requireContext(), slider.value.toInt())
} }
}) })
} }
private fun upTtsSpeechRateEnabled(enabled: Boolean) { private fun upTtsSpeechRateEnabled(enabled: Boolean) {
@@ -175,39 +199,40 @@ class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) {
private fun upPlayState() { private fun upPlayState() {
if (!BaseReadAloudService.pause) { if (!BaseReadAloudService.pause) {
binding.ivPlayPause.setImageResource(R.drawable.ic_pause_24dp) binding.ivPlayPause.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_pause_24dp)
binding.ivPlayPause.contentDescription = getString(R.string.pause) binding.ivPlayPause.contentDescription = getString(R.string.pause)
} else { } else {
binding.ivPlayPause.setImageResource(R.drawable.ic_play_24dp) binding.ivPlayPause.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_play_24dp)
binding.ivPlayPause.contentDescription = getString(R.string.audio_play) binding.ivPlayPause.contentDescription = getString(R.string.audio_play)
} }
val bg = requireContext().bottomBackground
val isLight = ColorUtils.isColorLight(bg) // val bg = requireContext().bottomBackground
val textColor = requireContext().getPrimaryTextColor(isLight) // val isLight = ColorUtils.isColorLight(bg)
binding.ivPlayPause.setColorFilter(textColor) // val textColor = requireContext().getPrimaryTextColor(isLight)
// binding.ivPlayPause.iconTint = ColorStateList.valueOf(textColor)
} }
private fun upSeekTimer() { private fun upSeekTimer() {
binding.seekTimer.post { binding.seekTimer.post {
if (BaseReadAloudService.timeMinute > 0) { binding.seekTimer.value = if (BaseReadAloudService.timeMinute > 0) {
binding.seekTimer.progress = BaseReadAloudService.timeMinute BaseReadAloudService.timeMinute.toFloat()
} else { } else {
binding.seekTimer.progress = AppConfig.ttsTimer AppConfig.ttsTimer.toFloat()
} }
} }
} }
private fun upTimerText(timeMinute: Int) { private fun upTimerText(timeMinute: Int) {
if (timeMinute < 0) { if (timeMinute < 0) {
binding.tvTimer.text = requireContext().getString(R.string.timer_m, 0) binding.btnTimer.text = requireContext().getString(R.string.timer_m, 0)
} else { } else {
binding.tvTimer.text = requireContext().getString(R.string.timer_m, timeMinute) binding.btnTimer.text = requireContext().getString(R.string.timer_m, timeMinute)
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun upTtsSpeechRateText(value: Int) { private fun upTtsSpeechRateText(value: Int) {
binding.tvTtsSpeedValue.text = ((value + 5) / 10f).toString() binding.tvTtsSpeedValue.text = value.toString()
} }
private fun upTtsSpeechRate() { private fun upTtsSpeechRate() {
@@ -220,7 +245,10 @@ class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) {
override fun observeLiveBus() { override fun observeLiveBus() {
observeEvent<Int>(EventBus.ALOUD_STATE) { upPlayState() } observeEvent<Int>(EventBus.ALOUD_STATE) { upPlayState() }
observeEvent<Int>(EventBus.READ_ALOUD_DS) { binding.seekTimer.progress = it } observeEvent<Int>(EventBus.READ_ALOUD_DS) {
val value = it.coerceIn(binding.seekTimer.valueFrom.toInt(), binding.seekTimer.valueTo.toInt())
binding.seekTimer.value = value.toFloat()
}
} }
interface CallBack { interface CallBack {
@@ -9,6 +9,7 @@ import android.view.WindowManager
import androidx.core.view.get import androidx.core.view.get
import com.github.liuyueyi.quick.transfer.constants.TransType import com.github.liuyueyi.quick.transfer.constants.TransType
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
@@ -18,9 +19,9 @@ import io.legado.app.databinding.ItemReadStyleBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.config.ReadBookConfig
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.font.FontSelectDialog import io.legado.app.ui.font.FontSelectDialog
@@ -33,7 +34,7 @@ import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import splitties.views.onLongClick import splitties.views.onLongClick
class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style), class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
FontSelectDialog.CallBack { FontSelectDialog.CallBack {
private val binding by viewBinding(DialogReadBookStyleBinding::bind) private val binding by viewBinding(DialogReadBookStyleBinding::bind)
@@ -42,16 +43,16 @@ class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style),
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
dialog?.window?.run { // dialog?.window?.run {
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
setBackgroundDrawableResource(R.color.background) // setBackgroundDrawableResource(R.color.background)
decorView.setPadding(0, 0, 0, 0) // decorView.setPadding(0, 0, 0, 0)
val attr = attributes // val attr = attributes
attr.dimAmount = 0.0f // attr.dimAmount = 0.0f
attr.gravity = Gravity.BOTTOM // attr.gravity = Gravity.BOTTOM
attributes = attr // attributes = attr
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) // setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
} // }
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
@@ -68,13 +69,13 @@ class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style),
} }
private fun initView() = binding.run { private fun initView() = binding.run {
val bg = requireContext().bottomBackground //val bg = requireContext().bottomBackground
val isLight = ColorUtils.isColorLight(bg) //val isLight = ColorUtils.isColorLight(bg)
val textColor = requireContext().getPrimaryTextColor(isLight) //val textColor = requireContext().getPrimaryTextColor(isLight)
rootView.setBackgroundColor(bg) // rootView.setBackgroundColor(bg)
tvPageAnim.setTextColor(textColor) // tvPageAnim.setTextColor(textColor)
tvBgTs.setTextColor(textColor) // tvBgTs.setTextColor(textColor)
tvShareLayout.setTextColor(textColor) // tvShareLayout.setTextColor(textColor)
dsbTextSize.valueFormat = { dsbTextSize.valueFormat = {
(it + 5).toString() (it + 5).toString()
} }
@@ -87,10 +88,10 @@ class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style),
rvStyle.adapter = styleAdapter rvStyle.adapter = styleAdapter
styleAdapter.addFooterView { styleAdapter.addFooterView {
ItemReadStyleBinding.inflate(layoutInflater, it, false).apply { ItemReadStyleBinding.inflate(layoutInflater, it, false).apply {
ivStyle.setPadding(6.dpToPx(), 6.dpToPx(), 6.dpToPx(), 6.dpToPx()) // ivStyle.setPadding(6.dpToPx(), 6.dpToPx(), 6.dpToPx(), 6.dpToPx())
ivStyle.setText(null) // ivStyle.setText(null)
ivStyle.setColorFilter(textColor) // ivStyle.setColorFilter(textColor)
ivStyle.borderColor = textColor // ivStyle.borderColor = textColor
ivStyle.setImageResource(R.drawable.ic_add) ivStyle.setImageResource(R.drawable.ic_add)
root.setOnClickListener { root.setOnClickListener {
ReadBookConfig.configList.add(ReadBookConfig.Config()) ReadBookConfig.configList.add(ReadBookConfig.Config())
@@ -133,13 +134,28 @@ class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style),
tvTip.setOnClickListener { tvTip.setOnClickListener {
TipConfigDialog().show(childFragmentManager, "tipConfigDialog") TipConfigDialog().show(childFragmentManager, "tipConfigDialog")
} }
rgPageAnim.setOnCheckedChangeListener { _, checkedId -> // rgPageAnim.setOnCheckedChangeListener { _, checkedId ->
// ReadBook.book?.setPageAnim(-1)
// ReadBookConfig.pageAnim = binding.rgPageAnim.getIndexById(checkedId)
// callBack?.upPageAnim()
// ReadBook.loadContent(false)
// }
binding.rgPageAnim.setOnCheckedStateChangeListener { group, checkedIds ->
val checkedId = checkedIds.firstOrNull() ?: return@setOnCheckedStateChangeListener
ReadBook.book?.setPageAnim(-1) ReadBook.book?.setPageAnim(-1)
ReadBookConfig.pageAnim = binding.rgPageAnim.getIndexById(checkedId) ReadBookConfig.pageAnim = when (checkedId) {
R.id.rb_anim0 -> 0 // 覆盖动画
R.id.rb_anim1 -> 1 // 滑动动画
R.id.rb_simulation_anim -> 2 // 仿真翻页
R.id.rb_scroll_anim -> 3 // 滚动动画
R.id.rb_no_anim -> 4 // 无动画
else -> 0
}
callBack?.upPageAnim() callBack?.upPageAnim()
ReadBook.loadContent(false) ReadBook.loadContent(false)
} }
cbShareLayout.onCheckedChangeListener = { _, isChecked ->
cbShareLayout.setOnCheckedChangeListener { _, isChecked ->
ReadBookConfig.shareLayout = isChecked ReadBookConfig.shareLayout = isChecked
upView() upView()
postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5)) postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
@@ -224,9 +240,9 @@ class ReadStyleDialog : BaseDialogFragment(R.layout.dialog_read_book_style),
binding.apply { binding.apply {
ivStyle.setText(item.name.ifBlank { "文字" }) ivStyle.setText(item.name.ifBlank { "文字" })
ivStyle.setTextColor(item.curTextColor()) ivStyle.setTextColor(item.curTextColor())
ivStyle.setImageDrawable(item.curBgDrawable(100, 150)) //ivStyle.setImageDrawable(item.curBgDrawable(100, 150))
if (ReadBookConfig.styleSelect == holder.layoutPosition) { if (ReadBookConfig.styleSelect == holder.layoutPosition) {
ivStyle.borderColor = accentColor //ivStyle.borderColor = accentColor
ivStyle.setTextBold(true) ivStyle.setTextBold(true)
} else { } else {
ivStyle.borderColor = item.curTextColor() ivStyle.borderColor = item.curTextColor()
@@ -24,7 +24,7 @@ import io.legado.app.help.DirectLinkUpload
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.association.ImportHttpTtsDialog import io.legado.app.ui.association.ImportHttpTtsDialog
@@ -89,7 +89,7 @@ class SpeakEngineDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 0.9f) //setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 0.9f)
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
@@ -99,9 +99,9 @@ class SpeakEngineDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
private fun initView() = binding.run { private fun initView() = binding.run {
toolBar.setBackgroundColor(primaryColor) //toolBar.setBackgroundColor(primaryColor)
toolBar.setTitle(R.string.speak_engine) toolBar.setTitle(R.string.speak_engine)
recyclerView.setEdgeEffectColor(primaryColor) //recyclerView.setEdgeEffectColor(primaryColor)
recyclerView.layoutManager = LinearLayoutManager(requireContext()) recyclerView.layoutManager = LinearLayoutManager(requireContext())
recyclerView.adapter = adapter recyclerView.adapter = adapter
adapter.addHeaderView { adapter.addHeaderView {
@@ -8,7 +8,7 @@ import android.util.AttributeSet
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.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.ui.widget.text.StrokeTextView import io.legado.app.ui.widget.text.StrokeTextView
@@ -16,7 +16,7 @@ class TextFontWeightConverter(context: Context, attrs: AttributeSet?) :
StrokeTextView(context, attrs) { StrokeTextView(context, attrs) {
private val spannableString = SpannableString(context.getString(R.string.font_weight_text)) private val spannableString = SpannableString(context.getString(R.string.font_weight_text))
private var enabledSpan: ForegroundColorSpan = ForegroundColorSpan(context.accentColor) //private var enabledSpan: ForegroundColorSpan = ForegroundColorSpan(context.accentColor)
private var onChanged: (() -> Unit)? = null private var onChanged: (() -> Unit)? = null
init { init {
@@ -31,12 +31,12 @@ class TextFontWeightConverter(context: Context, attrs: AttributeSet?) :
@Suppress("MemberVisibilityCanBePrivate") @Suppress("MemberVisibilityCanBePrivate")
fun upUi(type: Int) { fun upUi(type: Int) {
spannableString.removeSpan(enabledSpan) // spannableString.removeSpan(enabledSpan)
when (type) { // when (type) {
0 -> spannableString.setSpan(enabledSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) // 0 -> spannableString.setSpan(enabledSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
1 -> spannableString.setSpan(enabledSpan, 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) // 1 -> spannableString.setSpan(enabledSpan, 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
2 -> spannableString.setSpan(enabledSpan, 4, 5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) // 2 -> spannableString.setSpan(enabledSpan, 4, 5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
} // }
text = spannableString text = spannableString
} }
@@ -26,10 +26,10 @@ import io.legado.app.data.entities.SearchKeyword
import io.legado.app.databinding.ActivityBookSearchBinding import io.legado.app.databinding.ActivityBookSearchBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.Selector import io.legado.app.lib.theme.Selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.info.BookInfoActivity import io.legado.app.ui.book.info.BookInfoActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.book.source.manage.BookSourceActivity
@@ -88,7 +88,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
private var isManualStopSearch = false private var isManualStopSearch = false
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.llInputHelp.setBackgroundColor(backgroundColor) //binding.llInputHelp.setBackgroundColor(backgroundColor)
initRecyclerView() initRecyclerView()
initSearchView() initSearchView()
initOtherView() initOtherView()
@@ -178,7 +178,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
private fun initSearchView() { private fun initSearchView() {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.queryHint = getString(R.string.search_book_key) searchView.queryHint = getString(R.string.search_book_key)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
@@ -212,9 +212,9 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor) // binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.rvBookshelfSearch.setEdgeEffectColor(primaryColor) // binding.rvBookshelfSearch.setEdgeEffectColor(primaryColor)
binding.rvHistoryKey.setEdgeEffectColor(primaryColor) // binding.rvHistoryKey.setEdgeEffectColor(primaryColor)
binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this) binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this)
binding.rvBookshelfSearch.adapter = bookAdapter binding.rvBookshelfSearch.adapter = bookAdapter
binding.rvBookshelfSearch.applyNavigationBarMargin() binding.rvBookshelfSearch.applyNavigationBarMargin()
@@ -266,8 +266,8 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
private fun initOtherView() { private fun initOtherView() {
binding.fbStartStop.backgroundTintList = binding.fbStartStop.backgroundTintList =
Selector.colorBuild() Selector.colorBuild()
.setDefaultColor(accentColor) // .setDefaultColor(accentColor)
.setPressedColor(ColorUtils.darkenColor(accentColor)) // .setPressedColor(ColorUtils.darkenColor(accentColor))
.create() .create()
binding.fbStartStop.setOnClickListener { binding.fbStartStop.setOnClickListener {
if (viewModel.isSearchLiveData.value == true) { if (viewModel.isSearchLiveData.value == true) {
@@ -17,7 +17,7 @@ import io.legado.app.data.entities.BookSourcePart
import io.legado.app.databinding.DialogSearchScopeBinding import io.legado.app.databinding.DialogSearchScopeBinding
import io.legado.app.databinding.ItemCheckBoxBinding import io.legado.app.databinding.ItemCheckBoxBinding
import io.legado.app.databinding.ItemRadioButtonBinding import io.legado.app.databinding.ItemRadioButtonBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.flowWithLifecycleAndDatabaseChange import io.legado.app.utils.flowWithLifecycleAndDatabaseChange
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -50,7 +50,7 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) //binding.toolBar.setBackgroundColor(primaryColor)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
initMenu() initMenu()
initSearchView() initSearchView()
@@ -22,9 +22,9 @@ import io.legado.app.databinding.ActivitySearchContentBinding
import io.legado.app.help.IntentData import io.legado.app.help.IntentData
import io.legado.app.help.book.BookHelp import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.isLocal import io.legado.app.help.book.isLocal
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.widget.recycler.UpLinearLayoutManager import io.legado.app.ui.widget.recycler.UpLinearLayoutManager
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
@@ -61,13 +61,13 @@ class SearchContentActivity :
private var initJob: Job? = null private var initJob: Job? = null
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
val bbg = bottomBackground // val bbg = bottomBackground
val btc = getPrimaryTextColor(ColorUtils.isColorLight(bbg)) // val btc = getPrimaryTextColor(ColorUtils.isColorLight(bbg))
binding.llSearchBaseInfo.setBackgroundColor(bbg) // binding.llSearchBaseInfo.setBackgroundColor(bbg)
binding.llSearchBaseInfo.applyNavigationBarMargin() binding.llSearchBaseInfo.applyNavigationBarMargin()
binding.tvCurrentSearchInfo.setTextColor(btc) // binding.tvCurrentSearchInfo.setTextColor(btc)
binding.ivSearchContentTop.setColorFilter(btc) // binding.ivSearchContentTop.setColorFilter(btc)
binding.ivSearchContentBottom.setColorFilter(btc) // binding.ivSearchContentBottom.setColorFilter(btc)
val searchResultList = IntentData.get<List<SearchResult>>("searchResultList") val searchResultList = IntentData.get<List<SearchResult>>("searchResultList")
val position = intent.getIntExtra("searchResultIndex", 0) val position = intent.getIntExtra("searchResultIndex", 0)
val noSearchResult = searchResultList == null val noSearchResult = searchResultList == null
@@ -124,7 +124,7 @@ class SearchContentActivity :
} }
private fun initSearchView(requestFocus: Boolean) { private fun initSearchView(requestFocus: Boolean) {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.isSubmitButtonEnabled = true searchView.isSubmitButtonEnabled = true
searchView.queryHint = getString(R.string.search) searchView.queryHint = getString(R.string.search)
if (requestFocus) searchView.isIconified = false if (requestFocus) searchView.isIconified = false
@@ -6,7 +6,7 @@ import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.databinding.ItemSearchListBinding import io.legado.app.databinding.ItemSearchListBinding
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.getCompatColor import io.legado.app.utils.getCompatColor
import io.legado.app.utils.hexString import io.legado.app.utils.hexString
@@ -15,7 +15,7 @@ class SearchContentAdapter(context: Context, val callback: Callback) :
RecyclerAdapter<SearchResult, ItemSearchListBinding>(context) { RecyclerAdapter<SearchResult, ItemSearchListBinding>(context) {
val textColor = context.getCompatColor(R.color.primaryText).hexString.substring(2) val textColor = context.getCompatColor(R.color.primaryText).hexString.substring(2)
val accentColor = context.accentColor.hexString.substring(2) //val accentColor = context.accentColor.hexString.substring(2)
override fun getViewBinding(parent: ViewGroup): ItemSearchListBinding { override fun getViewBinding(parent: ViewGroup): ItemSearchListBinding {
return ItemSearchListBinding.inflate(inflater, parent, false) return ItemSearchListBinding.inflate(inflater, parent, false)
@@ -30,7 +30,7 @@ class SearchContentAdapter(context: Context, val callback: Callback) :
binding.run { binding.run {
val isDur = callback.durChapterIndex() == item.chapterIndex val isDur = callback.durChapterIndex() == item.chapterIndex
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
tvSearchResult.text = item.getHtmlCompat(textColor, accentColor) //tvSearchResult.text = item.getHtmlCompat(textColor, accentColor)
tvSearchResult.paint.isFakeBoldText = isDur tvSearchResult.paint.isFakeBoldText = isDur
} }
} }
@@ -14,8 +14,8 @@ import io.legado.app.databinding.ActivitySourceDebugBinding
import io.legado.app.help.source.clearExploreKindsCache import io.legado.app.help.source.clearExploreKindsCache
import io.legado.app.help.source.exploreKinds import io.legado.app.help.source.exploreKinds
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.qrcode.QrCodeResult import io.legado.app.ui.qrcode.QrCodeResult
import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.applyNavigationBarPadding import io.legado.app.utils.applyNavigationBarPadding
@@ -61,10 +61,10 @@ class BookSourceDebugActivity : VMBaseActivity<ActivitySourceDebugBinding, BookS
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor) //binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.recyclerView.applyNavigationBarPadding() binding.recyclerView.applyNavigationBarPadding()
binding.rotateLoading.loadingColor = accentColor //binding.rotateLoading.loadingColor = accentColor
} }
private fun initSearchView() { private fun initSearchView() {
@@ -24,9 +24,9 @@ import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.ui.book.search.SearchScope import io.legado.app.ui.book.search.SearchScope
import io.legado.app.ui.book.source.debug.BookSourceDebugActivity import io.legado.app.ui.book.source.debug.BookSourceDebugActivity
@@ -183,11 +183,11 @@ class BookSourceEditActivity :
binding.tabLayout.addTab(binding.tabLayout.newTab().apply { binding.tabLayout.addTab(binding.tabLayout.newTab().apply {
setText(R.string.source_tab_content) setText(R.string.source_tab_content)
}) })
binding.recyclerView.setEdgeEffectColor(primaryColor) // binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.layoutManager = NoChildScrollLinearLayoutManager(this) binding.recyclerView.layoutManager = NoChildScrollLinearLayoutManager(this)
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.tabLayout.setBackgroundColor(backgroundColor) // binding.tabLayout.setBackgroundColor(backgroundColor)
binding.tabLayout.setSelectedTabIndicatorColor(accentColor) // binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) { override fun onTabReselected(tab: TabLayout.Tab?) {
@@ -31,8 +31,8 @@ import io.legado.app.databinding.DialogEditTextBinding
import io.legado.app.help.DirectLinkUpload import io.legado.app.help.DirectLinkUpload
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor //import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.model.CheckSource import io.legado.app.model.CheckSource
import io.legado.app.model.Debug import io.legado.app.model.Debug
import io.legado.app.ui.association.ImportBookSourceDialog import io.legado.app.ui.association.ImportBookSourceDialog
@@ -287,7 +287,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor) //binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.addItemDecoration(VerticalDivider(this)) binding.recyclerView.addItemDecoration(VerticalDivider(this))
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.recyclerView.recycledViewPool.setMaxRecycledViews(0, 15) binding.recyclerView.recycledViewPool.setMaxRecycledViews(0, 15)
@@ -301,7 +301,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
} }
private fun initSearchView() { private fun initSearchView() {
searchView.applyTint(primaryTextColor) //searchView.applyTint(primaryTextColor)
searchView.queryHint = getString(R.string.search_book_source) searchView.queryHint = getString(R.string.search_book_source)
searchView.setOnQueryTextListener(this) searchView.setOnQueryTextListener(this)
} }
@@ -16,7 +16,7 @@ import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.BookSourcePart import io.legado.app.data.entities.BookSourcePart
import io.legado.app.databinding.ItemBookSourceBinding import io.legado.app.databinding.ItemBookSourceBinding
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.model.Debug import io.legado.app.model.Debug
import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.login.SourceLoginActivity
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
@@ -98,7 +98,7 @@ class BookSourceAdapter(
) { ) {
binding.run { binding.run {
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
root.setBackgroundColor(ColorUtils.withAlpha(context.backgroundColor, 0.5f)) //root.setBackgroundColor(ColorUtils.withAlpha(context.backgroundColor, 0.5f))
cbBookSource.text = item.getDisPlayNameGroup() cbBookSource.text = item.getDisPlayNameGroup()
swtEnabled.isChecked = item.enabled swtEnabled.isChecked = item.enabled
cbBookSource.isChecked = selected.contains(item) cbBookSource.isChecked = selected.contains(item)
@@ -19,8 +19,8 @@ import io.legado.app.databinding.DialogEditTextBinding
import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemGroupManageBinding import io.legado.app.databinding.ItemGroupManageBinding
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.backgroundColor //import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.requestInputMethod import io.legado.app.utils.requestInputMethod
@@ -42,8 +42,8 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
view.setBackgroundColor(backgroundColor) // view.setBackgroundColor(backgroundColor)
binding.toolBar.setBackgroundColor(primaryColor) // binding.toolBar.setBackgroundColor(primaryColor)
binding.toolBar.title = getString(R.string.group_manage) binding.toolBar.title = getString(R.string.group_manage)
binding.toolBar.inflateMenu(R.menu.group_manage) binding.toolBar.inflateMenu(R.menu.group_manage)
binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.menu.applyTint(requireContext())
@@ -116,7 +116,7 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.run { binding.run {
root.setBackgroundColor(context.backgroundColor) //root.setBackgroundColor(context.backgroundColor)
tvGroup.text = item tvGroup.text = item
} }
} }
@@ -12,7 +12,7 @@ import io.legado.app.constant.AppLog
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Bookmark import io.legado.app.data.entities.Bookmark
import io.legado.app.databinding.FragmentBookmarkBinding import io.legado.app.databinding.FragmentBookmarkBinding
import io.legado.app.lib.theme.primaryColor //import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.book.bookmark.BookmarkDialog import io.legado.app.ui.book.bookmark.BookmarkDialog
import io.legado.app.ui.widget.recycler.UpLinearLayoutManager import io.legado.app.ui.widget.recycler.UpLinearLayoutManager
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
@@ -47,7 +47,7 @@ class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark
} }
private fun initRecyclerView() { private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor) //binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.layoutManager = mLayoutManager binding.recyclerView.layoutManager = mLayoutManager
binding.recyclerView.addItemDecoration(VerticalDivider(requireContext())) binding.recyclerView.addItemDecoration(VerticalDivider(requireContext()))
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
@@ -15,7 +15,7 @@ import io.legado.app.help.book.ContentProcessor
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.lib.theme.ThemeUtils import io.legado.app.lib.theme.ThemeUtils
import io.legado.app.lib.theme.accentColor //import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.getCompatColor import io.legado.app.utils.getCompatColor
import io.legado.app.utils.gone import io.legado.app.utils.gone
import io.legado.app.utils.longToastOnUi import io.legado.app.utils.longToastOnUi
@@ -129,7 +129,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
|| cacheFileNames.contains(item.getFileName()) || cacheFileNames.contains(item.getFileName())
if (payloads.isEmpty()) { if (payloads.isEmpty()) {
if (isDur) { if (isDur) {
tvChapterName.setTextColor(context.accentColor) //tvChapterName.setTextColor(context.accentColor)
} else { } else {
tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText)) tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
} }
@@ -18,8 +18,8 @@ import io.legado.app.databinding.FragmentChapterListBinding
import io.legado.app.help.book.BookHelp import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.isLocal import io.legado.app.help.book.isLocal
import io.legado.app.help.book.simulatedTotalChapterNum import io.legado.app.help.book.simulatedTotalChapterNum
import io.legado.app.lib.theme.bottomBackground //import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor //import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.ui.widget.recycler.UpLinearLayoutManager import io.legado.app.ui.widget.recycler.UpLinearLayoutManager
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.ColorUtils import io.legado.app.utils.ColorUtils
@@ -44,12 +44,12 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) = binding.run { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) = binding.run {
viewModel.chapterListCallBack = this@ChapterListFragment viewModel.chapterListCallBack = this@ChapterListFragment
val bbg = bottomBackground // val bbg = bottomBackground
val btc = requireContext().getPrimaryTextColor(ColorUtils.isColorLight(bbg)) // val btc = requireContext().getPrimaryTextColor(ColorUtils.isColorLight(bbg))
llChapterBaseInfo.setBackgroundColor(bbg) // llChapterBaseInfo.setBackgroundColor(bbg)
tvCurrentChapterInfo.setTextColor(btc) // tvCurrentChapterInfo.setTextColor(btc)
ivChapterTop.setColorFilter(btc, PorterDuff.Mode.SRC_IN) // ivChapterTop.setColorFilter(btc, PorterDuff.Mode.SRC_IN)
ivChapterBottom.setColorFilter(btc, PorterDuff.Mode.SRC_IN) // ivChapterBottom.setColorFilter(btc, PorterDuff.Mode.SRC_IN)
initRecyclerView() initRecyclerView()
initView() initView()
viewModel.bookData.observe(this@ChapterListFragment) { viewModel.bookData.observe(this@ChapterListFragment) {

Some files were not shown because too many files have changed in this diff Show More