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 91a38b9aa..36d058e52 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
@@ -53,6 +53,8 @@ object PreferenceKeys {
const val readWithTapping = "reader_tap"
+ const val readWithTappingInverted = "reader_tapping_inverted"
+
const val readWithLongTap = "reader_long_tap"
const val readWithVolumeKeys = "reader_volume_keys"
diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
index 312544684..e60f7f508 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
@@ -30,4 +30,11 @@ object PreferenceValues {
COMFORTABLE_GRID,
LIST,
}
+
+ enum class TappingInvertMode {
+ NONE,
+ HORIZONTAL,
+ VERTICAL,
+ BOTH
+ }
}
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 de4cbc8e3..68d9bcb23 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
@@ -119,6 +119,8 @@ class PreferencesHelper(val context: Context) {
fun readWithTapping() = flowPrefs.getBoolean(Keys.readWithTapping, true)
+ fun readWithTappingInverted() = flowPrefs.getEnum(Keys.readWithTappingInverted, Values.TappingInvertMode.NONE)
+
fun readWithLongTap() = flowPrefs.getBoolean(Keys.readWithLongTap, true)
fun readWithVolumeKeys() = flowPrefs.getBoolean(Keys.readWithVolumeKeys, false)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
index 4171db4c7..0bb9f1890 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
@@ -7,6 +7,7 @@ import android.view.View
import android.view.ViewGroup.LayoutParams
import androidx.viewpager.widget.ViewPager
import eu.kanade.tachiyomi.R
+import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
@@ -80,11 +81,30 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
}
})
pager.tapListener = { event ->
- val positionX = event.x
- when {
- positionX < pager.width * 0.33f && config.tappingEnabled -> moveLeft()
- positionX > pager.width * 0.66f && config.tappingEnabled -> moveRight()
- else -> activity.toggleMenu()
+ val invertMode = config.tappingInverted
+
+ if (this is VerticalPagerViewer) {
+ val positionY = event.y
+ val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
+ val topSideTap = positionY < pager.height * 0.33f && config.tappingEnabled
+ val bottomSideTap = positionY > pager.height * 0.66f && config.tappingEnabled
+
+ when {
+ topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> moveLeft()
+ bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> moveRight()
+ else -> activity.toggleMenu()
+ }
+ } else {
+ val positionX = event.x
+ val tappingInverted = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
+ val leftSideTap = positionX < pager.width * 0.33f && config.tappingEnabled
+ val rightSideTap = positionX > pager.width * 0.66f && config.tappingEnabled
+
+ when {
+ leftSideTap && !tappingInverted || rightSideTap && tappingInverted -> moveLeft()
+ rightSideTap && !tappingInverted || leftSideTap && tappingInverted -> moveRight()
+ else -> activity.toggleMenu()
+ }
}
}
pager.longTapListener = f@{
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 63fba167f..27e005a6c 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
@@ -7,6 +7,7 @@ import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.WebtoonLayoutManager
+import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
index 62bea3f0a..5e7d859ea 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
@@ -250,7 +250,7 @@ class SettingsGeneralController : SettingsController() {
summary = "%s"
}
}
- // --> EXH
+ // --> EXH
preferenceCategory {
titleRes = R.string.eh_settings_category
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 a65e337c8..a036e55d3 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
@@ -4,6 +4,7 @@ import android.os.Build
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
+import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes
@@ -307,6 +308,26 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.pref_read_with_tapping
defaultValue = true
}
+ listPreference {
+ key = Keys.readWithTappingInverted
+ titleRes = R.string.pref_read_with_tapping_inverted
+ entriesRes = arrayOf(
+ R.string.tapping_inverted_none,
+ R.string.tapping_inverted_horizontal,
+ R.string.tapping_inverted_vertical,
+ R.string.tapping_inverted_both
+ )
+ entryValues = arrayOf(
+ TappingInvertMode.NONE.name,
+ TappingInvertMode.HORIZONTAL.name,
+ TappingInvertMode.VERTICAL.name,
+ TappingInvertMode.BOTH.name
+ )
+ defaultValue = TappingInvertMode.NONE.name
+ summary = "%s"
+
+ preferences.readWithTapping().asImmediateFlow { isVisible = it }.launchIn(scope)
+ }
switchPreference {
key = Keys.readWithLongTap
titleRes = R.string.pref_read_with_long_tap
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index df09ca0f1..eacccb2d1 100755
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -79,4 +79,11 @@
- @string/filter_mode_multiply
- @string/filter_mode_screen
+
+
+ - @string/tapping_inverted_none
+ - @string/tapping_inverted_horizontal
+ - @string/tapping_inverted_vertical
+ - @string/tapping_inverted_both
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 24ecc58a0..5b3bca644 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -676,5 +676,10 @@
Backup and restore
Progress
Complete
+ Invert tapping
+ None
+ Horizontal
+ Vertical
+ Both