Revert "Remove System font option"

This reverts commit 24f03b9d3d218c4fb01c8b900c3413fc9d203bfa.
This commit is contained in:
Sad Ellie 2023-12-06 22:34:15 +03:00
parent 66c10744c2
commit 92953d1c99
14 changed files with 85 additions and 22 deletions

View File

@ -35,6 +35,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.sadellie.unitto.core.ui.LocalLocale import com.sadellie.unitto.core.ui.LocalLocale
import com.sadellie.unitto.core.ui.LocalWindowSize import com.sadellie.unitto.core.ui.LocalWindowSize
import com.sadellie.unitto.core.ui.calculateWindowSizeClass import com.sadellie.unitto.core.ui.calculateWindowSizeClass
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
import com.sadellie.unitto.core.ui.theme.NumberTypographySystem
import com.sadellie.unitto.core.ui.theme.NumberTypographyUnitto
import com.sadellie.unitto.data.model.repository.UserPreferencesRepository import com.sadellie.unitto.data.model.repository.UserPreferencesRepository
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import java.util.Locale import java.util.Locale
@ -59,9 +62,14 @@ internal class MainActivity : AppCompatActivity() {
ConfigurationCompat.getLocales(configuration).get(0) ?: Locale.getDefault() ConfigurationCompat.getLocales(configuration).get(0) ?: Locale.getDefault()
} }
val numbersTypography = remember(prefs?.systemFont) {
if (prefs?.systemFont == true) NumberTypographySystem else NumberTypographyUnitto
}
CompositionLocalProvider( CompositionLocalProvider(
LocalLocale provides locale, LocalLocale provides locale,
LocalWindowSize provides calculateWindowSizeClass(this@MainActivity) LocalWindowSize provides calculateWindowSizeClass(this@MainActivity),
LocalNumberTypography provides numbersTypography
) { ) {
UnittoApp(prefs) UnittoApp(prefs)
} }

View File

@ -42,7 +42,7 @@ import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.sadellie.unitto.core.ui.theme.NumberTypographyUnitto import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
@Composable @Composable
fun FixedInputTextField( fun FixedInputTextField(
@ -83,7 +83,7 @@ fun FixedInputTextField(
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 8.dp) .padding(horizontal = 8.dp)
.horizontalScroll(rememberScrollState(), reverseScrolling = true), .horizontalScroll(rememberScrollState(), reverseScrolling = true),
textStyle = NumberTypographyUnitto.displaySmall.copy(color = textColor, textAlign = TextAlign.End), textStyle = LocalNumberTypography.current.displaySmall.copy(color = textColor, textAlign = TextAlign.End),
readOnly = true, readOnly = true,
visualTransformation = ExpressionTransformer(formatterSymbols), visualTransformation = ExpressionTransformer(formatterSymbols),
interactionSource = expressionInteractionSource interactionSource = expressionInteractionSource

View File

@ -59,7 +59,7 @@ import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.sadellie.unitto.core.ui.theme.NumberTypographyUnitto import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
import kotlin.math.ceil import kotlin.math.ceil
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -110,7 +110,7 @@ fun ExpressionTextField(
modifier = modifier, modifier = modifier,
value = value, value = value,
formattedValue = value.text.formatExpression(formatterSymbols), formattedValue = value.text.formatExpression(formatterSymbols),
textStyle = NumberTypographyUnitto.displayLarge.copy(color = textColor), textStyle = LocalNumberTypography.current.displayLarge.copy(color = textColor),
minRatio = minRatio, minRatio = minRatio,
onValueChange = { onCursorChange(it.selection) }, onValueChange = { onCursorChange(it.selection) },
readOnly = readOnly, readOnly = readOnly,
@ -165,7 +165,7 @@ fun UnformattedTextField(
AutoSizableTextField( AutoSizableTextField(
modifier = modifier, modifier = modifier,
value = value, value = value,
textStyle = NumberTypographyUnitto.displayLarge.copy(color = textColor), textStyle = LocalNumberTypography.current.displayLarge.copy(color = textColor),
minRatio = minRatio, minRatio = minRatio,
onValueChange = { onCursorChange(it.selection) }, onValueChange = { onCursorChange(it.selection) },
readOnly = readOnly, readOnly = readOnly,

View File

@ -24,7 +24,9 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.Typography import androidx.compose.material3.Typography
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.Font
@ -41,6 +43,14 @@ data class NumberTypography(
val displaySmall: TextStyle, val displaySmall: TextStyle,
) )
val NumberTypographySystem by lazy {
NumberTypography(
displayLarge = TypographySystem.displayLarge,
displayMedium = TypographySystem.displayMedium,
displaySmall = TypographySystem.displaySmall,
)
}
val NumberTypographyUnitto by lazy { val NumberTypographyUnitto by lazy {
NumberTypography( NumberTypography(
displayLarge = TextStyle( displayLarge = TextStyle(
@ -67,6 +77,8 @@ val NumberTypographyUnitto by lazy {
) )
} }
val LocalNumberTypography = staticCompositionLocalOf { NumberTypographySystem }
val TypographySystem by lazy { Typography() } val TypographySystem by lazy { Typography() }
private val FontFamily.Companion.lato: FontFamily private val FontFamily.Companion.lato: FontFamily
@ -111,20 +123,24 @@ private fun PreviewSystemTypography() {
@Preview(widthDp = 480) @Preview(widthDp = 480)
@Composable @Composable
private fun PreviewNumberTypography() { private fun PreviewNumberTypography() {
val textStyles = mapOf( CompositionLocalProvider(
"displayLarge" to NumberTypographyUnitto.displayLarge, LocalNumberTypography provides NumberTypographyUnitto
"displayMedium" to NumberTypographyUnitto.displayMedium, ) {
"displaySmall" to NumberTypographyUnitto.displaySmall, val textStyles = mapOf(
) "displayLarge" to LocalNumberTypography.current.displayLarge,
"displayMedium" to LocalNumberTypography.current.displayMedium,
"displaySmall" to LocalNumberTypography.current.displaySmall,
)
LazyColumn(Modifier.background(MaterialTheme.colorScheme.background)) { LazyColumn(Modifier.background(MaterialTheme.colorScheme.background)) {
textStyles.forEach { (label, style) -> textStyles.forEach { (label, style) ->
item { item {
Text( Text(
text = "$label 123 Error 7 12", text = "$label 123 Error 7 12",
style = style, style = style,
color = MaterialTheme.colorScheme.onBackground color = MaterialTheme.colorScheme.onBackground
) )
}
} }
} }
} }

View File

@ -81,6 +81,8 @@ interface UserPreferencesRepository {
suspend fun updateUnitConverterSorting(sorting: UnitsListSorting) suspend fun updateUnitConverterSorting(sorting: UnitsListSorting)
suspend fun updateSystemFont(enabled: Boolean)
suspend fun updatePartialHistoryView(enabled: Boolean) suspend fun updatePartialHistoryView(enabled: Boolean)
suspend fun updateAcButton(enabled: Boolean) suspend fun updateAcButton(enabled: Boolean)

View File

@ -26,5 +26,6 @@ interface AppPreferences {
val monetMode: String val monetMode: String
val startingScreen: String val startingScreen: String
val enableToolsExperiment: Boolean val enableToolsExperiment: Boolean
val systemFont: Boolean
val rpnMode: Boolean val rpnMode: Boolean
} }

View File

@ -19,6 +19,7 @@
package com.sadellie.unitto.data.model.userprefs package com.sadellie.unitto.data.model.userprefs
interface DisplayPreferences { interface DisplayPreferences {
val systemFont: Boolean
val middleZero: Boolean val middleZero: Boolean
val acButton: Boolean val acButton: Boolean
} }

View File

@ -55,6 +55,10 @@ fun Preferences.getEnableToolsExperiment(): Boolean {
return this[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] ?: false return this[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] ?: false
} }
fun Preferences.getSystemFont(): Boolean {
return this[PrefsKeys.SYSTEM_FONT] ?: false
}
fun Preferences.getEnableVibrations(): Boolean { fun Preferences.getEnableVibrations(): Boolean {
return this[PrefsKeys.ENABLE_VIBRATIONS] ?: true return this[PrefsKeys.ENABLE_VIBRATIONS] ?: true
} }

View File

@ -40,6 +40,7 @@ data class AppPreferencesImpl(
override val monetMode: String, override val monetMode: String,
override val startingScreen: String, override val startingScreen: String,
override val enableToolsExperiment: Boolean, override val enableToolsExperiment: Boolean,
override val systemFont: Boolean,
override val rpnMode: Boolean, override val rpnMode: Boolean,
) : AppPreferences ) : AppPreferences
@ -76,6 +77,7 @@ data class ConverterPreferencesImpl(
) : ConverterPreferences ) : ConverterPreferences
data class DisplayPreferencesImpl( data class DisplayPreferencesImpl(
override val systemFont: Boolean,
override val middleZero: Boolean, override val middleZero: Boolean,
override val acButton: Boolean, override val acButton: Boolean,
) : DisplayPreferences ) : DisplayPreferences

View File

@ -32,7 +32,7 @@ object PrefsKeys {
val MONET_MODE = stringPreferencesKey("MONET_MODE_PREF_KEY") val MONET_MODE = stringPreferencesKey("MONET_MODE_PREF_KEY")
val STARTING_SCREEN = stringPreferencesKey("STARTING_SCREEN_PREF_KEY") val STARTING_SCREEN = stringPreferencesKey("STARTING_SCREEN_PREF_KEY")
val ENABLE_TOOLS_EXPERIMENT = booleanPreferencesKey("ENABLE_TOOLS_EXPERIMENT_PREF_KEY") val ENABLE_TOOLS_EXPERIMENT = booleanPreferencesKey("ENABLE_TOOLS_EXPERIMENT_PREF_KEY")
// val SYSTEM_FONT = booleanPreferencesKey("SYSTEM_FONT_PREF_KEY") val SYSTEM_FONT = booleanPreferencesKey("SYSTEM_FONT_PREF_KEY")
val ENABLE_VIBRATIONS = booleanPreferencesKey("ENABLE_VIBRATIONS_PREF_KEY") val ENABLE_VIBRATIONS = booleanPreferencesKey("ENABLE_VIBRATIONS_PREF_KEY")
val MIDDLE_ZERO = booleanPreferencesKey("MIDDLE_ZERO_PREF_KEY") val MIDDLE_ZERO = booleanPreferencesKey("MIDDLE_ZERO_PREF_KEY")
val AC_BUTTON = booleanPreferencesKey("AC_BUTTON_PREF_KEY") val AC_BUTTON = booleanPreferencesKey("AC_BUTTON_PREF_KEY")

View File

@ -58,6 +58,7 @@ class UserPreferencesRepositoryImpl @Inject constructor(
monetMode = preferences.getMonetMode(), monetMode = preferences.getMonetMode(),
startingScreen = preferences.getStartingScreen(), startingScreen = preferences.getStartingScreen(),
enableToolsExperiment = preferences.getEnableToolsExperiment(), enableToolsExperiment = preferences.getEnableToolsExperiment(),
systemFont = preferences.getSystemFont(),
rpnMode = preferences.getRpnMode(), rpnMode = preferences.getRpnMode(),
) )
} }
@ -106,6 +107,7 @@ class UserPreferencesRepositoryImpl @Inject constructor(
override val displayPrefs: Flow<DisplayPreferences> = data override val displayPrefs: Flow<DisplayPreferences> = data
.map { preferences -> .map { preferences ->
DisplayPreferencesImpl( DisplayPreferencesImpl(
systemFont = preferences.getSystemFont(),
middleZero = preferences.getMiddleZero(), middleZero = preferences.getMiddleZero(),
acButton = preferences.getAcButton(), acButton = preferences.getAcButton(),
) )
@ -258,6 +260,12 @@ class UserPreferencesRepositoryImpl @Inject constructor(
} }
} }
override suspend fun updateSystemFont(enabled: Boolean) {
dataStore.edit { preferences ->
preferences[PrefsKeys.SYSTEM_FONT] = enabled
}
}
override suspend fun updatePartialHistoryView(enabled: Boolean) { override suspend fun updatePartialHistoryView(enabled: Boolean) {
dataStore.edit { preferences -> dataStore.edit { preferences ->
preferences[PrefsKeys.PARTIAL_HISTORY_VIEW] = enabled preferences[PrefsKeys.PARTIAL_HISTORY_VIEW] = enabled

View File

@ -37,6 +37,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Colorize import androidx.compose.material.icons.filled.Colorize
import androidx.compose.material.icons.filled.DarkMode import androidx.compose.material.icons.filled.DarkMode
import androidx.compose.material.icons.filled.ExposureZero import androidx.compose.material.icons.filled.ExposureZero
import androidx.compose.material.icons.filled.FontDownload
import androidx.compose.material.icons.filled.Language import androidx.compose.material.icons.filled.Language
import androidx.compose.material.icons.filled.Palette import androidx.compose.material.icons.filled.Palette
import androidx.compose.material.icons.outlined.DarkMode import androidx.compose.material.icons.outlined.DarkMode
@ -112,6 +113,8 @@ internal fun DisplayRoute(
themmoController.setMonetMode(newValue) themmoController.setMonetMode(newValue)
viewModel.updateMonetMode(newValue) viewModel.updateMonetMode(newValue)
}, },
systemFont = prefs.systemFont,
updateSystemFont = viewModel::updateSystemFont,
acButton = prefs.acButton, acButton = prefs.acButton,
updateAcButton = viewModel::updateAcButton, updateAcButton = viewModel::updateAcButton,
middleZero = prefs.middleZero, middleZero = prefs.middleZero,
@ -135,6 +138,8 @@ private fun DisplayScreen(
onColorChange: (Color) -> Unit, onColorChange: (Color) -> Unit,
monetMode: MonetMode, monetMode: MonetMode,
onMonetModeChange: (MonetMode) -> Unit, onMonetModeChange: (MonetMode) -> Unit,
systemFont: Boolean,
updateSystemFont: (Boolean) -> Unit,
acButton: Boolean, acButton: Boolean,
updateAcButton: (Boolean) -> Unit, updateAcButton: (Boolean) -> Unit,
middleZero: Boolean, middleZero: Boolean,
@ -256,6 +261,14 @@ private fun DisplayScreen(
Header(stringResource(R.string.settings_additional)) Header(stringResource(R.string.settings_additional))
UnittoListItem(
icon = Icons.Default.FontDownload,
headlineText = stringResource(R.string.settings_system_font),
supportingText = stringResource(R.string.settings_system_font_support),
switchState = systemFont,
onSwitchChange = updateSystemFont
)
UnittoListItem( UnittoListItem(
icon = UnittoIcons.Clear, icon = UnittoIcons.Clear,
headlineText = stringResource(R.string.settings_ac_button), headlineText = stringResource(R.string.settings_ac_button),
@ -298,6 +311,8 @@ private fun Preview() {
onColorChange = themmoController::setCustomColor, onColorChange = themmoController::setCustomColor,
monetMode = themmoController.currentMonetMode, monetMode = themmoController.currentMonetMode,
onMonetModeChange = themmoController::setMonetMode, onMonetModeChange = themmoController::setMonetMode,
systemFont = false,
updateSystemFont = {},
acButton = false, acButton = false,
updateAcButton = {}, updateAcButton = {},
middleZero = false, middleZero = false,

View File

@ -67,6 +67,12 @@ class DisplayViewModel @Inject constructor(
} }
} }
fun updateSystemFont(enabled: Boolean) {
viewModelScope.launch {
userPrefsRepository.updateSystemFont(enabled)
}
}
fun updateAcButton(enabled: Boolean) { fun updateAcButton(enabled: Boolean) {
viewModelScope.launch { viewModelScope.launch {
userPrefsRepository.updateAcButton(enabled) userPrefsRepository.updateAcButton(enabled)

View File

@ -62,7 +62,7 @@ import com.sadellie.unitto.core.ui.common.UnittoScreenWithLargeTopBar
import com.sadellie.unitto.core.ui.common.UnittoSlider import com.sadellie.unitto.core.ui.common.UnittoSlider
import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols
import com.sadellie.unitto.core.ui.common.textfield.formatExpression import com.sadellie.unitto.core.ui.common.textfield.formatExpression
import com.sadellie.unitto.core.ui.theme.NumberTypographyUnitto import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
import com.sadellie.unitto.data.common.format import com.sadellie.unitto.data.common.format
import kotlin.math.ceil import kotlin.math.ceil
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -137,7 +137,7 @@ fun FormattingScreen(
Text( Text(
text = preview, text = preview,
style = NumberTypographyUnitto.displayMedium, style = LocalNumberTypography.current.displayMedium,
maxLines = 1, maxLines = 1,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()