修复漫画阅读点击翻页的一些问题
新增设置某漫画阅读模式为默认值的功能 新增长按保存图片的开关
This commit is contained in:
@@ -191,7 +191,7 @@ object PreferKey {
|
||||
const val mangaClickActionBL = "mangaClickActionBottomLeft"
|
||||
const val mangaClickActionBC = "mangaClickActionBottomCenter"
|
||||
const val mangaClickActionBR = "mangaClickActionBottomRight"
|
||||
|
||||
const val mangaLongClick = "mangaLongClick"
|
||||
const val permissionChecked = "permissionChecked"
|
||||
const val notificationsPost = "notificationsPost"
|
||||
const val ignoreBatteryPermission = "ignoreBatteryPermission"
|
||||
@@ -205,6 +205,5 @@ object PreferKey {
|
||||
const val pureBlack = "pure_black"
|
||||
const val labelVisibilityMode = "labelVisibilityMode"
|
||||
const val menuAlpha = "menuAlpha"
|
||||
|
||||
const val colorImage = "colorImage"
|
||||
}
|
||||
|
||||
@@ -749,11 +749,17 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
//漫画滚动方式
|
||||
var mangaScrollMode: Int
|
||||
get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.PAGE_RIGHT_TO_LEFT)
|
||||
get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.WEBTOON)
|
||||
set(value) {
|
||||
appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
|
||||
}
|
||||
|
||||
var mangaLongClick
|
||||
get() = appCtx.getPrefBoolean(PreferKey.mangaLongClick, true)
|
||||
set(value) {
|
||||
appCtx.putPrefBoolean(PreferKey.mangaLongClick, value)
|
||||
}
|
||||
|
||||
//漫画滤镜
|
||||
var mangaColorFilter
|
||||
get() = appCtx.getPrefString(PreferKey.mangaColorFilter, "")
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
|
||||
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
|
||||
import com.bumptech.glide.util.FixedPreloadSizeProvider
|
||||
import com.google.android.material.transition.platform.MaterialContainerTransform
|
||||
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
|
||||
import io.legato.kazusa.BuildConfig
|
||||
import io.legato.kazusa.R
|
||||
import io.legato.kazusa.base.VMBaseActivity
|
||||
@@ -163,6 +164,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
|
||||
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
|
||||
val transform = MaterialContainerTransform().apply {
|
||||
addTarget(binding.rootView)
|
||||
scrimColor = Color.TRANSPARENT
|
||||
@@ -195,9 +198,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
|
||||
?: MangaFooterConfig()
|
||||
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun observeLiveBus() {
|
||||
@@ -228,7 +228,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
itemAnimator = null
|
||||
layoutManager = mLayoutManager
|
||||
setHasFixedSize(true)
|
||||
setDisableClickScroll(AppConfig.disableClickScroll)
|
||||
setDisableMangaScale(AppConfig.disableMangaScale)
|
||||
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
|
||||
setPreScrollListener { _, _, _, position ->
|
||||
@@ -622,7 +621,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
//点击滑动
|
||||
override fun onClickScrollDisabledChanged(disabled: Boolean) {
|
||||
AppConfig.disableClickScroll = disabled
|
||||
setDisableClickScroll(disabled)
|
||||
}
|
||||
|
||||
//双击缩放
|
||||
@@ -671,6 +669,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
// }
|
||||
}
|
||||
|
||||
override fun onMangaLongClickChanged(checked: Boolean) {
|
||||
AppConfig.mangaLongClick = checked
|
||||
}
|
||||
|
||||
override fun onVolumeKeyPageChanged(enable: Boolean) {
|
||||
AppConfig.MangaVolumeKeyPage = enable
|
||||
}
|
||||
@@ -715,7 +717,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
|
||||
toggleSystemBar(menuIsVisible)
|
||||
if (enableAutoScroll) {
|
||||
@@ -726,7 +727,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 调整漫画类型
|
||||
* @param mode 漫画类型
|
||||
@@ -820,10 +820,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
}
|
||||
|
||||
private fun setDisableClickScroll(disable: Boolean) {
|
||||
binding.webtoonFrame.disabledClickScroll = disable
|
||||
}
|
||||
|
||||
private fun upLayoutInDisplayCutoutMode() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
window.attributes = window.attributes.apply {
|
||||
@@ -834,11 +830,18 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
|
||||
private fun scrollToNext() {
|
||||
scrollPageTo(1)
|
||||
if (!AppConfig.disableClickScroll)
|
||||
scrollPageTo(1)
|
||||
}
|
||||
|
||||
private fun scrollToPrev() {
|
||||
scrollPageTo(-1)
|
||||
if (!AppConfig.disableClickScroll)
|
||||
scrollPageTo(-1)
|
||||
}
|
||||
|
||||
private fun isHorizontalScroll(): Boolean {
|
||||
return scrollMode == MangaScrollMode.PAGE_LEFT_TO_RIGHT ||
|
||||
scrollMode == MangaScrollMode.PAGE_RIGHT_TO_LEFT
|
||||
}
|
||||
|
||||
private fun scrollPageTo(direction: Int) {
|
||||
@@ -847,7 +850,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
||||
}
|
||||
var dx = 0
|
||||
var dy = 0
|
||||
if (AppConfig.enableMangaHorizontalScroll) {
|
||||
if (isHorizontalScroll()) {
|
||||
dx = binding.recyclerView.run {
|
||||
width - paddingStart - paddingEnd
|
||||
}
|
||||
|
||||
+15
-2
@@ -17,6 +17,7 @@ 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.toastOnUi
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
|
||||
class MangaFooterSettingDialog :
|
||||
@@ -26,7 +27,7 @@ class MangaFooterSettingDialog :
|
||||
?: MangaFooterConfig()
|
||||
|
||||
var initialWebtoonSidePadding: Int = 0
|
||||
var initialScrollMode: Int = MangaScrollMode.PAGE_RIGHT_TO_LEFT
|
||||
var initialScrollMode: Int = MangaScrollMode.WEBTOON
|
||||
|
||||
var callback: Callback? = null
|
||||
|
||||
@@ -53,13 +54,17 @@ class MangaFooterSettingDialog :
|
||||
binding.llWebtoon.isVisible = mode == MangaScrollMode.WEBTOON ||
|
||||
mode == MangaScrollMode.WEBTOON_WITH_GAP
|
||||
}
|
||||
setOnLongClickListener {
|
||||
AppConfig.mangaScrollMode = mode
|
||||
toastOnUi("已设置为全局默认模式")
|
||||
true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
binding.llWebtoon.isVisible = initialScrollMode == MangaScrollMode.WEBTOON ||
|
||||
initialScrollMode == MangaScrollMode.WEBTOON_WITH_GAP
|
||||
|
||||
|
||||
binding.scvPadding.apply {
|
||||
valueFormat = { "$it %" }
|
||||
progress = initialWebtoonSidePadding
|
||||
@@ -96,6 +101,13 @@ class MangaFooterSettingDialog :
|
||||
}
|
||||
}
|
||||
|
||||
binding.checkboxMangaLongClick.apply {
|
||||
isChecked = AppConfig.mangaLongClick
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
callback?.onMangaLongClickChanged(isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
binding.cbChapterLabel.run {
|
||||
isChecked = !config.hideChapterLabel
|
||||
setOnCheckedChangeListener { _, isChecked ->
|
||||
@@ -256,6 +268,7 @@ class MangaFooterSettingDialog :
|
||||
fun onMangaScaleDisabledChanged(disabled: Boolean)
|
||||
fun onHideMangaTitleChanged(hide: Boolean)
|
||||
fun onVolumeKeyPageChanged(enable: Boolean)
|
||||
fun onMangaLongClickChanged(checked: Boolean)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -41,16 +41,18 @@ class WebtoonFrame : FrameLayout {
|
||||
private val recycler: WebtoonRecyclerView?
|
||||
get() = getChildAt(0) as? WebtoonRecyclerView
|
||||
|
||||
var disabledClickScroll = false
|
||||
var actionHandler: ClickActionHandler? = null
|
||||
|
||||
private val gestureDetector =
|
||||
GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
|
||||
override fun onLongPress(e: MotionEvent) {
|
||||
recycler?.let {
|
||||
val centerPos = it.findCenterViewPosition()
|
||||
if (centerPos != RecyclerView.NO_POSITION) {
|
||||
longPressListener?.invoke(centerPos)
|
||||
if (AppConfig.mangaLongClick)
|
||||
{
|
||||
recycler?.let {
|
||||
val centerPos = it.findCenterViewPosition()
|
||||
if (centerPos != RecyclerView.NO_POSITION) {
|
||||
longPressListener?.invoke(centerPos)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user