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.ui.reader.model.ReaderChapter
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.system.ImageUtil
import rx.Completable
@ -38,14 +39,8 @@ class HttpPageLoader(
*/
private val queue = PriorityBlockingQueue<PriorityPage>()
/**
* Current active subscriptions.
*/
private val subscriptions = CompositeSubscription()
/**
* Preferences helper.
*/
private val preferences by injectLazy<PreferencesHelper>()
private val preloadSize = 4
@ -233,7 +228,7 @@ class HttpPageLoader(
page.bg = ImageUtil.autoSetBackground(
image, readerTheme == 2, preferences.context
)
page.bgAlwaysWhite = readerTheme == 2
page.bgType = PagerPageHolder.getBGType(readerTheme, preferences.context)
stream.close()
}
page.stream = { chapterCache.getImageFile(imageUrl).inputStream() }

View File

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

View File

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.ui.reader.viewer.pager
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
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.ThemeUtil
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.view.gone
import eu.kanade.tachiyomi.util.view.visible
@ -255,8 +257,10 @@ class PagerPageHolder(
if (!isAnimated) {
if (viewer.config.readerTheme >= 2) {
val imageView = initSubsamplingImageView()
if (page.bg != null &&
page.bgAlwaysWhite == (viewer.config.readerTheme == 2)) {
if (page.bg != null && page.bgType == getBGType(
viewer.config.readerTheme,
context
)) {
imageView.setImage(ImageSource.inputStream(openStream!!))
imageView.background = page.bg
}
@ -270,7 +274,7 @@ class PagerPageHolder(
launchUI {
imageView.background = setBG(bytesArray)
page.bg = imageView.background
page.bgAlwaysWhite = viewer.config.readerTheme == 2
page.bgType = getBGType(viewer.config.readerTheme, context)
}
}
} else {
@ -281,8 +285,12 @@ class PagerPageHolder(
} else {
val imageView = initImageView()
imageView.setImage(openStream!!)
if (viewer.config.readerTheme >= 2 && page.bg != null)
if (viewer.config.readerTheme >= 2 && page.bg != null) {
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
@ -512,4 +520,12 @@ class PagerPageHolder(
})
.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.content.Intent
import android.content.res.Resources
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.net.Uri
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.dpToPx
import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.updatePaddingRelative
import eu.kanade.tachiyomi.util.view.visible
import rx.Observable
import rx.Subscription
@ -113,6 +115,7 @@ class WebtoonPageHolder(
init {
frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
frame.setBackgroundColor(Color.BLACK)
}
/**
@ -126,14 +129,13 @@ class WebtoonPageHolder(
private fun refreshLayoutParams() {
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)
marginEnd = 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.IntentFilter
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.content.res.Resources
import android.net.ConnectivityManager
import android.net.Uri
@ -202,3 +203,8 @@ fun Context.openInBrowser(url: String) {
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.Drawable
import android.graphics.drawable.GradientDrawable
import eu.kanade.tachiyomi.R
import java.io.InputStream
import java.net.URLConnection
import kotlin.math.abs
@ -56,9 +57,9 @@ object ImageUtil {
return null
}
fun autoSetBackground(image: Bitmap?, useWhiteAlways: Boolean, context: Context): Drawable {
val backgroundColor = if (useWhiteAlways) Color.WHITE else
context.getResourceColor(android.R.attr.colorBackground)
fun autoSetBackground(image: Bitmap?, alwaysUseWhite: Boolean, context: Context): Drawable {
val backgroundColor = if (alwaysUseWhite) Color.WHITE else
context.getResourceColor(R.attr.readerBackground)
if (image == null) return ColorDrawable(backgroundColor)
if (image.width < 50 || image.height < 50)
return ColorDrawable(backgroundColor)

View File

@ -15,13 +15,10 @@
<item name="colorPrimaryVariant">@color/colorAmoledPrimary</item>
<item name="colorOnPrimary">@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 -->
<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_corner_radius">16dp</item>
</style>
</resources>

View File

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

View File

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