This commit is contained in:
Horis
2025-02-18 17:44:28 +08:00
parent 90180f0cb6
commit 565cc44c1b
8 changed files with 98 additions and 136 deletions
@@ -95,8 +95,8 @@ object PreferKey {
const val bitmapCacheSize = "bitmapCacheSize"
const val imageRetainNum = "imageRetainNum"
const val preDownloadNum = "preDownloadNum"
const val preMangaDownloadNum = "preMangaDownloadNum"
const val singlePageScrolling="singlePageScrolling"
const val mangaPreDownloadNum = "mangaPreDownloadNum"
const val singlePageScrolling = "singlePageScrolling"
const val autoRefresh = "auto_refresh"
const val defaultToRead = "defaultToRead"
const val exportCharset = "exportCharset"
@@ -155,8 +155,8 @@ object PreferKey {
const val streamReadAloudAudio = "streamReadAloudAudio"
const val pauseReadAloudWhilePhoneCalls = "pauseReadAloudWhilePhoneCalls"
const val readAloudByMediaButton = "readAloudByMediaButton"
const val showMangaUi="showMangaUi"
const val disableMangaScaling="disableMangaScaling"
const val showMangaUi = "showMangaUi"
const val disableMangaScaling = "disableMangaScaling"
const val cPrimary = "colorPrimary"
const val cAccent = "colorAccent"
@@ -617,10 +617,10 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
}
//漫画预加载数量
var preMangaDownloadNum
get() = appCtx.getPrefInt(PreferKey.preMangaDownloadNum, 10)
var mangaPreDownloadNum
get() = appCtx.getPrefInt(PreferKey.mangaPreDownloadNum, 10)
set(value) {
appCtx.putPrefInt(PreferKey.preMangaDownloadNum, value)
appCtx.putPrefInt(PreferKey.mangaPreDownloadNum, value)
}
//单页滚动
@@ -7,13 +7,10 @@ import android.os.Looper
import android.view.KeyEvent
import android.view.Menu
import android.view.MenuItem
import android.view.ViewGroup
import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.PagerSnapHelper
import com.bumptech.glide.Glide
@@ -27,7 +24,7 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.BookProgress
import io.legado.app.data.entities.BookSource
import io.legado.app.databinding.ActivityMangeBinding
import io.legado.app.databinding.ActivityMangaBinding
import io.legado.app.databinding.ViewLoadMoreBinding
import io.legado.app.help.book.isImage
import io.legado.app.help.config.AppConfig
@@ -50,15 +47,14 @@ import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.StartActivityContract
import io.legado.app.utils.getCompatColor
import io.legado.app.utils.gone
import io.legado.app.utils.immersionFullScreen
import io.legado.app.utils.immersionPadding
import io.legado.app.utils.printOnDebug
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.toggleStatusBar
import io.legado.app.utils.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible
class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>(),
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, MangaViewModel>(),
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack {
private val mLayoutManager by lazy {
@@ -68,7 +64,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
MangaAdapter(this@ReadMangaActivity)
}
private val mPreDownloadNum by lazy {
AppConfig.preMangaDownloadNum
AppConfig.mangaPreDownloadNum
}
private val mSinglePageScroller by lazy {
AppConfig.singlePageScrolling
@@ -105,10 +101,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
}
}
private val windowInsetsControllerCompat by lazy {
WindowInsetsControllerCompat(window, binding.root)
}
//打开目录返回选择章节返回结果
private val tocActivity = registerForActivityResult(TocActivityResult()) {
it?.let {
@@ -123,20 +115,13 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
super.finish()
}
}
override val binding by viewBinding(ActivityMangeBinding::inflate)
override val binding by viewBinding(ActivityMangaBinding::inflate)
override val viewModel by viewModels<MangaViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
immersionFullScreen(windowInsetsControllerCompat)
immersionPadding(binding.root) { view, insets, _ ->
binding.mangaMenu.setTitleBarPadding(insets.top)
view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
leftMargin = insets.left
rightMargin = insets.right
}
}
ReadManga.register(this)
disableMangaScaling(mDisableMangaScaling)
upSystemUiVisibility(false)
binding.mRecyclerMange.run {
adapter = mAdapter
itemAnimator = null
@@ -185,7 +170,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
}
}
}
binding.retry.setOnClickListener {
binding.tvRetry.setOnClickListener {
binding.llLoading.isVisible = true
binding.llRetry.isGone = true
mFirstLoading = false
@@ -390,10 +375,14 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
}
R.id.menu_pre_manga_number -> {
NumberPickerDialog(this).setTitle(getString(R.string.pre_download))
.setMaxValue(9999).setMinValue(0).setValue(AppConfig.preMangaDownloadNum).show {
AppConfig.preMangaDownloadNum = it
item.setTitle(getString(R.string.pre_download_m, it))
NumberPickerDialog(this)
.setTitle(getString(R.string.pre_download))
.setMaxValue(9999)
.setMinValue(0)
.setValue(AppConfig.mangaPreDownloadNum)
.show {
AppConfig.mangaPreDownloadNum = it
item.title = getString(R.string.pre_download_m, it)
addRecyclerViewPreloader(it)
}
}
@@ -422,9 +411,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangeBinding, MangaViewModel>()
}
}
override fun upSystemUiVisibility(value: Boolean) {
binding.mangaMenu.isVisible = value
immersionFullScreen(WindowInsetsControllerCompat(window, binding.root))
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
toggleStatusBar(menuIsVisible)
}
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
@@ -107,7 +107,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
mcRect.set(width * 0.33f, height * 0.33f, width * 0.66f, height * 0.46f)
mcRect.set(width * 0.33f, height * 0.33f, width * 0.66f, height * 0.66f)
blRect.set(0f, height * 0.66f, width * 0.33f, height.toFloat())
brRect.set(width * 0.66f, height * 0.66f, width.toFloat(), height.toFloat())
}
@@ -6,8 +6,6 @@ import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View.OnClickListener
import android.view.View.OnLongClickListener
import android.view.animation.Animation
import android.widget.FrameLayout
import androidx.core.view.isGone
@@ -36,9 +34,6 @@ import io.legado.app.utils.modifyBegin
import io.legado.app.utils.openUrl
import io.legado.app.utils.startActivity
import io.legado.app.utils.visible
import splitties.views.bottomPadding
import splitties.views.leftPadding
import splitties.views.rightPadding
class MangaMenu @JvmOverloads constructor(
context: Context,
@@ -84,7 +79,8 @@ class MangaMenu @JvmOverloads constructor(
}
override fun onAnimationEnd(animation: Animation) {
binding.flTitleBar.invisible()
this@MangaMenu.invisible()
binding.titleBar.invisible()
isMenuOutAnimating = false
canShowMenu = false
callBack.upSystemUiVisibility(false)
@@ -120,7 +116,6 @@ class MangaMenu @JvmOverloads constructor(
if (immersiveMenu) {
val lightTextColor = ColorUtils.withAlpha(ColorUtils.lightenColor(textColor), 0.75f)
titleBar.setTextColor(textColor)
flTitleBar.setBackgroundColor(bgColor)
titleBar.setBackgroundColor(bgColor)
titleBar.setColorFilter(textColor)
tvChapterName.setTextColor(lightTextColor)
@@ -129,7 +124,6 @@ class MangaMenu @JvmOverloads constructor(
val bgColor = context.primaryColor
val textColor = context.primaryTextColor
titleBar.setTextColor(textColor)
flTitleBar.setBackgroundColor(bgColor)
titleBar.setBackgroundColor(bgColor)
titleBar.setColorFilter(textColor)
tvChapterName.setTextColor(textColor)
@@ -178,7 +172,7 @@ class MangaMenu @JvmOverloads constructor(
}
if (this.isVisible) {
if (anim) {
binding.flTitleBar.startAnimation(menuTopOut)
binding.titleBar.startAnimation(menuTopOut)
} else {
menuOutListener.onAnimationStart(menuBottomOut)
menuOutListener.onAnimationEnd(menuBottomOut)
@@ -188,9 +182,9 @@ class MangaMenu @JvmOverloads constructor(
fun runMenuIn(anim: Boolean = !AppConfig.isEInkMode) {
this.visible()
binding.flTitleBar.visible()
binding.titleBar.visible()
if (anim) {
binding.flTitleBar.startAnimation(menuTopIn)
binding.titleBar.startAnimation(menuTopIn)
} else {
menuInListener.onAnimationStart(menuBottomIn)
menuInListener.onAnimationEnd(menuBottomIn)
@@ -233,18 +227,9 @@ class MangaMenu @JvmOverloads constructor(
tvChapterUrl.setOnLongClickListener(chapterViewLongClickListener)
}
fun setTitleBarPadding(top: Int) {
if (top <= 0) {
return
}
binding.flTitleBar.run {
setPadding(leftPadding, this.paddingTop.plus(top), rightPadding, bottomPadding)
}
}
interface CallBack {
fun openBookInfoActivity()
fun upSystemUiVisibility(value: Boolean)
fun upSystemUiVisibility(menuIsVisible: Boolean)
}
}
@@ -16,10 +16,8 @@ import android.view.WindowMetrics
import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_DEFAULT
import androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
import androidx.fragment.app.DialogFragment
@@ -191,6 +189,18 @@ fun Activity.toggleNavigationBar(show: Boolean) {
}
}
fun Activity.toggleStatusBar(show: Boolean) {
WindowCompat.getInsetsController(window, window.decorView).run {
if (show) {
show(WindowInsetsCompat.Type.statusBars())
systemBarsBehavior = BEHAVIOR_DEFAULT
} else {
hide(WindowInsetsCompat.Type.statusBars())
systemBarsBehavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
}
/////以下方法需要在View完全被绘制出来之后调用,否则判断不了,在比如 onWindowFocusChanged()方法中可以得到正确的结果/////
/**
@@ -246,15 +256,3 @@ fun AppCompatActivity.showHelp(fileName: String) {
val mdText = String(assets.open("web/help/md/${fileName}.md").readBytes())
showDialogFragment(TextDialog(getString(R.string.help), mdText, TextDialog.Mode.MD))
}
fun immersionFullScreen(windowInsetsControllerCompat: WindowInsetsControllerCompat) {
windowInsetsControllerCompat.systemBarsBehavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars())
}
inline fun immersionPadding(root: View, crossinline viewInsets: (v: View, insets: androidx.core.graphics.Insets, gestureInsets: androidx.core.graphics.Insets) -> Unit) {
ViewCompat.setOnApplyWindowInsetsListener(root) { view: View, windowInsetsCompat: WindowInsetsCompat ->
viewInsets(view, windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars()), windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemGestures()))
WindowInsetsCompat.CONSUMED
}
}