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