mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 16:51:49 +01:00
Refactoring theme logic, using enum
This commit is contained in:
parent
ed1fb9de1a
commit
c5785e9b6f
@ -7,6 +7,8 @@ object PreferenceKeys {
|
||||
|
||||
const val theme = "pref_theme_key"
|
||||
|
||||
const val themeStyle = "theme_style"
|
||||
|
||||
const val startingTab = "starting_tab"
|
||||
|
||||
const val backToStart = "back_to_start"
|
||||
|
@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.data.track.TrackService
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PageLayout
|
||||
import eu.kanade.tachiyomi.ui.recents.RecentMangaAdapter
|
||||
import eu.kanade.tachiyomi.util.system.ThemeUtil
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import java.io.File
|
||||
@ -85,7 +86,9 @@ class PreferencesHelper(val context: Context) {
|
||||
|
||||
fun clear() = prefs.edit().clear().apply()
|
||||
|
||||
fun theme() = prefs.getInt(Keys.theme, 5)
|
||||
fun oldTheme() = prefs.getInt(Keys.theme, 5)
|
||||
|
||||
fun theme() = flowPrefs.getEnum(Keys.themeStyle, ThemeUtil.Themes.DEFAULT)
|
||||
|
||||
fun rotation() = flowPrefs.getInt(Keys.rotation, 1)
|
||||
|
||||
|
@ -23,8 +23,18 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
AppCompatDelegate.setDefaultNightMode(ThemeUtil.nightMode(preferences.theme()))
|
||||
setTheme(ThemeUtil.theme(preferences.theme()))
|
||||
if (preferences.theme().isNotSet()) {
|
||||
ThemeUtil.convertTheme(preferences, preferences.oldTheme())
|
||||
}
|
||||
// Using a try catch in case I start to remove themes
|
||||
val theme = try {
|
||||
preferences.theme().get()
|
||||
} catch (e: Exception) {
|
||||
preferences.theme().set(ThemeUtil.Themes.DEFAULT)
|
||||
ThemeUtil.Themes.DEFAULT
|
||||
}
|
||||
AppCompatDelegate.setDefaultNightMode(theme.nightMode)
|
||||
setTheme(theme.styleRes)
|
||||
super.onCreate(savedInstanceState)
|
||||
SecureActivityDelegate.setSecure(this)
|
||||
}
|
||||
|
@ -12,8 +12,12 @@ abstract class BaseThemedActivity : AppCompatActivity() {
|
||||
val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
AppCompatDelegate.setDefaultNightMode(ThemeUtil.nightMode(preferences.theme()))
|
||||
setTheme(ThemeUtil.theme(preferences.theme()))
|
||||
if (preferences.theme().isNotSet()) {
|
||||
ThemeUtil.convertTheme(preferences, preferences.oldTheme())
|
||||
}
|
||||
val theme = preferences.theme().get()
|
||||
AppCompatDelegate.setDefaultNightMode(theme.nightMode)
|
||||
setTheme(theme.styleRes)
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
@ -361,7 +361,7 @@ class MangaDetailsController :
|
||||
val activity = activity as? MainActivity ?: return
|
||||
val activityBinding = activityBinding ?: return
|
||||
// if the theme is using inverted toolbar color
|
||||
if (!activity.isInNightMode() && ThemeUtil.isBlueTheme(presenter.preferences.theme())) {
|
||||
if (ThemeUtil.hasDarkActionBarInLight(activity, presenter.preferences.theme().get())) {
|
||||
if (forThis) activityBinding.appBar.context.setTheme(
|
||||
R.style.ThemeOverlay_AppCompat_DayNight_ActionBar
|
||||
)
|
||||
@ -1414,7 +1414,7 @@ class MangaDetailsController :
|
||||
|
||||
if (!activity.isInNightMode()) {
|
||||
activityBinding?.appBar?.context?.setTheme(
|
||||
ThemeUtil.theme(presenter.preferences.theme())
|
||||
presenter.preferences.theme().get().styleRes
|
||||
)
|
||||
|
||||
val iconPrimary = currColor ?: Color.WHITE
|
||||
|
@ -198,8 +198,9 @@ class ReaderActivity :
|
||||
* Called when the activity is created. Initializes the presenter and configuration.
|
||||
*/
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
AppCompatDelegate.setDefaultNightMode(ThemeUtil.nightMode(preferences.theme()))
|
||||
setTheme(ThemeUtil.theme(preferences.theme()))
|
||||
val theme = preferences.theme().get()
|
||||
AppCompatDelegate.setDefaultNightMode(theme.nightMode)
|
||||
setTheme(theme.styleRes)
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ReaderActivityBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
@ -243,7 +244,7 @@ class ReaderActivity :
|
||||
}
|
||||
|
||||
binding.chaptersSheet.chaptersBottomSheet.setup(this)
|
||||
if (ThemeUtil.isBlueTheme(preferences.theme())) {
|
||||
if (ThemeUtil.isColoredTheme(preferences.theme().get())) {
|
||||
binding.chaptersSheet.chapterRecycler.setBackgroundColor(getResourceColor(android.R.attr.colorBackground))
|
||||
}
|
||||
config = ReaderConfig()
|
||||
|
@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.data.updater.UpdaterJob
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||
import eu.kanade.tachiyomi.util.system.ThemeUtil
|
||||
import eu.kanade.tachiyomi.widget.preference.IntListMatPreference
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
|
||||
@ -87,22 +88,13 @@ class SettingsGeneralController : SettingsController() {
|
||||
preferenceCategory {
|
||||
titleRes = R.string.display
|
||||
|
||||
intListPreference(activity) {
|
||||
key = Keys.theme
|
||||
listPreference(activity) {
|
||||
key = Keys.themeStyle
|
||||
titleRes = R.string.app_theme
|
||||
entriesRes = arrayOf(
|
||||
R.string.white_theme,
|
||||
R.string.light_blue,
|
||||
R.string.dark,
|
||||
R.string.amoled_black,
|
||||
R.string.dark_blue,
|
||||
R.string.system_default,
|
||||
R.string
|
||||
.system_default_amoled,
|
||||
R.string.system_default_all_blue
|
||||
)
|
||||
entryValues = listOf(1, 8, 2, 3, 4, 5, 6, 7)
|
||||
defaultValue = 5
|
||||
val enumConstants = ThemeUtil.Themes::class.java.enumConstants
|
||||
entriesRes = enumConstants?.map { it.nameRes }.orEmpty().toTypedArray()
|
||||
entryValues = enumConstants?.map { it.name }.orEmpty()
|
||||
defaultValue = ThemeUtil.Themes.DEFAULT
|
||||
|
||||
onChange {
|
||||
activity?.recreate()
|
||||
|
@ -14,7 +14,6 @@ import androidx.core.graphics.ColorUtils
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
|
||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||
import eu.kanade.tachiyomi.util.system.ThemeUtil
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.isBottomTappable
|
||||
import eu.kanade.tachiyomi.util.system.isInNightMode
|
||||
@ -33,7 +32,7 @@ open class BaseWebViewActivity : BaseActivity<WebviewActivityBinding>() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = WebviewActivityBinding.inflate(layoutInflater)
|
||||
delegate.localNightMode = ThemeUtil.nightMode(preferences.theme())
|
||||
delegate.localNightMode = preferences.theme().get().nightMode
|
||||
setContentView(binding.root)
|
||||
setSupportActionBar(binding.toolbar)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
|
@ -1,24 +1,42 @@
|
||||
package eu.kanade.tachiyomi.util.system
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.annotation.StyleRes
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
|
||||
object ThemeUtil {
|
||||
fun isBlueTheme(theme: Int): Boolean {
|
||||
return theme == 4 || theme == 8 || theme == 7
|
||||
|
||||
/** Migration method */
|
||||
fun convertTheme(preferences: PreferencesHelper, theme: Int) {
|
||||
preferences.theme().set(
|
||||
when (theme) {
|
||||
0 -> Themes.PURE_WHITE
|
||||
1 -> Themes.LIGHT_BLUE
|
||||
2 -> Themes.DARK
|
||||
3 -> Themes.AMOLED
|
||||
4 -> Themes.DARK_BLUE
|
||||
5 -> Themes.DEFAULT
|
||||
6 -> Themes.DEFAULT_AMOLED
|
||||
7 -> Themes.ALL_BLUE
|
||||
else -> Themes.DEFAULT
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun isAMOLEDTheme(theme: Int): Boolean {
|
||||
return theme == 3 || theme == 6
|
||||
fun isColoredTheme(theme: Themes): Boolean {
|
||||
return theme.styleRes == R.style.Theme_Tachiyomi_AllBlue
|
||||
}
|
||||
|
||||
fun theme(theme: Int): Int {
|
||||
return when {
|
||||
isAMOLEDTheme(theme) -> R.style.Theme_Tachiyomi_Amoled
|
||||
isBlueTheme(theme) -> R.style.Theme_Tachiyomi_AllBlue
|
||||
else -> R.style.Theme_Tachiyomi
|
||||
}
|
||||
fun isPitchBlack(context: Context, theme: Themes): Boolean {
|
||||
return context.isInNightMode() && theme.styleRes == R.style.Theme_Tachiyomi_Amoled
|
||||
}
|
||||
|
||||
fun hasDarkActionBarInLight(context: Context, theme: Themes): Boolean {
|
||||
return !context.isInNightMode() && isColoredTheme(theme)
|
||||
}
|
||||
|
||||
fun readerBackgroundColor(theme: Int): Int {
|
||||
@ -28,11 +46,15 @@ object ThemeUtil {
|
||||
}
|
||||
}
|
||||
|
||||
fun nightMode(theme: Int): Int {
|
||||
return when (theme) {
|
||||
1, 8 -> AppCompatDelegate.MODE_NIGHT_NO
|
||||
2, 3, 4 -> AppCompatDelegate.MODE_NIGHT_YES
|
||||
else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
|
||||
}
|
||||
@Suppress("unused")
|
||||
enum class Themes(@StyleRes val styleRes: Int, val nightMode: Int, @StringRes val nameRes: Int) {
|
||||
PURE_WHITE(R.style.Theme_Tachiyomi, AppCompatDelegate.MODE_NIGHT_NO, R.string.white_theme),
|
||||
LIGHT_BLUE(R.style.Theme_Tachiyomi_AllBlue, AppCompatDelegate.MODE_NIGHT_NO, R.string.light_blue),
|
||||
DARK(R.style.Theme_Tachiyomi, AppCompatDelegate.MODE_NIGHT_YES, R.string.dark),
|
||||
AMOLED(R.style.Theme_Tachiyomi_Amoled, AppCompatDelegate.MODE_NIGHT_YES, R.string.amoled_black),
|
||||
DARK_BLUE(R.style.Theme_Tachiyomi_AllBlue, AppCompatDelegate.MODE_NIGHT_YES, R.string.dark_blue),
|
||||
DEFAULT(R.style.Theme_Tachiyomi, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.system_default),
|
||||
DEFAULT_AMOLED(R.style.Theme_Tachiyomi_Amoled, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.system_default_amoled),
|
||||
ALL_BLUE(R.style.Theme_Tachiyomi_AllBlue, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.system_default_all_blue),
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,6 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.util.system.ThemeUtil
|
||||
import eu.kanade.tachiyomi.util.system.contextCompatColor
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.isInNightMode
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
@ -64,8 +63,8 @@ fun View.snack(
|
||||
if (f != null) {
|
||||
snack.f()
|
||||
}
|
||||
val theme = Injekt.get<PreferencesHelper>().theme()
|
||||
if (ThemeUtil.isAMOLEDTheme(theme) && context.isInNightMode()) {
|
||||
val theme = Injekt.get<PreferencesHelper>().theme().get()
|
||||
if (ThemeUtil.isPitchBlack(context, theme)) {
|
||||
val textView: TextView =
|
||||
snack.view.findViewById(com.google.android.material.R.id.snackbar_text)
|
||||
val button: Button? =
|
||||
|
Loading…
Reference in New Issue
Block a user