HapeLee 1 год назад
Родитель
Сommit
09a39a851e
100 измененных файлов с 1151 добавлено и 1024 удалено
  1. 1 1
      app/build.gradle
  2. 1 1
      app/src/main/AndroidManifest.xml
  3. 2 0
      app/src/main/java/io/legado/app/App.kt
  4. 32 31
      app/src/main/java/io/legado/app/base/BaseActivity.kt
  5. 77 0
      app/src/main/java/io/legado/app/base/BaseBottomSheetDialogFragment.kt
  6. 27 30
      app/src/main/java/io/legado/app/base/BaseDialogFragment.kt
  7. 4 4
      app/src/main/java/io/legado/app/base/BaseFragment.kt
  8. 21 20
      app/src/main/java/io/legado/app/base/BasePrefDialogFragment.kt
  9. 3 3
      app/src/main/java/io/legado/app/constant/PreferKey.kt
  10. 13 13
      app/src/main/java/io/legado/app/help/config/AppConfig.kt
  11. 10 3
      app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt
  12. 5 4
      app/src/main/java/io/legado/app/help/config/ThemeConfig.kt
  13. 2 1
      app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt
  14. 2 2
      app/src/main/java/io/legado/app/lib/prefs/EditTextPreference.kt
  15. 13 13
      app/src/main/java/io/legado/app/lib/prefs/EditTextPreferenceDialog.kt
  16. 4 4
      app/src/main/java/io/legado/app/lib/prefs/IconListPreference.kt
  17. 13 13
      app/src/main/java/io/legado/app/lib/prefs/ListPreferenceDialog.kt
  18. 13 13
      app/src/main/java/io/legado/app/lib/prefs/MultiSelectListPreferenceDialog.kt
  19. 5 5
      app/src/main/java/io/legado/app/lib/prefs/NameListPreference.kt
  20. 10 10
      app/src/main/java/io/legado/app/lib/prefs/Preference.kt
  21. 13 13
      app/src/main/java/io/legado/app/lib/prefs/PreferenceCategory.kt
  22. 3 2
      app/src/main/java/io/legado/app/lib/prefs/SwitchPreference.kt
  23. 0 130
      app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt
  24. 14 1
      app/src/main/java/io/legado/app/lib/theme/ThemeStore.kt
  25. 7 0
      app/src/main/java/io/legado/app/lib/theme/ThemeStorePrefKeys.kt
  26. 14 12
      app/src/main/java/io/legado/app/lib/theme/view/ThemeBottomNavigationVIew.kt
  27. 8 7
      app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt
  28. 9 9
      app/src/main/java/io/legado/app/lib/theme/view/ThemeEditText.kt
  29. 6 6
      app/src/main/java/io/legado/app/lib/theme/view/ThemeProgressBar.kt
  30. 8 7
      app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt
  31. 53 53
      app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioNoButton.kt
  32. 0 19
      app/src/main/java/io/legado/app/lib/theme/view/ThemeSeekBar.kt
  33. 19 0
      app/src/main/java/io/legado/app/lib/theme/view/ThemeSlider.kt
  34. 9 9
      app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt
  35. 13 5
      app/src/main/java/io/legado/app/ui/about/AboutActivity.kt
  36. 2 2
      app/src/main/java/io/legado/app/ui/about/AppLogDialog.kt
  37. 2 2
      app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt
  38. 2 2
      app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt
  39. 2 2
      app/src/main/java/io/legado/app/ui/about/UpdateDialog.kt
  40. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt
  41. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt
  42. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt
  43. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt
  44. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt
  45. 7 6
      app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt
  46. 5 5
      app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt
  47. 2 2
      app/src/main/java/io/legado/app/ui/association/OpenUrlConfirmDialog.kt
  48. 2 2
      app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt
  49. 45 10
      app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt
  50. 17 17
      app/src/main/java/io/legado/app/ui/book/audio/TimerSliderPopup.kt
  51. 4 4
      app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDecoration.kt
  52. 2 2
      app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt
  53. 9 7
      app/src/main/java/io/legado/app/ui/book/cache/CacheAdapter.kt
  54. 2 2
      app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt
  55. 7 8
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt
  56. 3 4
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt
  57. 2 2
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterTocAdapter.kt
  58. 5 4
      app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt
  59. 9 8
      app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt
  60. 9 8
      app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt
  61. 2 2
      app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt
  62. 2 2
      app/src/main/java/io/legado/app/ui/book/import/local/ImportBookActivity.kt
  63. 2 2
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt
  64. 2 2
      app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt
  65. 4 4
      app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt
  66. 4 2
      app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt
  67. 2 2
      app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt
  68. 4 4
      app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt
  69. 4 4
      app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt
  70. 17 17
      app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt
  71. 2 2
      app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt
  72. 2 2
      app/src/main/java/io/legado/app/ui/book/read/EffectiveReplacesDialog.kt
  73. 20 16
      app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt
  74. 3 3
      app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt
  75. 131 94
      app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt
  76. 23 23
      app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt
  77. 40 35
      app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt
  78. 31 26
      app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt
  79. 7 7
      app/src/main/java/io/legado/app/ui/book/read/config/ChineseConverter.kt
  80. 2 2
      app/src/main/java/io/legado/app/ui/book/read/config/HttpTtsEditDialog.kt
  81. 14 14
      app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt
  82. 10 9
      app/src/main/java/io/legado/app/ui/book/read/config/PaddingConfigDialog.kt
  83. 2 2
      app/src/main/java/io/legado/app/ui/book/read/config/PageKeyDialog.kt
  84. 6 6
      app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt
  85. 101 73
      app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt
  86. 46 30
      app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt
  87. 4 4
      app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt
  88. 8 8
      app/src/main/java/io/legado/app/ui/book/read/config/TextFontWeightConverter.kt
  89. 11 11
      app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt
  90. 2 2
      app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt
  91. 10 10
      app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt
  92. 3 3
      app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt
  93. 4 4
      app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt
  94. 6 6
      app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt
  95. 4 4
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
  96. 2 2
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
  97. 5 5
      app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt
  98. 2 2
      app/src/main/java/io/legado/app/ui/book/toc/BookmarkFragment.kt
  99. 2 2
      app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt
  100. 8 8
      app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt

+ 1 - 1
app/build.gradle

@@ -48,7 +48,7 @@ android {
     }
     defaultConfig {
         applicationId "io.legado.app"
-        minSdk 21
+        minSdk 24
         targetSdk 35
         versionCode 10000 + gitCommits
         versionName version

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -29,7 +29,7 @@
         android:networkSecurityConfig="@xml/network_security_config"
         android:requestLegacyExternalStorage="true"
         android:supportsRtl="true"
-        android:theme="@style/AppTheme.Light"
+        android:theme="@style/Base.AppTheme"
         tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
         <!-- 主入口 -->
         <activity

+ 2 - 0
app/src/main/java/io/legado/app/App.kt

@@ -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)

+ 32 - 31
app/src/main/java/io/legado/app/base/BaseActivity.kt

@@ -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() {

+ 77 - 0
app/src/main/java/io/legado/app/base/BaseBottomSheetDialogFragment.kt

@@ -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() {
+    }
+
+}

+ 27 - 30
app/src/main/java/io/legado/app/base/BaseDialogFragment.kt

@@ -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?) {

+ 4 - 4
app/src/main/java/io/legado/app/base/BaseFragment.kt

@@ -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) {

+ 21 - 20
app/src/main/java/io/legado/app/base/BasePrefDialogFragment.kt

@@ -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)
+//                        }
+//                    }
+//                }
             })
         }
     }

+ 3 - 3
app/src/main/java/io/legado/app/constant/PreferKey.kt

@@ -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"

+ 13 - 13
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -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)

+ 10 - 3
app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt

@@ -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)
         }
     }
 }

+ 5 - 4
app/src/main/java/io/legado/app/help/config/ThemeConfig.kt

@@ -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)

+ 2 - 1
app/src/main/java/io/legado/app/lib/dialogs/AndroidAlertBuilder.kt

@@ -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)

+ 2 - 2
app/src/main/java/io/legado/app/lib/prefs/EditTextPreference.kt

@@ -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)
     }
 

+ 13 - 13
app/src/main/java/io/legado/app/lib/prefs/EditTextPreferenceDialog.kt

@@ -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)
                     }
                 }

+ 4 - 4
app/src/main/java/io/legado/app/lib/prefs/IconListPreference.kt

@@ -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())

+ 13 - 13
app/src/main/java/io/legado/app/lib/prefs/ListPreferenceDialog.kt

@@ -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
     }
 

+ 13 - 13
app/src/main/java/io/legado/app/lib/prefs/MultiSelectListPreferenceDialog.kt

@@ -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
     }
 

+ 5 - 5
app/src/main/java/io/legado/app/lib/prefs/NameListPreference.kt

@@ -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)

+ 10 - 10
app/src/main/java/io/legado/app/lib/prefs/Preference.kt

@@ -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) {

+ 13 - 13
app/src/main/java/io/legado/app/lib/prefs/PreferenceCategory.kt

@@ -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
             }
         }

+ 3 - 2
app/src/main/java/io/legado/app/lib/prefs/SwitchPreference.kt

@@ -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 ->

+ 0 - 130
app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt

@@ -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
-    }

+ 14 - 1
app/src/main/java/io/legado/app/lib/theme/ThemeStore.kt

@@ -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()
                 )
             )
         }

+ 7 - 0
app/src/main/java/io/legado/app/lib/theme/ThemeStorePrefKeys.kt

@@ -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"
 }

+ 14 - 12
app/src/main/java/io/legado/app/lib/theme/view/ThemeBottomNavigationVIew.kt

@@ -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)

+ 8 - 7
app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt

@@ -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)
+//        }
+//    }
 }

+ 9 - 9
app/src/main/java/io/legado/app/lib/theme/view/ThemeEditText.kt

@@ -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
+//        }
+//    }
 }

+ 6 - 6
app/src/main/java/io/legado/app/lib/theme/view/ThemeProgressBar.kt

@@ -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)
+//        }
+//    }
 }

+ 8 - 7
app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt

@@ -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)
+//        }
+//    }
 }

+ 53 - 53
app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioNoButton.kt

@@ -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()
+//                )
+//            }
+//        }
 
     }
 

+ 0 - 19
app/src/main/java/io/legado/app/lib/theme/view/ThemeSeekBar.kt

@@ -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)
-        }
-    }
-}

+ 19 - 0
app/src/main/java/io/legado/app/lib/theme/view/ThemeSlider.kt

@@ -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)
+//        }
+//    }
+}

+ 9 - 9
app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt

@@ -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)
+//        }
+//
+//    }
 
 }

+ 13 - 5
app/src/main/java/io/legado/app/ui/about/AboutActivity.kt

@@ -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

+ 2 - 2
app/src/main/java/io/legado/app/ui/about/AppLogDialog.kt

@@ -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)

+ 2 - 2
app/src/main/java/io/legado/app/ui/about/CrashLogsDialog.kt

@@ -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)

+ 2 - 2
app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt

@@ -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 {

+ 2 - 2
app/src/main/java/io/legado/app/ui/about/UpdateDialog.kt

@@ -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) {

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt

@@ -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()

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt

@@ -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()

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt

@@ -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()

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt

@@ -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()

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt

@@ -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()

+ 7 - 6
app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt

@@ -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()

+ 5 - 5
app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt

@@ -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()

+ 2 - 2
app/src/main/java/io/legado/app/ui/association/OpenUrlConfirmDialog.kt

@@ -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()
     }

+ 2 - 2
app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt

@@ -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

+ 45 - 10
app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt

@@ -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())
+
+//        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())
             }
+        }
 
-            override fun onStartTrackingTouch(seekBar: SeekBar) {
+        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()

+ 17 - 17
app/src/main/java/io/legado/app/ui/book/audio/TimerSliderPopup.kt

@@ -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 {
-
-            override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
-                setProcessTextValue(progress)
-                if (fromUser) {
-                    AudioPlay.setTimer(progress)
-                }
+        // 初始化 slider 值
+        binding.slider.valueFrom = 1f
+        binding.slider.valueTo = 180f
+        binding.slider.stepSize = 1f
+        binding.slider.value = AudioPlayService.timeMinute.toFloat()
+        setSliderTextValue(AudioPlayService.timeMinute)
+
+        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)
     }
-
-}
+}

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDecoration.kt

@@ -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()

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkDialog.kt

@@ -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

+ 9 - 7
app/src/main/java/io/legado/app/ui/book/cache/CacheAdapter.kt

@@ -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)
             }
         }
     }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverDialog.kt

@@ -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()

+ 7 - 8
app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt

@@ -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)
         }
     }
 

+ 3 - 4
app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceDialog.kt

@@ -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() {

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterTocAdapter.kt

@@ -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 - 4
app/src/main/java/io/legado/app/ui/book/group/GroupEditDialog.kt

@@ -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 {

+ 9 - 8
app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt

@@ -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
             }

+ 9 - 8
app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt

@@ -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
             }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt

@@ -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 {

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/import/local/ImportBookActivity.kt

@@ -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

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt

@@ -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)

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt

@@ -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)

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt

@@ -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 {

+ 4 - 2
app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt

@@ -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)

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt

@@ -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

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageActivity.kt

@@ -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

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/manage/SourcePickerDialog.kt

@@ -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 {

+ 17 - 17
app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt

@@ -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)
         }
     }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt

@@ -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 {

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/EffectiveReplacesDialog.kt

@@ -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

+ 20 - 16
app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt

@@ -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())
             }
-
-            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() }
             }
         })
+
+
     }
 
     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
         }
     }
 

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -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)

+ 131 - 94
app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt

@@ -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 bottomBackgroundList: ColorStateList = Selector.colorBuild()
-        .setDefaultColor(bgColor)
-        .setPressedColor(ColorUtils.darkenColor(bgColor))
-        .create()
+//    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 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)
-        }
-        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)
+            //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)
         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() {

+ 23 - 23
app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt

@@ -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()
     }
 

+ 40 - 35
app/src/main/java/io/legado/app/ui/book/read/config/AutoReadDialog.kt

@@ -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()
             }
         })

+ 31 - 26
app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt

@@ -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))
             }
         })

+ 7 - 7
app/src/main/java/io/legado/app/ui/book/read/config/ChineseConverter.kt

@@ -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
     }
 

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/config/HttpTtsEditDialog.kt

@@ -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()

+ 14 - 14
app/src/main/java/io/legado/app/ui/book/read/config/MoreConfigDialog.kt

@@ -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() {

+ 10 - 9
app/src/main/java/io/legado/app/ui/book/read/config/PaddingConfigDialog.kt

@@ -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))
         }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/config/PageKeyDialog.kt

@@ -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 {

+ 6 - 6
app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudConfigDialog.kt

@@ -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() {

+ 101 - 73
app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt

@@ -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()
         }
+
+        ivTimer.setOnClickListener {
+            AppConfig.ttsTimer = seekTimer.value.toInt()
+            toastOnUi("保存设定时间成功!")
+        }
+
+        // 设置初始值
+        seekTtsSpeechRate.value = AppConfig.ttsSpeechRate.toFloat()
+        seekTimer.value = if (BaseReadAloudService.timeMinute > 0)
+            BaseReadAloudService.timeMinute.toFloat()
+        else AppConfig.ttsTimer.toFloat()
+
+        // 减速按钮逻辑
         ivTtsSpeechReduce.setOnClickListener {
-            seekTtsSpeechRate.progress = AppConfig.ttsSpeechRate - 1
-            AppConfig.ttsSpeechRate -= 1
+            val newValue = (seekTtsSpeechRate.value - 1).coerceAtLeast(seekTtsSpeechRate.valueFrom)
+            seekTtsSpeechRate.value = newValue
+            AppConfig.ttsSpeechRate = newValue.toInt()
             upTtsSpeechRate()
         }
+
+        // 加速按钮逻辑
         ivTtsSpeechAdd.setOnClickListener {
-            seekTtsSpeechRate.progress = AppConfig.ttsSpeechRate + 1
-            AppConfig.ttsSpeechRate += 1
+            val newValue = (seekTtsSpeechRate.value + 1).coerceAtMost(seekTtsSpeechRate.valueTo)
+            seekTtsSpeechRate.value = newValue
+            AppConfig.ttsSpeechRate = newValue.toInt()
             upTtsSpeechRate()
         }
-        ivTimer.setOnClickListener {
-            AppConfig.ttsTimer = seekTimer.progress
-            toastOnUi("保存设定时间成功!")
-        }
-        tvTimer.setOnClickListener {
+
+        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)
+
+        seekTimer.addOnChangeListener { _, value, fromUser ->
+            if (fromUser) {
+                upTimerText(value.toInt())
             }
+        }
 
-            override fun onStopTrackingTouch(seekBar: SeekBar) {
-                ReadAloud.setTimer(requireContext(), seekTimer.progress)
+        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 {

+ 46 - 30
app/src/main/java/io/legado/app/ui/book/read/config/ReadStyleDialog.kt

@@ -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()

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/read/config/SpeakEngineDialog.kt

@@ -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 - 8
app/src/main/java/io/legado/app/ui/book/read/config/TextFontWeightConverter.kt

@@ -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
     }
 

+ 11 - 11
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -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) {

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt

@@ -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()

+ 10 - 10
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt

@@ -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

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt

@@ -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
             }
         }

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugActivity.kt

@@ -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() {

+ 6 - 6
app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt

@@ -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?) {
 

+ 4 - 4
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt

@@ -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)
     }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt

@@ -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)

+ 5 - 5
app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt

@@ -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
             }
         }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/toc/BookmarkFragment.kt

@@ -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

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt

@@ -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))
                 }

+ 8 - 8
app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt

@@ -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) {

Некоторые файлы не были показаны из-за большого количества измененных файлов