更新界面
This commit is contained in:
@@ -76,7 +76,7 @@ object BookCover {
|
||||
return
|
||||
}
|
||||
defaultDrawable = kotlin.runCatching {
|
||||
BitmapUtils.decodeBitmap(path, 600, 900).toDrawable(appCtx.resources)
|
||||
BitmapUtils.decodeBitmap(path, 600, 900)!!.toDrawable(appCtx.resources)
|
||||
}.getOrDefault(appCtx.resources.getDrawable(R.drawable.image_cover_default, null))
|
||||
}
|
||||
|
||||
@@ -158,6 +158,7 @@ object BookCover {
|
||||
}
|
||||
it
|
||||
}
|
||||
.transition(DrawableTransitionOptions.withCrossFade())
|
||||
}
|
||||
|
||||
fun preloadManga(
|
||||
|
||||
@@ -43,7 +43,6 @@ import io.legato.kazusa.ui.book.changesource.ChangeBookSourceDialog
|
||||
import io.legato.kazusa.ui.book.info.BookInfoActivity
|
||||
import io.legato.kazusa.ui.book.manga.config.MangaColorFilterConfig
|
||||
import io.legato.kazusa.ui.book.manga.config.MangaColorFilterDialog
|
||||
import io.legato.kazusa.ui.book.manga.config.MangaEpaperDialog
|
||||
import io.legato.kazusa.ui.book.manga.config.MangaFooterConfig
|
||||
import io.legato.kazusa.ui.book.manga.config.MangaFooterSettingDialog
|
||||
import io.legato.kazusa.ui.book.manga.entities.BaseMangaPage
|
||||
@@ -78,7 +77,7 @@ import kotlin.math.ceil
|
||||
|
||||
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
|
||||
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack,
|
||||
MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback, MangaEpaperDialog.Callback {
|
||||
MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback, MangaFooterSettingDialog.Callback {
|
||||
|
||||
private val mLayoutManager by lazy {
|
||||
MangaLayoutManager(this)
|
||||
@@ -253,7 +252,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
|
||||
override fun upContent() {
|
||||
lifecycleScope.launch {
|
||||
setTitle(ReadManga.book?.name)
|
||||
binding.mangaMenu.upBookView()
|
||||
val data = withContext(IO) { ReadManga.mangaContents }
|
||||
val pos = data.pos
|
||||
val list = data.items
|
||||
@@ -450,7 +449,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
|
||||
override fun updateColorFilter(config: MangaColorFilterConfig) {
|
||||
mAdapter.setMangaImageColorFilter(config)
|
||||
updateWindowBrightness(config.l)
|
||||
if (config.autoBrightness) {
|
||||
resetWindowToSystemBrightness()
|
||||
} else {
|
||||
updateWindowBrightness(config.l)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("StringFormatMatches")
|
||||
@@ -473,12 +476,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_catalog -> {
|
||||
ReadManga.book?.let {
|
||||
tocActivity.launch(it.bookUrl)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_refresh -> {
|
||||
binding.flLoading.isVisible = true
|
||||
ReadManga.book?.let {
|
||||
@@ -510,35 +507,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
setDisableClickScroll(item.isChecked)
|
||||
}
|
||||
|
||||
R.id.menu_enable_auto_page -> {
|
||||
item.isChecked = !item.isChecked
|
||||
val menuMangaAutoPageSpeed = mMenu?.findItem(R.id.menu_manga_auto_page_speed)
|
||||
mScrollTimer.isEnabledPage = item.isChecked
|
||||
menuMangaAutoPageSpeed?.isVisible = item.isChecked
|
||||
enableAutoScrollPage = item.isChecked
|
||||
enableAutoScroll = false
|
||||
mScrollTimer.isEnabled = false
|
||||
mMenu?.findItem(R.id.menu_enable_auto_scroll)?.isChecked = false
|
||||
}
|
||||
|
||||
R.id.menu_manga_auto_page_speed -> {
|
||||
showNumberPickerDialog(
|
||||
1, getString(R.string.setting_manga_auto_page_speed),
|
||||
AppConfig.mangaAutoPageSpeed
|
||||
) {
|
||||
AppConfig.mangaAutoPageSpeed = it
|
||||
item.title = getString(R.string.manga_auto_page_speed, it)
|
||||
mScrollTimer.setSpeed(it)
|
||||
if (enableAutoScrollPage) {
|
||||
mScrollTimer.isEnabledPage = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_manga_footer_config -> {
|
||||
showDialogFragment(MangaFooterSettingDialog())
|
||||
}
|
||||
|
||||
R.id.menu_enable_horizontal_scroll -> {
|
||||
item.isChecked = !item.isChecked
|
||||
AppConfig.enableMangaHorizontalScroll = item.isChecked
|
||||
@@ -555,11 +523,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
R.id.menu_enable_auto_scroll -> {
|
||||
item.isChecked = !item.isChecked
|
||||
mScrollTimer.isEnabled = item.isChecked
|
||||
mMenu?.findItem(R.id.menu_enable_auto_page)?.isChecked = false
|
||||
|
||||
enableAutoScroll = item.isChecked
|
||||
enableAutoScrollPage = false
|
||||
mScrollTimer.isEnabledPage = false
|
||||
mMenu?.findItem(R.id.menu_manga_auto_page_speed)?.isVisible = item.isChecked
|
||||
|
||||
if (enableAutoScroll) {
|
||||
mPagerSnapHelper.attachToRecyclerView(null)
|
||||
} else if (AppConfig.enableMangaHorizontalScroll) {
|
||||
@@ -573,18 +541,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
ReadManga.loadContent()
|
||||
}
|
||||
|
||||
R.id.menu_epaper_manga -> {
|
||||
item.isChecked = !item.isChecked
|
||||
AppConfig.enableMangaEInk = item.isChecked
|
||||
mMenu?.findItem(R.id.menu_gray_manga)?.isChecked = false
|
||||
AppConfig.enableMangaGray = false
|
||||
mMenu?.findItem(R.id.menu_epaper_manga_setting)?.isVisible = item.isChecked
|
||||
mAdapter.enableMangaEInk(item.isChecked, AppConfig.mangaEInkThreshold)
|
||||
}
|
||||
|
||||
R.id.menu_epaper_manga_setting -> {
|
||||
showDialogFragment(MangaEpaperDialog())
|
||||
}
|
||||
|
||||
R.id.menu_disable_horizontal_animation -> {
|
||||
item.isChecked = !item.isChecked
|
||||
@@ -596,18 +553,44 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
R.id.menu_gray_manga -> {
|
||||
item.isChecked = !item.isChecked
|
||||
AppConfig.enableMangaGray = item.isChecked
|
||||
mMenu?.findItem(R.id.menu_epaper_manga)?.isChecked = false
|
||||
AppConfig.enableMangaEInk = false
|
||||
mMenu?.findItem(R.id.menu_epaper_manga_setting)?.isVisible = false
|
||||
mAdapter.enableGray(item.isChecked)
|
||||
}
|
||||
|
||||
}
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun openCatalog() {
|
||||
ReadManga.book?.let {
|
||||
tocActivity.launch(it.bookUrl)
|
||||
}
|
||||
}
|
||||
|
||||
override fun showFooterConfig() {
|
||||
showDialogFragment(MangaFooterSettingDialog().apply {
|
||||
initialAutoPageEnabled = enableAutoScrollPage
|
||||
initialAutoPageSpeed = AppConfig.mangaAutoPageSpeed
|
||||
callback = this@ReadMangaActivity
|
||||
})
|
||||
}
|
||||
|
||||
override fun showColorFilterConfig() {
|
||||
binding.mangaMenu.runMenuOut()
|
||||
showDialogFragment(MangaColorFilterDialog())
|
||||
}
|
||||
|
||||
override fun updateEpaperMode(enabled: Boolean, threshold: Int) {
|
||||
AppConfig.enableMangaEInk = enabled
|
||||
AppConfig.enableMangaGray = false
|
||||
AppConfig.mangaEInkThreshold = threshold
|
||||
mAdapter.enableMangaEInk(enabled, threshold)
|
||||
}
|
||||
|
||||
override fun updateGrayMode(enabled: Boolean) {
|
||||
AppConfig.enableMangaGray = enabled
|
||||
AppConfig.enableMangaEInk = false
|
||||
mAdapter.enableGray(enabled)
|
||||
}
|
||||
|
||||
|
||||
override fun openBookInfoActivity() {
|
||||
ReadManga.book?.let {
|
||||
bookInfoActivity.launch {
|
||||
@@ -617,6 +600,26 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutoPageToggle(enabled: Boolean) {
|
||||
mScrollTimer.isEnabledPage = enabled
|
||||
mScrollTimer.isEnabled = false
|
||||
|
||||
enableAutoScrollPage = enabled
|
||||
enableAutoScroll = false
|
||||
|
||||
mMenu?.findItem(R.id.menu_enable_auto_scroll)?.isChecked = false
|
||||
}
|
||||
|
||||
override fun onAutoPageSpeedChanged(speed: Int) {
|
||||
AppConfig.mangaAutoPageSpeed = speed
|
||||
mScrollTimer.setSpeed(speed)
|
||||
|
||||
if (enableAutoScrollPage) {
|
||||
mScrollTimer.isEnabledPage = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
|
||||
toggleSystemBar(menuIsVisible)
|
||||
if (enableAutoScroll) {
|
||||
@@ -680,19 +683,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
getString(R.string.pre_download_m, AppConfig.mangaPreDownloadNum)
|
||||
menu.findItem(R.id.menu_disable_manga_scale).isChecked = AppConfig.disableMangaScale
|
||||
menu.findItem(R.id.menu_disable_click_scroll).isChecked = AppConfig.disableClickScroll
|
||||
menu.findItem(R.id.menu_manga_auto_page_speed).title =
|
||||
getString(R.string.manga_auto_page_speed, AppConfig.mangaAutoPageSpeed)
|
||||
menu.findItem(R.id.menu_enable_horizontal_scroll).isChecked =
|
||||
AppConfig.enableMangaHorizontalScroll
|
||||
menu.findItem(R.id.menu_hide_manga_title).isChecked = AppConfig.hideMangaTitle
|
||||
menu.findItem(R.id.menu_epaper_manga).isChecked = AppConfig.enableMangaEInk
|
||||
menu.findItem(R.id.menu_epaper_manga_setting).isVisible = AppConfig.enableMangaEInk
|
||||
|
||||
menu.findItem(R.id.menu_disable_horizontal_animation).run {
|
||||
isVisible =
|
||||
AppConfig.enableMangaHorizontalScroll
|
||||
isChecked = AppConfig.disableHorizontalAnimator
|
||||
}
|
||||
menu.findItem(R.id.menu_gray_manga).isChecked = AppConfig.enableMangaGray
|
||||
|
||||
}
|
||||
|
||||
private fun setDisableMangaScale(disable: Boolean) {
|
||||
@@ -782,6 +782,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
}
|
||||
fun resetWindowToSystemBrightness() {
|
||||
val layoutParams = window.attributes
|
||||
layoutParams.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
|
||||
window.attributes = layoutParams
|
||||
}
|
||||
|
||||
fun updateWindowBrightness(brightness: Int) {
|
||||
val layoutParams = window.attributes
|
||||
@@ -832,7 +837,5 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
return super.onKeyDown(keyCode, event)
|
||||
}
|
||||
|
||||
override fun updateEepaper(value: Int) {
|
||||
mAdapter.updateThreshold(value)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,7 +7,8 @@ data class MangaColorFilterConfig(
|
||||
var g: Int = 0,
|
||||
var b: Int = 0,
|
||||
var a: Int = 0,
|
||||
var l: Int = 0
|
||||
var l: Int = 0,
|
||||
var autoBrightness: Boolean = true
|
||||
) {
|
||||
fun toJson(): String {
|
||||
if (r == 0 && g == 0 && b == 0 && a == 0 && l == 0) {
|
||||
|
||||
@@ -3,28 +3,32 @@ package io.legato.kazusa.ui.book.manga.config
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.core.view.isVisible
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BaseDialogFragment
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.databinding.DialogMangaColorFilterBinding
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.utils.GSON
|
||||
import io.legato.kazusa.utils.fromJsonObject
|
||||
import io.legato.kazusa.utils.setLayout
|
||||
import io.legato.kazusa.utils.invisible
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
import io.legato.kazusa.utils.visible
|
||||
|
||||
class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_filter) {
|
||||
class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_color_filter) {
|
||||
private val binding by viewBinding(DialogMangaColorFilterBinding::bind)
|
||||
private val mConfig =
|
||||
GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
|
||||
?: MangaColorFilterConfig()
|
||||
private val callback get() = activity as? Callback
|
||||
private val callback: Callback? get() = activity as? Callback
|
||||
|
||||
private var mMangaEInkThreshold = AppConfig.mangaEInkThreshold
|
||||
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
|
||||
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?) {
|
||||
@@ -34,6 +38,17 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
|
||||
|
||||
private fun initData() {
|
||||
binding.run {
|
||||
chipAutoBrightness.isChecked = mConfig.autoBrightness
|
||||
|
||||
if (AppConfig.enableMangaEInk) dsbEpaper.visible()
|
||||
else dsbEpaper.invisible()
|
||||
|
||||
dsbEpaper.progress = mMangaEInkThreshold
|
||||
|
||||
cpEpaper.isChecked = AppConfig.enableMangaEInk
|
||||
cpEnableGray.isChecked = AppConfig.enableMangaGray
|
||||
|
||||
dsbBrightness.isEnabled = !mConfig.autoBrightness
|
||||
dsbBrightness.progress = mConfig.l
|
||||
dsbR.progress = mConfig.r
|
||||
dsbG.progress = mConfig.g
|
||||
@@ -44,6 +59,37 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
|
||||
|
||||
private fun initView() {
|
||||
binding.run {
|
||||
chipAutoBrightness.setOnCheckedChangeListener { _, isChecked ->
|
||||
mConfig.autoBrightness = isChecked
|
||||
dsbBrightness.isEnabled = !isChecked
|
||||
callback?.updateColorFilter(mConfig)
|
||||
}
|
||||
|
||||
cpEpaper.setOnCheckedChangeListener { _, isChecked ->
|
||||
binding.dsbEpaper.isVisible = isChecked
|
||||
if (isChecked) {
|
||||
cpEnableGray.isChecked = false
|
||||
callback?.updateGrayMode(false)
|
||||
dsbEpaper.visible()
|
||||
} else dsbEpaper.invisible()
|
||||
callback?.updateEpaperMode(isChecked, mMangaEInkThreshold)
|
||||
}
|
||||
|
||||
cpEnableGray.setOnCheckedChangeListener { _, isChecked ->
|
||||
if (isChecked) {
|
||||
binding.dsbEpaper.isVisible = false
|
||||
cpEpaper.isChecked = false
|
||||
callback?.updateEpaperMode(false, mMangaEInkThreshold)
|
||||
}
|
||||
dsbEpaper.invisible()
|
||||
callback?.updateGrayMode(isChecked)
|
||||
}
|
||||
|
||||
dsbEpaper.onChanged = {
|
||||
mMangaEInkThreshold = it
|
||||
callback?.updateEpaperMode(true, it)
|
||||
}
|
||||
|
||||
dsbBrightness.onChanged = {
|
||||
mConfig.l = it
|
||||
callback?.updateColorFilter(mConfig)
|
||||
@@ -70,10 +116,13 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
AppConfig.mangaColorFilter = mConfig.toJson()
|
||||
AppConfig.mangaEInkThreshold = mMangaEInkThreshold
|
||||
}
|
||||
|
||||
interface Callback {
|
||||
fun updateColorFilter(config: MangaColorFilterConfig)
|
||||
fun updateEpaperMode(enabled: Boolean, threshold: Int)
|
||||
fun updateGrayMode(enabled: Boolean)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
package io.legato.kazusa.ui.book.manga.config
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.databinding.DialogMangaEpaperBinding
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
|
||||
class MangaEpaperDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_epaper) {
|
||||
private val binding by viewBinding(DialogMangaEpaperBinding::bind)
|
||||
private val callback get() = activity as? Callback
|
||||
private var mMangaEInkThreshold = 150
|
||||
|
||||
// override fun onStart() {
|
||||
// super.onStart()
|
||||
// dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
|
||||
// setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
// }
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
initData()
|
||||
initView()
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
binding.dsbEpaper.progress = AppConfig.mangaEInkThreshold
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
binding.dsbEpaper.onChanged = {
|
||||
mMangaEInkThreshold = it
|
||||
callback?.updateEepaper(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
AppConfig.mangaEInkThreshold = mMangaEInkThreshold
|
||||
}
|
||||
|
||||
interface Callback {
|
||||
fun updateEepaper(value: Int)
|
||||
}
|
||||
|
||||
}
|
||||
+141
-54
@@ -3,9 +3,9 @@ package io.legato.kazusa.ui.book.manga.config
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.transition.TransitionManager
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.BaseDialogFragment
|
||||
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
|
||||
import io.legato.kazusa.constant.EventBus
|
||||
import io.legato.kazusa.databinding.DialogMangaFooterSettingBinding
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
@@ -13,100 +13,187 @@ import io.legato.kazusa.ui.widget.ReaderInfoBarView
|
||||
import io.legato.kazusa.utils.GSON
|
||||
import io.legato.kazusa.utils.fromJsonObject
|
||||
import io.legato.kazusa.utils.postEvent
|
||||
import io.legato.kazusa.utils.setLayout
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
class MangaFooterSettingDialog : BaseDialogFragment(R.layout.dialog_manga_footer_setting) {
|
||||
class MangaFooterSettingDialog :
|
||||
BaseBottomSheetDialogFragment(R.layout.dialog_manga_footer_setting) {
|
||||
|
||||
val config = GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
|
||||
?: MangaFooterConfig()
|
||||
|
||||
var callback: Callback? = null
|
||||
|
||||
var initialAutoPageEnabled: Boolean = false
|
||||
var initialAutoPageSpeed: Int = 3
|
||||
|
||||
private val binding by viewBinding(DialogMangaFooterSettingBinding::bind)
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
||||
}
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
||||
binding.cbChapterLabel.run {
|
||||
isChecked = config.hideChapterLabel
|
||||
isChecked = !config.hideChapterLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideChapterLabel = isChecked
|
||||
config.hideChapterLabel = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (isChecked) binding.cbChapter.isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbChapter.run {
|
||||
isChecked = config.hideChapter
|
||||
isChecked = !config.hideChapter
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideChapter = isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
}
|
||||
binding.cbPageNumberLabel.run {
|
||||
isChecked = config.hidePageNumberLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hidePageNumberLabel = isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
}
|
||||
binding.cbPageNumber.run {
|
||||
isChecked = config.hidePageNumber
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hidePageNumber = isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
}
|
||||
binding.cbProgressRatioLabel.run {
|
||||
isChecked = config.hideProgressRatioLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideProgressRatioLabel = isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
}
|
||||
binding.cbProgressRatio.run {
|
||||
isChecked = config.hideProgressRatio
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideProgressRatio = isChecked
|
||||
config.hideChapter = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (!isChecked) binding.cbChapterLabel.isChecked = false
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbChapterName.run {
|
||||
isChecked = config.hideChapterName
|
||||
isChecked = !config.hideChapterName
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideChapterName = isChecked
|
||||
config.hideChapterName = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
}
|
||||
}
|
||||
binding.rgFooterOrientation.check(if (config.footerOrientation == ReaderInfoBarView.ALIGN_CENTER) R.id.rb_center else R.id.rb_left)
|
||||
binding.rgFooterOrientation.setOnCheckedChangeListener { _, checkedId ->
|
||||
when (checkedId) {
|
||||
|
||||
binding.cbPageNumberLabel.run {
|
||||
isChecked = !config.hidePageNumberLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hidePageNumberLabel = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (isChecked) binding.cbPageNumber.isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbPageNumber.run {
|
||||
isChecked = !config.hidePageNumber
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hidePageNumber = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (!isChecked) binding.cbPageNumberLabel.isChecked = false
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbProgressRatioLabel.run {
|
||||
isChecked = !config.hideProgressRatioLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideProgressRatioLabel = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (isChecked) binding.cbProgressRatio.isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbProgressRatio.run {
|
||||
isChecked = !config.hideProgressRatio
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
config.hideProgressRatio = !isChecked
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
updateChapterText()
|
||||
if (!isChecked) binding.cbProgressRatioLabel.isChecked = false
|
||||
}
|
||||
}
|
||||
|
||||
binding.rgFooterOrientation.check(
|
||||
when {
|
||||
config.hideFooter -> R.id.rb_hide
|
||||
config.footerOrientation == ReaderInfoBarView.ALIGN_CENTER -> R.id.rb_center
|
||||
else -> R.id.rb_left
|
||||
}
|
||||
)
|
||||
|
||||
binding.rgFooterOrientation.setOnCheckedStateChangeListener { _, checkedIds ->
|
||||
when (checkedIds.firstOrNull()) {
|
||||
R.id.rb_left -> {
|
||||
config.hideFooter = false
|
||||
config.footerOrientation = ReaderInfoBarView.ALIGN_LEFT
|
||||
}
|
||||
|
||||
R.id.rb_center -> {
|
||||
config.hideFooter = false
|
||||
config.footerOrientation = ReaderInfoBarView.ALIGN_CENTER
|
||||
}
|
||||
}
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
|
||||
binding.rgFooter.check(if (config.hideFooter) R.id.rb_hide else R.id.rb_show)
|
||||
binding.rgFooter.setOnCheckedChangeListener { _, checkedId ->
|
||||
when (checkedId) {
|
||||
R.id.rb_show -> {
|
||||
config.hideFooter = false
|
||||
}
|
||||
|
||||
R.id.rb_hide -> {
|
||||
config.hideFooter = true
|
||||
}
|
||||
}
|
||||
postEvent(EventBus.UP_MANGA_CONFIG, config)
|
||||
}
|
||||
|
||||
|
||||
binding.chipAutoPage.run {
|
||||
isChecked = initialAutoPageEnabled
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
callback?.onAutoPageToggle(isChecked)
|
||||
initAutoPageSpeed(isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
binding.btnColorFilter.setOnClickListener {
|
||||
callback?.showColorFilterConfig()
|
||||
dismiss()
|
||||
}
|
||||
|
||||
initAutoPageSpeed(initialAutoPageEnabled)
|
||||
|
||||
updateChapterText()
|
||||
}
|
||||
|
||||
private fun initAutoPageSpeed(boolean: Boolean) {
|
||||
TransitionManager.beginDelayedTransition(binding.rootView)
|
||||
binding.scvAutoPageSpeed.run {
|
||||
isEnabled = boolean
|
||||
valueFormat = { "$it 秒" }
|
||||
progress = initialAutoPageSpeed
|
||||
|
||||
onChanged = { newValue ->
|
||||
callback?.onAutoPageSpeedChanged(newValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
AppConfig.mangaFooterConfig = GSON.toJson(config)
|
||||
}
|
||||
|
||||
private fun updateChapterText() {
|
||||
val label = if (!config.hideChapterLabel) "章节" else ""
|
||||
val chapter = if (!config.hideChapter) "1/45 " else ""
|
||||
val name = if (!config.hideChapterName) "第三话 " else ""
|
||||
|
||||
val progressLabel = if (!config.hideProgressRatioLabel) "总进度" else ""
|
||||
val progress = if (!config.hideProgressRatio) "2.1%" else ""
|
||||
|
||||
val pageLabel = if (!config.hidePageNumberLabel) "页数" else ""
|
||||
val page = if (!config.hidePageNumber) "4/30 " else ""
|
||||
|
||||
val parts = listOf(
|
||||
name,
|
||||
pageLabel,
|
||||
page,
|
||||
label,
|
||||
chapter,
|
||||
progressLabel,
|
||||
progress
|
||||
).filter { it.isNotEmpty() }
|
||||
TransitionManager.beginDelayedTransition(binding.rootView)
|
||||
binding.tvChapter.text = parts.joinToString(" ")
|
||||
}
|
||||
|
||||
interface Callback {
|
||||
fun onAutoPageToggle(enable: Boolean)
|
||||
fun onAutoPageSpeedChanged(speed: Int)
|
||||
fun showColorFilterConfig()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -22,9 +22,8 @@ class EpaperTransformation(
|
||||
@IntRange(0, 255) private val threshold: Int = 128,
|
||||
) : BitmapTransformation() {
|
||||
|
||||
private val ID =
|
||||
"io.legado.app.model.EpaperTransformation.${threshold}"
|
||||
private val ID_BYTES = ID.toByteArray(CHARSET)
|
||||
private val ID get() = "io.legado.app.model.EpaperTransformation.$threshold"
|
||||
private val ID_BYTES get() = ID.toByteArray(CHARSET)
|
||||
|
||||
override fun transform(
|
||||
pool: BitmapPool,
|
||||
|
||||
@@ -253,21 +253,13 @@ class MangaAdapter(private val context: Context) :
|
||||
fun enableMangaEInk(enable: Boolean, value: Int) {
|
||||
if (enable) {
|
||||
currentMangaEInkThreshold = value
|
||||
mTransformation = EpaperTransformation(currentMangaEInkThreshold)
|
||||
mTransformation = EpaperTransformation(value)
|
||||
} else {
|
||||
mTransformation = null
|
||||
}
|
||||
notifyItemRangeChanged(0, itemCount)
|
||||
}
|
||||
|
||||
fun updateThreshold(mangaEInkThreshold: Int) {
|
||||
if (currentMangaEInkThreshold != mangaEInkThreshold) {
|
||||
currentMangaEInkThreshold = mangaEInkThreshold
|
||||
mTransformation = EpaperTransformation(currentMangaEInkThreshold)
|
||||
notifyItemRangeChanged(0, itemCount)
|
||||
}
|
||||
}
|
||||
|
||||
//开启灰色图片
|
||||
fun enableGray(enable: Boolean) {
|
||||
mTransformation = if (enable) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package io.legato.kazusa.ui.book.read
|
||||
|
||||
//import io.legado.app.lib.theme.bottomBackground
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.animation.Animation
|
||||
@@ -15,14 +15,12 @@ import io.legato.kazusa.databinding.ViewMangaMenuBinding
|
||||
import io.legato.kazusa.help.config.AppConfig
|
||||
import io.legato.kazusa.help.source.getSourceType
|
||||
import io.legato.kazusa.lib.dialogs.alert
|
||||
//import io.legado.app.lib.theme.bottomBackground
|
||||
import io.legato.kazusa.model.ReadBook
|
||||
import io.legato.kazusa.model.ReadManga
|
||||
import io.legato.kazusa.ui.browser.WebViewActivity
|
||||
import io.legato.kazusa.utils.ConstraintModify
|
||||
import io.legato.kazusa.utils.activity
|
||||
import io.legato.kazusa.utils.applyNavigationBarPadding
|
||||
import io.legato.kazusa.utils.dpToPx
|
||||
import io.legato.kazusa.utils.gone
|
||||
import io.legato.kazusa.utils.invisible
|
||||
import io.legato.kazusa.utils.loadAnimation
|
||||
@@ -95,15 +93,15 @@ class MangaMenu @JvmOverloads constructor(
|
||||
|
||||
private fun initView() = binding.run {
|
||||
initAnimation()
|
||||
val brightnessBackground = GradientDrawable()
|
||||
brightnessBackground.cornerRadius = 5F.dpToPx()
|
||||
//brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f))
|
||||
if (AppConfig.isEInkMode) {
|
||||
titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom)
|
||||
bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top)
|
||||
} else {
|
||||
//bottomMenu.setBackgroundColor(bgColor)
|
||||
}
|
||||
// val brightnessBackground = GradientDrawable()
|
||||
// brightnessBackground.cornerRadius = 5F.dpToPx()
|
||||
// //brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f))
|
||||
// if (AppConfig.isEInkMode) {
|
||||
// titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom)
|
||||
// bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top)
|
||||
// } else {
|
||||
// //bottomMenu.setBackgroundColor(bgColor)
|
||||
// }
|
||||
if (AppConfig.showReadTitleBarAddition) {
|
||||
titleBarAddition.visible()
|
||||
} else {
|
||||
@@ -113,7 +111,7 @@ class MangaMenu @JvmOverloads constructor(
|
||||
/**
|
||||
* 确保视图不被导航栏遮挡
|
||||
*/
|
||||
bottomMenu.applyNavigationBarPadding()
|
||||
bottomView.applyNavigationBarPadding()
|
||||
}
|
||||
|
||||
private fun upBrightnessVwPos() {
|
||||
@@ -163,6 +161,18 @@ class MangaMenu @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun upBookView() {
|
||||
binding.titleBar.title = " "
|
||||
binding.tvBookName.text = ReadManga.book?.name
|
||||
ReadManga.curMangaChapter?.let {
|
||||
binding.tvChapterName.text = ReadManga.book?.durChapterTitle
|
||||
binding.tvPre.isEnabled = ReadManga.durChapterIndex != 0
|
||||
binding.tvNext.isEnabled =
|
||||
ReadManga.durChapterIndex != ReadManga.simulatedChapterSize - 1
|
||||
} ?: let {
|
||||
binding.tvChapterUrl.gone()
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindEvent() = binding.run {
|
||||
vwMenuBg.setOnClickListener { runMenuOut() }
|
||||
@@ -224,14 +234,26 @@ class MangaMenu @JvmOverloads constructor(
|
||||
}
|
||||
})
|
||||
|
||||
ivCatalog.setOnClickListener {
|
||||
callBack.openCatalog()
|
||||
}
|
||||
|
||||
ivSetting.setOnClickListener {
|
||||
callBack.showFooterConfig()
|
||||
}
|
||||
|
||||
btnAutoPage.setOnClickListener {
|
||||
callBack.showFooterConfig()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun upSeekBar(value: Int, count: Int) {
|
||||
binding.seekReadPage.apply {
|
||||
valueFrom = 1f
|
||||
valueTo = (count).toFloat()
|
||||
this.value = value.toFloat().coerceIn(1f,valueFrom)
|
||||
valueTo = count.toFloat()
|
||||
stepSize = 1f
|
||||
this.value = value.toFloat().coerceIn(valueFrom, valueTo)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,6 +261,8 @@ class MangaMenu @JvmOverloads constructor(
|
||||
fun openBookInfoActivity()
|
||||
fun upSystemUiVisibility(menuIsVisible: Boolean)
|
||||
fun skipToPage(index: Int)
|
||||
fun openCatalog()
|
||||
fun showFooterConfig()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -143,8 +143,6 @@ class SimpleCounterView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private fun updateValue() {
|
||||
binding.tvSeekValue.text = valueFormat?.invoke(_progress) ?: _progress.toString()
|
||||
}
|
||||
@@ -185,4 +183,12 @@ class SimpleCounterView @JvmOverloads constructor(
|
||||
super.onDetachedFromWindow()
|
||||
}
|
||||
|
||||
override fun setEnabled(enabled: Boolean) {
|
||||
super.setEnabled(enabled)
|
||||
binding.tvSeekTitle.isEnabled = enabled
|
||||
binding.ivSeekPlus.isEnabled = enabled
|
||||
binding.ivSeekReduce.isEnabled = enabled
|
||||
binding.tvSeekValue.isEnabled = enabled
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user