ソースを参照

Tweak webtoon margin setting

arkon 5 年 前
コミット
fdc7981d18

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

@@ -57,7 +57,7 @@ object PreferenceKeys {
 
     const val readWithVolumeKeysInverted = "reader_volume_keys_inverted"
 
-    const val marginRatioWebtoon = "margin_ratio_webtoon"
+    const val webtoonSidePadding = "webtoon_side_padding"
 
     const val portraitColumns = "pref_library_columns_portrait_key"
 

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

@@ -107,7 +107,7 @@ class PreferencesHelper(val context: Context) {
 
     fun cropBordersWebtoon() = rxPrefs.getBoolean(Keys.cropBordersWebtoon, false)
 
-    fun marginRatioWebtoon() = rxPrefs.getFloat(Keys.marginRatioWebtoon, 0f)
+    fun webtoonSidePadding() = rxPrefs.getInteger(Keys.webtoonSidePadding, 0)
 
     fun readWithTapping() = rxPrefs.getBoolean(Keys.readWithTapping, true)
 

+ 9 - 10
app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt

@@ -24,7 +24,6 @@ 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.margin_ratio_webtoon
 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
@@ -32,6 +31,7 @@ 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.viewer
 import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_prefs_group
+import kotlinx.android.synthetic.main.reader_settings_sheet.webtoon_side_padding
 import kotlinx.android.synthetic.main.reader_settings_sheet.zoom_start
 import uy.kohesive.injekt.injectLazy
 
@@ -114,7 +114,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
         webtoon_prefs_group.visible()
 
         crop_borders_webtoon.bindToPreference(preferences.cropBordersWebtoon())
-        margin_ratio_webtoon.bindToFloatPreference(preferences.marginRatioWebtoon(), R.array.webtoon_margin_ratio_values)
+        webtoon_side_padding.bindToIntPreference(preferences.webtoonSidePadding(), R.array.webtoon_side_padding_values)
     }
 
     /**
@@ -136,16 +136,15 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia
     }
 
     /**
-     * Binds a spinner to a float preference. The position of the spinner item must
-     * correlate with the [floatValues] resource item (in arrays.xml), which is a <string-array>
-     * of float values that will be parsed here and applied to the preference.
+     * 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>
+     * of int values that will be parsed here and applied to the preference.
      */
-    private fun Spinner.bindToFloatPreference(pref: Preference<Float>, @ArrayRes floatValuesResource: Int) {
-        val floatValues = resources.getStringArray(floatValuesResource).map { it.toFloatOrNull() }
+    private fun Spinner.bindToIntPreference(pref: Preference<Int>, @ArrayRes intValuesResource: Int) {
+        val intValues = resources.getStringArray(intValuesResource).map { it.toIntOrNull() }
         onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
-            pref.set(floatValues[position])
+            pref.set(intValues[position])
         }
-        setSelection(floatValues.indexOf(pref.getOrDefault()), false)
+        setSelection(intValues.indexOf(pref.getOrDefault()), false)
     }
-
 }

+ 3 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt

@@ -37,7 +37,7 @@ class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) {
     var alwaysShowChapterTransition = true
         private set
 
-    var marginRatio = 0f
+    var sidePadding = 0
         private set
 
     init {
@@ -62,8 +62,8 @@ class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) {
         preferences.alwaysShowChapterTransition()
                 .register({ alwaysShowChapterTransition = it })
 
-        preferences.marginRatioWebtoon()
-            .register({ marginRatio = it }, { imagePropertyChangedListener?.invoke() })
+        preferences.webtoonSidePadding()
+            .register({ sidePadding = it }, { imagePropertyChangedListener?.invoke() })
     }
 
     fun unsubscribe() {

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

@@ -6,7 +6,6 @@ import android.content.res.Resources
 import android.graphics.drawable.Drawable
 import android.net.Uri
 import android.view.Gravity
-import android.view.View
 import android.view.ViewGroup
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
@@ -131,7 +130,7 @@ class WebtoonPageHolder(
                 bottomMargin = 15.dpToPx
             }
 
-            val margin = Resources.getSystem().displayMetrics.widthPixels * viewer.config.marginRatio
+            val margin = Resources.getSystem().displayMetrics.widthPixels * (viewer.config.sidePadding / 100f)
             marginEnd = margin.toInt()
             marginStart = margin.toInt()
         }

+ 4 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt

@@ -121,8 +121,6 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
 
         frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
         frame.addView(recycler)
-
-        config.imagePropertyChangedListener = { adapter.notifyDataSetChanged() }
     }
 
     private fun checkAllowPreload(page: ReaderPage?): Boolean {
@@ -288,10 +286,12 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
 
     /**
      * Notifies adapter of changes around the current page to trigger a relayout in the recycler.
-     * Used when a image configuration is changed.
+     * Used when an image configuration is changed.
      */
     private fun refreshAdapter() {
         val position = layoutManager.findLastEndVisibleItemPosition()
-        adapter.notifyItemRangeChanged(max(0, position - 1), min(2, adapter.itemCount - position))
+        adapter.notifyItemRangeChanged(
+            max(0, position - 2),
+            min(position + 2, adapter.itemCount - 1))
     }
 }

+ 10 - 7
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt

@@ -147,13 +147,16 @@ class SettingsReaderController : SettingsController() {
                 defaultValue = false
             }
 
-            floatListPreference {
-                key = Keys.marginRatioWebtoon
-                titleRes = R.string.pref_reader_margin
-                entriesRes = arrayOf(R.string.webtoon_margin_ratio_0,
-                        R.string.webtoon_margin_ratio_10, R.string.webtoon_margin_ratio_15,
-                        R.string.webtoon_margin_ratio_20, R.string.webtoon_margin_ratio_25)
-                entryValues = arrayOf("0", "0.1", "0.15", "0.2", "0.25")
+            intListPreference {
+                key = Keys.webtoonSidePadding
+                titleRes = R.string.pref_webtoon_side_padding
+                entriesRes = arrayOf(
+                    R.string.webtoon_side_padding_0,
+                    R.string.webtoon_side_padding_10,
+                    R.string.webtoon_side_padding_15,
+                    R.string.webtoon_side_padding_20,
+                    R.string.webtoon_side_padding_25)
+                entryValues = arrayOf("0", "10", "15", "20", "25")
                 defaultValue = "0"
                 summary = "%s"
             }

+ 0 - 5
app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceDSL.kt

@@ -14,7 +14,6 @@ import androidx.preference.PreferenceScreen
 import androidx.preference.SwitchPreferenceCompat
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
 import eu.kanade.tachiyomi.widget.preference.BadgePreference
-import eu.kanade.tachiyomi.widget.preference.FloatListPreference
 import eu.kanade.tachiyomi.widget.preference.IntListPreference
 import eu.kanade.tachiyomi.widget.preference.SwitchPreferenceCategory
 
@@ -54,10 +53,6 @@ inline fun PreferenceGroup.intListPreference(block: (@DSL IntListPreference).()
     return initThenAdd(IntListPreference(context), block).also(::initDialog)
 }
 
-inline fun PreferenceGroup.floatListPreference(block: (@DSL FloatListPreference).() -> Unit): FloatListPreference {
-    return initThenAdd(FloatListPreference(context), block).also(::initDialog)
-}
-
 inline fun PreferenceGroup.multiSelectListPreference(block: (@DSL MultiSelectListPreference).() -> Unit): MultiSelectListPreference {
     return initThenAdd(MultiSelectListPreference(context), block).also(::initDialog)
 }

+ 0 - 26
app/src/main/java/eu/kanade/tachiyomi/widget/preference/FloatListPreference.kt

@@ -1,26 +0,0 @@
-package eu.kanade.tachiyomi.widget.preference
-
-import android.content.Context
-import android.util.AttributeSet
-import androidx.preference.ListPreference
-
-class FloatListPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
-        ListPreference(context, attrs) {
-
-    override fun persistString(value: String?): Boolean {
-        return value != null && persistFloat(value.toFloat())
-    }
-
-    override fun getPersistedString(defaultReturnValue: String?): String? {
-        // When the underlying preference is using a PreferenceDataStore, there's no way (for now)
-        // to check if a value is in the store, so we use a most likely unused value as workaround
-        val defaultIntValue = Float.NEGATIVE_INFINITY
-
-        val value = getPersistedFloat(defaultIntValue)
-        return if (value != defaultIntValue) {
-            value.toString()
-        } else {
-            defaultReturnValue
-        }
-    }
-}

+ 6 - 6
app/src/main/res/layout/reader_settings_sheet.xml

@@ -257,20 +257,20 @@
         app:layout_constraintTop_toBottomOf="@id/webtoon_prefs" />
 
     <TextView
-        android:id="@+id/margin_ratio_text"
+        android:id="@+id/webtoon_side_padding_text"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:text="@string/pref_reader_margin"
+        android:text="@string/pref_webtoon_side_padding"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toLeftOf="@id/verticalcenter"
-        app:layout_constraintBaseline_toBaselineOf="@id/margin_ratio_webtoon"/>
+        app:layout_constraintBaseline_toBaselineOf="@id/webtoon_side_padding"/>
 
     <androidx.appcompat.widget.AppCompatSpinner
-        android:id="@+id/margin_ratio_webtoon"
+        android:id="@+id/webtoon_side_padding"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_marginTop="16dp"
-        android:entries="@array/webtoon_margin_ratio"
+        android:entries="@array/webtoon_side_padding"
         app:layout_constraintLeft_toRightOf="@id/verticalcenter"
         app:layout_constraintRight_toRightOf="@id/spinner_end"
         app:layout_constraintTop_toBottomOf="@id/crop_borders_webtoon"/>
@@ -290,7 +290,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:visibility="gone"
-        app:constraint_referenced_ids="webtoon_prefs,crop_borders_webtoon,margin_ratio_text,margin_ratio_webtoon" />
+        app:constraint_referenced_ids="webtoon_prefs,crop_borders_webtoon,webtoon_side_padding_text,webtoon_side_padding" />
 
     <androidx.constraintlayout.widget.Guideline
         android:id="@+id/verticalcenter"

+ 13 - 13
app/src/main/res/values/arrays.xml

@@ -54,20 +54,20 @@
         <item>@string/scale_type_smart_fit</item>
     </string-array>
 
-    <string-array name="webtoon_margin_ratio">
-        <item>@string/webtoon_margin_ratio_0</item>
-        <item>@string/webtoon_margin_ratio_10</item>
-        <item>@string/webtoon_margin_ratio_15</item>
-        <item>@string/webtoon_margin_ratio_20</item>
-        <item>@string/webtoon_margin_ratio_25</item>
+    <string-array name="webtoon_side_padding">
+        <item>@string/webtoon_side_padding_0</item>
+        <item>@string/webtoon_side_padding_10</item>
+        <item>@string/webtoon_side_padding_15</item>
+        <item>@string/webtoon_side_padding_20</item>
+        <item>@string/webtoon_side_padding_25</item>
     </string-array>
 
-    <string-array name="webtoon_margin_ratio_values">
-        <item>0.0</item>
-        <item>0.1</item>
-        <item>0.15</item>
-        <item>0.2</item>
-        <item>0.25</item>
+    <string-array name="webtoon_side_padding_values">
+        <item>0</item>
+        <item>10</item>
+        <item>15</item>
+        <item>20</item>
+        <item>25</item>
     </string-array>
 
     <string-array name="image_scale_type_values">
@@ -99,7 +99,7 @@
         <item>@string/rotation_force_portrait</item>
         <item>@string/rotation_force_landscape</item>
     </string-array>
-    
+
     <string-array name="rotation_type_values">
         <item>1</item>
         <item>2</item>

+ 6 - 6
app/src/main/res/values/strings.xml

@@ -241,7 +241,6 @@
     <string name="pref_read_with_tapping">Tapping</string>
     <string name="pref_read_with_long_tap">Long tap dialog</string>
     <string name="pref_reader_theme">Background color</string>
-    <string name="pref_reader_margin">Margin ratio</string>
     <string name="white_background">White</string>
     <string name="black_background">Black</string>
     <string name="pref_viewer_type">Default viewer</string>
@@ -279,11 +278,12 @@
     <string name="color_filter_a_value">A</string>
     <string name="pref_always_show_chapter_transition">Always show chapter transition</string>
     <string name="pref_category_reading">Reading</string>
-    <string name="webtoon_margin_ratio_0">No margin</string>
-    <string name="webtoon_margin_ratio_10">10%</string>
-    <string name="webtoon_margin_ratio_15">15%</string>
-    <string name="webtoon_margin_ratio_20">20%</string>
-    <string name="webtoon_margin_ratio_25">25%</string>
+    <string name="pref_webtoon_side_padding">Side padding</string>
+    <string name="webtoon_side_padding_0">No margin</string>
+    <string name="webtoon_side_padding_10">10%</string>
+    <string name="webtoon_side_padding_15">15%</string>
+    <string name="webtoon_side_padding_20">20%</string>
+    <string name="webtoon_side_padding_25">25%</string>
 
       <!-- Downloads section -->
     <string name="pref_download_directory">Download location</string>