From db99ab526accf852b9661279371e764f268ad77c Mon Sep 17 00:00:00 2001
From: Splintor <55398298+Splintorien@users.noreply.github.com>
Date: Sat, 24 Feb 2024 21:40:06 +0200
Subject: [PATCH] Allow disabling reader's zoom out (#302)
* Allow disabling reader's zoom out (#62)
* Renamed disable zoom out pref and string
* Zoom to default rate if the scale is inferior
* Fixed null value check and formatting
* Fixed detekt
(cherry picked from commit c15f3f2fd5b11cc9c2088ae2fa444f4fe35ea740)
# Conflicts:
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
---
.../settings/screen/SettingsReaderScreen.kt | 9 ++++-----
.../reader/settings/ReadingModePage.kt | 9 ++++-----
.../ui/reader/setting/ReaderPreferences.kt | 6 +++---
.../ui/reader/viewer/webtoon/WebtoonConfig.kt | 19 +++++++++++--------
.../ui/reader/viewer/webtoon/WebtoonFrame.kt | 6 ++----
.../viewer/webtoon/WebtoonRecyclerView.kt | 16 +++++-----------
.../ui/reader/viewer/webtoon/WebtoonViewer.kt | 10 ++++------
.../commonMain/resources/MR/base/strings.xml | 1 +
8 files changed, 34 insertions(+), 42 deletions(-)
diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
index 7422c3f50..3acc668c3 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
@@ -387,17 +387,16 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.webtoonDoubleTapZoomEnabled(),
title = stringResource(MR.strings.pref_double_tap_zoom),
- enabled = true,
+ ),
+ Preference.PreferenceItem.SwitchPreference(
+ pref = readerPreferences.webtoonDisableZoomOut(),
+ title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
),
// SY -->
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.pageTransitionsWebtoon(),
title = stringResource(MR.strings.pref_page_transitions),
),
- Preference.PreferenceItem.SwitchPreference(
- pref = readerPreferences.webtoonEnableZoomOut(),
- title = stringResource(SYMR.strings.enable_zoom_out),
- ),
// SY <--
),
)
diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
index df46a7c12..e2c1486e6 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
@@ -217,11 +217,6 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
label = stringResource(MR.strings.pref_page_transitions),
pref = screenModel.preferences.pageTransitionsWebtoon(),
)
-
- CheckboxItem(
- label = stringResource(SYMR.strings.enable_zoom_out),
- pref = screenModel.preferences.webtoonEnableZoomOut(),
- )
// SY <--
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
@@ -254,6 +249,10 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
label = stringResource(MR.strings.pref_double_tap_zoom),
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
)
+ CheckboxItem(
+ label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
+ pref = screenModel.preferences.webtoonDisableZoomOut(),
+ )
}
// SY -->
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
index d5cf6d844..9203ed1b0 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
@@ -78,7 +78,7 @@ class ReaderPreferences(
fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false)
- fun markReadDupe() = preferenceStore.getBoolean("mark_read_dupe", false)
+ fun webtoonDisableZoomOut() = preferenceStore.getBoolean("webtoon_disable_zoom_out", false)
// endregion
@@ -162,8 +162,6 @@ class ReaderPreferences(
fun useAutoWebtoon() = preferenceStore.getBoolean("eh_use_auto_webtoon", true)
- fun webtoonEnableZoomOut() = preferenceStore.getBoolean("webtoon_enable_zoom_out", false)
-
fun continuousVerticalTappingByPage() = preferenceStore.getBoolean("continuous_vertical_tapping_by_page", false)
fun cropBordersContinuousVertical() = preferenceStore.getBoolean("crop_borders_continues_vertical", false)
@@ -183,6 +181,8 @@ class ReaderPreferences(
fun centerMarginType() = preferenceStore.getInt("center_margin_type", PagerConfig.CenterMarginType.NONE)
fun cacheArchiveMangaOnDisk() = preferenceStore.getBoolean("cache_archive_manga_on_disk", false)
+
+ fun markReadDupe() = preferenceStore.getBoolean("mark_read_dupe", false)
// SY <--
enum class TappingInvertMode(
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
index 408301c91..b0b0d8547 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
@@ -29,6 +29,11 @@ class WebtoonConfig(
var imageCropBorders = false
private set
+ var zoomOutDisabled = false
+ private set
+
+ var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null
+
var sidePadding = 0
private set
@@ -42,14 +47,9 @@ class WebtoonConfig(
// SY -->
var usePageTransitions = false
- var enableZoomOut = false
- private set
-
var continuousCropBorders = false
private set
- var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null
-
// SY <--
init {
readerPreferences.cropBordersWebtoon()
@@ -86,6 +86,12 @@ class WebtoonConfig(
{ imagePropertyChangedListener?.invoke() },
)
+ readerPreferences.webtoonDisableZoomOut()
+ .register(
+ { zoomOutDisabled = it },
+ { zoomPropertyChangedListener?.invoke(it) }
+ )
+
readerPreferences.webtoonDoubleTapZoomEnabled()
.register(
{ doubleTapZoom = it },
@@ -99,9 +105,6 @@ class WebtoonConfig(
.launchIn(scope)
// SY -->
- readerPreferences.webtoonEnableZoomOut()
- .register({ enableZoomOut = it }, { zoomPropertyChangedListener?.invoke(it) })
-
readerPreferences.cropBordersContinuousVertical()
.register({ continuousCropBorders = it }, { imagePropertyChangedListener?.invoke() })
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
index 01ea35c08..17aafc6fd 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
@@ -33,13 +33,11 @@ class WebtoonFrame(context: Context) : FrameLayout(context) {
scaleDetector.isQuickScaleEnabled = value
}
- // SY -->
- var enableZoomOut = false
+ var zoomOutDisabled = false
set(value) {
field = value
- recycler?.canZoomOut = value
+ recycler?.zoomOutDisabled = value
}
- // SY <--
/**
* Recycler view added in this frame.
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
index ce696a19d..20c18c622 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
@@ -33,19 +33,15 @@ class WebtoonRecyclerView @JvmOverloads constructor(
private var firstVisibleItemPosition = 0
private var lastVisibleItemPosition = 0
private var currentScale = DEFAULT_RATE
-
- // SY -->
- var canZoomOut = false
+ var zoomOutDisabled = false
set(value) {
field = value
- if (!value) {
+ if (value && currentScale < DEFAULT_RATE) {
zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f)
}
}
-
private val minRate
- get() = if (canZoomOut) MIN_RATE else DEFAULT_RATE
- // SY <--
+ get() = if (zoomOutDisabled) DEFAULT_RATE else MIN_RATE
private val listener = GestureListener()
private val detector = Detector()
@@ -179,9 +175,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
fun onScale(scaleFactor: Float) {
currentScale *= scaleFactor
currentScale = currentScale.coerceIn(
- // SY -->
minRate,
- // SY <--
MAX_SCALE_RATE,
)
@@ -208,8 +202,8 @@ class WebtoonRecyclerView @JvmOverloads constructor(
}
fun onScaleEnd() {
- if (scaleX < /* SY --> */ minRate /* SY <-- */) {
- zoom(currentScale, /* SY --> */ minRate /* SY <-- */, x, 0f, y, 0f)
+ if (scaleX < minRate) {
+ zoom(currentScale, minRate, x, 0f, y, 0f)
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
index 5eb74998b..2785ba838 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
@@ -159,17 +159,15 @@ class WebtoonViewer(
frame.doubleTapZoom = it
}
+ config.zoomPropertyChangedListener = {
+ frame.zoomOutDisabled = it
+ }
+
config.navigationModeChangedListener = {
val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay
activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart)
}
- // SY -->
- config.zoomPropertyChangedListener = {
- frame.enableZoomOut = it
- }
- // SY <--
-
frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
frame.addView(recycler)
}
diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml
index 22ede657d..ba9e40b7b 100755
--- a/i18n/src/commonMain/resources/MR/base/strings.xml
+++ b/i18n/src/commonMain/resources/MR/base/strings.xml
@@ -458,6 +458,7 @@
High
Low
Lowest
+ Disable zoom out
Delete chapters