修复漫画阅读点击翻页的一些问题
新增设置某漫画阅读模式为默认值的功能 新增长按保存图片的开关
This commit is contained in:
@@ -191,7 +191,7 @@ object PreferKey {
|
|||||||
const val mangaClickActionBL = "mangaClickActionBottomLeft"
|
const val mangaClickActionBL = "mangaClickActionBottomLeft"
|
||||||
const val mangaClickActionBC = "mangaClickActionBottomCenter"
|
const val mangaClickActionBC = "mangaClickActionBottomCenter"
|
||||||
const val mangaClickActionBR = "mangaClickActionBottomRight"
|
const val mangaClickActionBR = "mangaClickActionBottomRight"
|
||||||
|
const val mangaLongClick = "mangaLongClick"
|
||||||
const val permissionChecked = "permissionChecked"
|
const val permissionChecked = "permissionChecked"
|
||||||
const val notificationsPost = "notificationsPost"
|
const val notificationsPost = "notificationsPost"
|
||||||
const val ignoreBatteryPermission = "ignoreBatteryPermission"
|
const val ignoreBatteryPermission = "ignoreBatteryPermission"
|
||||||
@@ -205,6 +205,5 @@ object PreferKey {
|
|||||||
const val pureBlack = "pure_black"
|
const val pureBlack = "pure_black"
|
||||||
const val labelVisibilityMode = "labelVisibilityMode"
|
const val labelVisibilityMode = "labelVisibilityMode"
|
||||||
const val menuAlpha = "menuAlpha"
|
const val menuAlpha = "menuAlpha"
|
||||||
|
|
||||||
const val colorImage = "colorImage"
|
const val colorImage = "colorImage"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -749,11 +749,17 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
|
|
||||||
//漫画滚动方式
|
//漫画滚动方式
|
||||||
var mangaScrollMode: Int
|
var mangaScrollMode: Int
|
||||||
get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.PAGE_RIGHT_TO_LEFT)
|
get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.WEBTOON)
|
||||||
set(value) {
|
set(value) {
|
||||||
appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
|
appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mangaLongClick
|
||||||
|
get() = appCtx.getPrefBoolean(PreferKey.mangaLongClick, true)
|
||||||
|
set(value) {
|
||||||
|
appCtx.putPrefBoolean(PreferKey.mangaLongClick, value)
|
||||||
|
}
|
||||||
|
|
||||||
//漫画滤镜
|
//漫画滤镜
|
||||||
var mangaColorFilter
|
var mangaColorFilter
|
||||||
get() = appCtx.getPrefString(PreferKey.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.request.target.Target.SIZE_ORIGINAL
|
||||||
import com.bumptech.glide.util.FixedPreloadSizeProvider
|
import com.bumptech.glide.util.FixedPreloadSizeProvider
|
||||||
import com.google.android.material.transition.platform.MaterialContainerTransform
|
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.BuildConfig
|
||||||
import io.legato.kazusa.R
|
import io.legato.kazusa.R
|
||||||
import io.legato.kazusa.base.VMBaseActivity
|
import io.legato.kazusa.base.VMBaseActivity
|
||||||
@@ -163,6 +164,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
|
||||||
|
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
|
||||||
val transform = MaterialContainerTransform().apply {
|
val transform = MaterialContainerTransform().apply {
|
||||||
addTarget(binding.rootView)
|
addTarget(binding.rootView)
|
||||||
scrimColor = Color.TRANSPARENT
|
scrimColor = Color.TRANSPARENT
|
||||||
@@ -195,9 +198,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
|
GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
|
||||||
?: MangaFooterConfig()
|
?: MangaFooterConfig()
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun observeLiveBus() {
|
override fun observeLiveBus() {
|
||||||
@@ -228,7 +228,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
itemAnimator = null
|
itemAnimator = null
|
||||||
layoutManager = mLayoutManager
|
layoutManager = mLayoutManager
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
setDisableClickScroll(AppConfig.disableClickScroll)
|
|
||||||
setDisableMangaScale(AppConfig.disableMangaScale)
|
setDisableMangaScale(AppConfig.disableMangaScale)
|
||||||
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
|
setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
|
||||||
setPreScrollListener { _, _, _, position ->
|
setPreScrollListener { _, _, _, position ->
|
||||||
@@ -622,7 +621,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
//点击滑动
|
//点击滑动
|
||||||
override fun onClickScrollDisabledChanged(disabled: Boolean) {
|
override fun onClickScrollDisabledChanged(disabled: Boolean) {
|
||||||
AppConfig.disableClickScroll = disabled
|
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) {
|
override fun onVolumeKeyPageChanged(enable: Boolean) {
|
||||||
AppConfig.MangaVolumeKeyPage = enable
|
AppConfig.MangaVolumeKeyPage = enable
|
||||||
}
|
}
|
||||||
@@ -715,7 +717,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
|
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
|
||||||
toggleSystemBar(menuIsVisible)
|
toggleSystemBar(menuIsVisible)
|
||||||
if (enableAutoScroll) {
|
if (enableAutoScroll) {
|
||||||
@@ -726,7 +727,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 调整漫画类型
|
* 调整漫画类型
|
||||||
* @param mode 漫画类型
|
* @param mode 漫画类型
|
||||||
@@ -820,10 +820,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setDisableClickScroll(disable: Boolean) {
|
|
||||||
binding.webtoonFrame.disabledClickScroll = disable
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun upLayoutInDisplayCutoutMode() {
|
private fun upLayoutInDisplayCutoutMode() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
window.attributes = window.attributes.apply {
|
window.attributes = window.attributes.apply {
|
||||||
@@ -834,11 +830,18 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun scrollToNext() {
|
private fun scrollToNext() {
|
||||||
scrollPageTo(1)
|
if (!AppConfig.disableClickScroll)
|
||||||
|
scrollPageTo(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun scrollToPrev() {
|
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) {
|
private fun scrollPageTo(direction: Int) {
|
||||||
@@ -847,7 +850,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
|
|||||||
}
|
}
|
||||||
var dx = 0
|
var dx = 0
|
||||||
var dy = 0
|
var dy = 0
|
||||||
if (AppConfig.enableMangaHorizontalScroll) {
|
if (isHorizontalScroll()) {
|
||||||
dx = binding.recyclerView.run {
|
dx = binding.recyclerView.run {
|
||||||
width - paddingStart - paddingEnd
|
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.GSON
|
||||||
import io.legato.kazusa.utils.fromJsonObject
|
import io.legato.kazusa.utils.fromJsonObject
|
||||||
import io.legato.kazusa.utils.postEvent
|
import io.legato.kazusa.utils.postEvent
|
||||||
|
import io.legato.kazusa.utils.toastOnUi
|
||||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||||
|
|
||||||
class MangaFooterSettingDialog :
|
class MangaFooterSettingDialog :
|
||||||
@@ -26,7 +27,7 @@ class MangaFooterSettingDialog :
|
|||||||
?: MangaFooterConfig()
|
?: MangaFooterConfig()
|
||||||
|
|
||||||
var initialWebtoonSidePadding: Int = 0
|
var initialWebtoonSidePadding: Int = 0
|
||||||
var initialScrollMode: Int = MangaScrollMode.PAGE_RIGHT_TO_LEFT
|
var initialScrollMode: Int = MangaScrollMode.WEBTOON
|
||||||
|
|
||||||
var callback: Callback? = null
|
var callback: Callback? = null
|
||||||
|
|
||||||
@@ -53,13 +54,17 @@ class MangaFooterSettingDialog :
|
|||||||
binding.llWebtoon.isVisible = mode == MangaScrollMode.WEBTOON ||
|
binding.llWebtoon.isVisible = mode == MangaScrollMode.WEBTOON ||
|
||||||
mode == MangaScrollMode.WEBTOON_WITH_GAP
|
mode == MangaScrollMode.WEBTOON_WITH_GAP
|
||||||
}
|
}
|
||||||
|
setOnLongClickListener {
|
||||||
|
AppConfig.mangaScrollMode = mode
|
||||||
|
toastOnUi("已设置为全局默认模式")
|
||||||
|
true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.llWebtoon.isVisible = initialScrollMode == MangaScrollMode.WEBTOON ||
|
binding.llWebtoon.isVisible = initialScrollMode == MangaScrollMode.WEBTOON ||
|
||||||
initialScrollMode == MangaScrollMode.WEBTOON_WITH_GAP
|
initialScrollMode == MangaScrollMode.WEBTOON_WITH_GAP
|
||||||
|
|
||||||
|
|
||||||
binding.scvPadding.apply {
|
binding.scvPadding.apply {
|
||||||
valueFormat = { "$it %" }
|
valueFormat = { "$it %" }
|
||||||
progress = initialWebtoonSidePadding
|
progress = initialWebtoonSidePadding
|
||||||
@@ -96,6 +101,13 @@ class MangaFooterSettingDialog :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.checkboxMangaLongClick.apply {
|
||||||
|
isChecked = AppConfig.mangaLongClick
|
||||||
|
setOnCheckedChangeListener { _, isChecked ->
|
||||||
|
callback?.onMangaLongClickChanged(isChecked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.cbChapterLabel.run {
|
binding.cbChapterLabel.run {
|
||||||
isChecked = !config.hideChapterLabel
|
isChecked = !config.hideChapterLabel
|
||||||
setOnCheckedChangeListener { _, isChecked ->
|
setOnCheckedChangeListener { _, isChecked ->
|
||||||
@@ -256,6 +268,7 @@ class MangaFooterSettingDialog :
|
|||||||
fun onMangaScaleDisabledChanged(disabled: Boolean)
|
fun onMangaScaleDisabledChanged(disabled: Boolean)
|
||||||
fun onHideMangaTitleChanged(hide: Boolean)
|
fun onHideMangaTitleChanged(hide: Boolean)
|
||||||
fun onVolumeKeyPageChanged(enable: Boolean)
|
fun onVolumeKeyPageChanged(enable: Boolean)
|
||||||
|
fun onMangaLongClickChanged(checked: Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -41,16 +41,18 @@ class WebtoonFrame : FrameLayout {
|
|||||||
private val recycler: WebtoonRecyclerView?
|
private val recycler: WebtoonRecyclerView?
|
||||||
get() = getChildAt(0) as? WebtoonRecyclerView
|
get() = getChildAt(0) as? WebtoonRecyclerView
|
||||||
|
|
||||||
var disabledClickScroll = false
|
|
||||||
var actionHandler: ClickActionHandler? = null
|
var actionHandler: ClickActionHandler? = null
|
||||||
|
|
||||||
private val gestureDetector =
|
private val gestureDetector =
|
||||||
GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
|
GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
|
||||||
override fun onLongPress(e: MotionEvent) {
|
override fun onLongPress(e: MotionEvent) {
|
||||||
recycler?.let {
|
if (AppConfig.mangaLongClick)
|
||||||
val centerPos = it.findCenterViewPosition()
|
{
|
||||||
if (centerPos != RecyclerView.NO_POSITION) {
|
recycler?.let {
|
||||||
longPressListener?.invoke(centerPos)
|
val centerPos = it.findCenterViewPosition()
|
||||||
|
if (centerPos != RecyclerView.NO_POSITION) {
|
||||||
|
longPressListener?.invoke(centerPos)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:visibility="visible">
|
android:visibility="gone">
|
||||||
|
|
||||||
<io.legato.kazusa.ui.widget.EmptyMessageView
|
<io.legato.kazusa.ui.widget.EmptyMessageView
|
||||||
android:id="@+id/tv_msg2"
|
android:id="@+id/tv_msg2"
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
android:layout_margin="16dp"
|
android:layout_margin="16dp"
|
||||||
app:iconPadding="4dp"
|
app:iconPadding="4dp"
|
||||||
android:text="@string/load_error_retry"
|
android:text="@string/load_error_retry"
|
||||||
tools:visibility="visible" />
|
/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
@@ -40,10 +41,20 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingHorizontal="16dp"
|
android:paddingHorizontal="16dp"
|
||||||
android:paddingVertical="8dp"
|
android:paddingTop="8dp"
|
||||||
android:text="@string/read_type"
|
android:text="@string/read_type"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingHorizontal="16dp"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:textSize="9sp"
|
||||||
|
android:text="@string/read_type_long"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/chipGroupScrollMode"
|
android:id="@+id/chipGroupScrollMode"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -250,6 +261,12 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/volume_key_page" />
|
android:text="@string/volume_key_page" />
|
||||||
|
|
||||||
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
|
android:id="@+id/checkboxMangaLongClick"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/manga_long_click" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButtonGroup
|
<com.google.android.material.button.MaterialButtonGroup
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_marginVertical="8dp"
|
android:layout_marginVertical="8dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
@@ -38,10 +39,12 @@
|
|||||||
android:id="@+id/tv_seek_value"
|
android:id="@+id/tv_seek_value"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingHorizontal="12dp"
|
android:textStyle="bold"
|
||||||
|
android:textSize="11sp"
|
||||||
|
android:paddingHorizontal="8dp"
|
||||||
android:paddingVertical="4dp"
|
android:paddingVertical="4dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:text="" />
|
tools:text="123" />
|
||||||
</com.google.android.material.card.MaterialCardView>
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -1301,4 +1301,6 @@
|
|||||||
<string name="restart_later_message">更改将在下次启动应用时生效</string>
|
<string name="restart_later_message">更改将在下次启动应用时生效</string>
|
||||||
<string name="search_select_group">选择书源分组</string>
|
<string name="search_select_group">选择书源分组</string>
|
||||||
<string name="day_night_switch">深浅色模式开关</string>
|
<string name="day_night_switch">深浅色模式开关</string>
|
||||||
|
<string name="manga_long_click">长按保存图片</string>
|
||||||
|
<string name="read_type_long">长按设置为全局默认模式</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1302,4 +1302,6 @@
|
|||||||
<string name="restart_later_message">稍后重启</string>
|
<string name="restart_later_message">稍后重启</string>
|
||||||
<string name="search_select_group">选择书源分组</string>
|
<string name="search_select_group">选择书源分组</string>
|
||||||
<string name="day_night_switch">深浅色模式开关</string>
|
<string name="day_night_switch">深浅色模式开关</string>
|
||||||
|
<string name="manga_long_click">长按保存图片</string>
|
||||||
|
<string name="read_type_long">长按设置为全局默认模式</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user