From f14af7cf832a4ac7900897cd882ecb298e2d9546 Mon Sep 17 00:00:00 2001 From: John Leehey Date: Mon, 2 Dec 2019 14:19:22 -0800 Subject: [PATCH] Bind the margin ratio as a float preference and rename variables - Fixed the floatListPreference that was used in the SettingsReaderController - Created new extension for binding float preferences in the ReaderSettingsSheet - Renamed the ratio variables to include the `webtoon` naming --- .../data/preference/PreferenceKeys.kt | 2 +- .../data/preference/PreferencesHelper.kt | 4 ++-- .../tachiyomi/ui/reader/ReaderSettingsSheet.kt | 16 +++++++++++++++- .../ui/reader/viewer/webtoon/WebtoonConfig.kt | 18 ++---------------- .../ui/setting/SettingsReaderController.kt | 9 +++++---- .../main/res/layout/reader_settings_sheet.xml | 2 +- app/src/main/res/values/arrays.xml | 12 +++++++++++- app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 39 insertions(+), 26 deletions(-) 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 26e25aa292..74f9c5a6ec 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 @@ -51,7 +51,7 @@ object PreferenceKeys { const val readWithVolumeKeysInverted = "reader_volume_keys_inverted" - const val webtoonMarginRatio = "margin_ratio" + const val marginRatioWebtoon = "margin_ratio_webtoon" 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 bb5be1c255..75bef0c5f5 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 @@ -71,6 +71,8 @@ class PreferencesHelper(val context: Context) { fun cropBordersWebtoon() = rxPrefs.getBoolean(Keys.cropBordersWebtoon, false) + fun marginRatioWebtoon() = rxPrefs.getFloat(Keys.marginRatioWebtoon, 0f) + fun readWithTapping() = rxPrefs.getBoolean(Keys.readWithTapping, true) fun readWithLongTap() = rxPrefs.getBoolean(Keys.readWithLongTap, true) @@ -79,8 +81,6 @@ class PreferencesHelper(val context: Context) { fun readWithVolumeKeysInverted() = rxPrefs.getBoolean(Keys.readWithVolumeKeysInverted, false) - fun marginRatio() = rxPrefs.getInteger(Keys.webtoonMarginRatio, 0) - fun portraitColumns() = rxPrefs.getInteger(Keys.portraitColumns, 0) fun landscapeColumns() = rxPrefs.getInteger(Keys.landscapeColumns, 0) 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 5f88b26fa8..5956684733 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 @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.ui.reader import android.os.Bundle +import android.support.annotation.ArrayRes import android.support.design.widget.BottomSheetDialog import android.support.v4.widget.NestedScrollView import android.widget.CompoundButton @@ -82,7 +83,7 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia private fun initWebtoonPreferences() { webtoon_prefs_group.visible() crop_borders_webtoon.bindToPreference(preferences.cropBordersWebtoon()) - margin_ratio_webtoon.bindToPreference(preferences.marginRatio()) + margin_ratio_webtoon.bindToFloatPreference(preferences.marginRatioWebtoon(), R.array.webtoon_margin_ratio_values) } /** @@ -103,4 +104,17 @@ class ReaderSettingsSheet(private val activity: ReaderActivity) : BottomSheetDia setSelection(pref.getOrDefault() - offset, false) } + /** + * 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. + */ + private fun Spinner.bindToFloatPreference(pref: Preference, @ArrayRes floatValuesResource: Int) { + val floatValues = resources.getStringArray(floatValuesResource).map { it.toFloatOrNull() } + onItemSelectedListener = IgnoreFirstSpinnerListener { position -> + pref.set(floatValues[position]) + } + setSelection(floatValues.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 31ca893234..b26ea5144a 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 @@ -56,22 +56,8 @@ class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) { preferences.readWithVolumeKeysInverted() .register({ volumeKeysInverted = it }) - preferences.marginRatio() - .register({ marginFromPreference(it) }, { imagePropertyChangedListener?.invoke() }) - } - - private fun marginFromPreference(position: Int) { - marginRatio = when (position) { - 1 -> PageMargin.TEN_PERCENT - 2 -> PageMargin.TWENTY_FIVE_PERCENT - else -> PageMargin.NO_MARGIN - } - } - - object PageMargin { - const val NO_MARGIN = 0f - const val TEN_PERCENT = 0.1f - const val TWENTY_FIVE_PERCENT = 0.25f + preferences.marginRatioWebtoon() + .register({ marginRatio = it }, { imagePropertyChangedListener?.invoke() }) } fun unsubscribe() { 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 e5958fdacf..ceb9ee64c6 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 @@ -114,11 +114,12 @@ class SettingsReaderController : SettingsController() { } floatListPreference { - key = Keys.webtoonMarginRatio - titleRes = R.string.pref_reader_theme + 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_25) - entryValues = arrayOf("0", "1", "2") + 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") defaultValue = "0" summary = "%s" } diff --git a/app/src/main/res/layout/reader_settings_sheet.xml b/app/src/main/res/layout/reader_settings_sheet.xml index 12435ba18c..04ebe29095 100644 --- a/app/src/main/res/layout/reader_settings_sheet.xml +++ b/app/src/main/res/layout/reader_settings_sheet.xml @@ -254,7 +254,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" - android:entries="@array/margin_ratio" + android:entries="@array/webtoon_margin_ratio" app:layout_constraintLeft_toRightOf="@id/verticalcenter" app:layout_constraintRight_toRightOf="@id/spinner_end" app:layout_constraintTop_toBottomOf="@id/crop_borders_webtoon"/> diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 87e5710ffc..feefd81b33 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -53,12 +53,22 @@ @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 + + 0.0 + 0.1 + 0.15 + 0.2 + 0.25 + + 1 2 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a42e9d4ed8..6a261e6fcf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -233,6 +233,8 @@ A No margin 10% + 15% + 20% 25%