Add option to reverse tapping (#3360)
* Add option to reverse tapping
* Fix string for preference key
* Invert tapping for Webtoon and Vertical
* Use enum instead of boolean
* Add option to reader sheet
* Hide from reader sheet if tapping disabled and remove hard coded string
* Hide option if tapping disabled
(cherry picked from commit 04d83e9a6a)
# Conflicts:
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt
# app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
# app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt
# app/src/main/res/layout/reader_settings_sheet.xml
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -30,4 +30,11 @@ object PreferenceValues {
|
||||
COMFORTABLE_GRID,
|
||||
LIST,
|
||||
}
|
||||
|
||||
enum class TappingInvertMode {
|
||||
NONE,
|
||||
HORIZONTAL,
|
||||
VERTICAL,
|
||||
BOTH
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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@{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -250,7 +250,7 @@ class SettingsGeneralController : SettingsController() {
|
||||
summary = "%s"
|
||||
}
|
||||
}
|
||||
// --> EXH
|
||||
// --> EXH
|
||||
preferenceCategory {
|
||||
titleRes = R.string.eh_settings_category
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user