This commit is contained in:
Horis
2024-12-01 13:14:02 +08:00
parent e389185022
commit 06d247b849
8 changed files with 55 additions and 43 deletions
@@ -12,7 +12,6 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
@@ -20,6 +19,7 @@ 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.ThemeStore import io.legado.app.lib.theme.ThemeStore
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.setBackgroundKeepPadding
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
@@ -40,31 +40,25 @@ abstract class BaseDialogFragment(
super.onStart() super.onStart()
if (adaptationSoftKeyboard) { if (adaptationSoftKeyboard) {
dialog?.window?.setBackgroundDrawableResource(R.color.transparent) dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
} } else 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.decorView.setBackgroundKeepPadding(R.color.transparent)
} }
// 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行. // 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行.
this.lifecycle.addObserver(object : LifecycleEventObserver { lifecycle.addObserver(LifecycleEventObserver { _, event ->
override fun onStateChanged( if (event == Lifecycle.Event.ON_START) {
source: LifecycleOwner, when (dialog?.window?.attributes?.gravity) {
event: Lifecycle.Event Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom)
) { Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top)
if (event == Lifecycle.Event.ON_START) { else -> {
when (dialog?.window?.attributes?.gravity) { val padding = 2.dpToPx();
Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom) view?.setPadding(padding, padding, padding, padding)
Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top) view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
else -> {
val padding = 2.dpToPx();
view?.setPadding(padding, padding, padding, padding)
view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
}
} }
} }
} }
@@ -5,7 +5,6 @@ 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 androidx.lifecycle.LifecycleOwner
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
@@ -27,20 +26,15 @@ abstract class BasePrefDialogFragment(
} }
// 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行. // 修改gravity的时机一般在子类的onStart方法中, 因此需要在onStart之后执行.
this.lifecycle.addObserver(object : LifecycleEventObserver { lifecycle.addObserver(LifecycleEventObserver { _, event ->
override fun onStateChanged( if (event == Lifecycle.Event.ON_START) {
source: LifecycleOwner, when (dialog?.window?.attributes?.gravity) {
event: Lifecycle.Event Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom)
) { Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top)
if (event == Lifecycle.Event.ON_START) { else -> {
when (dialog?.window?.attributes?.gravity) { val padding = 2.dpToPx();
Gravity.TOP -> view?.setBackgroundResource(R.drawable.bg_eink_border_bottom) view?.setPadding(padding, padding, padding, padding)
Gravity.BOTTOM -> view?.setBackgroundResource(R.drawable.bg_eink_border_top) view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
else -> {
val padding = 2.dpToPx();
view?.setPadding(padding, padding, padding, padding)
view?.setBackgroundResource(R.drawable.bg_eink_border_dialog)
}
} }
} }
} }
@@ -6,9 +6,9 @@ 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 io.legado.app.utils.applyTint
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
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 = AlertDialog.Builder(ctx)
@@ -144,8 +144,13 @@ internal class AndroidAlertBuilder(override val ctx: Context) : AlertBuilder<Ale
override fun build(): AlertDialog { override fun build(): AlertDialog {
var dialog = builder.create() var dialog = builder.create()
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
dialog.window?.setDimAmount(0f) dialog.window?.run {
dialog.window?.decorView?.setBackgroundResource(R.drawable.bg_eink_border_dialog) val attr = attributes
attr.dimAmount = 0f
attr.windowAnimations = 0
attributes = attr
setBackgroundDrawableResource(R.drawable.bg_eink_border_dialog)
}
} }
return dialog return dialog
} }
@@ -153,8 +158,13 @@ internal class AndroidAlertBuilder(override val ctx: Context) : AlertBuilder<Ale
override fun show(): AlertDialog { override fun show(): AlertDialog {
var dialog = builder.show().applyTint() var dialog = builder.show().applyTint()
if (AppConfig.isEInkMode) { if (AppConfig.isEInkMode) {
dialog.window?.setDimAmount(0f) dialog.window?.run {
dialog.window?.decorView?.setBackgroundResource(R.drawable.bg_eink_border_dialog) val attr = attributes
attr.dimAmount = 0f
attr.windowAnimations = 0
attributes = attr
setBackgroundDrawableResource(R.drawable.bg_eink_border_dialog)
}
} }
return dialog return dialog
} }
@@ -28,6 +28,7 @@ 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
@@ -123,7 +124,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 = AppConfig.elevation.toFloat() binding.toolBar.elevation = requireContext().elevation
} }
private fun initMenu() { private fun initMenu() {
@@ -27,7 +27,6 @@ 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.backgroundColor
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
@@ -320,7 +319,6 @@ abstract class BaseReadBookActivity :
ReadBook.book?.let { book -> ReadBook.book?.let { book ->
alert(titleResource = R.string.simulated_reading) { alert(titleResource = R.string.simulated_reading) {
val alertBinding = DialogSimulatedReadingBinding.inflate(layoutInflater).apply { val alertBinding = DialogSimulatedReadingBinding.inflate(layoutInflater).apply {
root.setBackgroundColor(root.context.backgroundColor)
srEnabled.isChecked = book.getReadSimulating() srEnabled.isChecked = book.getReadSimulating()
editStart.setText(book.getStartChapter().toString()) editStart.setText(book.getStartChapter().toString())
editNum.setText(book.getDailyChapters().toString()) editNum.setText(book.getDailyChapters().toString())
@@ -31,7 +31,7 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(0.9f, 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?) {
@@ -19,6 +19,7 @@ import androidx.core.view.WindowInsetsCompat
import androidx.core.view.children import androidx.core.view.children
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R import io.legado.app.R
import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.elevation 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.utils.activity import io.legado.app.utils.activity
@@ -176,7 +177,11 @@ class TitleBar @JvmOverloads constructor(
} }
} }
setBackgroundColor(context.primaryColor) if (AppConfig.isEInkMode) {
setBackgroundResource(R.drawable.bg_eink_border_bottom)
} else {
setBackgroundColor(context.primaryColor)
}
stateListAnimator = null stateListAnimator = null
elevation = context.elevation elevation = context.elevation
@@ -23,6 +23,7 @@ import android.widget.RadioGroup
import android.widget.SeekBar import android.widget.SeekBar
import android.widget.TextView import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.menu.MenuPopupHelper import androidx.appcompat.view.menu.MenuPopupHelper
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
@@ -277,3 +278,12 @@ fun View.applyNavigationBarPadding(withInitialPadding: Boolean = false) {
windowInsets windowInsets
} }
} }
fun View.setBackgroundKeepPadding(@DrawableRes backgroundResId: Int) {
val paddingLeft = paddingLeft
val paddingTop = paddingTop
val paddingRight = paddingRight
val paddingBottom = paddingBottom
setBackgroundResource(backgroundResId)
setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom)
}