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

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