Update UI Style

This commit is contained in:
HapeLee committed 2025-06-01 23:23:15 +08:00
1 parent 3e168fb569
commit 09a39a851e
363 files changed
+3262 -3330

No files matched your search

+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
Loaded 100 of 363 files, more files were not shown because too many files have changed in this diff. Show more