Forráskód Böngészése

Add option to change double tap animation speed in the reader (#974)

* Add option to change double tap animation speed in the reader

* address requests from review
Joel Shapiro 7 éve
szülő
commit
f88dd28c51

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt

@@ -11,6 +11,8 @@ object PreferenceKeys {
 
     const val enableTransitions = "pref_enable_transitions_key"
 
+    const val doubleTapAnimationSpeed = "pref_double_tap_anim_speed"
+
     const val showPageNumber = "pref_show_page_number_key"
 
     const val fullscreen = "fullscreen"

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -39,6 +39,8 @@ class PreferencesHelper(val context: Context) {
 
     fun pageTransitions() = rxPrefs.getBoolean(Keys.enableTransitions, true)
 
+    fun doubleTapAnimSpeed() = rxPrefs.getInteger(Keys.doubleTapAnimationSpeed, 500)
+
     fun showPageNumber() = rxPrefs.getBoolean(Keys.showPageNumber, true)
 
     fun fullscreen() = rxPrefs.getBoolean(Keys.fullscreen, true)

+ 1 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PageView.kt

@@ -62,6 +62,7 @@ class PageView @JvmOverloads constructor(context: Context, attrs: AttributeSet?
         with(image_view) {
             setMaxTileSize((reader.activity as ReaderActivity).maxBitmapSize)
             setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED)
+            setDoubleTapZoomDuration(reader.doubleTapAnimDuration.toInt())
             setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE)
             setMinimumScaleType(reader.scaleType)
             setMinimumDpi(90)

+ 10 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerReader.kt

@@ -85,6 +85,12 @@ abstract class PagerReader : BaseReader() {
     var cropBorders: Boolean = false
         private set
 
+    /**
+     * Duration of the double tap animation
+     */
+    var doubleTapAnimDuration = 500
+        private set
+
     /**
      * Scale type (fit width, fit screen, etc).
      */
@@ -166,6 +172,10 @@ abstract class PagerReader : BaseReader() {
                     .skip(1)
                     .distinctUntilChanged()
                     .subscribe { refreshAdapter() })
+
+            add(preferences.doubleTapAnimSpeed()
+                    .asObservable()
+                    .subscribe { doubleTapAnimDuration = it })
         }
 
         setPagesOnAdapter()

+ 1 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.kt

@@ -57,6 +57,7 @@ class WebtoonHolder(private val view: View, private val adapter: WebtoonAdapter)
         with(image_view) {
             setMaxTileSize(readerActivity.maxBitmapSize)
             setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED)
+            setDoubleTapZoomDuration(webtoonReader.doubleTapAnimDuration.toInt())
             setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE)
             setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH)
             setMinimumDpi(90)

+ 10 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.kt

@@ -59,6 +59,12 @@ class WebtoonReader : BaseReader() {
     var cropBorders: Boolean = false
         private set
 
+    /**
+     * Duration of the double tap animation
+     */
+    var doubleTapAnimDuration = 500
+        private set
+
     /**
      * Gesture detector for image touch events.
      */
@@ -124,6 +130,10 @@ class WebtoonReader : BaseReader() {
                 .distinctUntilChanged()
                 .subscribe { refreshAdapter() })
 
+        subscriptions.add(readerActivity.preferences.doubleTapAnimSpeed()
+                .asObservable()
+                .subscribe { doubleTapAnimDuration = it })
+
         setPagesOnAdapter()
         return recycler
     }

+ 8 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt

@@ -62,6 +62,14 @@ class SettingsReaderController : SettingsController() {
             defaultValue = "0"
             summary = "%s"
         }
+        intListPreference {
+            key = Keys.doubleTapAnimationSpeed
+            titleRes = R.string.pref_double_tap_anim_speed
+            entries = arrayOf(context.getString(R.string.double_tap_anim_speed_0), context.getString(R.string.double_tap_anim_speed_fast), context.getString(R.string.double_tap_anim_speed_normal))
+            entryValues = arrayOf("1", "250", "500") // using a value of 0 breaks the image viewer, so min is 1
+            defaultValue = "500"
+            summary = "%s"
+        }
         switchPreference {
             key = Keys.fullscreen
             titleRes = R.string.pref_fullscreen

+ 4 - 0
app/src/main/res/values/strings.xml

@@ -148,6 +148,7 @@
     <string name="pref_fullscreen">Fullscreen</string>
     <string name="pref_lock_orientation">Lock orientation</string>
     <string name="pref_page_transitions">Page transitions</string>
+    <string name="pref_double_tap_anim_speed">Double tap animation speed</string>
     <string name="pref_show_page_number">Show page number</string>
     <string name="pref_crop_borders">Crop borders</string>
     <string name="pref_custom_brightness">Use custom brightness</string>
@@ -179,6 +180,9 @@
     <string name="zoom_start_left">Left</string>
     <string name="zoom_start_right">Right</string>
     <string name="zoom_start_center">Center</string>
+    <string name="double_tap_anim_speed_0">No animation</string>
+    <string name="double_tap_anim_speed_normal">Normal</string>
+    <string name="double_tap_anim_speed_fast">Fast</string>
     <string name="pref_rotation_type">Rotation</string>
     <string name="rotation_free">Free</string>
     <string name="rotation_lock">Lock</string>