From 43b3abf43bb2e5efddaea2362a0be213aad45a0b Mon Sep 17 00:00:00 2001
From: Daniel <101683475+Koranir@users.noreply.github.com>
Date: Thu, 16 Mar 2023 08:42:25 +1100
Subject: [PATCH] Smooth Automatic Scrolling for Webtoon (#777)
(cherry picked from commit 82f0e5bc01e93baa1cd81f9c898d15d51e3faa1b)
---
.../tachiyomi/ui/reader/ReaderActivity.kt | 20 ++++++++++++++-----
.../ui/reader/setting/ReaderPreferences.kt | 2 ++
.../setting/ReaderReadingModeSettings.kt | 1 +
.../ui/reader/viewer/webtoon/WebtoonViewer.kt | 9 +++++++++
.../res/layout/reader_webtoon_settings.xml | 9 +++++++++
i18n/src/main/res/values/strings_sy.xml | 1 +
6 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
index d148f45d8..a3c4cb144 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
@@ -807,12 +807,22 @@ class ReaderActivity : BaseActivity() {
repeatOnLifecycle(Lifecycle.State.STARTED) {
val interval = parsed.seconds
while (true) {
- delay(interval)
- viewer.let { v ->
- when (v) {
- is PagerViewer -> v.moveToNext()
- is WebtoonViewer -> v.scrollDown()
+ if (!binding.readerMenu.isVisible) {
+ viewer.let { v ->
+ when (v) {
+ is PagerViewer -> v.moveToNext()
+ is WebtoonViewer -> {
+ if (readerPreferences.smoothAutoScroll().get()) {
+ v.linearScroll(interval)
+ } else {
+ v.scrollDown()
+ }
+ }
+ }
}
+ delay(interval)
+ } else {
+ delay(100)
}
}
}
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 b783786d0..c6829c10a 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
@@ -133,6 +133,8 @@ class ReaderPreferences(
fun autoscrollInterval() = preferenceStore.getFloat("eh_util_autoscroll_interval", 3f)
+ fun smoothAutoScroll() = preferenceStore.getBoolean("smooth_auto_scroll", true)
+
fun preserveReadingPosition() = preferenceStore.getBoolean("eh_preserve_reading_position", false)
fun preloadSize() = preferenceStore.getInt("eh_preload_size", 10)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderReadingModeSettings.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderReadingModeSettings.kt
index 0afec28c6..f48c274c7 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderReadingModeSettings.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderReadingModeSettings.kt
@@ -134,6 +134,7 @@ class ReaderReadingModeSettings @JvmOverloads constructor(context: Context, attr
// SY -->
binding.webtoonPrefsGroup.zoomOutWebtoon.bindToPreference(readerPreferences.webtoonEnableZoomOut())
binding.webtoonPrefsGroup.cropBordersContinuousVertical.bindToPreference(readerPreferences.cropBordersContinuousVertical())
+ binding.webtoonPrefsGroup.smoothScrollWebtoon.bindToPreference(readerPreferences.smoothAutoScroll())
binding.webtoonPrefsGroup.pageTransitionsWebtoon.bindToPreference(readerPreferences.pageTransitionsWebtoon())
// SY <--
}
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 53e0a0271..b2a0fa3fc 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
@@ -6,6 +6,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.animation.LinearInterpolator
import androidx.core.app.ActivityCompat
import androidx.core.view.isGone
import androidx.core.view.isVisible
@@ -29,6 +30,7 @@ import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import kotlin.math.max
import kotlin.math.min
+import kotlin.time.Duration
/**
* Implementation of a [BaseViewer] to display pages with a [RecyclerView].
@@ -300,6 +302,13 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
}
}
+ /**
+ * Scrolls one screen over a period of time
+ */
+ fun linearScroll(duration: Duration) {
+ recycler.smoothScrollBy(0, activity.resources.displayMetrics.heightPixels, LinearInterpolator(), duration.inWholeMilliseconds.toInt())
+ }
+
/**
* Scrolls down by [scrollDistance].
*/
diff --git a/app/src/main/res/layout/reader_webtoon_settings.xml b/app/src/main/res/layout/reader_webtoon_settings.xml
index 25ba5b2af..b07942454 100644
--- a/app/src/main/res/layout/reader_webtoon_settings.xml
+++ b/app/src/main/res/layout/reader_webtoon_settings.xml
@@ -46,6 +46,15 @@
android:text="@string/pref_crop_borders"
android:textColor="?android:attr/textColorSecondary" />
+
+
Switches which side the seekbar is on
Force horizontal seekbar
Removes vertical seekbar entirely in favour of horizontal
+ Smooth Auto Scroll