From c340884adb2d31256eec1b8e9cab9eac76068a42 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Thu, 6 Aug 2020 14:59:58 -0400 Subject: [PATCH] Copy enable/disable zoom out in webtoon reader from J2k --- .../data/preference/PreferenceKeys.kt | 2 ++ .../data/preference/PreferencesHelper.kt | 2 ++ .../ui/reader/ReaderSettingsSheet.kt | 3 +++ .../ui/reader/viewer/webtoon/WebtoonConfig.kt | 10 ++++++++++ .../ui/reader/viewer/webtoon/WebtoonFrame.kt | 8 ++++++++ .../viewer/webtoon/WebtoonRecyclerView.kt | 20 ++++++++++++++++--- .../ui/reader/viewer/webtoon/WebtoonViewer.kt | 6 ++++++ .../ui/setting/SettingsReaderController.kt | 5 +++++ .../main/res/layout/reader_settings_sheet.xml | 8 ++++++++ 9 files changed, 61 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index ecc739359..778de0d05 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -276,4 +276,6 @@ object PreferenceKeys { const val hitomiAlwaysWebp = "hitomi_always_webp" const val enhancedEHentaiView = "enhanced_e_hentai_view" + + const val webtoonEnableZoomOut = "webtoon_enable_zoom_out" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index baf39bae7..b915cd1a3 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -380,4 +380,6 @@ class PreferencesHelper(val context: Context) { fun hitomiAlwaysWebp() = flowPrefs.getBoolean(Keys.hitomiAlwaysWebp, true) fun enhancedEHentaiView() = flowPrefs.getBoolean(Keys.enhancedEHentaiView, true) + + fun webtoonEnableZoomOut() = flowPrefs.getBoolean(Keys.webtoonEnableZoomOut, false) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt index eca43c243..ad38e8a7a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt @@ -104,6 +104,9 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia binding.cropBordersWebtoon.bindToPreference(preferences.cropBordersWebtoon()) binding.webtoonSidePadding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values) + // SY --> + binding.zoomOutWebtoon.bindToPreference(preferences.webtoonEnableZoomOut()) + // SY <-- } /** 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 6f108b892..e828d5812 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 @@ -16,11 +16,21 @@ class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) : ViewerConfi var sidePadding = 0 private set + // SY --> + var enableZoomOut = false + private set + var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null + // SY <-- init { preferences.cropBordersWebtoon() .register({ imageCropBorders = it }, { imagePropertyChangedListener?.invoke() }) preferences.webtoonSidePadding() .register({ sidePadding = it }, { imagePropertyChangedListener?.invoke() }) + + // SY --> + preferences.webtoonEnableZoomOut() + .register({ enableZoomOut = it }, { zoomPropertyChangedListener?.invoke(it) }) + // SY <-- } } 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 3f919569c..6afa36cc2 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 @@ -25,6 +25,14 @@ class WebtoonFrame(context: Context) : FrameLayout(context) { */ private val flingDetector = GestureDetector(context, FlingListener()) + // SY --> + var enableZoomOut = false + set(value) { + field = value + recycler?.canZoomOut = 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 f3763de03..46e0e1066 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,6 +33,18 @@ open class WebtoonRecyclerView @JvmOverloads constructor( private var firstVisibleItemPosition = 0 private var lastVisibleItemPosition = 0 private var currentScale = DEFAULT_RATE + // SY --> + var canZoomOut = false + set(value) { + field = value + if (!value) { + zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f) + } + } + + private val minRate + get() = if (canZoomOut) MIN_RATE else DEFAULT_RATE + // SY <-- private val listener = GestureListener() private val detector = Detector() @@ -163,7 +175,9 @@ open class WebtoonRecyclerView @JvmOverloads constructor( fun onScale(scaleFactor: Float) { currentScale *= scaleFactor currentScale = currentScale.coerceIn( - MIN_RATE, + // SY --> + minRate, + // SY <-- MAX_SCALE_RATE ) @@ -190,8 +204,8 @@ open class WebtoonRecyclerView @JvmOverloads constructor( } fun onScaleEnd() { - if (scaleX < MIN_RATE) { - zoom(currentScale, MIN_RATE, x, 0f, y, 0f) + if (scaleX < /* SY --> */ minRate /* SY <-- */) { + zoom(currentScale, /* SY --> */ minRate /* SY <-- */, 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 dfdb0c383..dd1c79c70 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 @@ -139,6 +139,12 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr refreshAdapter() } + // SY --> + config.zoomPropertyChangedListener = { + frame.enableZoomOut = it + } + // SY <-- + frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) frame.addView(recycler) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt index e54f03f0b..1cceb75bf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt @@ -294,6 +294,11 @@ class SettingsReaderController : SettingsController() { titleRes = R.string.pref_crop_borders defaultValue = false } + switchPreference { + key = Keys.webtoonEnableZoomOut + titleRes = R.string.enable_zoom_out + defaultValue = false + } } preferenceCategory { diff --git a/app/src/main/res/layout/reader_settings_sheet.xml b/app/src/main/res/layout/reader_settings_sheet.xml index 50b0ba4f1..a11ba7179 100644 --- a/app/src/main/res/layout/reader_settings_sheet.xml +++ b/app/src/main/res/layout/reader_settings_sheet.xml @@ -343,6 +343,14 @@ android:textColor="?android:attr/textColorSecondary" app:layout_constraintTop_toBottomOf="@id/webtoon_side_padding" /> + +