优化
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user