Singletonize ReaderPreferences
This commit is contained in:
1 parent
9eb8e984b6
commit
cec86576c1
12 files changed
+52
-59
No files matched your search
@@ -22,7 +22,7 @@ import androidx.annotation.IntDef
|
||||
import com.davemorrissey.labs.subscaleview.decoder.Decoder
|
||||
import com.davemorrissey.labs.subscaleview.decoder.ImageDecoder
|
||||
import com.davemorrissey.labs.subscaleview.provider.InputProvider
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@@ -463,7 +463,7 @@ open class SubsamplingScaleImageView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
override fun onDoubleTap(e: MotionEvent): Boolean {
|
||||
if (!ReaderActivity.readerPreferences.doubleTapToZoom().get()) return false
|
||||
if (!ReaderPreferences.doubleTapToZoom().get()) return false
|
||||
if (isZoomEnabled && isReady && vTranslate != null) {
|
||||
// Hacky solution for #15 - after a double tap the GestureDetector gets in a state
|
||||
// where the next fling is ignored, so here we replace it with a new one.
|
||||
|
||||
@@ -45,8 +45,6 @@ import com.hippo.ehviewer.ui.keepNoMediaFileStatus
|
||||
import com.hippo.ehviewer.ui.lockObserver
|
||||
import com.hippo.ehviewer.util.ReadableTime
|
||||
import com.hippo.ehviewer.yorozuya.FileUtils
|
||||
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
@@ -177,8 +175,6 @@ class EhApplication : Application(), ImageLoaderFactory {
|
||||
}
|
||||
}
|
||||
|
||||
val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore) }
|
||||
|
||||
val ehDatabase by lazy { roomDb<EhDatabase>("eh.db") { allowMainThreadQueries() } }
|
||||
|
||||
val imageCache by lazy {
|
||||
|
||||
@@ -25,8 +25,8 @@ import android.graphics.drawable.Animatable
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import com.hippo.ehviewer.EhApplication
|
||||
import com.hippo.ehviewer.R
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import splitties.init.appCtx
|
||||
import java.nio.ByteBuffer
|
||||
import kotlin.math.min
|
||||
@@ -80,7 +80,7 @@ class Image private constructor(private val src: CloseableSource) {
|
||||
val screenHeight = appCtx.resources.displayMetrics.heightPixels
|
||||
val isWideColorGamut = appCtx.resources.configuration.isScreenWideColorGamut
|
||||
var colorSpace = ColorSpace.get(
|
||||
if (isWideColorGamut && EhApplication.readerPreferences.wideColorGamut().get()) {
|
||||
if (isWideColorGamut && ReaderPreferences.wideColorGamut().get()) {
|
||||
ColorSpace.Named.DISPLAY_P3
|
||||
} else {
|
||||
ColorSpace.Named.SRGB
|
||||
|
||||
@@ -61,7 +61,6 @@ import com.google.android.material.slider.Slider
|
||||
import com.google.android.material.transition.MaterialContainerTransform
|
||||
import com.hippo.ehviewer.AppConfig
|
||||
import com.hippo.ehviewer.BuildConfig
|
||||
import com.hippo.ehviewer.EhApplication
|
||||
import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
@@ -81,6 +80,7 @@ import com.hippo.unifile.UniFile
|
||||
import dev.chrisbanes.insetter.applyInsetter
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
|
||||
@@ -300,7 +300,7 @@ class ReaderActivity : EhActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
window.colorMode = if (Image.isWideColorGamut && readerPreferences.wideColorGamut()
|
||||
window.colorMode = if (Image.isWideColorGamut && ReaderPreferences.wideColorGamut()
|
||||
.get()
|
||||
) {
|
||||
ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT
|
||||
@@ -345,14 +345,14 @@ class ReaderActivity : EhActivity() {
|
||||
mCurrentIndex = if (mPage >= 0) mPage else mGalleryProvider!!.startPage
|
||||
}
|
||||
val viewerMode =
|
||||
ReadingModeType.fromPreference(readerPreferences.defaultReadingMode().get())
|
||||
ReadingModeType.fromPreference(ReaderPreferences.defaultReadingMode().get())
|
||||
binding.actionReadingMode.setImageResource(viewerMode.iconRes)
|
||||
viewer?.destroy()
|
||||
viewer = ReadingModeType.toViewer(readerPreferences.defaultReadingMode().get(), this)
|
||||
viewer = ReadingModeType.toViewer(ReaderPreferences.defaultReadingMode().get(), this)
|
||||
binding.pageSlider.isRTL = viewer is R2LPagerViewer
|
||||
updateViewerInset(readerPreferences.fullscreen().get())
|
||||
updateViewerInset(ReaderPreferences.fullscreen().get())
|
||||
binding.viewerContainer.removeAllViews()
|
||||
setOrientation(readerPreferences.defaultOrientationType().get())
|
||||
setOrientation(ReaderPreferences.defaultOrientationType().get())
|
||||
binding.viewerContainer.addView(viewer?.getView())
|
||||
viewer?.setGalleryProvider(mGalleryProvider!!)
|
||||
moveToPageIndex(mCurrentIndex)
|
||||
@@ -587,8 +587,6 @@ class ReaderActivity : EhActivity() {
|
||||
const val KEY_GALLERY_INFO = "gallery_info"
|
||||
const val KEY_PAGE = "page"
|
||||
const val KEY_CURRENT_INDEX = "current_index"
|
||||
|
||||
val readerPreferences = EhApplication.readerPreferences
|
||||
}
|
||||
|
||||
// Tachiyomi funcs
|
||||
@@ -629,11 +627,11 @@ class ReaderActivity : EhActivity() {
|
||||
binding.readerMenuBottom.startAnimation(bottomAnimation)
|
||||
}
|
||||
|
||||
if (readerPreferences.showPageNumber().get()) {
|
||||
if (ReaderPreferences.showPageNumber().get()) {
|
||||
config?.setPageNumberVisibility(false)
|
||||
}
|
||||
} else {
|
||||
if (readerPreferences.fullscreen().get()) {
|
||||
if (ReaderPreferences.fullscreen().get()) {
|
||||
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
|
||||
windowInsetsController.systemBarsBehavior =
|
||||
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
@@ -652,7 +650,7 @@ class ReaderActivity : EhActivity() {
|
||||
binding.readerMenuBottom.startAnimation(bottomAnimation)
|
||||
}
|
||||
|
||||
if (readerPreferences.showPageNumber().get()) {
|
||||
if (ReaderPreferences.showPageNumber().get()) {
|
||||
config?.setPageNumberVisibility(true)
|
||||
}
|
||||
}
|
||||
@@ -722,11 +720,11 @@ class ReaderActivity : EhActivity() {
|
||||
setOnClickListener {
|
||||
popupMenu(
|
||||
items = ReadingModeType.values().map { it.flagValue to it.stringRes },
|
||||
selectedItemId = readerPreferences.defaultReadingMode().get(),
|
||||
selectedItemId = ReaderPreferences.defaultReadingMode().get(),
|
||||
) {
|
||||
val newReadingMode = ReadingModeType.fromPreference(itemId)
|
||||
|
||||
readerPreferences.defaultReadingMode().set(newReadingMode.flagValue)
|
||||
ReaderPreferences.defaultReadingMode().set(newReadingMode.flagValue)
|
||||
setGallery()
|
||||
|
||||
// updateCropBordersShortcut()
|
||||
@@ -765,11 +763,11 @@ class ReaderActivity : EhActivity() {
|
||||
setOnClickListener {
|
||||
popupMenu(
|
||||
items = OrientationType.values().map { it.flagValue to it.stringRes },
|
||||
selectedItemId = readerPreferences.defaultOrientationType().get(),
|
||||
selectedItemId = ReaderPreferences.defaultOrientationType().get(),
|
||||
) {
|
||||
val newOrientation = OrientationType.fromPreference(itemId)
|
||||
|
||||
readerPreferences.defaultOrientationType().set(newOrientation.flagValue)
|
||||
ReaderPreferences.defaultOrientationType().set(newOrientation.flagValue)
|
||||
setGallery()
|
||||
}
|
||||
}
|
||||
@@ -921,7 +919,7 @@ class ReaderActivity : EhActivity() {
|
||||
if (newOrientation.flag != requestedOrientation) {
|
||||
requestedOrientation = newOrientation.flag
|
||||
}
|
||||
updateOrientationShortcut(readerPreferences.defaultOrientationType().get())
|
||||
updateOrientationShortcut(ReaderPreferences.defaultOrientationType().get())
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -970,7 +968,7 @@ class ReaderActivity : EhActivity() {
|
||||
* Initializes the reader subscriptions.
|
||||
*/
|
||||
init {
|
||||
readerPreferences.readerTheme().changes()
|
||||
ReaderPreferences.readerTheme().changes()
|
||||
.onEach { theme ->
|
||||
binding.readerContainer.setBackgroundResource(
|
||||
when (theme) {
|
||||
@@ -983,51 +981,51 @@ class ReaderActivity : EhActivity() {
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.showPageNumber().changes()
|
||||
ReaderPreferences.showPageNumber().changes()
|
||||
.onEach { setPageNumberVisibility(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.showReaderSeekbar().changes()
|
||||
ReaderPreferences.showReaderSeekbar().changes()
|
||||
.onEach { setReaderSeekbarVisibility(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.trueColor().changes()
|
||||
ReaderPreferences.trueColor().changes()
|
||||
.onEach { setTrueColor(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.cutoutShort().changes()
|
||||
ReaderPreferences.cutoutShort().changes()
|
||||
.onEach { setCutoutShort(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.keepScreenOn().changes()
|
||||
ReaderPreferences.keepScreenOn().changes()
|
||||
.onEach { setKeepScreenOn(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.customBrightness().changes()
|
||||
ReaderPreferences.customBrightness().changes()
|
||||
.onEach { setCustomBrightness(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.colorFilter().changes()
|
||||
ReaderPreferences.colorFilter().changes()
|
||||
.onEach { setColorFilter(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.colorFilterMode().changes()
|
||||
.onEach { setColorFilter(readerPreferences.colorFilter().get()) }
|
||||
ReaderPreferences.colorFilterMode().changes()
|
||||
.onEach { setColorFilter(ReaderPreferences.colorFilter().get()) }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
merge(
|
||||
readerPreferences.grayscale().changes(),
|
||||
readerPreferences.invertedColors().changes(),
|
||||
ReaderPreferences.grayscale().changes(),
|
||||
ReaderPreferences.invertedColors().changes(),
|
||||
)
|
||||
.onEach {
|
||||
setLayerPaint(
|
||||
readerPreferences.grayscale().get(),
|
||||
readerPreferences.invertedColors().get(),
|
||||
ReaderPreferences.grayscale().get(),
|
||||
ReaderPreferences.invertedColors().get(),
|
||||
)
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
readerPreferences.fullscreen().changes()
|
||||
ReaderPreferences.fullscreen().changes()
|
||||
.onEach {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, !it)
|
||||
updateViewerInset(it)
|
||||
@@ -1091,7 +1089,7 @@ class ReaderActivity : EhActivity() {
|
||||
@OptIn(FlowPreview::class)
|
||||
private fun setCustomBrightness(enabled: Boolean) {
|
||||
if (enabled) {
|
||||
readerPreferences.customBrightnessValue().changes()
|
||||
ReaderPreferences.customBrightnessValue().changes()
|
||||
.sample(100)
|
||||
.onEach { setCustomBrightnessValue(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
@@ -1106,7 +1104,7 @@ class ReaderActivity : EhActivity() {
|
||||
@OptIn(FlowPreview::class)
|
||||
private fun setColorFilter(enabled: Boolean) {
|
||||
if (enabled) {
|
||||
readerPreferences.colorFilterValue().changes()
|
||||
ReaderPreferences.colorFilterValue().changes()
|
||||
.sample(100)
|
||||
.onEach { setColorFilterValue(it) }
|
||||
.launchIn(lifecycleScope)
|
||||
@@ -1152,7 +1150,7 @@ class ReaderActivity : EhActivity() {
|
||||
*/
|
||||
private fun setColorFilterValue(value: Int) {
|
||||
binding.colorOverlay.isVisible = true
|
||||
binding.colorOverlay.setFilterColor(value, readerPreferences.colorFilterMode().get())
|
||||
binding.colorOverlay.setFilterColor(value, ReaderPreferences.colorFilterMode().get())
|
||||
}
|
||||
|
||||
private fun setLayerPaint(grayscale: Boolean, invertedColors: Boolean) {
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ import kotlinx.coroutines.flow.sample
|
||||
class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
NestedScrollView(context, attrs) {
|
||||
|
||||
private val readerPreferences: ReaderPreferences = ReaderActivity.readerPreferences
|
||||
private val readerPreferences: ReaderPreferences = ReaderPreferences
|
||||
|
||||
private val binding = ReaderColorFilterSettingsBinding.inflate(LayoutInflater.from(context), this, false)
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.launchIn
|
||||
class ReaderGeneralSettings @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
NestedScrollView(context, attrs) {
|
||||
|
||||
private val readerPreferences: ReaderPreferences = ReaderActivity.readerPreferences
|
||||
private val readerPreferences: ReaderPreferences = ReaderPreferences
|
||||
|
||||
private val binding = ReaderGeneralSettingsBinding.inflate(LayoutInflater.from(context), this, false)
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package eu.kanade.tachiyomi.ui.reader.setting
|
||||
|
||||
import eu.kanade.tachiyomi.core.preference.PreferenceStore
|
||||
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
|
||||
import eu.kanade.tachiyomi.core.preference.getEnum
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
|
||||
class ReaderPreferences(private val preferenceStore: PreferenceStore) {
|
||||
object ReaderPreferences {
|
||||
private val preferenceStore = AndroidPreferenceStore
|
||||
|
||||
// region General
|
||||
|
||||
|
||||
+5
-5
@@ -25,7 +25,7 @@ class ReaderReadingModeSettings @JvmOverloads constructor(
|
||||
) :
|
||||
NestedScrollView(context, attrs) {
|
||||
|
||||
private val readerPreferences: ReaderPreferences = ReaderActivity.readerPreferences
|
||||
private val readerPreferences: ReaderPreferences = ReaderPreferences
|
||||
|
||||
private val binding =
|
||||
ReaderReadingModeSettingsBinding.inflate(LayoutInflater.from(context), this, false)
|
||||
@@ -47,10 +47,10 @@ class ReaderReadingModeSettings @JvmOverloads constructor(
|
||||
private fun initGeneralPreferences() {
|
||||
binding.viewer.onItemSelectedListener = { position ->
|
||||
val readingModeType = ReadingModeType.fromSpinner(position)
|
||||
ReaderActivity.readerPreferences.defaultReadingMode().set(readingModeType.flagValue)
|
||||
ReaderPreferences.defaultReadingMode().set(readingModeType.flagValue)
|
||||
(context as ReaderActivity).setGallery()
|
||||
|
||||
val mangaViewer = ReaderActivity.readerPreferences.defaultReadingMode().get()
|
||||
val mangaViewer = ReaderPreferences.defaultReadingMode().get()
|
||||
if (mangaViewer == ReadingModeType.WEBTOON.flagValue || mangaViewer == ReadingModeType.CONTINUOUS_VERTICAL.flagValue) {
|
||||
initWebtoonPreferences()
|
||||
} else {
|
||||
@@ -58,7 +58,7 @@ class ReaderReadingModeSettings @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
binding.viewer.setSelection(
|
||||
ReaderActivity.readerPreferences.defaultReadingMode().get()
|
||||
ReaderPreferences.defaultReadingMode().get()
|
||||
.let { ReadingModeType.fromPreference(it).prefValue },
|
||||
)
|
||||
|
||||
@@ -68,7 +68,7 @@ class ReaderReadingModeSettings @JvmOverloads constructor(
|
||||
(context as ReaderActivity).setGallery()
|
||||
}
|
||||
binding.rotationMode.setSelection(
|
||||
ReaderActivity.readerPreferences.defaultOrientationType().get()
|
||||
ReaderPreferences.defaultOrientationType().get()
|
||||
.let { OrientationType.fromPreference(it).prefValue },
|
||||
)
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.Companion.EASE_OUT_QUAD
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.Companion.SCALE_TYPE_CENTER_INSIDE
|
||||
import com.github.chrisbanes.photoview.PhotoView
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView
|
||||
import eu.kanade.tachiyomi.util.system.animatorDurationScale
|
||||
import eu.kanade.tachiyomi.util.view.isVisibleOnScreen
|
||||
@@ -278,7 +278,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
|
||||
setOnDoubleTapListener(
|
||||
object : GestureDetector.SimpleOnGestureListener() {
|
||||
override fun onDoubleTap(e: MotionEvent): Boolean {
|
||||
if (ReaderActivity.readerPreferences.doubleTapToZoom().get()) {
|
||||
if (ReaderPreferences.doubleTapToZoom().get()) {
|
||||
if (scale > 1F) {
|
||||
setScale(1F, e.x, e.y, true)
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package eu.kanade.tachiyomi.ui.reader.viewer.pager
|
||||
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
|
||||
@@ -21,7 +20,7 @@ import kotlinx.coroutines.flow.onEach
|
||||
class PagerConfig(
|
||||
private val viewer: PagerViewer,
|
||||
scope: CoroutineScope,
|
||||
readerPreferences: ReaderPreferences = ReaderActivity.readerPreferences,
|
||||
readerPreferences: ReaderPreferences = ReaderPreferences,
|
||||
) : ViewerConfig(readerPreferences, scope) {
|
||||
|
||||
var theme = readerPreferences.readerTheme().get()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package eu.kanade.tachiyomi.ui.reader.viewer.webtoon
|
||||
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
||||
@@ -20,7 +19,7 @@ import kotlinx.coroutines.flow.onEach
|
||||
*/
|
||||
class WebtoonConfig(
|
||||
scope: CoroutineScope,
|
||||
readerPreferences: ReaderPreferences = ReaderActivity.readerPreferences,
|
||||
readerPreferences: ReaderPreferences = ReaderPreferences,
|
||||
) : ViewerConfig(readerPreferences, scope) {
|
||||
|
||||
var themeChangedListener: (() -> Unit)? = null
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import android.view.animation.DecelerateInterpolator
|
||||
import androidx.core.animation.doOnEnd
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.GestureDetectorWithLongTap
|
||||
import kotlin.math.abs
|
||||
|
||||
@@ -209,7 +209,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
override fun onDoubleTap(ev: MotionEvent): Boolean {
|
||||
if (ReaderActivity.readerPreferences.doubleTapToZoom().get()) detector.isDoubleTapping = true
|
||||
if (ReaderPreferences.doubleTapToZoom().get()) detector.isDoubleTapping = true
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user