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 136fec3a6..1b0f0a380 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 @@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer +import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.invisible import eu.kanade.tachiyomi.util.view.visible import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener @@ -23,11 +24,13 @@ import kotlinx.android.synthetic.main.reader_settings_sheet.cutout_short import kotlinx.android.synthetic.main.reader_settings_sheet.fullscreen import kotlinx.android.synthetic.main.reader_settings_sheet.keepscreen import kotlinx.android.synthetic.main.reader_settings_sheet.long_tap +import kotlinx.android.synthetic.main.reader_settings_sheet.navigation_prefs_group import kotlinx.android.synthetic.main.reader_settings_sheet.page_transitions import kotlinx.android.synthetic.main.reader_settings_sheet.pager_prefs_group import kotlinx.android.synthetic.main.reader_settings_sheet.rotation_mode import kotlinx.android.synthetic.main.reader_settings_sheet.scale_type import kotlinx.android.synthetic.main.reader_settings_sheet.show_page_number +import kotlinx.android.synthetic.main.reader_settings_sheet.tapping_inverted import kotlinx.android.synthetic.main.reader_settings_sheet.true_color import kotlinx.android.synthetic.main.reader_settings_sheet.viewer import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group @@ -57,6 +60,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia super.onCreate(savedInstanceState) initGeneralPreferences() + initNavigationPreferences() when (activity.viewer) { is PagerViewer -> initPagerPreferences() @@ -89,6 +93,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia long_tap.bindToPreference(preferences.readWithLongTap()) always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition()) crop_borders.bindToPreference(preferences.cropBorders()) + page_transitions.bindToPreference(preferences.pageTransitions()) // SY --> auto_webtoon_mode.bindToPreference(preferences.eh_useAutoWebtoon()) // SY <-- @@ -108,7 +113,6 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia scale_type.bindToPreference(preferences.imageScaleType(), 1) zoom_start.bindToPreference(preferences.zoomStart(), 1) - page_transitions.bindToPreference(preferences.pageTransitions()) } /** @@ -121,6 +125,17 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia webtoon_side_padding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values) } + /** + * Init the preferences for navigation. + */ + private fun initNavigationPreferences() { + if (!preferences.readWithTapping().get()) { + navigation_prefs_group.gone() + } + + tapping_inverted.bindToPreference(preferences.readWithTappingInverted()) + } + /** * Binds a checkbox or switch view with a boolean preference. */ @@ -139,6 +154,19 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia setSelection(pref.get() - offset, false) } + /** + * Binds a spinner to an enum preference. + */ + private inline fun > Spinner.bindToPreference(pref: Preference) { + val enumConstants = T::class.java.enumConstants + + onItemSelectedListener = IgnoreFirstSpinnerListener { position -> + enumConstants?.get(position)?.let { pref.set(it) } + } + + enumConstants?.indexOf(pref.get())?.let { setSelection(it, false) } + } + /** * Binds a spinner to an int preference. The position of the spinner item must * correlate with the [intValues] resource item (in arrays.xml), which is a diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt index 3ea88254b..8726b35ce 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer import com.tfcporciuncula.flow.Preference +import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode import eu.kanade.tachiyomi.data.preference.PreferencesHelper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -19,7 +20,9 @@ abstract class ViewerConfig(preferences: PreferencesHelper) { var imagePropertyChangedListener: (() -> Unit)? = null var tappingEnabled = true + var tappingInverted = TappingInvertMode.NONE var longTapEnabled = true + var usePageTransitions = false var doubleTapAnimDuration = 500 var volumeKeysEnabled = false var volumeKeysInverted = false @@ -31,9 +34,15 @@ abstract class ViewerConfig(preferences: PreferencesHelper) { preferences.readWithTapping() .register({ tappingEnabled = it }) + preferences.readWithTappingInverted() + .register({ tappingInverted = it }) + preferences.readWithLongTap() .register({ longTapEnabled = it }) + preferences.pageTransitions() + .register({ usePageTransitions = it }) + preferences.doubleTapAnimSpeed() .register({ doubleTapAnimDuration = it }) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt index 9f09bc728..7bbd233c9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt @@ -11,9 +11,6 @@ import uy.kohesive.injekt.api.get class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) : ViewerConfig(preferences) { - var usePageTransitions = false - private set - var imageScaleType = 1 private set @@ -21,9 +18,6 @@ class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelpe private set init { - preferences.pageTransitions() - .register({ usePageTransitions = it }) - preferences.imageScaleType() .register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() }) 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 73beefe3e..63fba167f 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 @@ -93,13 +93,16 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr } }) recycler.tapListener = { event -> - val positionX = event.rawX val positionY = event.rawY + val invertMode = config.tappingInverted + val topSideTap = positionY < recycler.height * 0.33f && config.tappingEnabled + val bottomSideTap = positionY > recycler.height * 0.66f && config.tappingEnabled + + val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH + when { - positionY < recycler.height * 0.25 && config.tappingEnabled -> scrollUp() - positionY > recycler.height * 0.75 && config.tappingEnabled -> scrollDown() - positionX < recycler.width * 0.33 && config.tappingEnabled -> scrollUp() - positionX > recycler.width * 0.66 && config.tappingEnabled -> scrollDown() + topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> scrollUp() + bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> scrollDown() else -> activity.toggleMenu() } } @@ -232,14 +235,22 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr * Scrolls up by [scrollDistance]. */ private fun scrollUp() { - recycler.smoothScrollBy(0, -scrollDistance) + if (config.usePageTransitions) { + recycler.smoothScrollBy(0, -scrollDistance) + } else { + recycler.scrollBy(0, -scrollDistance) + } } /** * Scrolls down by [scrollDistance]. */ /* [EXH] private */ fun scrollDown() { - recycler.smoothScrollBy(0, scrollDistance) + if (config.usePageTransitions) { + recycler.smoothScrollBy(0, scrollDistance) + } else { + recycler.scrollBy(0, scrollDistance) + } } /** 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 12598ba5b..c4c5a6d81 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 @@ -105,6 +105,11 @@ class SettingsReaderController : SettingsController() { titleRes = R.string.pref_crop_borders defaultValue = false } + switchPreference { + key = Keys.enableTransitions + titleRes = R.string.pref_page_transitions + defaultValue = true + } } preferenceCategory { @@ -268,11 +273,6 @@ class SettingsReaderController : SettingsController() { defaultValue = "1" summary = "%s" } - switchPreference { - key = Keys.enableTransitions - titleRes = R.string.pref_page_transitions - defaultValue = true - } } preferenceCategory { diff --git a/app/src/main/res/layout/reader_settings_sheet.xml b/app/src/main/res/layout/reader_settings_sheet.xml index 52a084912..839cf2648 100644 --- a/app/src/main/res/layout/reader_settings_sheet.xml +++ b/app/src/main/res/layout/reader_settings_sheet.xml @@ -179,6 +179,13 @@ android:textColor="?android:attr/textColorSecondary" app:layout_constraintTop_toBottomOf="@id/always_show_chapter_transition" /> + + app:layout_constraintTop_toBottomOf="@id/page_transitions" /> + app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" /> - + + + android:layout_marginTop="24dp" + android:text="@string/pref_reader_navigation" + android:textColor="?attr/colorAccent" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/end_general_preferences" /> + + + + + + @@ -265,7 +307,7 @@ android:textColor="?attr/colorAccent" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/end_general_preferences" /> + app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" /> + +