mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Tweak webtoon margin setting
This commit is contained in:
		| @@ -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" | ||||
|  | ||||
|   | ||||
| @@ -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) | ||||
|  | ||||
|   | ||||
| @@ -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) | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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() { | ||||
|   | ||||
| @@ -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() | ||||
|         } | ||||
|   | ||||
| @@ -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)) | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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" | ||||
|             } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user