Make page transitions setting apply to webtoon viewer as well

(cherry picked from commit b363b9fc1a5f3cd574bf0829d90b50319b83aeee)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
#	app/src/main/res/layout/reader_settings_sheet.xml
This commit is contained in:
arkon 2020-07-10 22:24:55 -04:00 committed by Jobobby04
parent 439b78c39f
commit 57565fce2d
6 changed files with 121 additions and 30 deletions

View File

@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer 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.invisible
import eu.kanade.tachiyomi.util.view.visible import eu.kanade.tachiyomi.util.view.visible
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener 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.fullscreen
import kotlinx.android.synthetic.main.reader_settings_sheet.keepscreen 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.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.page_transitions
import kotlinx.android.synthetic.main.reader_settings_sheet.pager_prefs_group 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.rotation_mode
import kotlinx.android.synthetic.main.reader_settings_sheet.scale_type 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.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.true_color
import kotlinx.android.synthetic.main.reader_settings_sheet.viewer import kotlinx.android.synthetic.main.reader_settings_sheet.viewer
import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group 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) super.onCreate(savedInstanceState)
initGeneralPreferences() initGeneralPreferences()
initNavigationPreferences()
when (activity.viewer) { when (activity.viewer) {
is PagerViewer -> initPagerPreferences() is PagerViewer -> initPagerPreferences()
@ -89,6 +93,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
long_tap.bindToPreference(preferences.readWithLongTap()) long_tap.bindToPreference(preferences.readWithLongTap())
always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition()) always_show_chapter_transition.bindToPreference(preferences.alwaysShowChapterTransition())
crop_borders.bindToPreference(preferences.cropBorders()) crop_borders.bindToPreference(preferences.cropBorders())
page_transitions.bindToPreference(preferences.pageTransitions())
// SY --> // SY -->
auto_webtoon_mode.bindToPreference(preferences.eh_useAutoWebtoon()) auto_webtoon_mode.bindToPreference(preferences.eh_useAutoWebtoon())
// SY <-- // SY <--
@ -108,7 +113,6 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
scale_type.bindToPreference(preferences.imageScaleType(), 1) scale_type.bindToPreference(preferences.imageScaleType(), 1)
zoom_start.bindToPreference(preferences.zoomStart(), 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) 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. * 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) setSelection(pref.get() - offset, false)
} }
/**
* Binds a spinner to an enum preference.
*/
private inline fun <reified T : Enum<T>> Spinner.bindToPreference(pref: Preference<T>) {
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 * 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 <string-array> * correlate with the [intValues] resource item (in arrays.xml), which is a <string-array>

View File

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.ui.reader.viewer package eu.kanade.tachiyomi.ui.reader.viewer
import com.tfcporciuncula.flow.Preference import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -19,7 +20,9 @@ abstract class ViewerConfig(preferences: PreferencesHelper) {
var imagePropertyChangedListener: (() -> Unit)? = null var imagePropertyChangedListener: (() -> Unit)? = null
var tappingEnabled = true var tappingEnabled = true
var tappingInverted = TappingInvertMode.NONE
var longTapEnabled = true var longTapEnabled = true
var usePageTransitions = false
var doubleTapAnimDuration = 500 var doubleTapAnimDuration = 500
var volumeKeysEnabled = false var volumeKeysEnabled = false
var volumeKeysInverted = false var volumeKeysInverted = false
@ -31,9 +34,15 @@ abstract class ViewerConfig(preferences: PreferencesHelper) {
preferences.readWithTapping() preferences.readWithTapping()
.register({ tappingEnabled = it }) .register({ tappingEnabled = it })
preferences.readWithTappingInverted()
.register({ tappingInverted = it })
preferences.readWithLongTap() preferences.readWithLongTap()
.register({ longTapEnabled = it }) .register({ longTapEnabled = it })
preferences.pageTransitions()
.register({ usePageTransitions = it })
preferences.doubleTapAnimSpeed() preferences.doubleTapAnimSpeed()
.register({ doubleTapAnimDuration = it }) .register({ doubleTapAnimDuration = it })

View File

@ -11,9 +11,6 @@ import uy.kohesive.injekt.api.get
class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) : class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) :
ViewerConfig(preferences) { ViewerConfig(preferences) {
var usePageTransitions = false
private set
var imageScaleType = 1 var imageScaleType = 1
private set private set
@ -21,9 +18,6 @@ class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelpe
private set private set
init { init {
preferences.pageTransitions()
.register({ usePageTransitions = it })
preferences.imageScaleType() preferences.imageScaleType()
.register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() }) .register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })

View File

@ -93,13 +93,16 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
} }
}) })
recycler.tapListener = { event -> recycler.tapListener = { event ->
val positionX = event.rawX
val positionY = event.rawY 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 { when {
positionY < recycler.height * 0.25 && config.tappingEnabled -> scrollUp() topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> scrollUp()
positionY > recycler.height * 0.75 && config.tappingEnabled -> scrollDown() bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> scrollDown()
positionX < recycler.width * 0.33 && config.tappingEnabled -> scrollUp()
positionX > recycler.width * 0.66 && config.tappingEnabled -> scrollDown()
else -> activity.toggleMenu() else -> activity.toggleMenu()
} }
} }
@ -232,14 +235,22 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
* Scrolls up by [scrollDistance]. * Scrolls up by [scrollDistance].
*/ */
private fun scrollUp() { private fun scrollUp() {
recycler.smoothScrollBy(0, -scrollDistance) if (config.usePageTransitions) {
recycler.smoothScrollBy(0, -scrollDistance)
} else {
recycler.scrollBy(0, -scrollDistance)
}
} }
/** /**
* Scrolls down by [scrollDistance]. * Scrolls down by [scrollDistance].
*/ */
/* [EXH] private */ fun scrollDown() { /* [EXH] private */ fun scrollDown() {
recycler.smoothScrollBy(0, scrollDistance) if (config.usePageTransitions) {
recycler.smoothScrollBy(0, scrollDistance)
} else {
recycler.scrollBy(0, scrollDistance)
}
} }
/** /**

View File

@ -105,6 +105,11 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.pref_crop_borders titleRes = R.string.pref_crop_borders
defaultValue = false defaultValue = false
} }
switchPreference {
key = Keys.enableTransitions
titleRes = R.string.pref_page_transitions
defaultValue = true
}
} }
preferenceCategory { preferenceCategory {
@ -268,11 +273,6 @@ class SettingsReaderController : SettingsController() {
defaultValue = "1" defaultValue = "1"
summary = "%s" summary = "%s"
} }
switchPreference {
key = Keys.enableTransitions
titleRes = R.string.pref_page_transitions
defaultValue = true
}
} }
preferenceCategory { preferenceCategory {

View File

@ -179,6 +179,13 @@
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
app:layout_constraintTop_toBottomOf="@id/always_show_chapter_transition" /> app:layout_constraintTop_toBottomOf="@id/always_show_chapter_transition" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/page_transitions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/pref_page_transitions"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintTop_toBottomOf="@id/crop_borders" />
<com.google.android.material.switchmaterial.SwitchMaterial <com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/auto_webtoon_mode" android:id="@+id/auto_webtoon_mode"
@ -186,7 +193,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/eh_auto_webtoon_mode" android:text="@string/eh_auto_webtoon_mode"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
app:layout_constraintTop_toBottomOf="@id/crop_borders" /> app:layout_constraintTop_toBottomOf="@id/page_transitions" />
<android.widget.Space <android.widget.Space
android:id="@+id/end_general_preferences" android:id="@+id/end_general_preferences"
@ -205,7 +212,7 @@
android:textColor="?attr/colorAccent" android:textColor="?attr/colorAccent"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/end_general_preferences" /> app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" />
<TextView <TextView
android:id="@+id/scale_type_text" android:id="@+id/scale_type_text"
@ -245,14 +252,49 @@
app:layout_constraintStart_toEndOf="@id/verticalcenter" app:layout_constraintStart_toEndOf="@id/verticalcenter"
app:layout_constraintTop_toBottomOf="@id/scale_type" /> app:layout_constraintTop_toBottomOf="@id/scale_type" />
<com.google.android.material.switchmaterial.SwitchMaterial <android.widget.Space
android:id="@+id/page_transitions" android:id="@+id/end_paged_preferences"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@+id/zoom_start"
tools:layout_editor_absoluteX="24dp" />
<TextView
android:id="@+id/navigation_prefs"
android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="24dp"
android:text="@string/pref_page_transitions" android:text="@string/pref_reader_navigation"
android:textColor="?android:attr/textColorSecondary" android:textColor="?attr/colorAccent"
app:layout_constraintTop_toBottomOf="@id/zoom_start" /> android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/end_general_preferences" />
<TextView
android:id="@+id/tapping_inverted_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/pref_read_with_tapping_inverted"
app:layout_constraintBaseline_toBaselineOf="@id/tapping_inverted"
app:layout_constraintEnd_toStartOf="@id/verticalcenter"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/tapping_inverted"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:entries="@array/invert_tapping_mode"
app:layout_constraintEnd_toEndOf="@id/spinner_end"
app:layout_constraintStart_toEndOf="@id/verticalcenter"
app:layout_constraintTop_toBottomOf="@+id/navigation_prefs" />
<android.widget.Space
android:id="@+id/end_navigation_preferences"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@+id/tapping_inverted"
tools:layout_editor_absoluteX="24dp" />
<!-- Webtoon preferences --> <!-- Webtoon preferences -->
@ -265,7 +307,7 @@
android:textColor="?attr/colorAccent" android:textColor="?attr/colorAccent"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/end_general_preferences" /> app:layout_constraintTop_toBottomOf="@id/end_navigation_preferences" />
<TextView <TextView
android:id="@+id/webtoon_side_padding_text" android:id="@+id/webtoon_side_padding_text"
@ -293,7 +335,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" android:visibility="gone"
app:constraint_referenced_ids="pager_prefs,scale_type_text,scale_type,zoom_start_text,zoom_start,page_transitions" app:constraint_referenced_ids="pager_prefs,scale_type_text,scale_type,zoom_start_text,zoom_start"
tools:visibility="visible" /> tools:visibility="visible" />
<androidx.constraintlayout.widget.Group <androidx.constraintlayout.widget.Group
@ -310,4 +352,11 @@
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" /> app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Group
android:id="@+id/navigation_prefs_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="navigation_prefs,tapping_inverted_text,end_navigation_preferences,tapping_inverted"
tools:layout_editor_absoluteX="24dp" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>