From d5f26643bff3983584247ca4c7817f690af45a8a Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 28 Dec 2022 11:34:17 +0800 Subject: [PATCH] Support wide-color-gamut as config --- app/src/main/AndroidManifest.xml | 1 - .../java/com/hippo/ehviewer/EhApplication.kt | 5 ++++ app/src/main/java/com/hippo/image/Image.kt | 6 ++--- .../tachiyomi/ui/reader/ReaderActivity.kt | 16 ++++++++----- .../tachiyomi/ui/reader/loader/PageLoader.kt | 4 ++++ .../setting/ReaderColorFilterSettings.kt | 23 ++++++++++++++++++- .../ui/reader/setting/ReaderPreferences.kt | 2 ++ .../layout/reader_color_filter_settings.xml | 22 +++++++++++++----- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 10 files changed, 63 insertions(+), 18 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9d95847ec..87816ed1a 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -101,7 +101,6 @@ diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index e0be13613..1bc25a443 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -56,6 +56,8 @@ import com.hippo.util.ExceptionUtils import com.hippo.util.ReadableTime import com.hippo.yorozuya.FileUtils import com.hippo.yorozuya.IntIdGenerator +import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore +import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -344,5 +346,8 @@ class EhApplication : SceneApplication(), DefaultLifecycleObserver, ImageLoaderF @JvmStatic val favouriteStatusRouter by lazy { FavouriteStatusRouter() } + + @JvmStatic + val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(application)) } } } diff --git a/app/src/main/java/com/hippo/image/Image.kt b/app/src/main/java/com/hippo/image/Image.kt index 7082d0ca1..e787d022f 100644 --- a/app/src/main/java/com/hippo/image/Image.kt +++ b/app/src/main/java/com/hippo/image/Image.kt @@ -69,10 +69,8 @@ class Image private constructor(source: Source, private val byteBuffer: ByteBuff companion object { val screenWidth = EhApplication.application.resources.displayMetrics.widthPixels val screenHeight = EhApplication.application.resources.displayMetrics.heightPixels - private val isWideColorGamut = - EhApplication.application.resources.configuration.isScreenWideColorGamut - val colorSpace = - ColorSpace.get(if (isWideColorGamut) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB) + val isWideColorGamut = EhApplication.application.resources.configuration.isScreenWideColorGamut + var colorSpace = ColorSpace.get(if (isWideColorGamut && EhApplication.readerPreferences.wideColorGamut().get()) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB) @Throws(DecodeException::class) @JvmStatic diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index dfa796a0c..4efd86e5d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -23,6 +23,7 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.ContentValues import android.content.Intent +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.graphics.Color import android.graphics.ColorMatrix @@ -72,16 +73,15 @@ import com.hippo.ehviewer.gallery.DirPageLoader import com.hippo.ehviewer.gallery.EhPageLoader import com.hippo.ehviewer.gallery.PageLoader2 import com.hippo.ehviewer.ui.EhActivity +import com.hippo.image.Image import com.hippo.unifile.UniFile import com.hippo.util.ExceptionUtils import com.hippo.yorozuya.FileUtils import com.hippo.yorozuya.IOUtils import dev.chrisbanes.insetter.applyInsetter -import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore import eu.kanade.tachiyomi.ui.reader.loader.PageLoader 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 @@ -260,6 +260,7 @@ class ReaderActivity : EhActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + window.colorMode = if (Image.isWideColorGamut && readerPreferences.wideColorGamut().get()) ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT else ActivityInfo.COLOR_MODE_DEFAULT if (savedInstanceState == null) { onInit() } else { @@ -599,7 +600,7 @@ class ReaderActivity : EhActivity() { const val KEY_PAGE = "page" const val KEY_CURRENT_INDEX = "current_index" - val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(EhApplication.application)) } + val readerPreferences = EhApplication.readerPreferences } /* Tachiyomi funcs */ @@ -646,7 +647,8 @@ class ReaderActivity : EhActivity() { } else { if (readerPreferences.fullscreen().get()) { windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) - windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + windowInsetsController.systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } if (animate) { @@ -702,7 +704,8 @@ class ReaderActivity : EhActivity() { initBottomShortcuts() val toolbarBackground = MaterialShapeDrawable.createWithElevationOverlay(this).apply { - elevation = resources.getDimension(com.google.android.material.R.dimen.m3_sys_elevation_level2) + elevation = + resources.getDimension(com.google.android.material.R.dimen.m3_sys_elevation_level2) alpha = if (isNightMode()) 230 else 242 // 90% dark 95% light } binding.toolbarBottom.background = toolbarBackground.copy(this@ReaderActivity) @@ -748,7 +751,8 @@ class ReaderActivity : EhActivity() { setTooltip(R.string.pref_crop_borders) setOnClickListener { - val isPagerType = ReadingModeType.isPagerType(readerPreferences.defaultReadingMode().get()) + val isPagerType = + ReadingModeType.isPagerType(readerPreferences.defaultReadingMode().get()) if (isPagerType) { readerPreferences.cropBorders().toggle() } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt index ab22c931d..47914da14 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt @@ -28,6 +28,10 @@ abstract class PageLoader { mImageCache.evictAll() } + fun restart() { + mImageCache.evictAll() + } + abstract fun size(): Int fun request(page: ReaderPage) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt index 3e42c6dab..3b082fb52 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt @@ -1,6 +1,8 @@ package eu.kanade.tachiyomi.ui.reader.setting import android.content.Context +import android.content.pm.ActivityInfo +import android.graphics.ColorSpace import android.util.AttributeSet import android.view.LayoutInflater import androidx.annotation.ColorInt @@ -12,7 +14,9 @@ import androidx.core.widget.NestedScrollView import androidx.lifecycle.lifecycleScope import eu.kanade.tachiyomi.core.preference.getAndSet import com.hippo.ehviewer.databinding.ReaderColorFilterSettingsBinding +import com.hippo.image.Image import eu.kanade.tachiyomi.ui.reader.ReaderActivity +import eu.kanade.tachiyomi.util.preference.asHotFlow import eu.kanade.tachiyomi.util.preference.bindToPreference import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -31,9 +35,26 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr init { addView(binding.root) + binding.wideColorGamut.isEnabled = Image.isWideColorGamut + if (!Image.isWideColorGamut) + readerPreferences.wideColorGamut().set(false) + binding.wideColorGamut.bindToPreference(readerPreferences.wideColorGamut()) + + readerPreferences.wideColorGamut().asHotFlow { + Image.colorSpace = ColorSpace.get(if (Image.isWideColorGamut && it) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB) + val colorMode = if (Image.isWideColorGamut && it) ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT else ActivityInfo.COLOR_MODE_DEFAULT + (context as ReaderActivity).run { + if (window.colorMode != colorMode) { + window.colorMode = colorMode + mGalleryProvider?.restart() + setGallery() + } + } + }.launchIn((context as ReaderActivity).lifecycleScope) + readerPreferences.colorFilter().changes() .onEach { setColorFilter(it) } - .launchIn((context as ReaderActivity).lifecycleScope) + .launchIn(context.lifecycleScope) readerPreferences.colorFilterMode().changes() .onEach { setColorFilter(readerPreferences.colorFilter().get()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt index 03f695bdf..f4b5c1be1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt @@ -106,5 +106,7 @@ class ReaderPreferences(private val preferenceStore: PreferenceStore) { fun showNavigationOverlayOnStart() = preferenceStore.getBoolean("reader_navigation_overlay_on_start", false) + fun wideColorGamut() = preferenceStore.getBoolean("wide_color_gamut", false) + // endregion } diff --git a/app/src/main/res/layout/reader_color_filter_settings.xml b/app/src/main/res/layout/reader_color_filter_settings.xml index f851e8cad..4d2195595 100644 --- a/app/src/main/res/layout/reader_color_filter_settings.xml +++ b/app/src/main/res/layout/reader_color_filter_settings.xml @@ -9,6 +9,16 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + app:layout_constraintTop_toBottomOf="@id/wide_color_gamut" /> @@ -41,9 +51,9 @@ android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:padding="8dp" + android:stepSize="1.0" android:valueFrom="-75.0" android:valueTo="100.0" - android:stepSize="1.0" app:layout_constraintEnd_toStartOf="@id/txt_brightness_seekbar_value" app:layout_constraintStart_toEndOf="@id/txt_brightness_seekbar_icon" app:layout_constraintTop_toBottomOf="@id/custom_brightness" /> @@ -91,9 +101,9 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" + android:padding="8dp" android:stepSize="1.0" android:valueTo="255.0" - android:padding="8dp" app:layout_constraintEnd_toStartOf="@id/txt_color_filter_red_value" app:layout_constraintStart_toEndOf="@id/color_filter_symbols_barrier" app:layout_constraintTop_toBottomOf="@id/switch_color_filter" /> @@ -129,9 +139,9 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" + android:padding="8dp" android:stepSize="1.0" android:valueTo="255.0" - android:padding="8dp" app:layout_constraintEnd_toStartOf="@id/txt_color_filter_green_value" app:layout_constraintStart_toEndOf="@id/color_filter_symbols_barrier" app:layout_constraintTop_toBottomOf="@id/slider_color_filter_red" /> @@ -167,9 +177,9 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" + android:padding="8dp" android:stepSize="1.0" android:valueTo="255.0" - android:padding="8dp" app:layout_constraintEnd_toStartOf="@id/txt_color_filter_blue_value" app:layout_constraintStart_toEndOf="@id/color_filter_symbols_barrier" app:layout_constraintTop_toBottomOf="@id/slider_color_filter_green" /> @@ -205,9 +215,9 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" + android:padding="8dp" android:stepSize="1.0" android:valueTo="255.0" - android:padding="8dp" app:layout_constraintEnd_toStartOf="@id/txt_color_filter_alpha_value" app:layout_constraintStart_toEndOf="@id/color_filter_symbols_barrier" app:layout_constraintTop_toBottomOf="@id/slider_color_filter_blue" /> diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b388d8105..a677dc2a2 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -672,5 +672,6 @@ 图片放大时先平移再翻页 反向竖屏 关闭 + 使用Display P3色彩空间 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ba7a3a6e..268716f1a 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -735,5 +735,6 @@ Save Save to… For this series + Use Display P3 color space