Use correct color for reader loading indicator (#5685)
* Revert "Revert "Use correct color for reader loading indicator (#5645)" (fixes #5669)" This reverts commit a4eba50c * Fix crash on older APIs (cherry picked from commit 5e77ae208da1c21eb58f1eb092ac1e9f3151c14a) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
This commit is contained in:
parent
564c8618cb
commit
374ecde463
@ -17,6 +17,7 @@ import android.graphics.Paint
|
|||||||
import android.graphics.PorterDuff
|
import android.graphics.PorterDuff
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.Gravity
|
||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
@ -24,6 +25,7 @@ import android.view.View.LAYER_TYPE_HARDWARE
|
|||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
import android.view.animation.AnimationUtils
|
import android.view.animation.AnimationUtils
|
||||||
|
import android.widget.FrameLayout
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@ -34,6 +36,7 @@ import androidx.core.view.WindowInsetsCompat
|
|||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
@ -67,6 +70,7 @@ 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
|
||||||
|
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
|
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
|
||||||
@ -75,6 +79,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
|||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
||||||
import eu.kanade.tachiyomi.util.system.GLUtil
|
import eu.kanade.tachiyomi.util.system.GLUtil
|
||||||
|
import eu.kanade.tachiyomi.util.system.createReaderThemeContext
|
||||||
import eu.kanade.tachiyomi.util.system.getThemeColor
|
import eu.kanade.tachiyomi.util.system.getThemeColor
|
||||||
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
import eu.kanade.tachiyomi.util.system.hasDisplayCutout
|
||||||
import eu.kanade.tachiyomi.util.system.isLTR
|
import eu.kanade.tachiyomi.util.system.isLTR
|
||||||
@ -180,6 +185,8 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
|
|
||||||
private val windowInsetsController by lazy { WindowInsetsControllerCompat(window, binding.root) }
|
private val windowInsetsController by lazy { WindowInsetsControllerCompat(window, binding.root) }
|
||||||
|
|
||||||
|
private var loadingIndicator: ReaderProgressIndicator? = null
|
||||||
|
|
||||||
var isScrollingThroughPages = false
|
var isScrollingThroughPages = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -1110,8 +1117,13 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
binding.aboveChapter.setTooltip(R.string.action_previous_chapter)
|
binding.aboveChapter.setTooltip(R.string.action_previous_chapter)
|
||||||
binding.belowChapter.setTooltip(R.string.action_next_chapter)
|
binding.belowChapter.setTooltip(R.string.action_next_chapter)
|
||||||
|
|
||||||
binding.pleaseWait.isVisible = true
|
val loadingIndicatorContext = createReaderThemeContext(preferences.readerTheme().get())
|
||||||
binding.pleaseWait.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in_long))
|
loadingIndicator = ReaderProgressIndicator(loadingIndicatorContext).apply {
|
||||||
|
updateLayoutParams<FrameLayout.LayoutParams> {
|
||||||
|
gravity = Gravity.CENTER
|
||||||
|
}
|
||||||
|
}
|
||||||
|
binding.readerContainer.addView(loadingIndicator)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showReadingModeToast(mode: Int) {
|
private fun showReadingModeToast(mode: Int) {
|
||||||
@ -1130,7 +1142,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
|||||||
* hides or disables the reader prev/next buttons if there's a prev or next chapter
|
* hides or disables the reader prev/next buttons if there's a prev or next chapter
|
||||||
*/
|
*/
|
||||||
fun setChapters(viewerChapters: ViewerChapters) {
|
fun setChapters(viewerChapters: ViewerChapters) {
|
||||||
binding.pleaseWait.isVisible = false
|
binding.readerContainer.removeView(loadingIndicator)
|
||||||
// SY -->
|
// SY -->
|
||||||
if (indexChapterToShift != null && indexPageToShift != null) {
|
if (indexChapterToShift != null && indexPageToShift != null) {
|
||||||
viewerChapters.currChapter.pages?.find { it.index == indexPageToShift && it.chapter.chapter.id == indexChapterToShift }?.let {
|
viewerChapters.currChapter.pages?.find { it.index == indexPageToShift && it.chapter.chapter.id == indexChapterToShift }?.let {
|
||||||
|
@ -25,6 +25,9 @@ class PagerConfig(
|
|||||||
preferences: PreferencesHelper = Injekt.get()
|
preferences: PreferencesHelper = Injekt.get()
|
||||||
) : ViewerConfig(preferences, scope) {
|
) : ViewerConfig(preferences, scope) {
|
||||||
|
|
||||||
|
var theme = preferences.readerTheme().get()
|
||||||
|
private set
|
||||||
|
|
||||||
var automaticBackground = false
|
var automaticBackground = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -64,7 +67,13 @@ class PagerConfig(
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
preferences.readerTheme()
|
preferences.readerTheme()
|
||||||
.register({ automaticBackground = it == 3 }, { imagePropertyChangedListener?.invoke() })
|
.register(
|
||||||
|
{
|
||||||
|
theme = it
|
||||||
|
automaticBackground = it == 3
|
||||||
|
},
|
||||||
|
{ imagePropertyChangedListener?.invoke() }
|
||||||
|
)
|
||||||
|
|
||||||
preferences.imageScaleType()
|
preferences.imageScaleType()
|
||||||
.register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })
|
.register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })
|
||||||
|
@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig.ZoomType
|
|||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||||
import eu.kanade.tachiyomi.util.system.ImageUtil
|
import eu.kanade.tachiyomi.util.system.ImageUtil
|
||||||
|
import eu.kanade.tachiyomi.util.system.createReaderThemeContext
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
|
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@ -66,11 +67,7 @@ class PagerPageHolder(
|
|||||||
/**
|
/**
|
||||||
* Loading progress bar to indicate the current progress.
|
* Loading progress bar to indicate the current progress.
|
||||||
*/
|
*/
|
||||||
private val progressIndicator = ReaderProgressIndicator(context).apply {
|
private val progressIndicator: ReaderProgressIndicator
|
||||||
updateLayoutParams<LayoutParams> {
|
|
||||||
gravity = Gravity.CENTER
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Image view that supports subsampling on zoom.
|
* Image view that supports subsampling on zoom.
|
||||||
@ -145,6 +142,12 @@ class PagerPageHolder(
|
|||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
val indicatorContext = context.createReaderThemeContext(viewer.config.theme)
|
||||||
|
progressIndicator = ReaderProgressIndicator(indicatorContext).apply {
|
||||||
|
updateLayoutParams<LayoutParams> {
|
||||||
|
gravity = Gravity.CENTER
|
||||||
|
}
|
||||||
|
}
|
||||||
addView(progressIndicator)
|
addView(progressIndicator)
|
||||||
scope = CoroutineScope(Job() + Dispatchers.Default)
|
scope = CoroutineScope(Job() + Dispatchers.Default)
|
||||||
observeStatus()
|
observeStatus()
|
||||||
|
@ -28,6 +28,9 @@ class WebtoonConfig(
|
|||||||
var sidePadding = 0
|
var sidePadding = 0
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
var theme = preferences.readerTheme().get()
|
||||||
|
private set
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
var usePageTransitions = false
|
var usePageTransitions = false
|
||||||
|
|
||||||
@ -63,6 +66,9 @@ class WebtoonConfig(
|
|||||||
preferences.dualPageInvertWebtoon()
|
preferences.dualPageInvertWebtoon()
|
||||||
.register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() })
|
.register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() })
|
||||||
|
|
||||||
|
preferences.readerTheme()
|
||||||
|
.register({ theme = it }, { imagePropertyChangedListener?.invoke() })
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
preferences.webtoonEnableZoomOut()
|
preferences.webtoonEnableZoomOut()
|
||||||
.register({ enableZoomOut = it }, { zoomPropertyChangedListener?.invoke(it) })
|
.register({ enableZoomOut = it }, { zoomPropertyChangedListener?.invoke(it) })
|
||||||
|
@ -27,6 +27,7 @@ import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
|||||||
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator
|
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator
|
||||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.system.ImageUtil
|
import eu.kanade.tachiyomi.util.system.ImageUtil
|
||||||
|
import eu.kanade.tachiyomi.util.system.createReaderThemeContext
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
@ -345,7 +346,8 @@ class WebtoonPageHolder(
|
|||||||
progressContainer = FrameLayout(context)
|
progressContainer = FrameLayout(context)
|
||||||
frame.addView(progressContainer, MATCH_PARENT, parentHeight)
|
frame.addView(progressContainer, MATCH_PARENT, parentHeight)
|
||||||
|
|
||||||
val progress = ReaderProgressIndicator(context).apply {
|
val indicatorContext = context.createReaderThemeContext(viewer.config.theme)
|
||||||
|
val progress = ReaderProgressIndicator(indicatorContext).apply {
|
||||||
updateLayoutParams<FrameLayout.LayoutParams> {
|
updateLayoutParams<FrameLayout.LayoutParams> {
|
||||||
gravity = Gravity.CENTER_HORIZONTAL
|
gravity = Gravity.CENTER_HORIZONTAL
|
||||||
updateMargins(top = parentHeight / 4)
|
updateMargins(top = parentHeight / 4)
|
||||||
|
@ -26,11 +26,13 @@ import android.widget.Toast
|
|||||||
import androidx.annotation.AttrRes
|
import androidx.annotation.AttrRes
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
|
import androidx.appcompat.view.ContextThemeWrapper
|
||||||
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
||||||
import androidx.browser.customtabs.CustomTabsIntent
|
import androidx.browser.customtabs.CustomTabsIntent
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.core.graphics.alpha
|
import androidx.core.graphics.alpha
|
||||||
import androidx.core.graphics.blue
|
import androidx.core.graphics.blue
|
||||||
import androidx.core.graphics.green
|
import androidx.core.graphics.green
|
||||||
@ -298,3 +300,31 @@ fun Context.isTablet(): Boolean {
|
|||||||
fun Context.isNightMode(): Boolean {
|
fun Context.isNightMode(): Boolean {
|
||||||
return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
|
return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates night mode Context depending on reader theme/background
|
||||||
|
*
|
||||||
|
* Context wrapping method obtained from AppCompatDelegateImpl
|
||||||
|
* https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java;l=348;drc=e28752c96fc3fb4d3354781469a1af3dbded4898
|
||||||
|
*/
|
||||||
|
fun Context.createReaderThemeContext(readerThemeSelected: Int): Context {
|
||||||
|
val isDarkBackground = when (readerThemeSelected) {
|
||||||
|
1, 2 -> true // Black, Gray
|
||||||
|
3 -> isNightMode() // Automatic bg uses activity background by default
|
||||||
|
else -> false // White
|
||||||
|
}
|
||||||
|
val expected = if (isDarkBackground) Configuration.UI_MODE_NIGHT_YES else Configuration.UI_MODE_NIGHT_NO
|
||||||
|
if (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK != expected) {
|
||||||
|
val overrideConf = Configuration()
|
||||||
|
overrideConf.setTo(resources.configuration)
|
||||||
|
overrideConf.uiMode = (overrideConf.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()) or expected
|
||||||
|
|
||||||
|
val wrappedContext = ContextThemeWrapper(this, R.style.Theme_AppCompat_Empty)
|
||||||
|
wrappedContext.applyOverrideConfiguration(overrideConf)
|
||||||
|
if (theme != null) {
|
||||||
|
ResourcesCompat.ThemeCompat.rebase(wrappedContext.theme)
|
||||||
|
}
|
||||||
|
return wrappedContext
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
@ -16,15 +16,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
|
||||||
android:id="@+id/please_wait"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:indeterminate="true"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<eu.kanade.tachiyomi.ui.reader.PageIndicatorTextView
|
<eu.kanade.tachiyomi.ui.reader.PageIndicatorTextView
|
||||||
android:id="@+id/page_number"
|
android:id="@+id/page_number"
|
||||||
style="@style/TextAppearance.Regular.Caption"
|
style="@style/TextAppearance.Regular.Caption"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user