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