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