mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-20 20:38:28 +00:00
Simplify ThemeFromPreferences by removing lambdas
This commit is contained in:
parent
492d5217d0
commit
25e7c7ec61
@ -17,13 +17,17 @@ class AppearanceSettingsViewModel @Inject constructor(private val prefs: TextSec
|
|||||||
private val _uiState = MutableStateFlow(prefs.themeState())
|
private val _uiState = MutableStateFlow(prefs.themeState())
|
||||||
val uiState: StateFlow<ThemeState> = _uiState
|
val uiState: StateFlow<ThemeState> = _uiState
|
||||||
|
|
||||||
|
fun invalidateComposeThemeColors() {
|
||||||
|
// invalidate compose theme colors
|
||||||
|
cachedColors = null
|
||||||
|
}
|
||||||
|
|
||||||
fun setNewAccent(@StyleRes newAccentColorStyle: Int) {
|
fun setNewAccent(@StyleRes newAccentColorStyle: Int) {
|
||||||
prefs.setAccentColorStyle(newAccentColorStyle)
|
prefs.setAccentColorStyle(newAccentColorStyle)
|
||||||
// update UI state
|
// update UI state
|
||||||
_uiState.value = prefs.themeState()
|
_uiState.value = prefs.themeState()
|
||||||
|
|
||||||
// invalidate compose theme colors
|
invalidateComposeThemeColors()
|
||||||
cachedColors = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setNewStyle(newThemeStyle: String) {
|
fun setNewStyle(newThemeStyle: String) {
|
||||||
@ -31,15 +35,13 @@ class AppearanceSettingsViewModel @Inject constructor(private val prefs: TextSec
|
|||||||
// update UI state
|
// update UI state
|
||||||
_uiState.value = prefs.themeState()
|
_uiState.value = prefs.themeState()
|
||||||
|
|
||||||
// invalidate compose theme colors
|
invalidateComposeThemeColors()
|
||||||
cachedColors = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setNewFollowSystemSettings(followSystemSettings: Boolean) {
|
fun setNewFollowSystemSettings(followSystemSettings: Boolean) {
|
||||||
prefs.setFollowSystemSettings(followSystemSettings)
|
prefs.setFollowSystemSettings(followSystemSettings)
|
||||||
_uiState.value = prefs.themeState()
|
_uiState.value = prefs.themeState()
|
||||||
|
|
||||||
// invalidate compose theme colors
|
invalidateComposeThemeColors()
|
||||||
cachedColors = null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package org.thoughtcrime.securesms.ui.theme
|
||||||
|
|
||||||
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
|
||||||
|
fun interface MaybeFollowSystemColors {
|
||||||
|
@Composable
|
||||||
|
fun get(): ThemeColors
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FollowSystemColors(light: ThemeColors, dark: ThemeColors) = MaybeFollowSystemColors {
|
||||||
|
when {
|
||||||
|
isSystemInDarkTheme() -> dark
|
||||||
|
else -> light
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun IgnoreSystemColors(colors: ThemeColors) = MaybeFollowSystemColors { colors }
|
@ -17,7 +17,7 @@ import org.session.libsession.utilities.TextSecurePreferences.Companion.YELLOW_A
|
|||||||
* Some behaviour is hardcoded to cater for legacy usage of people with themes already set
|
* Some behaviour is hardcoded to cater for legacy usage of people with themes already set
|
||||||
* But future themes will be picked and set directly from the "Appearance" screen
|
* But future themes will be picked and set directly from the "Appearance" screen
|
||||||
*/
|
*/
|
||||||
val TextSecurePreferences.colors: @Composable () -> ThemeColors get() {
|
val TextSecurePreferences.colors: MaybeFollowSystemColors get() {
|
||||||
val selectedTheme = getThemeStyle()
|
val selectedTheme = getThemeStyle()
|
||||||
|
|
||||||
// get the chosen primary color from the preferences
|
// get the chosen primary color from the preferences
|
||||||
@ -28,16 +28,13 @@ val TextSecurePreferences.colors: @Composable () -> ThemeColors get() {
|
|||||||
val createLight = if (isOcean) ::OceanLight else ::ClassicLight
|
val createLight = if (isOcean) ::OceanLight else ::ClassicLight
|
||||||
val createDark = if (isOcean) ::OceanDark else ::ClassicDark
|
val createDark = if (isOcean) ::OceanDark else ::ClassicDark
|
||||||
|
|
||||||
// create the light and dark themes outside the lambda to avoid creating them every time
|
|
||||||
// [SessionMaterialTheme] is called. Creating both when we don't followSystemSettings is but a
|
|
||||||
// minor inefficiency that increases readability.
|
|
||||||
val light = createLight(selectedPrimary)
|
|
||||||
val dark = createDark(selectedPrimary)
|
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
getFollowSystemSettings() -> { { if (isSystemInDarkTheme()) dark else light } }
|
getFollowSystemSettings() -> FollowSystemColors(
|
||||||
"light" in selectedTheme -> { { light } }
|
light = createLight(selectedPrimary),
|
||||||
else -> { { dark } }
|
dark = createDark(selectedPrimary)
|
||||||
|
)
|
||||||
|
"light" in selectedTheme -> IgnoreSystemColors(createLight(selectedPrimary))
|
||||||
|
else -> IgnoreSystemColors(createDark(selectedPrimary))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,6 +47,3 @@ fun TextSecurePreferences.primaryColor(): Color = when(getSelectedAccentColor())
|
|||||||
YELLOW_ACCENT -> primaryYellow
|
YELLOW_ACCENT -> primaryYellow
|
||||||
else -> primaryGreen
|
else -> primaryGreen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package org.thoughtcrime.securesms.ui.theme
|
package org.thoughtcrime.securesms.ui.theme
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
|
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
|
||||||
@ -21,7 +20,7 @@ import org.session.libsession.utilities.AppTextSecurePreferences
|
|||||||
val LocalColors = compositionLocalOf <ThemeColors> { ClassicDark() }
|
val LocalColors = compositionLocalOf <ThemeColors> { ClassicDark() }
|
||||||
val LocalType = compositionLocalOf { sessionTypography }
|
val LocalType = compositionLocalOf { sessionTypography }
|
||||||
|
|
||||||
var cachedColors: (@Composable () -> ThemeColors)? = null
|
var cachedColors: MaybeFollowSystemColors? = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply a Material2 compose theme based on user selections in SharedPreferences.
|
* Apply a Material2 compose theme based on user selections in SharedPreferences.
|
||||||
@ -33,10 +32,10 @@ fun SessionMaterialTheme(
|
|||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val preferences = AppTextSecurePreferences(context)
|
val preferences = AppTextSecurePreferences(context)
|
||||||
|
|
||||||
val cachedColors = cachedColors ?: preferences.colors.also { cachedColors = it }
|
val jjcachedColors = cachedColors ?: preferences.colors.also { cachedColors = it }
|
||||||
|
|
||||||
SessionMaterialTheme(
|
SessionMaterialTheme(
|
||||||
colors = cachedColors(),
|
colors = cachedColors.get(),
|
||||||
content = content
|
content = content
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -59,9 +58,8 @@ fun SessionMaterialTheme(
|
|||||||
LocalType provides sessionTypography,
|
LocalType provides sessionTypography,
|
||||||
LocalContentColor provides colors.text,
|
LocalContentColor provides colors.text,
|
||||||
LocalTextSelectionColors provides colors.textSelectionColors,
|
LocalTextSelectionColors provides colors.textSelectionColors,
|
||||||
) {
|
content = content
|
||||||
content()
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user