Singletonize ReaderPreferences

This commit is contained in:
tarsin committed 2023-06-10 13:56:18 +08:00
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) {
@@ -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
@@ -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
@@ -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
}