Add reader bottom button menu customization
This commit is contained in:
parent
9095c98159
commit
a4933388aa
@ -372,4 +372,6 @@ object PreferenceKeys {
|
|||||||
const val leftVerticalSeekbar = "pref_left_handed_vertical_seekbar"
|
const val leftVerticalSeekbar = "pref_left_handed_vertical_seekbar"
|
||||||
|
|
||||||
const val forceHorizontalSeekbar = "pref_force_horz_seekbar"
|
const val forceHorizontalSeekbar = "pref_force_horz_seekbar"
|
||||||
|
|
||||||
|
const val readerBottomButtons = "reader_bottom_buttons"
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.data.preference.PreferenceValues.DisplayMode
|
|||||||
import eu.kanade.tachiyomi.data.track.TrackService
|
import eu.kanade.tachiyomi.data.track.TrackService
|
||||||
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||||
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
|
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@ -488,4 +489,6 @@ class PreferencesHelper(val context: Context) {
|
|||||||
fun landscapeVerticalSeekbar() = flowPrefs.getBoolean(Keys.landscapeVerticalSeekbar, false)
|
fun landscapeVerticalSeekbar() = flowPrefs.getBoolean(Keys.landscapeVerticalSeekbar, false)
|
||||||
|
|
||||||
fun leftVerticalSeekbar() = flowPrefs.getBoolean(Keys.leftVerticalSeekbar, false)
|
fun leftVerticalSeekbar() = flowPrefs.getBoolean(Keys.leftVerticalSeekbar, false)
|
||||||
|
|
||||||
|
fun readerBottomButtons() = flowPrefs.getStringSet(Keys.readerBottomButtons, ReaderBottomButton.BUTTONS_DEFAULTS)
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
|||||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
||||||
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
|
||||||
@ -70,6 +71,7 @@ import eu.kanade.tachiyomi.util.system.toast
|
|||||||
import eu.kanade.tachiyomi.util.view.defaultBar
|
import eu.kanade.tachiyomi.util.view.defaultBar
|
||||||
import eu.kanade.tachiyomi.util.view.hideBar
|
import eu.kanade.tachiyomi.util.view.hideBar
|
||||||
import eu.kanade.tachiyomi.util.view.isDefaultBar
|
import eu.kanade.tachiyomi.util.view.isDefaultBar
|
||||||
|
import eu.kanade.tachiyomi.util.view.popupMenu
|
||||||
import eu.kanade.tachiyomi.util.view.setTooltip
|
import eu.kanade.tachiyomi.util.view.setTooltip
|
||||||
import eu.kanade.tachiyomi.util.view.showBar
|
import eu.kanade.tachiyomi.util.view.showBar
|
||||||
import eu.kanade.tachiyomi.widget.SimpleAnimationListener
|
import eu.kanade.tachiyomi.widget.SimpleAnimationListener
|
||||||
@ -441,28 +443,12 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
/*binding.actionRotation.setOnClickListener {
|
|
||||||
val newOrientation = OrientationType.getNextOrientation(preferences.rotation().get(), resources)
|
|
||||||
|
|
||||||
preferences.rotation().set(newOrientation.prefValue)
|
|
||||||
setOrientation(newOrientation.flag)
|
|
||||||
|
|
||||||
rotationToast?.cancel()
|
|
||||||
rotationToast = toast(newOrientation.stringRes)
|
|
||||||
}
|
|
||||||
preferences.rotation().asImmediateFlow { updateRotationShortcut(it) }
|
|
||||||
.onEach {
|
|
||||||
updateRotationShortcut(it)
|
|
||||||
}
|
|
||||||
.launchIn(lifecycleScope)
|
|
||||||
*/
|
|
||||||
|
|
||||||
binding.actionSettings.setOnClickListener {
|
binding.actionSettings.setOnClickListener {
|
||||||
ReaderSettingsSheet(this).show()
|
ReaderSettingsSheet(this).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reading mode
|
// Reading mode
|
||||||
/*with(binding.actionReadingMode) {
|
with(binding.actionReadingMode) {
|
||||||
setTooltip(R.string.viewer)
|
setTooltip(R.string.viewer)
|
||||||
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
@ -502,7 +488,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
menuToggleToast = toast(newOrientation.stringRes)
|
menuToggleToast = toast(newOrientation.stringRes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// Crop borders
|
// Crop borders
|
||||||
with(binding.actionCropBorders) {
|
with(binding.actionCropBorders) {
|
||||||
@ -721,6 +707,8 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
.launchIn(lifecycleScope)
|
.launchIn(lifecycleScope)
|
||||||
|
|
||||||
chapterBottomSheet = ReaderChapterSheet(this)
|
chapterBottomSheet = ReaderChapterSheet(this)
|
||||||
|
|
||||||
|
updateBottomButtons()
|
||||||
// <-- EH
|
// <-- EH
|
||||||
|
|
||||||
// Set initial visibility
|
// Set initial visibility
|
||||||
@ -736,12 +724,39 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
val currentPage = (((viewer as? PagerViewer)?.currentPage ?: (viewer as? WebtoonViewer)?.currentPage) as? ReaderPage)?.index
|
val currentPage = (((viewer as? PagerViewer)?.currentPage ?: (viewer as? WebtoonViewer)?.currentPage) as? ReaderPage)?.index
|
||||||
return currentPage?.let { presenter.viewerChaptersRelay.value.currChapter.pages?.getOrNull(it) }
|
return currentPage?.let { presenter.viewerChaptersRelay.value.currChapter.pages?.getOrNull(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateBottomButtons() {
|
||||||
|
val enabledButtons = preferences.readerBottomButtons().get()
|
||||||
|
with(binding) {
|
||||||
|
actionReadingMode.isVisible = ReaderBottomButton.ReadingMode.isIn(enabledButtons)
|
||||||
|
actionRotation.isVisible =
|
||||||
|
ReaderBottomButton.Rotation.isIn(enabledButtons)
|
||||||
|
// doublePage.isVisible = viewer is PagerViewer && ReaderBottomButton.PageLayout.isIn(enabledButtons)
|
||||||
|
actionCropBorders.isVisible =
|
||||||
|
if (viewer is PagerViewer) {
|
||||||
|
ReaderBottomButton.CropBordersPager.isIn(enabledButtons)
|
||||||
|
} else {
|
||||||
|
val continuous = (viewer as? WebtoonViewer)?.isContinuous ?: false
|
||||||
|
if (continuous) {
|
||||||
|
ReaderBottomButton.CropBordersWebtoon.isIn(enabledButtons)
|
||||||
|
} else {
|
||||||
|
ReaderBottomButton.CropBordersContinuesVertical.isIn(enabledButtons)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
actionWebView.isVisible =
|
||||||
|
ReaderBottomButton.WebView.isIn(enabledButtons)
|
||||||
|
actionChapterList.isVisible =
|
||||||
|
ReaderBottomButton.ViewChapters.isIn(enabledButtons)
|
||||||
|
// shiftPageButton.isVisible = ((viewer as? PagerViewer)?.config?.doublePages ?: false) && ReaderBottomButton.ShiftDoublePage.isIn(enabledButtons)
|
||||||
|
// binding.toolbar.menu.findItem(R.id.action_shift_double_page)?.isVisible = ((viewer as? PagerViewer)?.config?.doublePages ?: false) && !ReaderBottomButton.ShiftDoublePage.isIn(enabledButtons)
|
||||||
|
}
|
||||||
|
}
|
||||||
// EXH <--
|
// EXH <--
|
||||||
|
|
||||||
/*private fun updateOrientationShortcut(preference: Int) {
|
private fun updateOrientationShortcut(preference: Int) {
|
||||||
val orientation = OrientationType.fromPreference(preference)
|
val orientation = OrientationType.fromPreference(preference)
|
||||||
binding.actionRotation.setImageResource(orientation.iconRes)
|
binding.actionRotation.setImageResource(orientation.iconRes)
|
||||||
}*/
|
}
|
||||||
|
|
||||||
private fun updateCropBordersShortcut() {
|
private fun updateCropBordersShortcut() {
|
||||||
val mangaViewer = presenter.getMangaReadingMode()
|
val mangaViewer = presenter.getMangaReadingMode()
|
||||||
@ -950,6 +965,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
|
|
||||||
// <-- Left-handed vertical seekbar
|
// <-- Left-handed vertical seekbar
|
||||||
|
|
||||||
|
updateBottomButtons()
|
||||||
// SY <--
|
// SY <--
|
||||||
binding.toolbar.title = manga.title
|
binding.toolbar.title = manga.title
|
||||||
|
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package eu.kanade.tachiyomi.ui.reader.setting
|
||||||
|
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
import eu.kanade.tachiyomi.R
|
||||||
|
|
||||||
|
enum class ReaderBottomButton(val value: String, @StringRes val stringRes: Int) {
|
||||||
|
ViewChapters("vc", R.string.action_view_chapters),
|
||||||
|
WebView("wb", R.string.action_open_in_web_view),
|
||||||
|
ReadingMode("rm", R.string.viewer),
|
||||||
|
Rotation("rot", R.string.rotation_type),
|
||||||
|
CropBordersPager("cbp", R.string.pref_crop_borders_pager),
|
||||||
|
CropBordersContinuesVertical("cbc", R.string.pref_crop_borders_continues_vertical),
|
||||||
|
CropBordersWebtoon("cbw", R.string.pref_crop_borders_webtoon),
|
||||||
|
// PageLayout("pl", R.string.page_layout),
|
||||||
|
// ShiftDoublePage("sdp", R.string.shift_double_pages)
|
||||||
|
;
|
||||||
|
|
||||||
|
fun isIn(buttons: Collection<String>) = value in buttons
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val BUTTONS_DEFAULTS = setOf(
|
||||||
|
ViewChapters,
|
||||||
|
WebView,
|
||||||
|
CropBordersPager,
|
||||||
|
CropBordersContinuesVertical
|
||||||
|
).map { it.value }.toSet()
|
||||||
|
}
|
||||||
|
}
|
@ -1,22 +1,33 @@
|
|||||||
package eu.kanade.tachiyomi.ui.setting
|
package eu.kanade.tachiyomi.ui.setting
|
||||||
|
|
||||||
|
import android.app.Dialog
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
|
import com.afollestad.materialdialogs.list.listItemsMultiChoice
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
|
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||||
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||||
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
import eu.kanade.tachiyomi.util.preference.entriesRes
|
import eu.kanade.tachiyomi.util.preference.entriesRes
|
||||||
import eu.kanade.tachiyomi.util.preference.intListPreference
|
import eu.kanade.tachiyomi.util.preference.intListPreference
|
||||||
import eu.kanade.tachiyomi.util.preference.listPreference
|
import eu.kanade.tachiyomi.util.preference.listPreference
|
||||||
|
import eu.kanade.tachiyomi.util.preference.onClick
|
||||||
|
import eu.kanade.tachiyomi.util.preference.preference
|
||||||
import eu.kanade.tachiyomi.util.preference.preferenceCategory
|
import eu.kanade.tachiyomi.util.preference.preferenceCategory
|
||||||
import eu.kanade.tachiyomi.util.preference.summaryRes
|
import eu.kanade.tachiyomi.util.preference.summaryRes
|
||||||
import eu.kanade.tachiyomi.util.preference.switchPreference
|
import eu.kanade.tachiyomi.util.preference.switchPreference
|
||||||
import eu.kanade.tachiyomi.util.preference.titleRes
|
import eu.kanade.tachiyomi.util.preference.titleRes
|
||||||
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||||
|
|
||||||
class SettingsReaderController : SettingsController() {
|
class SettingsReaderController : SettingsController() {
|
||||||
@ -494,7 +505,46 @@ class SettingsReaderController : SettingsController() {
|
|||||||
summaryRes = R.string.auto_webtoon_mode_summary
|
summaryRes = R.string.auto_webtoon_mode_summary
|
||||||
defaultValue = true
|
defaultValue = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
preference {
|
||||||
|
key = "reader_bottom_buttons_pref"
|
||||||
|
titleRes = R.string.reader_bottom_buttons
|
||||||
|
summaryRes = R.string.reader_bottom_buttons_summary
|
||||||
|
|
||||||
|
onClick {
|
||||||
|
ReaderBottomButtonsDialog().showDialog(router)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// EXH <--
|
// EXH <--
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ReaderBottomButtonsDialog : DialogController() {
|
||||||
|
|
||||||
|
private val preferences: PreferencesHelper = Injekt.get()
|
||||||
|
|
||||||
|
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||||
|
val selected = preferences.readerBottomButtons().get()
|
||||||
|
val values = ReaderBottomButton.values()
|
||||||
|
val items = values.map { it.value }
|
||||||
|
|
||||||
|
val preselected = selected.mapNotNull { selection -> items.indexOf(selection).takeUnless { it == -1 } }
|
||||||
|
.toIntArray()
|
||||||
|
|
||||||
|
return MaterialDialog(activity!!)
|
||||||
|
.title(R.string.reader_bottom_buttons)
|
||||||
|
.listItemsMultiChoice(
|
||||||
|
items = values.map { activity!!.getString(it.stringRes) },
|
||||||
|
initialSelection = preselected
|
||||||
|
) { _, selections: IntArray, _ ->
|
||||||
|
val included = selections
|
||||||
|
.map { values[it].value }
|
||||||
|
.toSet()
|
||||||
|
|
||||||
|
preferences.readerBottomButtons().set(included)
|
||||||
|
}
|
||||||
|
.positiveButton(android.R.string.ok)
|
||||||
|
.negativeButton(android.R.string.cancel)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,6 +387,7 @@
|
|||||||
app:layout_constraintEnd_toStartOf="@+id/action_web_view"
|
app:layout_constraintEnd_toStartOf="@+id/action_web_view"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
app:srcCompat="@drawable/ic_format_list_numbered_24dp"
|
app:srcCompat="@drawable/ic_format_list_numbered_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
@ -397,12 +398,27 @@
|
|||||||
android:background="?selectableItemBackgroundBorderless"
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
android:contentDescription="@string/custom_filter"
|
android:contentDescription="@string/custom_filter"
|
||||||
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
||||||
app:layout_constraintEnd_toStartOf="@id/action_crop_borders"
|
app:layout_constraintEnd_toStartOf="@id/action_reading_mode"
|
||||||
app:layout_constraintStart_toEndOf="@+id/action_chapter_list"
|
app:layout_constraintStart_toEndOf="@+id/action_chapter_list"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
app:srcCompat="@drawable/ic_public_24dp"
|
app:srcCompat="@drawable/ic_public_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/action_reading_mode"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/viewer"
|
||||||
|
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/action_crop_borders"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/action_web_view"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
|
app:srcCompat="@drawable/ic_reader_default_24dp"
|
||||||
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/action_crop_borders"
|
android:id="@+id/action_crop_borders"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -410,12 +426,27 @@
|
|||||||
android:background="?selectableItemBackgroundBorderless"
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
android:contentDescription="@string/pref_crop_borders"
|
android:contentDescription="@string/pref_crop_borders"
|
||||||
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
||||||
app:layout_constraintEnd_toStartOf="@id/action_settings"
|
app:layout_constraintEnd_toStartOf="@id/action_rotation"
|
||||||
app:layout_constraintStart_toEndOf="@+id/action_web_view"
|
app:layout_constraintStart_toEndOf="@+id/action_reading_mode"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
app:srcCompat="@drawable/ic_crop_24dp"
|
app:srcCompat="@drawable/ic_crop_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/action_rotation"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="@string/pref_rotation_type"
|
||||||
|
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/action_settings"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/action_crop_borders"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
|
app:srcCompat="@drawable/ic_screen_rotation_24dp"
|
||||||
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/action_settings"
|
android:id="@+id/action_settings"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -424,8 +455,9 @@
|
|||||||
android:contentDescription="@string/action_settings"
|
android:contentDescription="@string/action_settings"
|
||||||
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@id/action_crop_borders"
|
app:layout_constraintStart_toEndOf="@id/action_rotation"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread"
|
||||||
app:srcCompat="@drawable/ic_settings_24dp"
|
app:srcCompat="@drawable/ic_settings_24dp"
|
||||||
app:tint="?attr/colorOnPrimary" />
|
app:tint="?attr/colorOnPrimary" />
|
||||||
|
|
||||||
|
@ -217,6 +217,7 @@
|
|||||||
<string name="biometric_lock_invalid_time_selected">Invalid time selected</string>
|
<string name="biometric_lock_invalid_time_selected">Invalid time selected</string>
|
||||||
|
|
||||||
<!-- Reader Settings -->
|
<!-- Reader Settings -->
|
||||||
|
<string name="page_downloading">Page Downloading</string>
|
||||||
<string name="download_threads">Download threads</string>
|
<string name="download_threads">Download threads</string>
|
||||||
<string name="download_threads_summary">Higher values can speed up image downloading significantly, but can also trigger bans. Recommended value is 2 or 3. Current value is: %s</string>
|
<string name="download_threads_summary">Higher values can speed up image downloading significantly, but can also trigger bans. Recommended value is 2 or 3. Current value is: %s</string>
|
||||||
<string name="aggressively_load_pages">Aggressively load pages</string>
|
<string name="aggressively_load_pages">Aggressively load pages</string>
|
||||||
@ -244,6 +245,8 @@
|
|||||||
<string name="smart_based_on_page_and_theme">Smart (based on page and theme)</string>
|
<string name="smart_based_on_page_and_theme">Smart (based on page and theme)</string>
|
||||||
<string name="tap_scroll_page">Tap scroll by page</string>
|
<string name="tap_scroll_page">Tap scroll by page</string>
|
||||||
<string name="tap_scroll_page_summary">Tapping will scroll by page instead of screen size when this option is enabled</string>
|
<string name="tap_scroll_page_summary">Tapping will scroll by page instead of screen size when this option is enabled</string>
|
||||||
|
<string name="reader_bottom_buttons">Reader Bottom Buttons</string>
|
||||||
|
<string name="reader_bottom_buttons_summary">Customize what buttons appear at the bottom of the reader</string>
|
||||||
|
|
||||||
<string name="pref_show_vert_seekbar_landscape">Show vertical seekbar in landscape</string>
|
<string name="pref_show_vert_seekbar_landscape">Show vertical seekbar in landscape</string>
|
||||||
<string name="pref_show_vert_seekbar_landscape_summary">Enables vertical seekbar when in landscape</string>
|
<string name="pref_show_vert_seekbar_landscape_summary">Enables vertical seekbar when in landscape</string>
|
||||||
@ -263,6 +266,9 @@
|
|||||||
<string name="eh_retry_all_help_message">Re-add all failed pages to the download queue.</string>
|
<string name="eh_retry_all_help_message">Re-add all failed pages to the download queue.</string>
|
||||||
<string name="eh_boost_page_help">Boost page help</string>
|
<string name="eh_boost_page_help">Boost page help</string>
|
||||||
<string name="eh_boost_page_help_message">Normally the downloader can only download a specific amount of pages at the same time. This means you can be waiting for a page to download but the downloader will not start downloading the page until it has a free download slot. Pressing \'Boost page\' will force the downloader to begin downloading the current page, regardless of whether or not there is an available slot.</string>
|
<string name="eh_boost_page_help_message">Normally the downloader can only download a specific amount of pages at the same time. This means you can be waiting for a page to download but the downloader will not start downloading the page until it has a free download slot. Pressing \'Boost page\' will force the downloader to begin downloading the current page, regardless of whether or not there is an available slot.</string>
|
||||||
|
<string name="pref_crop_borders_pager">Crop borders Pager</string>
|
||||||
|
<string name="pref_crop_borders_continues_vertical">Crop borders Continues Vertical</string>
|
||||||
|
<string name="pref_crop_borders_webtoon">Crop borders Webtoon</string>
|
||||||
|
|
||||||
<!-- Auto Webtoon Mode -->
|
<!-- Auto Webtoon Mode -->
|
||||||
<string name="eh_auto_webtoon_snack">Reading webtoon style</string>
|
<string name="eh_auto_webtoon_snack">Reading webtoon style</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user