mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
feat: Port "Show content in cutout area" from Tachi
This commit is contained in:
parent
7386deb72a
commit
4b13a6580a
8 changed files with 60 additions and 15 deletions
|
@ -0,0 +1,9 @@
|
|||
package dev.yokai.domain.ui.settings
|
||||
|
||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
||||
|
||||
class ReaderPreferences(private val preferenceStore: PreferenceStore) {
|
||||
fun cutoutShort() = preferenceStore.getBoolean("cutout_short", true)
|
||||
|
||||
fun landscapeCutoutBehavior() = preferenceStore.getInt("landscape_cutout_behavior", 0)
|
||||
}
|
|
@ -105,10 +105,9 @@ class PreferencesHelper(val context: Context, val preferenceStore: PreferenceSto
|
|||
|
||||
fun pageTransitions() = preferenceStore.getBoolean(Keys.enableTransitions, true)
|
||||
|
||||
// ReaderPrefs
|
||||
fun pagerCutoutBehavior() = preferenceStore.getInt(Keys.pagerCutoutBehavior, 0)
|
||||
|
||||
fun landscapeCutoutBehavior() = preferenceStore.getInt("landscape_cutout_behavior", 0)
|
||||
|
||||
fun doubleTapAnimSpeed() = preferenceStore.getInt(Keys.doubleTapAnimationSpeed, 500)
|
||||
|
||||
fun showPageNumber() = preferenceStore.getBoolean(Keys.showPageNumber, true)
|
||||
|
|
|
@ -5,6 +5,7 @@ import dev.yokai.domain.base.BasePreferences
|
|||
import dev.yokai.domain.recents.RecentsPreferences
|
||||
import dev.yokai.domain.source.SourcePreferences
|
||||
import dev.yokai.domain.ui.UiPreferences
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
|
||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
|
@ -26,6 +27,8 @@ class PreferenceModule(val application: Application) : InjektModule {
|
|||
|
||||
addSingletonFactory { UiPreferences(get()) }
|
||||
|
||||
addSingletonFactory { ReaderPreferences(get()) }
|
||||
|
||||
addSingletonFactory { RecentsPreferences(get()) }
|
||||
|
||||
addSingletonFactory {
|
||||
|
|
|
@ -71,6 +71,7 @@ import com.google.android.material.slider.Slider
|
|||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.transition.platform.MaterialContainerTransform
|
||||
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
|
@ -150,6 +151,7 @@ import kotlinx.coroutines.flow.sample
|
|||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.io.File
|
||||
import java.text.DecimalFormat
|
||||
import java.text.DecimalFormatSymbols
|
||||
|
@ -233,6 +235,8 @@ class ReaderActivity : BaseActivity<ReaderActivityBinding>() {
|
|||
(viewer as? PagerViewer)?.config?.hingeGapSize = value
|
||||
}
|
||||
|
||||
private val readerPreferences: ReaderPreferences by injectLazy()
|
||||
|
||||
companion object {
|
||||
|
||||
const val SHIFT_DOUBLE_PAGES = "shiftingDoublePages"
|
||||
|
@ -947,7 +951,7 @@ class ReaderActivity : BaseActivity<ReaderActivityBinding>() {
|
|||
setNavColor(insets)
|
||||
val systemInsets = insets.ignoredSystemInsets
|
||||
val currentOrientation = resources.configuration.orientation
|
||||
val isLandscapeFully = currentOrientation == Configuration.ORIENTATION_LANDSCAPE && preferences.landscapeCutoutBehavior().get() == 1
|
||||
val isLandscapeFully = currentOrientation == Configuration.ORIENTATION_LANDSCAPE && readerPreferences.landscapeCutoutBehavior().get() == 1
|
||||
val cutOutInsets = if (isLandscapeFully) insets.displayCutout else null
|
||||
val vis = insets.isVisible(statusBars())
|
||||
val fullscreen = preferences.fullscreen().get() && !isSplitScreen
|
||||
|
@ -1823,14 +1827,18 @@ class ReaderActivity : BaseActivity<ReaderActivityBinding>() {
|
|||
val params = window.attributes
|
||||
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
params.layoutInDisplayCutoutMode =
|
||||
if (preferences.landscapeCutoutBehavior().get() == 0) {
|
||||
if (readerPreferences.landscapeCutoutBehavior().get() == 0) {
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
|
||||
} else {
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
||||
}
|
||||
} else {
|
||||
params.layoutInDisplayCutoutMode =
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
||||
if (readerPreferences.cutoutShort().get()) {
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
||||
} else {
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1908,7 +1916,12 @@ class ReaderActivity : BaseActivity<ReaderActivityBinding>() {
|
|||
|
||||
preferences.showPageNumber().changesIn(scope) { setPageNumberVisibility(it) }
|
||||
|
||||
preferences.landscapeCutoutBehavior().changes()
|
||||
readerPreferences.landscapeCutoutBehavior().changes()
|
||||
.drop(1)
|
||||
.onEach { setCutoutMode() }
|
||||
.launchIn(scope)
|
||||
|
||||
readerPreferences.cutoutShort().changes()
|
||||
.drop(1)
|
||||
.onEach { setCutoutMode() }
|
||||
.launchIn(scope)
|
||||
|
|
|
@ -10,16 +10,20 @@ import android.view.Display
|
|||
import androidx.core.content.getSystemService
|
||||
import androidx.core.view.isVisible
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.databinding.ReaderPagedLayoutBinding
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.util.bindToPreference
|
||||
import eu.kanade.tachiyomi.util.lang.addBetaTag
|
||||
import eu.kanade.tachiyomi.widget.BaseReaderSettingsView
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class ReaderPagedView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
BaseReaderSettingsView<ReaderPagedLayoutBinding>(context, attrs) {
|
||||
|
||||
private val readerPreferences: ReaderPreferences by injectLazy()
|
||||
|
||||
var needsActivityRecreate = false
|
||||
override fun inflateBinding() = ReaderPagedLayoutBinding.bind(this)
|
||||
override fun initGeneralPreferences() {
|
||||
|
@ -38,7 +42,7 @@ class ReaderPagedView @JvmOverloads constructor(context: Context, attrs: Attribu
|
|||
pagerNav.bindToPreference(preferences.navigationModePager())
|
||||
pagerInvert.bindToPreference(preferences.pagerNavInverted())
|
||||
extendPastCutout.bindToPreference(preferences.pagerCutoutBehavior())
|
||||
extendPastCutoutLandscape.bindToPreference(preferences.landscapeCutoutBehavior()) {
|
||||
extendPastCutoutLandscape.bindToPreference(readerPreferences.landscapeCutoutBehavior()) {
|
||||
needsActivityRecreate = true
|
||||
}
|
||||
pageLayout.bindToPreference(preferences.pageLayout()) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.os.Build
|
|||
import android.view.Display
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.preference.PreferenceScreen
|
||||
import dev.yokai.domain.ui.settings.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
import eu.kanade.tachiyomi.data.preference.changesIn
|
||||
|
@ -15,12 +16,16 @@ import eu.kanade.tachiyomi.ui.reader.settings.ReaderBottomButton
|
|||
import eu.kanade.tachiyomi.ui.reader.settings.ReadingModeType
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
||||
import eu.kanade.tachiyomi.util.lang.addBetaTag
|
||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||
import eu.kanade.tachiyomi.util.system.isTablet
|
||||
import eu.kanade.tachiyomi.util.view.activityBinding
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
class SettingsReaderController : SettingsController() {
|
||||
|
||||
private val readerPreferences: ReaderPreferences by injectLazy()
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply {
|
||||
titleRes = R.string.reader
|
||||
|
||||
|
@ -122,8 +127,13 @@ class SettingsReaderController : SettingsController() {
|
|||
titleRes = R.string.show_page_number
|
||||
defaultValue = true
|
||||
}
|
||||
switchPreference {
|
||||
bindTo(readerPreferences.cutoutShort())
|
||||
titleRes = R.string.pref_cutout_short
|
||||
isVisible = DeviceUtil.hasCutout(activity) || preferences.fullscreen().get()
|
||||
}
|
||||
intListPreference(activity) {
|
||||
bindTo(preferences.landscapeCutoutBehavior())
|
||||
bindTo(readerPreferences.landscapeCutoutBehavior())
|
||||
title = "${context.getString(R.string.cutout_area_behavior)} (${context.getString(R.string.landscape)})"
|
||||
entriesRes = arrayOf(
|
||||
R.string.pad_cutout_areas,
|
||||
|
@ -131,12 +141,7 @@ class SettingsReaderController : SettingsController() {
|
|||
)
|
||||
entryRange = 0..1
|
||||
defaultValue = 0
|
||||
isVisible = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
activity?.getSystemService<DisplayManager>()
|
||||
?.getDisplay(Display.DEFAULT_DISPLAY)?.cutout != null
|
||||
} else {
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||
}
|
||||
isVisible = DeviceUtil.hasCutout(activity)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
package eu.kanade.tachiyomi.util.system
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.hardware.display.DisplayManager
|
||||
import android.os.Build
|
||||
import android.view.Display
|
||||
import androidx.core.content.getSystemService
|
||||
import timber.log.Timber
|
||||
|
||||
object DeviceUtil {
|
||||
|
@ -75,4 +79,11 @@ object DeviceUtil {
|
|||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun hasCutout(activity: Activity? = null) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
activity?.getSystemService<DisplayManager>()
|
||||
?.getDisplay(Display.DEFAULT_DISPLAY)?.cutout != null
|
||||
} else {
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
|
||||
}
|
||||
}
|
||||
|
|
|
@ -502,6 +502,7 @@
|
|||
<string name="start_past_cutout">Start past cutout</string>
|
||||
<string name="ignore_cutout_areas">Ignore cutout areas</string>
|
||||
<string name="cutout_behavior_only_applies">Cutout area behavior only applies in portrait mode with certain scale types</string>
|
||||
<string name="pref_cutout_short">Show content in cutout area</string>
|
||||
<string name="page_layout">Page layout</string>
|
||||
<string name="automatic_can_still_switch">While using automatic page layout, you can still switch between layouts while reading without overriding this setting</string>
|
||||
<string name="automatic_orientation">Automatic (based on orientation)</string>
|
||||
|
@ -1207,4 +1208,4 @@
|
|||
<string name="sfw">SFW</string>
|
||||
<string name="nsfw">NSFW</string>
|
||||
<string name="content_type">Content Type</string>
|
||||
</resources>
|
||||
</resources>
|
Loading…
Add table
Add a link
Reference in a new issue