feat(webtoon): Add option to enable/disable pinch to zoom in webtoon viewer (#1101)
* feat: Add option to disable pinch to zoom in webtoon viewer * Change default settings & also include settings for Paged mode * refactor webtoon --------- Co-authored-by: Cuong-Tran <cuongtran.tm@gmail.com>
This commit is contained in:
parent
91a208ada2
commit
242b980e57
8 changed files with 56 additions and 0 deletions
|
|
@ -25,6 +25,7 @@ import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
object SettingsReaderScreen : SearchableSettings {
|
object SettingsReaderScreen : SearchableSettings {
|
||||||
private fun readResolve(): Any = SettingsReaderScreen
|
private fun readResolve(): Any = SettingsReaderScreen
|
||||||
|
|
||||||
|
|
@ -441,6 +442,12 @@ object SettingsReaderScreen : SearchableSettings {
|
||||||
preference = readerPreferences.webtoonDoubleTapZoomEnabled(),
|
preference = readerPreferences.webtoonDoubleTapZoomEnabled(),
|
||||||
title = stringResource(MR.strings.pref_double_tap_zoom),
|
title = stringResource(MR.strings.pref_double_tap_zoom),
|
||||||
),
|
),
|
||||||
|
// KMK -->
|
||||||
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
|
preference = readerPreferences.webtoonPinchToZoomEnabled(),
|
||||||
|
title = stringResource(KMR.strings.pref_pinch_to_zoom),
|
||||||
|
),
|
||||||
|
// KMK <--
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
preference = readerPreferences.webtoonDisableZoomOut(),
|
preference = readerPreferences.webtoonDisableZoomOut(),
|
||||||
title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,12 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
||||||
label = stringResource(MR.strings.pref_double_tap_zoom),
|
label = stringResource(MR.strings.pref_double_tap_zoom),
|
||||||
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
||||||
)
|
)
|
||||||
|
// KMK -->
|
||||||
|
CheckboxItem(
|
||||||
|
label = stringResource(KMR.strings.pref_pinch_to_zoom),
|
||||||
|
pref = screenModel.preferences.webtoonPinchToZoomEnabled(),
|
||||||
|
)
|
||||||
|
// KMK <--
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
||||||
pref = screenModel.preferences.webtoonDisableZoomOut(),
|
pref = screenModel.preferences.webtoonDisableZoomOut(),
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,10 @@ class ReaderPreferences(
|
||||||
|
|
||||||
fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true)
|
fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true)
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
fun webtoonPinchToZoomEnabled() = preferenceStore.getBoolean("pref_enable_pinch_to_zoom_webtoon", true)
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
fun imageScaleType() = preferenceStore.getInt("pref_image_scale_type_key", 1)
|
fun imageScaleType() = preferenceStore.getInt("pref_image_scale_type_key", 1)
|
||||||
|
|
||||||
fun zoomStart() = preferenceStore.getInt("pref_zoom_start_key", 1)
|
fun zoomStart() = preferenceStore.getInt("pref_zoom_start_key", 1)
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,13 @@ class WebtoonConfig(
|
||||||
|
|
||||||
var doubleTapZoomChangedListener: ((Boolean) -> Unit)? = null
|
var doubleTapZoomChangedListener: ((Boolean) -> Unit)? = null
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
var pinchToZoom = true
|
||||||
|
private set
|
||||||
|
|
||||||
|
var pinchToZoomChangedListener: ((Boolean) -> Unit)? = null
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
var usePageTransitions = false
|
var usePageTransitions = false
|
||||||
|
|
||||||
|
|
@ -102,6 +109,14 @@ class WebtoonConfig(
|
||||||
{ doubleTapZoomChangedListener?.invoke(it) },
|
{ doubleTapZoomChangedListener?.invoke(it) },
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
readerPreferences.webtoonPinchToZoomEnabled()
|
||||||
|
.register(
|
||||||
|
{ pinchToZoom = it },
|
||||||
|
{ pinchToZoomChangedListener?.invoke(it) },
|
||||||
|
)
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
readerPreferences.readerTheme().changes()
|
readerPreferences.readerTheme().changes()
|
||||||
.drop(1)
|
.drop(1)
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,14 @@ class WebtoonFrame(context: Context) : FrameLayout(context) {
|
||||||
scaleDetector.isQuickScaleEnabled = value
|
scaleDetector.isQuickScaleEnabled = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
var pinchToZoom = true
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
recycler?.pinchToZoom = value
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
var zoomOutDisabled = false
|
var zoomOutDisabled = false
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,10 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
||||||
|
|
||||||
var doubleTapZoom = true
|
var doubleTapZoom = true
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
var pinchToZoom = true
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
var tapListener: ((MotionEvent) -> Unit)? = null
|
var tapListener: ((MotionEvent) -> Unit)? = null
|
||||||
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
var longTapListener: ((MotionEvent) -> Boolean)? = null
|
||||||
|
|
||||||
|
|
@ -174,6 +178,10 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onScale(scaleFactor: Float) {
|
fun onScale(scaleFactor: Float) {
|
||||||
|
// KMK ->
|
||||||
|
if (!detector.isQuickScaling && !pinchToZoom) return
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
currentScale *= scaleFactor
|
currentScale *= scaleFactor
|
||||||
currentScale = currentScale.coerceIn(
|
currentScale = currentScale.coerceIn(
|
||||||
minRate,
|
minRate,
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,12 @@ class WebtoonViewer(
|
||||||
frame.doubleTapZoom = it
|
frame.doubleTapZoom = it
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
config.pinchToZoomChangedListener = {
|
||||||
|
frame.pinchToZoom = it
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
|
|
||||||
config.zoomPropertyChangedListener = {
|
config.zoomPropertyChangedListener = {
|
||||||
frame.zoomOutDisabled = it
|
frame.zoomOutDisabled = it
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@
|
||||||
<string name="action_copy_to_clipboard_combined_page">Copy combined page to clipboard</string>
|
<string name="action_copy_to_clipboard_combined_page">Copy combined page to clipboard</string>
|
||||||
<string name="pref_viewer_nav_smaller_tap_zone">Smaller tap zones</string>
|
<string name="pref_viewer_nav_smaller_tap_zone">Smaller tap zones</string>
|
||||||
<string name="error_opening_folder">Failed to open folder</string>
|
<string name="error_opening_folder">Failed to open folder</string>
|
||||||
|
<string name="pref_pinch_to_zoom">Pinch to zoom</string>
|
||||||
|
|
||||||
<!-- Preferences -->
|
<!-- Preferences -->
|
||||||
<!-- Appearance section -->
|
<!-- Appearance section -->
|
||||||
<string name="pref_custom_theme_style">Custom theme style</string>
|
<string name="pref_custom_theme_style">Custom theme style</string>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue