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 6029b40022..26abc0b0ca 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/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" 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 9784d5b393..d32c57fca7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/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) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt index b12ee7cf7a..944f3df71a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderSettingsSheet.kt +++ b/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 - * 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 + * of int values that will be parsed here and applied to the preference. */ - private fun Spinner.bindToFloatPreference(pref: Preference, @ArrayRes floatValuesResource: Int) { - val floatValues = resources.getStringArray(floatValuesResource).map { it.toFloatOrNull() } + private fun Spinner.bindToIntPreference(pref: Preference, @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) } - } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt index 57905f1d09..2f348382da 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt +++ b/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() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt index a407fa39d3..16506b28a4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt +++ b/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() } 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 53fadb0190..3187040d00 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 @@ -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)) } } 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 823d0cdf4a..387a21f8e1 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 @@ -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" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceDSL.kt b/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceDSL.kt index c1223cdce1..4cb24e0648 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/preference/PreferenceDSL.kt +++ b/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) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/FloatListPreference.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/FloatListPreference.kt deleted file mode 100644 index b27e42d009..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/FloatListPreference.kt +++ /dev/null @@ -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 - } - } -} diff --git a/app/src/main/res/layout/reader_settings_sheet.xml b/app/src/main/res/layout/reader_settings_sheet.xml index 685eb8afae..f768862f03 100644 --- a/app/src/main/res/layout/reader_settings_sheet.xml +++ b/app/src/main/res/layout/reader_settings_sheet.xml @@ -257,20 +257,20 @@ app:layout_constraintTop_toBottomOf="@id/webtoon_prefs" /> + app:layout_constraintBaseline_toBaselineOf="@id/webtoon_side_padding"/> @@ -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" /> @string/scale_type_smart_fit - - @string/webtoon_margin_ratio_0 - @string/webtoon_margin_ratio_10 - @string/webtoon_margin_ratio_15 - @string/webtoon_margin_ratio_20 - @string/webtoon_margin_ratio_25 + + @string/webtoon_side_padding_0 + @string/webtoon_side_padding_10 + @string/webtoon_side_padding_15 + @string/webtoon_side_padding_20 + @string/webtoon_side_padding_25 - - 0.0 - 0.1 - 0.15 - 0.2 - 0.25 + + 0 + 10 + 15 + 20 + 25 @@ -99,7 +99,7 @@ @string/rotation_force_portrait @string/rotation_force_landscape - + 1 2 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 93b4de9d3e..9bcec82d54 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -241,7 +241,6 @@ Tapping Long tap dialog Background color - Margin ratio White Black Default viewer @@ -279,11 +278,12 @@ A Always show chapter transition Reading - No margin - 10% - 15% - 20% - 25% + Side padding + No margin + 10% + 15% + 20% + 25% Download location