Theme fixes for reader

Smart by theme now changes its background color on day/night switch, white theme is now actually #FFFFFF on background
Continous Vertical always uses black between pages, even if using light theme
Fix animated gif backgrounds
This commit is contained in:
Jay 2020-04-26 00:44:31 -04:00
parent 4ce2172a0c
commit 52892da065
9 changed files with 43 additions and 24 deletions

View File

@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerPageHolder
import eu.kanade.tachiyomi.util.lang.plusAssign import eu.kanade.tachiyomi.util.lang.plusAssign
import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.ImageUtil
import rx.Completable import rx.Completable
@ -38,14 +39,8 @@ class HttpPageLoader(
*/ */
private val queue = PriorityBlockingQueue<PriorityPage>() private val queue = PriorityBlockingQueue<PriorityPage>()
/**
* Current active subscriptions.
*/
private val subscriptions = CompositeSubscription() private val subscriptions = CompositeSubscription()
/**
* Preferences helper.
*/
private val preferences by injectLazy<PreferencesHelper>() private val preferences by injectLazy<PreferencesHelper>()
private val preloadSize = 4 private val preloadSize = 4
@ -233,7 +228,7 @@ class HttpPageLoader(
page.bg = ImageUtil.autoSetBackground( page.bg = ImageUtil.autoSetBackground(
image, readerTheme == 2, preferences.context image, readerTheme == 2, preferences.context
) )
page.bgAlwaysWhite = readerTheme == 2 page.bgType = PagerPageHolder.getBGType(readerTheme, preferences.context)
stream.close() stream.close()
} }
page.stream = { chapterCache.getImageFile(imageUrl).inputStream() } page.stream = { chapterCache.getImageFile(imageUrl).inputStream() }

View File

@ -10,7 +10,7 @@ class ReaderPage(
imageUrl: String? = null, imageUrl: String? = null,
var stream: (() -> InputStream)? = null, var stream: (() -> InputStream)? = null,
var bg: Drawable? = null, var bg: Drawable? = null,
var bgAlwaysWhite: Boolean? = null var bgType: Int? = null
) : Page(index, url, imageUrl, null) { ) : Page(index, url, imageUrl, null) {
lateinit var chapter: ReaderChapter lateinit var chapter: ReaderChapter

View File

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.ui.reader.viewer.pager package eu.kanade.tachiyomi.ui.reader.viewer.pager
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.PointF import android.graphics.PointF
@ -39,6 +40,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig.ZoomType
import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.ImageUtil
import eu.kanade.tachiyomi.util.system.ThemeUtil import eu.kanade.tachiyomi.util.system.ThemeUtil
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.isInNightMode
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.visible import eu.kanade.tachiyomi.util.view.visible
@ -255,8 +257,10 @@ class PagerPageHolder(
if (!isAnimated) { if (!isAnimated) {
if (viewer.config.readerTheme >= 2) { if (viewer.config.readerTheme >= 2) {
val imageView = initSubsamplingImageView() val imageView = initSubsamplingImageView()
if (page.bg != null && if (page.bg != null && page.bgType == getBGType(
page.bgAlwaysWhite == (viewer.config.readerTheme == 2)) { viewer.config.readerTheme,
context
)) {
imageView.setImage(ImageSource.inputStream(openStream!!)) imageView.setImage(ImageSource.inputStream(openStream!!))
imageView.background = page.bg imageView.background = page.bg
} }
@ -270,7 +274,7 @@ class PagerPageHolder(
launchUI { launchUI {
imageView.background = setBG(bytesArray) imageView.background = setBG(bytesArray)
page.bg = imageView.background page.bg = imageView.background
page.bgAlwaysWhite = viewer.config.readerTheme == 2 page.bgType = getBGType(viewer.config.readerTheme, context)
} }
} }
} else { } else {
@ -281,8 +285,12 @@ class PagerPageHolder(
} else { } else {
val imageView = initImageView() val imageView = initImageView()
imageView.setImage(openStream!!) imageView.setImage(openStream!!)
if (viewer.config.readerTheme >= 2 && page.bg != null) if (viewer.config.readerTheme >= 2 && page.bg != null) {
imageView.background = page.bg imageView.background = page.bg
} else if (viewer.config.readerTheme < 2) {
imageView.background =
ColorDrawable(ThemeUtil.readerBackgroundColor(viewer.config.readerTheme))
}
} }
} }
// Keep the Rx stream alive to close the input stream only when unsubscribed // Keep the Rx stream alive to close the input stream only when unsubscribed
@ -512,4 +520,12 @@ class PagerPageHolder(
}) })
.into(this) .into(this)
} }
companion object {
fun getBGType(readerTheme: Int, context: Context): Int {
return if (readerTheme == 3) {
if (context.isInNightMode()) 2 else 1
} else 0
}
}
} }

View File

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.res.Resources import android.content.res.Resources
import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.view.Gravity import android.view.Gravity
@ -33,6 +34,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressBar
import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.ImageUtil
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.updatePaddingRelative
import eu.kanade.tachiyomi.util.view.visible import eu.kanade.tachiyomi.util.view.visible
import rx.Observable import rx.Observable
import rx.Subscription import rx.Subscription
@ -113,6 +115,7 @@ class WebtoonPageHolder(
init { init {
frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
frame.setBackgroundColor(Color.BLACK)
} }
/** /**
@ -126,14 +129,13 @@ class WebtoonPageHolder(
private fun refreshLayoutParams() { private fun refreshLayoutParams() {
frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply { frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply {
if (!viewer.isContinuous) {
bottomMargin = 15.dpToPx
}
val margin = Resources.getSystem().displayMetrics.widthPixels * (viewer.config.sidePadding / 100f) val margin = Resources.getSystem().displayMetrics.widthPixels * (viewer.config.sidePadding / 100f)
marginEnd = margin.toInt() marginEnd = margin.toInt()
marginStart = margin.toInt() marginStart = margin.toInt()
} }
if (!viewer.isContinuous) {
frame.updatePaddingRelative(bottom = 15.dpToPx)
}
} }
/** /**

View File

@ -8,6 +8,7 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.Configuration
import android.content.res.Resources import android.content.res.Resources
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.Uri import android.net.Uri
@ -202,3 +203,8 @@ fun Context.openInBrowser(url: String) {
toast(e.message) toast(e.message)
} }
} }
fun Context.isInNightMode(): Boolean {
val currentNightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
return currentNightMode == Configuration.UI_MODE_NIGHT_YES
}

View File

@ -6,6 +6,7 @@ import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import eu.kanade.tachiyomi.R
import java.io.InputStream import java.io.InputStream
import java.net.URLConnection import java.net.URLConnection
import kotlin.math.abs import kotlin.math.abs
@ -56,9 +57,9 @@ object ImageUtil {
return null return null
} }
fun autoSetBackground(image: Bitmap?, useWhiteAlways: Boolean, context: Context): Drawable { fun autoSetBackground(image: Bitmap?, alwaysUseWhite: Boolean, context: Context): Drawable {
val backgroundColor = if (useWhiteAlways) Color.WHITE else val backgroundColor = if (alwaysUseWhite) Color.WHITE else
context.getResourceColor(android.R.attr.colorBackground) context.getResourceColor(R.attr.readerBackground)
if (image == null) return ColorDrawable(backgroundColor) if (image == null) return ColorDrawable(backgroundColor)
if (image.width < 50 || image.height < 50) if (image.width < 50 || image.height < 50)
return ColorDrawable(backgroundColor) return ColorDrawable(backgroundColor)

View File

@ -15,13 +15,10 @@
<item name="colorPrimaryVariant">@color/colorAmoledPrimary</item> <item name="colorPrimaryVariant">@color/colorAmoledPrimary</item>
<item name="colorOnPrimary">@color/colorAmoledPrimary</item> <item name="colorOnPrimary">@color/colorAmoledPrimary</item>
<item name="colorPrimaryDark">@color/colorAmoledPrimary</item> <item name="colorPrimaryDark">@color/colorAmoledPrimary</item>
<item name="android:colorBackground">@color/md_black_1000</item> <item name="android:colorBackground">@color/colorAmoledPrimary</item>
<item name="readerBackground">@color/colorAmoledPrimary</item>
<!-- Material Dialog colors --> <!-- Material Dialog colors -->
<item name="md_color_title">@color/textColorPrimary</item>
<item name="md_color_content">@color/text_color_secondary</item>
<item name="md_color_button_text">@color/colorAccent</item>
<item name="md_background_color">@color/colorAmoledPrimary</item> <item name="md_background_color">@color/colorAmoledPrimary</item>
<item name="md_corner_radius">16dp</item>
</style> </style>
</resources> </resources>

View File

@ -12,6 +12,7 @@
</declare-styleable> </declare-styleable>
<attr name="actionBarTintColor" format="color"/> <attr name="actionBarTintColor" format="color"/>
<attr name="readerBackground" format="color"/>
<attr name="tabBarIconColor" format="reference|integer"/> <attr name="tabBarIconColor" format="reference|integer"/>
<attr name="tabBarIconInactive" format="reference|integer"/> <attr name="tabBarIconInactive" format="reference|integer"/>
</resources> </resources>

View File

@ -22,6 +22,7 @@
<item name="android:textColorSecondaryInverse">@color/text_color_inverse_secondary</item> <item name="android:textColorSecondaryInverse">@color/text_color_inverse_secondary</item>
<item name="android:textColorHintInverse">@color/text_color_inverse_hint</item> <item name="android:textColorHintInverse">@color/text_color_inverse_hint</item>
<item name="android:colorBackground">@color/background</item> <item name="android:colorBackground">@color/background</item>
<item name="readerBackground">@color/colorPrimary</item>
<item name="android:listSelector">?colorAccent</item> <item name="android:listSelector">?colorAccent</item>
<item name="android:divider">@color/divider</item> <item name="android:divider">@color/divider</item>
<item name="android:listDivider">@drawable/line_divider</item> <item name="android:listDivider">@drawable/line_divider</item>