mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Cleanup reader spinner layouts
This commit is contained in:
		| @@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.databinding.ReaderGeneralSettingsBinding | ||||
| import eu.kanade.tachiyomi.ui.reader.ReaderActivity | ||||
| import eu.kanade.tachiyomi.util.preference.bindToIntPreference | ||||
| import eu.kanade.tachiyomi.util.preference.bindToPreference | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.databinding.ReaderReadingModeSettingsBinding | ||||
| import eu.kanade.tachiyomi.ui.reader.ReaderActivity | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer | ||||
| import eu.kanade.tachiyomi.util.preference.bindToIntPreference | ||||
| import eu.kanade.tachiyomi.util.preference.bindToPreference | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|   | ||||
| @@ -8,7 +8,6 @@ import android.view.MenuItem | ||||
| import android.widget.FrameLayout | ||||
| import androidx.annotation.ArrayRes | ||||
| import androidx.appcompat.widget.PopupMenu | ||||
| import androidx.core.view.get | ||||
| import com.tfcporciuncula.flow.Preference | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.databinding.SpinnerPreferenceBinding | ||||
| @@ -53,12 +52,8 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|     } | ||||
|  | ||||
|     fun setSelection(selection: Int) { | ||||
|         popup?.menu?.get(selectedPosition)?.isCheckable = false | ||||
|         popup?.menu?.get(selectedPosition)?.isChecked = false | ||||
|         selectedPosition = selection | ||||
|         binding.details.text = entries.getOrNull(selection).orEmpty() | ||||
|         popup?.menu?.get(selectedPosition)?.isCheckable = true | ||||
|         popup?.menu?.get(selectedPosition)?.isChecked = true | ||||
|     } | ||||
|  | ||||
|     fun bindToPreference(pref: Preference<Int>, offset: Int = 0, block: ((Int) -> Unit)? = null) { | ||||
| @@ -99,14 +94,14 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|  | ||||
|         // Set a listener so we are notified if a menu item is clicked | ||||
|         popup.setOnMenuItemClickListener { menuItem -> | ||||
|             val pos = popup.menuClicked(menuItem) | ||||
|             val pos = menuClicked(menuItem) | ||||
|             onItemSelectedListener?.invoke(pos) | ||||
|             true | ||||
|         } | ||||
|         // Set a listener so we are notified if a menu item is clicked | ||||
|         popup.setOnMenuItemClickListener { menuItem -> | ||||
|             val enumConstants = T::class.java.enumConstants | ||||
|             val pos = popup.menuClicked(menuItem) | ||||
|             val pos = menuClicked(menuItem) | ||||
|             enumConstants?.get(pos)?.let { preference.set(it) } | ||||
|             true | ||||
|         } | ||||
| @@ -117,7 +112,7 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|         val popup = popup() | ||||
|         // Set a listener so we are notified if a menu item is clicked | ||||
|         popup.setOnMenuItemClickListener { menuItem -> | ||||
|             val pos = popup.menuClicked(menuItem) | ||||
|             val pos = menuClicked(menuItem) | ||||
|             preference.set(intValues[pos] ?: 0) | ||||
|             block?.invoke(pos) | ||||
|             true | ||||
| @@ -129,7 +124,7 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|         val popup = popup() | ||||
|         // Set a listener so we are notified if a menu item is clicked | ||||
|         popup.setOnMenuItemClickListener { menuItem -> | ||||
|             val pos = popup.menuClicked(menuItem) | ||||
|             val pos = menuClicked(menuItem) | ||||
|             preference.set(pos + offset) | ||||
|             block?.invoke(pos) | ||||
|             true | ||||
| @@ -142,20 +137,16 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|  | ||||
|         // Set a listener so we are notified if a menu item is clicked | ||||
|         popup.setOnMenuItemClickListener { menuItem -> | ||||
|             val pos = popup.menuClicked(menuItem) | ||||
|             val pos = menuClicked(menuItem) | ||||
|             onItemSelectedListener?.invoke(pos) | ||||
|             true | ||||
|         } | ||||
|         return popup | ||||
|     } | ||||
|  | ||||
|     fun PopupMenu.menuClicked(menuItem: MenuItem): Int { | ||||
|     fun menuClicked(menuItem: MenuItem): Int { | ||||
|         val pos = menuItem.itemId | ||||
|         menu[selectedPosition].isCheckable = false | ||||
|         menu[selectedPosition].isChecked = false | ||||
|         setSelection(pos) | ||||
|         menu[pos].isCheckable = true | ||||
|         menu[pos].isChecked = true | ||||
|         return pos | ||||
|     } | ||||
|  | ||||
| @@ -164,8 +155,6 @@ class SpinnerPreference @JvmOverloads constructor(context: Context, attrs: Attri | ||||
|         entries.forEachIndexed { index, entry -> | ||||
|             popup.menu.add(0, index, 0, entry) | ||||
|         } | ||||
|         popup.menu[selectedPosition].isCheckable = true | ||||
|         popup.menu[selectedPosition].isChecked = true | ||||
|         return popup | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,7 @@ | ||||
| package eu.kanade.tachiyomi.util.preference | ||||
|  | ||||
| import android.widget.CompoundButton | ||||
| import android.widget.Spinner | ||||
| import androidx.annotation.ArrayRes | ||||
| import com.tfcporciuncula.flow.Preference | ||||
| import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener | ||||
|  | ||||
| /** | ||||
|  * Binds a checkbox or switch view with a boolean preference. | ||||
| @@ -13,39 +10,3 @@ fun CompoundButton.bindToPreference(pref: Preference<Boolean>) { | ||||
|     isChecked = pref.get() | ||||
|     setOnCheckedChangeListener { _, isChecked -> pref.set(isChecked) } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Binds a spinner to an int preference with an optional offset for the value. | ||||
|  */ | ||||
| fun Spinner.bindToPreference(pref: Preference<Int>, offset: Int = 0) { | ||||
|     onItemSelectedListener = IgnoreFirstSpinnerListener { position -> | ||||
|         pref.set(position + offset) | ||||
|     } | ||||
|     setSelection(pref.get() - offset, false) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Binds a spinner to an enum preference. | ||||
|  */ | ||||
| inline fun <reified T : Enum<T>> Spinner.bindToPreference(pref: Preference<T>) { | ||||
|     val enumConstants = T::class.java.enumConstants | ||||
|  | ||||
|     onItemSelectedListener = IgnoreFirstSpinnerListener { position -> | ||||
|         enumConstants?.get(position)?.let { pref.set(it) } | ||||
|     } | ||||
|  | ||||
|     enumConstants?.indexOf(pref.get())?.let { setSelection(it, false) } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * 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. | ||||
|  */ | ||||
| fun Spinner.bindToIntPreference(pref: Preference<Int>, @ArrayRes intValuesResource: Int) { | ||||
|     val intValues = resources.getStringArray(intValuesResource).map { it.toIntOrNull() } | ||||
|     onItemSelectedListener = IgnoreFirstSpinnerListener { position -> | ||||
|         pref.set(intValues[position]!!) | ||||
|     } | ||||
|     setSelection(intValues.indexOf(pref.get()), false) | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="?attr/listPreferredItemHeightSmall" | ||||
| @@ -23,6 +24,6 @@ | ||||
|         android:id="@+id/expand_icon" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:tint="?attr/colorOnPrimary" /> | ||||
|         app:tint="?attr/colorOnPrimary" /> | ||||
|  | ||||
| </LinearLayout> | ||||
|   | ||||
| @@ -3,9 +3,7 @@ | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:clipToPadding="false" | ||||
|     android:padding="16dp"> | ||||
|     android:layout_height="match_parent"> | ||||
|  | ||||
|     <LinearLayout | ||||
|         android:layout_width="match_parent" | ||||
| @@ -30,12 +28,16 @@ | ||||
|             android:id="@+id/show_page_number" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_show_page_number" /> | ||||
|  | ||||
|         <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|             android:id="@+id/fullscreen" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_fullscreen" /> | ||||
|  | ||||
|         <com.google.android.material.switchmaterial.SwitchMaterial | ||||
| @@ -43,6 +45,8 @@ | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:text="@string/pref_cutout_short" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:visibility="gone" | ||||
|             tools:visibility="visible" /> | ||||
|  | ||||
| @@ -50,24 +54,32 @@ | ||||
|             android:id="@+id/keepscreen" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_keep_screen_on" /> | ||||
|  | ||||
|         <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|             android:id="@+id/long_tap" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_read_with_long_tap" /> | ||||
|  | ||||
|         <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|             android:id="@+id/always_show_chapter_transition" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_always_show_chapter_transition" /> | ||||
|  | ||||
|         <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|             android:id="@+id/page_transitions" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:paddingStart="16dp" | ||||
|             android:paddingEnd="16dp" | ||||
|             android:text="@string/pref_page_transitions" /> | ||||
|  | ||||
|     </LinearLayout> | ||||
|   | ||||
| @@ -10,12 +10,10 @@ | ||||
|         android:id="@+id/pager_prefs" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="24dp" | ||||
|         android:text="@string/pager_viewer" | ||||
|         android:textColor="?attr/colorAccent" | ||||
|         android:textStyle="bold" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:textAppearance="@style/TextAppearance.Medium.SubHeading" /> | ||||
|  | ||||
|     <eu.kanade.tachiyomi.ui.reader.setting.SpinnerPreference | ||||
|         android:id="@+id/pager_nav" | ||||
| @@ -49,23 +47,26 @@ | ||||
|         android:id="@+id/crop_borders" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:text="@string/pref_crop_borders" | ||||
|         app:layout_constraintTop_toBottomOf="@id/zoom_start" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:text="@string/pref_crop_borders" /> | ||||
|  | ||||
|     <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|         android:id="@+id/dual_page_split" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:text="@string/pref_dual_page_split" | ||||
|         app:layout_constraintTop_toBottomOf="@id/crop_borders" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" /> | ||||
|  | ||||
|     <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|         android:id="@+id/dual_page_invert" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:text="@string/pref_dual_page_invert" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintTop_toBottomOf="@id/dual_page_split" | ||||
|         tools:visibility="visible" /> | ||||
|  | ||||
|     <androidx.constraintlayout.widget.Group | ||||
|   | ||||
| @@ -3,9 +3,7 @@ | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="match_parent" | ||||
|     android:clipToPadding="false" | ||||
|     android:padding="16dp"> | ||||
|     android:layout_height="match_parent"> | ||||
|  | ||||
|     <LinearLayout | ||||
|         android:layout_width="match_parent" | ||||
| @@ -16,6 +14,7 @@ | ||||
|             android:id="@+id/viewer" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:layout_marginBottom="24dp" | ||||
|             android:entries="@array/viewers_selector" | ||||
|             app:title="@string/pref_category_for_this_series" /> | ||||
|  | ||||
| @@ -26,9 +25,6 @@ | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:visibility="gone" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintStart_toStartOf="parent" | ||||
|             app:layout_constraintTop_toBottomOf="@+id/viewer" | ||||
|             tools:visibility="visible" /> | ||||
|  | ||||
|         <!-- Webtoon preferences --> | ||||
| @@ -37,10 +33,7 @@ | ||||
|             layout="@layout/reader_webtoon_settings" | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="wrap_content" | ||||
|             android:visibility="gone" | ||||
|             app:layout_constraintEnd_toEndOf="parent" | ||||
|             app:layout_constraintStart_toStartOf="parent" | ||||
|             app:layout_constraintTop_toBottomOf="@id/viewer" /> | ||||
|             android:visibility="gone" /> | ||||
|  | ||||
|     </LinearLayout> | ||||
|  | ||||
|   | ||||
| @@ -10,12 +10,10 @@ | ||||
|         android:id="@+id/webtoon_prefs" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="24dp" | ||||
|         android:text="@string/webtoon_viewer" | ||||
|         android:textColor="?attr/colorAccent" | ||||
|         android:textStyle="bold" | ||||
|         app:layout_constraintStart_toStartOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="parent" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:textAppearance="@style/TextAppearance.Medium.SubHeading" /> | ||||
|  | ||||
|     <eu.kanade.tachiyomi.ui.reader.setting.SpinnerPreference | ||||
|         android:id="@+id/webtoon_nav" | ||||
| @@ -43,22 +41,25 @@ | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:text="@string/pref_crop_borders" | ||||
|         app:layout_constraintTop_toBottomOf="@+id/webtoon_side_padding" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" /> | ||||
|  | ||||
|     <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|         android:id="@+id/dual_page_split" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:text="@string/pref_dual_page_split" | ||||
|         app:layout_constraintTop_toBottomOf="@id/crop_borders_webtoon" /> | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:text="@string/pref_dual_page_split" /> | ||||
|  | ||||
|     <com.google.android.material.switchmaterial.SwitchMaterial | ||||
|         android:id="@+id/dual_page_invert" | ||||
|         android:layout_width="match_parent" | ||||
|         android:paddingStart="16dp" | ||||
|         android:paddingEnd="16dp" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:text="@string/pref_dual_page_invert" | ||||
|         android:visibility="gone" | ||||
|         app:layout_constraintTop_toBottomOf="@id/dual_page_split" | ||||
|         tools:visibility="visible" /> | ||||
|  | ||||
|     <androidx.constraintlayout.widget.Group | ||||
|   | ||||
| @@ -3,15 +3,16 @@ | ||||
|     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|     xmlns:tools="http://schemas.android.com/tools" | ||||
|     android:layout_width="match_parent" | ||||
|     android:layout_height="wrap_content"> | ||||
|     android:layout_height="?attr/listPreferredItemHeightSmall" | ||||
|     android:background="?attr/selectableItemBackground" | ||||
|     android:paddingStart="16dp" | ||||
|     android:paddingEnd="16dp"> | ||||
|  | ||||
|     <com.google.android.material.textview.MaterialTextView | ||||
|         android:id="@+id/title" | ||||
|         style="@style/TextAppearance.MaterialComponents.Body2" | ||||
|         android:layout_width="wrap_content" | ||||
|         android:layout_height="wrap_content" | ||||
|         android:layout_marginTop="12dp" | ||||
|         android:layout_marginBottom="12dp" | ||||
|         android:maxLines="1" | ||||
|         android:textColor="?android:attr/textColorPrimary" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
| @@ -27,19 +28,20 @@ | ||||
|         android:maxLines="1" | ||||
|         android:textColor="?android:attr/textColorSecondary" | ||||
|         app:layout_constraintBottom_toBottomOf="parent" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintEnd_toStartOf="@+id/dropdown_caret" | ||||
|         app:layout_constraintHorizontal_bias="0.0" | ||||
|         app:layout_constraintStart_toEndOf="@+id/start_barrier" | ||||
|         app:layout_constraintTop_toTopOf="parent" | ||||
|         tools:text="Details" /> | ||||
|  | ||||
|     <ImageView | ||||
|         android:id="@+id/dropdown_caret" | ||||
|         android:layout_width="24dp" | ||||
|         android:layout_height="24dp" | ||||
|         android:layout_marginStart="1dp" | ||||
|         android:src="@drawable/ic_expand_more_24dp" | ||||
|         app:layout_constraintBottom_toBottomOf="@id/details" | ||||
|         app:layout_constraintStart_toEndOf="@id/details" | ||||
|         app:layout_constraintEnd_toEndOf="parent" | ||||
|         app:layout_constraintTop_toTopOf="@id/details" | ||||
|         app:tint="?android:attr/textColorSecondary" | ||||
|         tools:ignore="ContentDescription" /> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user