mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 00:35:26 +02:00
Separate typography for numbers
This commit is contained in:
parent
f3e85dbfa2
commit
56dadeee74
@ -32,6 +32,9 @@ import androidx.compose.ui.platform.LocalConfiguration
|
|||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
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.theme.LocalNumberTypography
|
||||||
|
import com.sadellie.unitto.core.ui.theme.NumberTypographySystem
|
||||||
|
import com.sadellie.unitto.core.ui.theme.NumberTypographyUnitto
|
||||||
import com.sadellie.unitto.data.userprefs.UserPreferencesRepository
|
import com.sadellie.unitto.data.userprefs.UserPreferencesRepository
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -56,7 +59,14 @@ internal class MainActivity : AppCompatActivity() {
|
|||||||
if (tag.isEmpty()) Locale.getDefault() else Locale.forLanguageTag(tag)
|
if (tag.isEmpty()) Locale.getDefault() else Locale.forLanguageTag(tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
CompositionLocalProvider(LocalLocale provides locale) {
|
val numbersTypography = remember(prefs?.systemFont) {
|
||||||
|
if (prefs?.systemFont == true) NumberTypographySystem else NumberTypographyUnitto
|
||||||
|
}
|
||||||
|
|
||||||
|
CompositionLocalProvider(
|
||||||
|
LocalLocale provides locale,
|
||||||
|
LocalNumberTypography provides numbersTypography
|
||||||
|
) {
|
||||||
UnittoApp(prefs)
|
UnittoApp(prefs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.numberDisplayLarge
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import kotlin.math.ceil
|
import kotlin.math.ceil
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ fun ExpressionTextField(
|
|||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
value = value,
|
value = value,
|
||||||
formattedValue = value.text.formatExpression(formatterSymbols),
|
formattedValue = value.text.formatExpression(formatterSymbols),
|
||||||
textStyle = MaterialTheme.typography.numberDisplayLarge.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,
|
||||||
@ -157,7 +157,7 @@ fun UnformattedTextField(
|
|||||||
AutoSizableTextField(
|
AutoSizableTextField(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
value = value,
|
value = value,
|
||||||
textStyle = MaterialTheme.typography.numberDisplayLarge.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,
|
||||||
|
@ -24,6 +24,8 @@ 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.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
|
||||||
@ -34,57 +36,14 @@ import androidx.compose.ui.unit.em
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import com.sadellie.unitto.core.base.R
|
import com.sadellie.unitto.core.base.R
|
||||||
|
|
||||||
// This text style is used for text field
|
@Immutable
|
||||||
val Typography.numberDisplayLarge by lazy {
|
data class NumberTypography(
|
||||||
TextStyle(
|
val displayLarge: TextStyle,
|
||||||
fontFamily = latoFamily,
|
val displayMedium: TextStyle,
|
||||||
fontWeight = FontWeight.Normal,
|
val headlineMedium: TextStyle,
|
||||||
fontSize = 57.sp,
|
val headlineSmall: TextStyle,
|
||||||
lineHeight = (1.25).em,
|
val bodyLarge: TextStyle,
|
||||||
letterSpacing = (-0.25).sp,
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// This text style is used for secondary text field
|
|
||||||
val Typography.numberDisplayMedium by lazy {
|
|
||||||
TextStyle(
|
|
||||||
fontFamily = latoFamily,
|
|
||||||
fontWeight = FontWeight.W400,
|
|
||||||
fontSize = 38.sp,
|
|
||||||
lineHeight = 42.sp,
|
|
||||||
letterSpacing = (-0.25).sp,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val Typography.numberHeadlineSmall: TextStyle by lazy {
|
|
||||||
TextStyle(
|
|
||||||
fontFamily = latoFamily,
|
|
||||||
fontWeight = FontWeight.Normal,
|
|
||||||
fontSize = 24.sp,
|
|
||||||
lineHeight = 1.25.em,
|
|
||||||
letterSpacing = 0.sp,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val Typography.numberBodyLarge: TextStyle by lazy {
|
|
||||||
TextStyle(
|
|
||||||
fontFamily = latoFamily,
|
|
||||||
fontWeight = FontWeight.Normal,
|
|
||||||
fontSize = 16.sp,
|
|
||||||
lineHeight = 1.5.em,
|
|
||||||
letterSpacing = 0.5.sp,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val Typography.numberHeadlineMedium: TextStyle by lazy {
|
|
||||||
TextStyle(
|
|
||||||
fontFamily = latoFamily,
|
|
||||||
fontWeight = FontWeight.Normal,
|
|
||||||
fontSize = 28.sp,
|
|
||||||
lineHeight = 1.25.em,
|
|
||||||
letterSpacing = 0.sp,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val TypographyUnitto by lazy {
|
val TypographyUnitto by lazy {
|
||||||
Typography(
|
Typography(
|
||||||
@ -196,8 +155,60 @@ val TypographyUnitto by lazy {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val NumberTypographyUnitto by lazy {
|
||||||
|
NumberTypography(
|
||||||
|
displayLarge = TextStyle(
|
||||||
|
fontFamily = latoFamily,
|
||||||
|
fontWeight = FontWeight.Normal,
|
||||||
|
fontSize = 57.sp,
|
||||||
|
lineHeight = (1.25).em,
|
||||||
|
letterSpacing = (-0.25).sp,
|
||||||
|
),
|
||||||
|
displayMedium = TextStyle(
|
||||||
|
fontFamily = latoFamily,
|
||||||
|
fontWeight = FontWeight.W400,
|
||||||
|
fontSize = 38.sp,
|
||||||
|
lineHeight = 42.sp,
|
||||||
|
letterSpacing = (-0.25).sp,
|
||||||
|
),
|
||||||
|
headlineMedium = TextStyle(
|
||||||
|
fontFamily = latoFamily,
|
||||||
|
fontWeight = FontWeight.Normal,
|
||||||
|
fontSize = 28.sp,
|
||||||
|
lineHeight = 1.25.em,
|
||||||
|
letterSpacing = 0.sp,
|
||||||
|
),
|
||||||
|
headlineSmall = TextStyle(
|
||||||
|
fontFamily = latoFamily,
|
||||||
|
fontWeight = FontWeight.Normal,
|
||||||
|
fontSize = 24.sp,
|
||||||
|
lineHeight = 1.25.em,
|
||||||
|
letterSpacing = 0.sp,
|
||||||
|
),
|
||||||
|
bodyLarge = TextStyle(
|
||||||
|
fontFamily = latoFamily,
|
||||||
|
fontWeight = FontWeight.Normal,
|
||||||
|
fontSize = 16.sp,
|
||||||
|
lineHeight = 1.5.em,
|
||||||
|
letterSpacing = 0.5.sp,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val TypographySystem by lazy { Typography() }
|
val TypographySystem by lazy { Typography() }
|
||||||
|
|
||||||
|
val NumberTypographySystem by lazy {
|
||||||
|
NumberTypography(
|
||||||
|
displayLarge = TypographySystem.displayLarge,
|
||||||
|
displayMedium = TypographySystem.displayMedium,
|
||||||
|
headlineMedium = TypographySystem.headlineMedium,
|
||||||
|
headlineSmall = TypographySystem.headlineSmall,
|
||||||
|
bodyLarge = TypographySystem.bodyLarge
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val LocalNumberTypography = staticCompositionLocalOf { NumberTypographySystem }
|
||||||
|
|
||||||
private val montserratFamily by lazy {
|
private val montserratFamily by lazy {
|
||||||
FontFamily(
|
FontFamily(
|
||||||
Font(R.font.montserrat_light, weight = FontWeight.Light),
|
Font(R.font.montserrat_light, weight = FontWeight.Light),
|
||||||
@ -239,7 +250,11 @@ private fun PreviewTypography() {
|
|||||||
|
|
||||||
textStyles.forEach { (label, style) ->
|
textStyles.forEach { (label, style) ->
|
||||||
item {
|
item {
|
||||||
Text("$label 123", style = style, color = MaterialTheme.colorScheme.onBackground)
|
Text(
|
||||||
|
text = "$label 123",
|
||||||
|
style = style,
|
||||||
|
color = MaterialTheme.colorScheme.onBackground
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols
|
|||||||
import com.sadellie.unitto.core.ui.common.textfield.UnittoTextToolbar
|
import com.sadellie.unitto.core.ui.common.textfield.UnittoTextToolbar
|
||||||
import com.sadellie.unitto.core.ui.common.textfield.clearAndFilterExpression
|
import com.sadellie.unitto.core.ui.common.textfield.clearAndFilterExpression
|
||||||
import com.sadellie.unitto.core.ui.common.textfield.copyWithoutGrouping
|
import com.sadellie.unitto.core.ui.common.textfield.copyWithoutGrouping
|
||||||
import com.sadellie.unitto.core.ui.theme.numberDisplayMedium
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import com.sadellie.unitto.data.model.HistoryItem
|
import com.sadellie.unitto.data.model.HistoryItem
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -190,7 +190,7 @@ private fun HistoryListItem(
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 8.dp)
|
.padding(horizontal = 8.dp)
|
||||||
.horizontalScroll(rememberScrollState(), reverseScrolling = true),
|
.horizontalScroll(rememberScrollState(), reverseScrolling = true),
|
||||||
textStyle = MaterialTheme.typography.numberDisplayMedium.copy(color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.End),
|
textStyle = LocalNumberTypography.current.displayMedium.copy(color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.End),
|
||||||
readOnly = true,
|
readOnly = true,
|
||||||
visualTransformation = ExpressionTransformer(formatterSymbols),
|
visualTransformation = ExpressionTransformer(formatterSymbols),
|
||||||
interactionSource = expressionInteractionSource
|
interactionSource = expressionInteractionSource
|
||||||
@ -215,7 +215,7 @@ private fun HistoryListItem(
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 8.dp)
|
.padding(horizontal = 8.dp)
|
||||||
.horizontalScroll(rememberScrollState(), reverseScrolling = true),
|
.horizontalScroll(rememberScrollState(), reverseScrolling = true),
|
||||||
textStyle = MaterialTheme.typography.numberDisplayMedium.copy(color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f), textAlign = TextAlign.End),
|
textStyle = LocalNumberTypography.current.displayMedium.copy(color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f), textAlign = TextAlign.End),
|
||||||
readOnly = true,
|
readOnly = true,
|
||||||
visualTransformation = ExpressionTransformer(formatterSymbols),
|
visualTransformation = ExpressionTransformer(formatterSymbols),
|
||||||
interactionSource = resultInteractionSource
|
interactionSource = resultInteractionSource
|
||||||
|
@ -63,7 +63,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.squashable
|
import com.sadellie.unitto.core.ui.common.squashable
|
||||||
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.numberDisplayMedium
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -139,7 +139,7 @@ fun FormattingScreen(
|
|||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = uiState.preview,
|
text = uiState.preview,
|
||||||
style = MaterialTheme.typography.numberDisplayMedium,
|
style = LocalNumberTypography.current.displayMedium,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
|
@ -29,7 +29,6 @@ import androidx.compose.animation.Crossfade
|
|||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
@ -50,7 +49,7 @@ import com.sadellie.unitto.core.ui.common.UnittoEmptyScreen
|
|||||||
import com.sadellie.unitto.core.ui.common.UnittoListItem
|
import com.sadellie.unitto.core.ui.common.UnittoListItem
|
||||||
import com.sadellie.unitto.core.ui.common.UnittoSearchBar
|
import com.sadellie.unitto.core.ui.common.UnittoSearchBar
|
||||||
import com.sadellie.unitto.core.ui.datetime.formatTime
|
import com.sadellie.unitto.core.ui.datetime.formatTime
|
||||||
import com.sadellie.unitto.core.ui.theme.numberHeadlineSmall
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import com.sadellie.unitto.data.common.displayName
|
import com.sadellie.unitto.data.common.displayName
|
||||||
import com.sadellie.unitto.data.common.offset
|
import com.sadellie.unitto.data.common.offset
|
||||||
import com.sadellie.unitto.data.common.regionName
|
import com.sadellie.unitto.data.common.regionName
|
||||||
@ -121,7 +120,7 @@ fun AddTimeZoneScreen(
|
|||||||
text = it.timeZone
|
text = it.timeZone
|
||||||
.offset(userTime)
|
.offset(userTime)
|
||||||
.formatTime(locale, is24Hour),
|
.formatTime(locale, is24Hour),
|
||||||
style = MaterialTheme.typography.numberHeadlineSmall
|
style = LocalNumberTypography.current.headlineSmall
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -69,7 +69,7 @@ import com.sadellie.unitto.core.base.R
|
|||||||
import com.sadellie.unitto.core.ui.LocalLocale
|
import com.sadellie.unitto.core.ui.LocalLocale
|
||||||
import com.sadellie.unitto.core.ui.datetime.formatOffset
|
import com.sadellie.unitto.core.ui.datetime.formatOffset
|
||||||
import com.sadellie.unitto.core.ui.datetime.formatTime
|
import com.sadellie.unitto.core.ui.datetime.formatTime
|
||||||
import com.sadellie.unitto.core.ui.theme.numberHeadlineMedium
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import com.sadellie.unitto.data.common.offset
|
import com.sadellie.unitto.data.common.offset
|
||||||
import com.sadellie.unitto.data.common.regionName
|
import com.sadellie.unitto.data.common.regionName
|
||||||
import com.sadellie.unitto.data.model.timezone.FavoriteZone
|
import com.sadellie.unitto.data.model.timezone.FavoriteZone
|
||||||
@ -160,7 +160,7 @@ internal fun FavoriteTimeZoneItem(
|
|||||||
// TODO Add AM PM as dots (apply to 12 and 24 hour systems)
|
// TODO Add AM PM as dots (apply to 12 and 24 hour systems)
|
||||||
Text(
|
Text(
|
||||||
text = time,
|
text = time,
|
||||||
style = MaterialTheme.typography.numberHeadlineMedium,
|
style = LocalNumberTypography.current.headlineMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -55,8 +55,7 @@ import com.sadellie.unitto.core.ui.datetime.formatDateDayMonthYear
|
|||||||
import com.sadellie.unitto.core.ui.datetime.formatTimeHours
|
import com.sadellie.unitto.core.ui.datetime.formatTimeHours
|
||||||
import com.sadellie.unitto.core.ui.datetime.formatTimeMinutes
|
import com.sadellie.unitto.core.ui.datetime.formatTimeMinutes
|
||||||
import com.sadellie.unitto.core.ui.datetime.formatZone
|
import com.sadellie.unitto.core.ui.datetime.formatZone
|
||||||
import com.sadellie.unitto.core.ui.theme.numberBodyLarge
|
import com.sadellie.unitto.core.ui.theme.LocalNumberTypography
|
||||||
import com.sadellie.unitto.core.ui.theme.numberDisplayLarge
|
|
||||||
import java.time.ZonedDateTime
|
import java.time.ZonedDateTime
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -84,7 +83,7 @@ internal fun UserTimeZone(
|
|||||||
Column(Modifier.weight(1f)) {
|
Column(Modifier.weight(1f)) {
|
||||||
Text(
|
Text(
|
||||||
text = userTime.formatZone(locale),
|
text = userTime.formatZone(locale),
|
||||||
style = MaterialTheme.typography.numberBodyLarge,
|
style = LocalNumberTypography.current.bodyLarge,
|
||||||
color = MaterialTheme.colorScheme.onTertiaryContainer
|
color = MaterialTheme.colorScheme.onTertiaryContainer
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -121,7 +120,7 @@ internal fun UserTimeZone(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun SlidingText(
|
private fun SlidingText(
|
||||||
text: String,
|
text: String,
|
||||||
style: TextStyle = MaterialTheme.typography.numberDisplayLarge
|
style: TextStyle = LocalNumberTypography.current.displayLarge
|
||||||
) {
|
) {
|
||||||
AnimatedContent(
|
AnimatedContent(
|
||||||
targetState = text,
|
targetState = text,
|
||||||
@ -145,7 +144,7 @@ private fun SlidingText(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun TimeSeparator(
|
private fun TimeSeparator(
|
||||||
text: String = ":",
|
text: String = ":",
|
||||||
style: TextStyle = MaterialTheme.typography.numberDisplayLarge
|
style: TextStyle = LocalNumberTypography.current.displayLarge
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = text,
|
text = text,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user