mirror of
https://github.com/Michatec/michas-droid.git
synced 2026-05-30 18:02:43 +02:00
Add "System" theme which respects day/night state on Android 10
This commit is contained in:
@@ -2,10 +2,12 @@ package nya.kitsunyan.foxydroid.content
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.Configuration
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import nya.kitsunyan.foxydroid.R
|
||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
||||
import nya.kitsunyan.foxydroid.utility.extension.android.*
|
||||
import java.net.Proxy
|
||||
|
||||
object Preferences {
|
||||
@@ -84,7 +86,8 @@ object Preferences {
|
||||
object ProxyPort: Key<Int>("proxy_port", Value.IntValue(9050))
|
||||
object ProxyType: Key<Preferences.ProxyType>("proxy_type", Value.EnumerationValue(Preferences.ProxyType.Direct))
|
||||
object SortOrder: Key<Preferences.SortOrder>("sort_order", Value.EnumerationValue(Preferences.SortOrder.Update))
|
||||
object Theme: Key<Preferences.Theme>("theme", Value.EnumerationValue(Preferences.Theme.Light))
|
||||
object Theme: Key<Preferences.Theme>("theme", Value.EnumerationValue(if (Android.sdk(29))
|
||||
Preferences.Theme.System else Preferences.Theme.Light))
|
||||
object UpdateNotify: Key<Boolean>("update_notify", Value.BooleanValue(true))
|
||||
object UpdateUnstable: Key<Boolean>("update_unstable", Value.BooleanValue(false))
|
||||
}
|
||||
@@ -116,12 +119,26 @@ object Preferences {
|
||||
object Update: SortOrder("update", ProductItem.Order.LAST_UPDATE)
|
||||
}
|
||||
|
||||
sealed class Theme(override val valueString: String, val resId: Int): Enumeration<Theme> {
|
||||
sealed class Theme(override val valueString: String): Enumeration<Theme> {
|
||||
override val values: List<Theme>
|
||||
get() = listOf(Light, Dark)
|
||||
get() = if (Android.sdk(29)) listOf(System, Light, Dark) else listOf(Light, Dark)
|
||||
|
||||
object Light: Theme("light", R.style.Theme_Main_Light)
|
||||
object Dark: Theme("dark", R.style.Theme_Main_Dark)
|
||||
abstract fun getResId(configuration: Configuration): Int
|
||||
|
||||
object System: Theme("system") {
|
||||
override fun getResId(configuration: Configuration): Int {
|
||||
return if ((configuration.uiMode and Configuration.UI_MODE_NIGHT_YES) != 0)
|
||||
R.style.Theme_Main_Dark else R.style.Theme_Main_Light
|
||||
}
|
||||
}
|
||||
|
||||
object Light: Theme("light") {
|
||||
override fun getResId(configuration: Configuration): Int = R.style.Theme_Main_Light
|
||||
}
|
||||
|
||||
object Dark: Theme("dark") {
|
||||
override fun getResId(configuration: Configuration): Int = R.style.Theme_Main_Dark
|
||||
}
|
||||
}
|
||||
|
||||
operator fun <T> get(key: Key<T>): T {
|
||||
|
||||
@@ -77,6 +77,7 @@ class PreferencesFragment: ScreenFragment() {
|
||||
preferences.addCategory(getString(R.string.other)) {
|
||||
addEnumeration(Preferences.Key.Theme, getString(R.string.theme)) {
|
||||
when (it) {
|
||||
is Preferences.Theme.System -> getString(R.string.system)
|
||||
is Preferences.Theme.Light -> getString(R.string.light)
|
||||
is Preferences.Theme.Dark -> getString(R.string.dark)
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ abstract class ScreenActivity: FragmentActivity() {
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
setTheme(Preferences[Preferences.Key.Theme].resId)
|
||||
setTheme(Preferences[Preferences.Key.Theme].getResId(resources.configuration))
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||
|
||||
@@ -141,6 +141,7 @@
|
||||
<string name="sync_repositories_automatically">Sync repositories automatically</string>
|
||||
<string name="syncing">Syncing</string>
|
||||
<string name="syncing_FORMAT">Syncing %s</string>
|
||||
<string name="system">System</string>
|
||||
<string name="tap_to_install_DESC">Tap to install.</string>
|
||||
<string name="theme">Theme</string>
|
||||
<string name="tracks_or_reports_your_activity">Tracks or reports your activity</string>
|
||||
|
||||
Reference in New Issue
Block a user