mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Support follow system theme[Android 10] (#2603)
* Support follow system theme * Show [follow system theme] only on Oreo and newer * Update preference values of theme * Refine theme preference
This commit is contained in:
		@@ -5,7 +5,9 @@ package eu.kanade.tachiyomi.data.preference
 | 
			
		||||
 */
 | 
			
		||||
object PreferenceKeys {
 | 
			
		||||
 | 
			
		||||
    const val theme = "pref_theme_key"
 | 
			
		||||
    const val themeMode = "pref_theme_mode_key"
 | 
			
		||||
 | 
			
		||||
    const val themeDark = "pref_theme_dark_key"
 | 
			
		||||
 | 
			
		||||
    const val rotation = "pref_rotation_type_key"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
package eu.kanade.tachiyomi.data.preference
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class stores the values for the preferences in the application.
 | 
			
		||||
 */
 | 
			
		||||
object PreferenceValues {
 | 
			
		||||
 | 
			
		||||
    const val THEME_MODE_LIGHT = "light"
 | 
			
		||||
 | 
			
		||||
    const val THEME_MODE_DARK = "dark"
 | 
			
		||||
 | 
			
		||||
    const val THEME_MODE_SYSTEM = "system"
 | 
			
		||||
 | 
			
		||||
    const val THEME_DARK_DEFAULT = "default"
 | 
			
		||||
 | 
			
		||||
    const val THEME_DARK_AMOLED = "amoled"
 | 
			
		||||
 | 
			
		||||
    const val THEME_DARK_BLUE = "blue"
 | 
			
		||||
}
 | 
			
		||||
@@ -15,6 +15,7 @@ import java.text.DateFormat
 | 
			
		||||
import java.text.SimpleDateFormat
 | 
			
		||||
import java.util.Locale
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
 | 
			
		||||
 | 
			
		||||
fun <T> Preference<T>.getOrDefault(): T = get() ?: defaultValue()!!
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +54,9 @@ class PreferencesHelper(val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun clear() = prefs.edit().clear().apply()
 | 
			
		||||
 | 
			
		||||
    fun theme() = prefs.getInt(Keys.theme, 1)
 | 
			
		||||
    fun themeMode() = prefs.getString(Keys.themeMode, Values.THEME_MODE_LIGHT)
 | 
			
		||||
 | 
			
		||||
    fun themeDark() = prefs.getString(Keys.themeDark, Values.THEME_DARK_DEFAULT)
 | 
			
		||||
 | 
			
		||||
    fun rotation() = rxPrefs.getInteger(Keys.rotation, 1)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +1,44 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.base.activity
 | 
			
		||||
 | 
			
		||||
import android.app.UiModeManager
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import androidx.appcompat.app.AppCompatDelegate
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
 | 
			
		||||
 | 
			
		||||
abstract class BaseActivity : AppCompatActivity() {
 | 
			
		||||
 | 
			
		||||
    val preferences: PreferencesHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
    private val darkTheme: Int
 | 
			
		||||
        get() = when (preferences.themeDark()) {
 | 
			
		||||
            Values.THEME_DARK_DEFAULT -> R.style.Theme_Tachiyomi_Dark
 | 
			
		||||
            Values.THEME_DARK_AMOLED -> R.style.Theme_Tachiyomi_Amoled
 | 
			
		||||
            else -> R.style.Theme_Tachiyomi_DarkBlue
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        @Suppress("LeakingThis")
 | 
			
		||||
        LocaleHelper.updateConfiguration(this)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        setTheme(when (preferences.theme()) {
 | 
			
		||||
            2 -> R.style.Theme_Tachiyomi_Dark
 | 
			
		||||
            3 -> R.style.Theme_Tachiyomi_Amoled
 | 
			
		||||
            4 -> R.style.Theme_Tachiyomi_DarkBlue
 | 
			
		||||
            else -> R.style.Theme_Tachiyomi
 | 
			
		||||
        setTheme(when (preferences.themeMode()) {
 | 
			
		||||
            Values.THEME_MODE_LIGHT -> R.style.Theme_Tachiyomi
 | 
			
		||||
            Values.THEME_MODE_DARK -> darkTheme
 | 
			
		||||
            else -> {
 | 
			
		||||
                val mode = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
 | 
			
		||||
                if (mode.nightMode == AppCompatDelegate.MODE_NIGHT_YES) {
 | 
			
		||||
                    darkTheme
 | 
			
		||||
                } else {
 | 
			
		||||
                    R.style.Theme_Tachiyomi
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,12 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.setting
 | 
			
		||||
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import androidx.preference.PreferenceScreen
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.*
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
 | 
			
		||||
 | 
			
		||||
class SettingsGeneralController : SettingsController() {
 | 
			
		||||
 | 
			
		||||
@@ -48,13 +50,27 @@ class SettingsGeneralController : SettingsController() {
 | 
			
		||||
            defaultValue = ""
 | 
			
		||||
            summary = "%s"
 | 
			
		||||
        }
 | 
			
		||||
        intListPreference {
 | 
			
		||||
            key = Keys.theme
 | 
			
		||||
            titleRes = R.string.pref_theme
 | 
			
		||||
            entriesRes = arrayOf(R.string.light_theme, R.string.dark_theme,
 | 
			
		||||
                    R.string.amoled_theme, R.string.darkblue_theme)
 | 
			
		||||
            entryValues = arrayOf("1", "2", "3", "4")
 | 
			
		||||
            defaultValue = "1"
 | 
			
		||||
        listPreference {
 | 
			
		||||
            key = Keys.themeMode
 | 
			
		||||
            titleRes = R.string.pref_theme_mode
 | 
			
		||||
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 | 
			
		||||
                entriesRes = arrayOf(
 | 
			
		||||
                        R.string.theme_light,
 | 
			
		||||
                        R.string.theme_dark,
 | 
			
		||||
                        R.string.theme_system)
 | 
			
		||||
                entryValues = arrayOf(
 | 
			
		||||
                        Values.THEME_MODE_LIGHT,
 | 
			
		||||
                        Values.THEME_MODE_DARK,
 | 
			
		||||
                        Values.THEME_MODE_SYSTEM)
 | 
			
		||||
            } else {
 | 
			
		||||
                entriesRes = arrayOf(
 | 
			
		||||
                        R.string.theme_light,
 | 
			
		||||
                        R.string.theme_dark)
 | 
			
		||||
                entryValues = arrayOf(
 | 
			
		||||
                        Values.THEME_MODE_LIGHT,
 | 
			
		||||
                        Values.THEME_MODE_DARK)
 | 
			
		||||
            }
 | 
			
		||||
            defaultValue = Values.THEME_MODE_LIGHT
 | 
			
		||||
            summary = "%s"
 | 
			
		||||
 | 
			
		||||
            onChange {
 | 
			
		||||
@@ -62,6 +78,27 @@ class SettingsGeneralController : SettingsController() {
 | 
			
		||||
                true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        listPreference {
 | 
			
		||||
            key = Keys.themeDark
 | 
			
		||||
            titleRes = R.string.pref_theme_dark
 | 
			
		||||
            entriesRes = arrayOf(
 | 
			
		||||
                    R.string.theme_dark_default,
 | 
			
		||||
                    R.string.theme_dark_amoled,
 | 
			
		||||
                    R.string.theme_dark_blue)
 | 
			
		||||
            entryValues = arrayOf(
 | 
			
		||||
                    Values.THEME_DARK_DEFAULT,
 | 
			
		||||
                    Values.THEME_DARK_AMOLED,
 | 
			
		||||
                    Values.THEME_DARK_BLUE)
 | 
			
		||||
            defaultValue = Values.THEME_DARK_DEFAULT
 | 
			
		||||
            summary = "%s"
 | 
			
		||||
 | 
			
		||||
            onChange {
 | 
			
		||||
                if (preferences.themeMode() != Values.THEME_MODE_LIGHT) {
 | 
			
		||||
                    activity?.recreate()
 | 
			
		||||
                }
 | 
			
		||||
                true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        intListPreference {
 | 
			
		||||
            key = Keys.startScreen
 | 
			
		||||
            titleRes = R.string.pref_start_screen
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user