mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-25 02:02:04 +01:00
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:
parent
4ce2172a0c
commit
52892da065
@ -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() }
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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>
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user