Updated typography

Updated the typography in an composition local so it can be accessed from anyehere in compose and matching the figma declarations.
feature/compose-cleanup
ThomasSession 9 months ago
parent 5061d3724b
commit f8e238c73a

@ -25,8 +25,8 @@ import org.thoughtcrime.securesms.ui.RadioOption
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.SlimOutlineButton import org.thoughtcrime.securesms.ui.components.SlimOutlineButton
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.extraSmall
import org.thoughtcrime.securesms.ui.fadingEdges import org.thoughtcrime.securesms.ui.fadingEdges
import org.thoughtcrime.securesms.ui.theme.LocalType
typealias ExpiryCallbacks = Callbacks<ExpiryMode> typealias ExpiryCallbacks = Callbacks<ExpiryMode>
typealias ExpiryRadioOption = RadioOption<ExpiryMode> typealias ExpiryRadioOption = RadioOption<ExpiryMode>
@ -54,7 +54,7 @@ fun DisappearingMessages(
if (state.showGroupFooter) Text( if (state.showGroupFooter) Text(
text = stringResource(R.string.activity_disappearing_messages_group_footer), text = stringResource(R.string.activity_disappearing_messages_group_footer),
style = extraSmall, style = LocalType.current.extraSmall,
fontWeight = FontWeight(400), fontWeight = FontWeight(400),
color = LocalColors.current.textSecondary, color = LocalColors.current.textSecondary,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,

@ -29,8 +29,7 @@ import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.AppBar import org.thoughtcrime.securesms.ui.components.AppBar
import org.thoughtcrime.securesms.ui.components.QrImage import org.thoughtcrime.securesms.ui.components.QrImage
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.small import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.xl
@Composable @Composable
internal fun StartConversationScreen( internal fun StartConversationScreen(
@ -78,12 +77,12 @@ internal fun StartConversationScreen(
.padding(top = LocalDimensions.current.itemSpacing) .padding(top = LocalDimensions.current.itemSpacing)
.padding(bottom = LocalDimensions.current.margin) .padding(bottom = LocalDimensions.current.margin)
) { ) {
Text(stringResource(R.string.accountIdYours), style = xl) Text(stringResource(R.string.accountIdYours), style = LocalType.current.xl)
Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsItemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsItemSpacing))
Text( Text(
text = stringResource(R.string.qrYoursDescription), text = stringResource(R.string.qrYoursDescription),
color = LocalColors.current.textSecondary, color = LocalColors.current.textSecondary,
style = small style = LocalType.current.small
) )
Spacer(modifier = Modifier.height(LocalDimensions.current.smallItemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.smallItemSpacing))
QrImage( QrImage(

@ -17,14 +17,13 @@ import androidx.compose.ui.tooling.preview.Preview
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.AppBar import org.thoughtcrime.securesms.ui.components.AppBar
import org.thoughtcrime.securesms.ui.components.SlimOutlineButton import org.thoughtcrime.securesms.ui.components.SlimOutlineButton
import org.thoughtcrime.securesms.ui.components.SlimOutlineCopyButton import org.thoughtcrime.securesms.ui.components.SlimOutlineCopyButton
import org.thoughtcrime.securesms.ui.components.border import org.thoughtcrime.securesms.ui.components.border
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.small import org.thoughtcrime.securesms.ui.theme.LocalType
@Composable @Composable
internal fun InviteFriend( internal fun InviteFriend(
@ -47,7 +46,7 @@ internal fun InviteFriend(
.border() .border()
.padding(LocalDimensions.current.smallMargin), .padding(LocalDimensions.current.smallMargin),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = base style = LocalType.current.base
) )
Spacer(modifier = Modifier.height(LocalDimensions.current.xsItemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.xsItemSpacing))
@ -55,7 +54,7 @@ internal fun InviteFriend(
Text( Text(
stringResource(R.string.invite_your_friend_to_chat_with_you_on_session_by_sharing_your_account_id_with_them), stringResource(R.string.invite_your_friend_to_chat_with_you_on_session_by_sharing_your_account_id_with_them),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = small, style = LocalType.current.small,
color = LocalColors.current.textSecondary, color = LocalColors.current.textSecondary,
modifier = Modifier.padding(horizontal = LocalDimensions.current.smallItemSpacing) modifier = Modifier.padding(horizontal = LocalDimensions.current.smallItemSpacing)
) )

@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.ui.components.PrimaryOutlineButton
import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField
import org.thoughtcrime.securesms.ui.components.SessionTabRow import org.thoughtcrime.securesms.ui.components.SessionTabRow
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.small import org.thoughtcrime.securesms.ui.theme.LocalType
private val TITLES = listOf(R.string.enter_account_id, R.string.qrScan) private val TITLES = listOf(R.string.enter_account_id, R.string.qrScan)
@ -100,7 +100,7 @@ private fun EnterAccountId(
.contentDescription(R.string.AccessibilityId_help_desk_link) .contentDescription(R.string.AccessibilityId_help_desk_link)
.padding(horizontal = LocalDimensions.current.margin) .padding(horizontal = LocalDimensions.current.margin)
.fillMaxWidth(), .fillMaxWidth(),
style = small, style = LocalType.current.small,
color = LocalColors.current.textSecondary, color = LocalColors.current.textSecondary,
iconRes = R.drawable.ic_circle_question_mark, iconRes = R.drawable.ic_circle_question_mark,
onClick = onHelp onClick = onHelp

@ -68,14 +68,14 @@ import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.TitledText import org.thoughtcrime.securesms.ui.TitledText
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.baseBold
import org.thoughtcrime.securesms.ui.theme.baseMonospace
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.blackAlpha40 import org.thoughtcrime.securesms.ui.theme.blackAlpha40
import org.thoughtcrime.securesms.ui.theme.dangerButtonColors import org.thoughtcrime.securesms.ui.theme.dangerButtonColors
import org.thoughtcrime.securesms.ui.setComposeContent import org.thoughtcrime.securesms.ui.setComposeContent
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.bold
import org.thoughtcrime.securesms.ui.theme.monospace
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -361,7 +361,7 @@ fun FileDetails(fileDetails: List<TitledText>) {
fun TitledErrorText(titledText: TitledText?) { fun TitledErrorText(titledText: TitledText?) {
TitledText( TitledText(
titledText, titledText,
style = base, style = LocalType.current.base,
color = LocalColors.current.danger color = LocalColors.current.danger
) )
} }
@ -370,7 +370,7 @@ fun TitledErrorText(titledText: TitledText?) {
fun TitledMonospaceText(titledText: TitledText?) { fun TitledMonospaceText(titledText: TitledText?) {
TitledText( TitledText(
titledText, titledText,
style = baseMonospace style = LocalType.current.base.monospace()
) )
} }
@ -378,7 +378,7 @@ fun TitledMonospaceText(titledText: TitledText?) {
fun TitledText( fun TitledText(
titledText: TitledText?, titledText: TitledText?,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
style: TextStyle = base, style: TextStyle = LocalType.current.base,
color: Color = Color.Unspecified color: Color = Color.Unspecified
) { ) {
titledText?.apply { titledText?.apply {
@ -396,7 +396,7 @@ fun TitledText(
@Composable @Composable
fun TitledView(title: GetString, modifier: Modifier = Modifier, content: @Composable () -> Unit) { fun TitledView(title: GetString, modifier: Modifier = Modifier, content: @Composable () -> Unit) {
Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.xxxsItemSpacing)) { Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.xxxsItemSpacing)) {
Text(title.string(), style = baseBold) Text(title.string(), style = LocalType.current.base.bold())
content() content()
} }
} }

@ -19,12 +19,9 @@ import org.thoughtcrime.securesms.ui.Divider
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.h4 import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.h8
import org.thoughtcrime.securesms.ui.theme.small
@Composable @Composable
internal fun EmptyView(newAccount: Boolean) { internal fun EmptyView(newAccount: Boolean) {
@ -42,12 +39,12 @@ internal fun EmptyView(newAccount: Boolean) {
if (newAccount) { if (newAccount) {
Text( Text(
stringResource(R.string.onboardingAccountCreated), stringResource(R.string.onboardingAccountCreated),
style = h4, style = LocalType.current.h4,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Text( Text(
stringResource(R.string.welcome_to_session), stringResource(R.string.welcome_to_session),
style = base, style = LocalType.current.base,
color = LocalColors.current.primary, color = LocalColors.current.primary,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
@ -57,12 +54,12 @@ internal fun EmptyView(newAccount: Boolean) {
Text( Text(
stringResource(R.string.conversationsNone), stringResource(R.string.conversationsNone),
style = h8, style = LocalType.current.h8,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = LocalDimensions.current.xsItemSpacing)) modifier = Modifier.padding(bottom = LocalDimensions.current.xsItemSpacing))
Text( Text(
stringResource(R.string.onboardingHitThePlusButton), stringResource(R.string.onboardingHitThePlusButton),
style = small, style = LocalType.current.small,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(modifier = Modifier.weight(2f)) Spacer(modifier = Modifier.weight(2f))

@ -26,8 +26,7 @@ import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.SlimPrimaryOutlineButton import org.thoughtcrime.securesms.ui.components.SlimPrimaryOutlineButton
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.h8 import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.small
@Composable @Composable
internal fun SeedReminder(startRecoveryPasswordActivity: () -> Unit) { internal fun SeedReminder(startRecoveryPasswordActivity: () -> Unit) {
@ -51,14 +50,14 @@ internal fun SeedReminder(startRecoveryPasswordActivity: () -> Unit) {
Row { Row {
Text( Text(
stringResource(R.string.save_your_recovery_password), stringResource(R.string.save_your_recovery_password),
style = h8 style = LocalType.current.h8
) )
Spacer(Modifier.requiredWidth(LocalDimensions.current.xxsItemSpacing)) Spacer(Modifier.requiredWidth(LocalDimensions.current.xxsItemSpacing))
SessionShieldIcon() SessionShieldIcon()
} }
Text( Text(
stringResource(R.string.save_your_recovery_password_to_make_sure_you_don_t_lose_access_to_your_account), stringResource(R.string.save_your_recovery_password_to_make_sure_you_don_t_lose_access_to_your_account),
style = small style = LocalType.current.small
) )
} }
Spacer(Modifier.width(LocalDimensions.current.xxsMargin)) Spacer(Modifier.width(LocalDimensions.current.xxsMargin))

@ -48,8 +48,7 @@ import org.thoughtcrime.securesms.ui.components.BorderlessHtmlButton
import org.thoughtcrime.securesms.ui.components.PrimaryFillButton import org.thoughtcrime.securesms.ui.components.PrimaryFillButton
import org.thoughtcrime.securesms.ui.components.PrimaryOutlineButton import org.thoughtcrime.securesms.ui.components.PrimaryOutlineButton
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.h4 import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.large
import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.milliseconds
@Preview @Preview
@ -113,7 +112,7 @@ internal fun LandingScreen(
Text( Text(
stringResource(R.string.onboardingBubblePrivacyInYourPocket), stringResource(R.string.onboardingBubblePrivacyInYourPocket),
modifier = Modifier.align(Alignment.CenterHorizontally), modifier = Modifier.align(Alignment.CenterHorizontally),
style = h4, style = LocalType.current.h4,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacing))
@ -217,7 +216,7 @@ private fun MessageText(
) { ) {
Text( Text(
text, text,
style = large, style = LocalType.current.large,
color = textColor, color = textColor,
modifier = Modifier.padding( modifier = Modifier.padding(
horizontal = LocalDimensions.current.smallItemSpacing, horizontal = LocalDimensions.current.smallItemSpacing,

@ -26,11 +26,10 @@ import network.loki.messenger.R
import org.thoughtcrime.securesms.onboarding.ui.ContinuePrimaryOutlineButton import org.thoughtcrime.securesms.onboarding.ui.ContinuePrimaryOutlineButton
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.components.MaybeScanQrCode import org.thoughtcrime.securesms.ui.components.MaybeScanQrCode
import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField
import org.thoughtcrime.securesms.ui.components.SessionTabRow import org.thoughtcrime.securesms.ui.components.SessionTabRow
import org.thoughtcrime.securesms.ui.theme.h4 import org.thoughtcrime.securesms.ui.theme.LocalType
private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan) private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
@ -83,7 +82,7 @@ private fun RecoveryPassword(state: State, onChange: (String) -> Unit = {}, onCo
Row { Row {
Text( Text(
text = stringResource(R.string.sessionRecoveryPassword), text = stringResource(R.string.sessionRecoveryPassword),
style = h4 style = LocalType.current.h4
) )
Spacer(Modifier.width(LocalDimensions.current.xxsItemSpacing)) Spacer(Modifier.width(LocalDimensions.current.xxsItemSpacing))
Icon( Icon(
@ -95,7 +94,7 @@ private fun RecoveryPassword(state: State, onChange: (String) -> Unit = {}, onCo
Spacer(Modifier.height(LocalDimensions.current.smallItemSpacing)) Spacer(Modifier.height(LocalDimensions.current.smallItemSpacing))
Text( Text(
stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings), stringResource(R.string.activity_link_enter_your_recovery_password_to_load_your_account_if_you_haven_t_saved_it_you_can_find_it_in_your_app_settings),
style = base style = LocalType.current.base
) )
Spacer(Modifier.height(LocalDimensions.current.itemSpacing)) Spacer(Modifier.height(LocalDimensions.current.itemSpacing))
SessionOutlinedTextField( SessionOutlinedTextField(

@ -11,9 +11,8 @@ import androidx.compose.ui.res.stringResource
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.ProgressArc import org.thoughtcrime.securesms.ui.ProgressArc
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.h7 import org.thoughtcrime.securesms.ui.theme.LocalType
@Composable @Composable
internal fun LoadingScreen(progress: Float) { internal fun LoadingScreen(progress: Float) {
@ -25,12 +24,12 @@ internal fun LoadingScreen(progress: Float) {
) )
Text( Text(
stringResource(R.string.waitOneMoment), stringResource(R.string.waitOneMoment),
style = h7 style = LocalType.current.h7
) )
Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsItemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.xxxsItemSpacing))
Text( Text(
stringResource(R.string.loadAccountProgressMessage), stringResource(R.string.loadAccountProgressMessage),
style = base style = LocalType.current.base
) )
Spacer(modifier = Modifier.weight(2f)) Spacer(modifier = Modifier.weight(2f))
} }

@ -25,16 +25,12 @@ import org.thoughtcrime.securesms.onboarding.ui.ContinuePrimaryOutlineButton
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.CircularProgressIndicator import org.thoughtcrime.securesms.ui.components.CircularProgressIndicator
import org.thoughtcrime.securesms.ui.components.RadioButton import org.thoughtcrime.securesms.ui.components.RadioButton
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.h4 import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.h8
import org.thoughtcrime.securesms.ui.theme.h9
import org.thoughtcrime.securesms.ui.theme.small
@Composable @Composable
internal fun MessageNotificationsScreen( internal fun MessageNotificationsScreen(
@ -61,9 +57,9 @@ internal fun MessageNotificationsScreen(
Spacer(Modifier.weight(1f)) Spacer(Modifier.weight(1f))
Column(modifier = Modifier.padding(horizontal = LocalDimensions.current.onboardingMargin)) { Column(modifier = Modifier.padding(horizontal = LocalDimensions.current.onboardingMargin)) {
Text(stringResource(R.string.notificationsMessage), style = h4) Text(stringResource(R.string.notificationsMessage), style = LocalType.current.h4)
Spacer(Modifier.height(LocalDimensions.current.xsMargin)) Spacer(Modifier.height(LocalDimensions.current.xsMargin))
Text(stringResource(R.string.onboardingMessageNotificationExplaination), style = base) Text(stringResource(R.string.onboardingMessageNotificationExplaination), style = LocalType.current.base)
Spacer(Modifier.height(LocalDimensions.current.itemSpacing)) Spacer(Modifier.height(LocalDimensions.current.itemSpacing))
} }
@ -119,15 +115,15 @@ private fun NotificationRadioButton(
Column(modifier = Modifier Column(modifier = Modifier
.padding(horizontal = 15.dp) .padding(horizontal = 15.dp)
.padding(top = 10.dp, bottom = 11.dp)) { .padding(top = 10.dp, bottom = 11.dp)) {
Text(stringResource(title), style = h8) Text(stringResource(title), style = LocalType.current.h8)
Text(stringResource(explanation), style = small, modifier = Modifier.padding(top = 7.dp)) Text(stringResource(explanation), style = LocalType.current.small, modifier = Modifier.padding(top = 7.dp))
tag?.let { tag?.let {
Text( Text(
stringResource(it), stringResource(it),
modifier = Modifier.padding(top = 6.dp), modifier = Modifier.padding(top = 6.dp),
color = LocalColors.current.primary, color = LocalColors.current.primary,
style = h9 style = LocalType.current.h9
) )
} }
} }

@ -19,9 +19,8 @@ import org.thoughtcrime.securesms.onboarding.OnboardingBackPressAlertDialog
import org.thoughtcrime.securesms.onboarding.ui.ContinuePrimaryOutlineButton import org.thoughtcrime.securesms.onboarding.ui.ContinuePrimaryOutlineButton
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField
import org.thoughtcrime.securesms.ui.theme.h4 import org.thoughtcrime.securesms.ui.theme.LocalType
@Preview @Preview
@Composable @Composable
@ -57,11 +56,11 @@ internal fun PickDisplayName(
Column( Column(
modifier = Modifier.padding(horizontal = LocalDimensions.current.largeMargin) modifier = Modifier.padding(horizontal = LocalDimensions.current.largeMargin)
) { ) {
Text(stringResource(state.title), style = h4) Text(stringResource(state.title), style = LocalType.current.h4)
Spacer(Modifier.height(LocalDimensions.current.smallItemSpacing)) Spacer(Modifier.height(LocalDimensions.current.smallItemSpacing))
Text( Text(
stringResource(state.description), stringResource(state.description),
style = base, style = LocalType.current.base,
modifier = Modifier.padding(bottom = LocalDimensions.current.xsItemSpacing)) modifier = Modifier.padding(bottom = LocalDimensions.current.xsItemSpacing))
Spacer(Modifier.height(LocalDimensions.current.itemSpacing)) Spacer(Modifier.height(LocalDimensions.current.itemSpacing))
SessionOutlinedTextField( SessionOutlinedTextField(

@ -32,7 +32,7 @@ import org.thoughtcrime.securesms.ui.components.QrImage
import org.thoughtcrime.securesms.ui.components.SessionTabRow import org.thoughtcrime.securesms.ui.components.SessionTabRow
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.setComposeContent import org.thoughtcrime.securesms.ui.setComposeContent
import org.thoughtcrime.securesms.ui.theme.small import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.util.start import org.thoughtcrime.securesms.util.start
private val TITLES = listOf(R.string.view, R.string.scan) private val TITLES = listOf(R.string.view, R.string.scan)
@ -109,7 +109,7 @@ fun QrPage(string: String) {
text = stringResource(R.string.this_is_your_account_id_other_users_can_scan_it_to_start_a_conversation_with_you), text = stringResource(R.string.this_is_your_account_id_other_users_can_scan_it_to_start_a_conversation_with_you),
color = LocalColors.current.textSecondary, color = LocalColors.current.textSecondary,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = small style = LocalType.current.small
) )
} }
} }

@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.SessionShieldIcon import org.thoughtcrime.securesms.ui.SessionShieldIcon
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.components.QrImage import org.thoughtcrime.securesms.ui.components.QrImage
@ -38,8 +37,8 @@ import org.thoughtcrime.securesms.ui.components.SlimOutlineButton
import org.thoughtcrime.securesms.ui.components.SlimOutlineCopyButton import org.thoughtcrime.securesms.ui.components.SlimOutlineCopyButton
import org.thoughtcrime.securesms.ui.components.border import org.thoughtcrime.securesms.ui.components.border
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.extraSmallMonospace import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.h8 import org.thoughtcrime.securesms.ui.theme.monospace
@Composable @Composable
internal fun RecoveryPasswordScreen( internal fun RecoveryPasswordScreen(
@ -75,7 +74,7 @@ private fun RecoveryPasswordCell(
Row { Row {
Text( Text(
stringResource(R.string.sessionRecoveryPassword), stringResource(R.string.sessionRecoveryPassword),
style = h8 style = LocalType.current.h8
) )
Spacer(Modifier.width(LocalDimensions.current.xxsItemSpacing)) Spacer(Modifier.width(LocalDimensions.current.xxsItemSpacing))
SessionShieldIcon() SessionShieldIcon()
@ -85,7 +84,7 @@ private fun RecoveryPasswordCell(
Text( Text(
stringResource(R.string.recoveryPasswordDescription), stringResource(R.string.recoveryPasswordDescription),
style = base style = LocalType.current.base
) )
AnimatedVisibility(!showQr) { AnimatedVisibility(!showQr) {
@ -142,7 +141,7 @@ private fun RecoveryPassword(mnemonic: String) {
.border() .border()
.padding(LocalDimensions.current.smallMargin), .padding(LocalDimensions.current.smallMargin),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = extraSmallMonospace, style = LocalType.current.extraSmall.monospace(),
color = LocalColors.current.run { if (isLight) text else primary }, color = LocalColors.current.run { if (isLight) text else primary },
) )
} }
@ -156,11 +155,11 @@ private fun HideRecoveryPasswordCell(onHide: () -> Unit = {}) {
) { ) {
Text( Text(
stringResource(R.string.recoveryPasswordHideRecoveryPassword), stringResource(R.string.recoveryPasswordHideRecoveryPassword),
style = h8 style = LocalType.current.h8
) )
Text( Text(
stringResource(R.string.recoveryPasswordHideRecoveryPasswordDescription), stringResource(R.string.recoveryPasswordHideRecoveryPasswordDescription),
style = base style = LocalType.current.base
) )
} }
Spacer(modifier = Modifier.width(LocalDimensions.current.xxsMargin)) Spacer(modifier = Modifier.width(LocalDimensions.current.xxsMargin))

@ -1,6 +1,5 @@
package org.thoughtcrime.securesms.ui package org.thoughtcrime.securesms.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.IntrinsicSize
@ -24,14 +23,12 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.h7 import org.thoughtcrime.securesms.ui.theme.bold
import org.thoughtcrime.securesms.ui.theme.large
import org.thoughtcrime.securesms.ui.theme.largeBold
class DialogButtonModel( class DialogButtonModel(
@ -83,7 +80,7 @@ fun AlertDialog(
Text( Text(
it, it,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = h7, style = LocalType.current.h7,
modifier = Modifier.padding(bottom = LocalDimensions.current.xxsItemSpacing) modifier = Modifier.padding(bottom = LocalDimensions.current.xxsItemSpacing)
) )
} }
@ -91,7 +88,7 @@ fun AlertDialog(
Text( Text(
it, it,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = large, style = LocalType.current.large,
modifier = Modifier.padding(bottom = LocalDimensions.current.xxsItemSpacing) modifier = Modifier.padding(bottom = LocalDimensions.current.xxsItemSpacing)
) )
} }
@ -130,7 +127,7 @@ fun DialogButton(text: String, modifier: Modifier, color: Color = Color.Unspecif
Text( Text(
text, text,
color = color.takeOrElse { LocalColors.current.text }, color = color.takeOrElse { LocalColors.current.text },
style = largeBold, style = LocalType.current.large.bold(),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
modifier = Modifier.padding( modifier = Modifier.padding(
top = LocalDimensions.current.smallItemSpacing, top = LocalDimensions.current.smallItemSpacing,

@ -67,15 +67,10 @@ import org.thoughtcrime.securesms.conversation.disappearingmessages.ui.OptionsCa
import org.thoughtcrime.securesms.ui.components.SmallCircularProgressIndicator import org.thoughtcrime.securesms.ui.components.SmallCircularProgressIndicator
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.base import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.divider import org.thoughtcrime.securesms.ui.theme.divider
import org.thoughtcrime.securesms.ui.theme.extraSmall
import org.thoughtcrime.securesms.ui.theme.h2
import org.thoughtcrime.securesms.ui.theme.h8
import org.thoughtcrime.securesms.ui.theme.large
import org.thoughtcrime.securesms.ui.theme.radioButtonColors import org.thoughtcrime.securesms.ui.theme.radioButtonColors
import org.thoughtcrime.securesms.ui.theme.transparentButtonColors import org.thoughtcrime.securesms.ui.theme.transparentButtonColors
import org.thoughtcrime.securesms.ui.theme.xl
import kotlin.math.min import kotlin.math.min
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -102,7 +97,7 @@ data class RadioOption<T>(
fun <T> OptionsCard(card: OptionsCard<T>, callbacks: Callbacks<T>) { fun <T> OptionsCard(card: OptionsCard<T>, callbacks: Callbacks<T>) {
Text( Text(
card.title(), card.title(),
style = base style = LocalType.current.base
) )
CellNoMargin { CellNoMargin {
LazyColumn( LazyColumn(
@ -124,7 +119,10 @@ fun LargeItemButtonWithDrawable(
colors: ButtonColors = transparentButtonColors(), colors: ButtonColors = transparentButtonColors(),
onClick: () -> Unit onClick: () -> Unit
) { ) {
ItemButtonWithDrawable(textId, icon, modifier.heightIn(min = LocalDimensions.current.minLargeItemButtonHeight), h8, colors, onClick) ItemButtonWithDrawable(
textId, icon, modifier.heightIn(min = LocalDimensions.current.minLargeItemButtonHeight),
LocalType.current.h8, colors, onClick
)
} }
@Composable @Composable
@ -132,7 +130,7 @@ fun ItemButtonWithDrawable(
@StringRes textId: Int, @StringRes textId: Int,
@DrawableRes icon: Int, @DrawableRes icon: Int,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
textStyle: TextStyle = xl, textStyle: TextStyle = LocalType.current.xl,
colors: ButtonColors = transparentButtonColors(), colors: ButtonColors = transparentButtonColors(),
onClick: () -> Unit onClick: () -> Unit
) { ) {
@ -162,7 +160,10 @@ fun LargeItemButton(
colors: ButtonColors = transparentButtonColors(), colors: ButtonColors = transparentButtonColors(),
onClick: () -> Unit onClick: () -> Unit
) { ) {
ItemButton(textId, icon, modifier.heightIn(min = LocalDimensions.current.minLargeItemButtonHeight), h8, colors, onClick) ItemButton(
textId, icon, modifier.heightIn(min = LocalDimensions.current.minLargeItemButtonHeight),
LocalType.current.h8, colors, onClick
)
} }
/** /**
@ -173,7 +174,7 @@ fun ItemButton(
@StringRes textId: Int, @StringRes textId: Int,
@DrawableRes icon: Int, @DrawableRes icon: Int,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
textStyle: TextStyle = xl, textStyle: TextStyle = LocalType.current.xl,
colors: ButtonColors = transparentButtonColors(), colors: ButtonColors = transparentButtonColors(),
onClick: () -> Unit onClick: () -> Unit
) { ) {
@ -203,7 +204,7 @@ fun ItemButton(
text: String, text: String,
icon: @Composable BoxScope.() -> Unit, icon: @Composable BoxScope.() -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
textStyle: TextStyle = xl, textStyle: TextStyle = LocalType.current.xl,
colors: ButtonColors = transparentButtonColors(), colors: ButtonColors = transparentButtonColors(),
onClick: () -> Unit onClick: () -> Unit
) { ) {
@ -281,13 +282,13 @@ fun <T> TitledRadioButton(option: RadioOption<T>, onClick: () -> Unit) {
Column { Column {
Text( Text(
text = option.title(), text = option.title(),
style = large, style = LocalType.current.large,
color = color color = color
) )
option.subtitle?.let { option.subtitle?.let {
Text( Text(
text = it(), text = it(),
style = extraSmall, style = LocalType.current.extraSmall,
color = color color = color
) )
} }
@ -399,7 +400,7 @@ fun ProgressArc(progress: Float, modifier: Modifier = Modifier) {
"${text}%", "${text}%",
color = Color.White, color = Color.White,
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
style = h2 style = LocalType.current.h2
) )
} }
} }

@ -16,10 +16,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.h4
@Preview @Preview
@Composable @Composable
@ -42,7 +42,7 @@ fun AppBar(title: String, onClose: () -> Unit = {}, onBack: (() -> Unit)? = null
} }
} }
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Text(text = title, style = h4) Text(text = title, style = LocalType.current.h4)
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Box(contentAlignment = Alignment.Center, modifier = Modifier.size(LocalDimensions.current.appBarHeight)) { Box(contentAlignment = Alignment.Center, modifier = Modifier.size(LocalDimensions.current.appBarHeight)) {
IconButton(onClick = onClose) { IconButton(onClick = onClose) {

@ -37,13 +37,14 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.LaunchedEffectAsync import org.thoughtcrime.securesms.ui.LaunchedEffectAsync
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.baseBold
import org.thoughtcrime.securesms.ui.theme.buttonShape
import org.thoughtcrime.securesms.ui.theme.ThemeColors import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.bold
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.theme.buttonShape
import kotlin.time.Duration import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
@ -257,7 +258,7 @@ fun BorderlessButtonWithIcon(
text: String, text: String,
@DrawableRes iconRes: Int, @DrawableRes iconRes: Int,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
style: TextStyle = baseBold, style: TextStyle = LocalType.current.base.bold(),
color: Color = LocalColors.current.text, color: Color = LocalColors.current.text,
onClick: () -> Unit onClick: () -> Unit
) { ) {

@ -10,9 +10,8 @@ import androidx.compose.ui.text.TextStyle
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 androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import org.thoughtcrime.securesms.ui.theme.baseBold import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.extraSmall import org.thoughtcrime.securesms.ui.theme.bold
import org.thoughtcrime.securesms.ui.theme.extraSmallBold
interface ButtonStyle { interface ButtonStyle {
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterialApi::class)
@ -27,26 +26,34 @@ interface ButtonStyle {
@SuppressLint("ComposableNaming") @SuppressLint("ComposableNaming")
@Composable fun applyTextConstraints(content: @Composable () -> Unit) { @Composable fun applyTextConstraints(content: @Composable () -> Unit) {
CompositionLocalProvider( CompositionLocalProvider(
LocalTextStyle provides textStyle, LocalTextStyle provides textStyle(),
content = content content = content
) )
} }
val textStyle: TextStyle @Composable
fun textStyle() : TextStyle
val minHeight: Dp val minHeight: Dp
object Large: ButtonStyle { object Large: ButtonStyle {
override val textStyle = baseBold.copy(textAlign = TextAlign.Center) @Composable
override fun textStyle() = LocalType.current.base.bold()
.copy(textAlign = TextAlign.Center)
override val minHeight = 41.dp override val minHeight = 41.dp
} }
object Slim: ButtonStyle { object Slim: ButtonStyle {
override val textStyle = extraSmallBold.copy(textAlign = TextAlign.Center) @Composable
override fun textStyle() = LocalType.current.extraSmall.bold()
.copy(textAlign = TextAlign.Center)
override val minHeight = 29.dp override val minHeight = 29.dp
} }
object Borderless: ButtonStyle { object Borderless: ButtonStyle {
override val textStyle = extraSmall.copy(textAlign = TextAlign.Center) @Composable
override fun textStyle() = LocalType.current.extraSmall
.copy(textAlign = TextAlign.Center)
override val minHeight = 37.dp override val minHeight = 37.dp
} }
} }

@ -57,9 +57,8 @@ import kotlinx.coroutines.launch
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.xl import org.thoughtcrime.securesms.ui.theme.LocalType
import java.util.concurrent.Executors import java.util.concurrent.Executors
private const val TAG = "NewMessageFragment" private const val TAG = "NewMessageFragment"
@ -94,7 +93,7 @@ fun MaybeScanQrCode(
) { ) {
Text( Text(
stringResource(R.string.activity_link_camera_permission_permanently_denied_configure_in_settings), stringResource(R.string.activity_link_camera_permission_permanently_denied_configure_in_settings),
style = base, style = LocalType.current.base,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(modifier = Modifier.size(LocalDimensions.current.itemSpacing)) Spacer(modifier = Modifier.size(LocalDimensions.current.itemSpacing))
@ -113,7 +112,8 @@ fun MaybeScanQrCode(
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Text(stringResource(R.string.fragment_scan_qr_code_camera_access_explanation), style = xl, textAlign = TextAlign.Center) Text(stringResource(R.string.fragment_scan_qr_code_camera_access_explanation),
style = LocalType.current.xl, textAlign = TextAlign.Center)
Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacing)) Spacer(modifier = Modifier.height(LocalDimensions.current.itemSpacing))
PrimaryOutlineButton( PrimaryOutlineButton(
stringResource(R.string.cameraGrantAccess), stringResource(R.string.cameraGrantAccess),

@ -19,13 +19,13 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider import org.thoughtcrime.securesms.ui.theme.SessionColorsParameterProvider
import org.thoughtcrime.securesms.ui.theme.ThemeColors
import org.thoughtcrime.securesms.ui.theme.divider import org.thoughtcrime.securesms.ui.theme.divider
import org.thoughtcrime.securesms.ui.theme.h8
private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan) private val TITLES = listOf(R.string.sessionRecoveryPassword, R.string.qrScan)
@ -58,7 +58,7 @@ fun SessionTabRow(pagerState: PagerState, titles: List<Int>) {
) { ) {
Text( Text(
stringResource(id = it), stringResource(id = it),
style = h8 style = LocalType.current.h8
) )
} }
} }

@ -39,13 +39,13 @@ import androidx.compose.ui.unit.sp
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalDimensions
import org.thoughtcrime.securesms.ui.theme.PreviewTheme import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.base
import org.thoughtcrime.securesms.ui.theme.baseBold
import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalColors
import org.thoughtcrime.securesms.ui.theme.borders import org.thoughtcrime.securesms.ui.theme.borders
import org.thoughtcrime.securesms.ui.theme.text import org.thoughtcrime.securesms.ui.theme.text
import org.thoughtcrime.securesms.ui.theme.textSecondary import org.thoughtcrime.securesms.ui.theme.textSecondary
import org.thoughtcrime.securesms.ui.contentDescription import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.theme.LocalType
import org.thoughtcrime.securesms.ui.theme.bold
@Preview @Preview
@Composable @Composable
@ -85,7 +85,7 @@ fun SessionOutlinedTextField(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
contentDescription: String? = null, contentDescription: String? = null,
onChange: (String) -> Unit = {}, onChange: (String) -> Unit = {},
textStyle: TextStyle = base, textStyle: TextStyle = LocalType.current.base,
placeholder: String = "", placeholder: String = "",
onContinue: () -> Unit = {}, onContinue: () -> Unit = {},
error: String? = null, error: String? = null,
@ -106,7 +106,7 @@ fun SessionOutlinedTextField(
if (text.isEmpty()) { if (text.isEmpty()) {
Text( Text(
text = placeholder, text = placeholder,
style = base, style = LocalType.current.base,
color = LocalColors.current.textSecondary(isTextErrorColor), color = LocalColors.current.textSecondary(isTextErrorColor),
modifier = Modifier.wrapContentSize() modifier = Modifier.wrapContentSize()
.align(Alignment.CenterStart) .align(Alignment.CenterStart)
@ -136,7 +136,7 @@ fun SessionOutlinedTextField(
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
.contentDescription(R.string.AccessibilityId_error_message), .contentDescription(R.string.AccessibilityId_error_message),
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
style = baseBold, style = LocalType.current.base.bold(),
color = LocalColors.current.danger color = LocalColors.current.danger
) )
} }
@ -148,7 +148,7 @@ fun AnnotatedTextWithIcon(
text: String, text: String,
@DrawableRes iconRes: Int, @DrawableRes iconRes: Int,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
style: TextStyle = base, style: TextStyle = LocalType.current.base,
color: Color = Color.Unspecified, color: Color = Color.Unspecified,
iconSize: TextUnit = 12.sp iconSize: TextUnit = 12.sp
) { ) {

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.ui.theme package org.thoughtcrime.securesms.ui.theme
import androidx.compose.material.Typography import androidx.compose.material.Typography
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontFamily.Companion.Monospace import androidx.compose.ui.text.font.FontFamily.Companion.Monospace
@ -8,52 +9,158 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
fun boldStyle(size: TextUnit) = TextStyle.Default.copy(
fontSize = size,
lineHeight = size * 1.2,
fontWeight = FontWeight.Bold,
)
fun defaultStyle(size: TextUnit, fontFamily: FontFamily? = TextStyle.Default.fontFamily) = TextStyle.Default.copy(
fontSize = size, fun TextStyle.bold() = TextStyle.Default.copy(
lineHeight = size * 1.2, fontWeight = FontWeight.Bold
fontFamily = fontFamily
) )
val xl = defaultStyle(18.sp) fun TextStyle.monospace() = TextStyle.Default.copy(
fontFamily = FontFamily.Monospace
val large = defaultStyle(16.sp)
val largeBold = boldStyle(16.sp)
val base = defaultStyle(14.sp)
val baseBold = boldStyle(14.sp)
val baseMonospace = defaultStyle(14.sp, fontFamily = Monospace)
val small = defaultStyle(12.sp)
val smallBold = boldStyle(12.sp)
val smallMonospace = defaultStyle(12.sp, fontFamily = Monospace)
val extraSmall = defaultStyle(11.sp)
val extraSmallBold = boldStyle(11.sp)
val extraSmallMonospace = defaultStyle(11.sp, fontFamily = Monospace)
val fine = defaultStyle(9.sp)
val h1 = boldStyle(36.sp)
val h2 = boldStyle(32.sp)
val h3 = boldStyle(29.sp)
val h4 = boldStyle(26.sp)
val h5 = boldStyle(23.sp)
val h6 = boldStyle(20.sp)
val h7 = boldStyle(18.sp)
val h8 = boldStyle(16.sp)
val h9 = boldStyle(14.sp)
val sessionTypography = Typography(
h1 = h1,
h2 = h2,
h3 = h3,
h4 = h4,
h5 = h5,
h6 = h6,
) )
val sessionTypography = SessionTypography()
data class SessionTypography(
// Body
val xl: TextStyle = TextStyle(
fontSize = 18.sp,
lineHeight = 21.6.sp,
fontWeight = FontWeight.Normal
),
val large: TextStyle = TextStyle(
fontSize = 16.sp,
lineHeight = 19.2.sp,
fontWeight = FontWeight.Normal
),
val base: TextStyle = TextStyle(
fontSize = 14.sp,
lineHeight = 16.8.sp,
fontWeight = FontWeight.Normal
),
val small: TextStyle = TextStyle(
fontSize = 12.sp,
lineHeight = 14.4.sp,
fontWeight = FontWeight.Normal
),
val extraSmall: TextStyle = TextStyle(
fontSize = 11.sp,
lineHeight = 13.2.sp,
fontWeight = FontWeight.Normal
),
val fine: TextStyle = TextStyle(
fontSize = 9.sp,
lineHeight = 10.8.sp,
fontWeight = FontWeight.Normal
),
// Headings
val h1: TextStyle = TextStyle(
fontSize = 36.sp,
lineHeight = 43.2.sp,
fontWeight = FontWeight.Bold
),
val h2: TextStyle = TextStyle(
fontSize = 32.sp,
lineHeight = 38.4.sp,
fontWeight = FontWeight.Bold
),
val h3: TextStyle = TextStyle(
fontSize = 29.sp,
lineHeight = 34.8.sp,
fontWeight = FontWeight.Bold
),
val h4: TextStyle = TextStyle(
fontSize = 26.sp,
lineHeight = 31.2.sp,
fontWeight = FontWeight.Bold
),
val h5: TextStyle = TextStyle(
fontSize = 23.sp,
lineHeight = 27.6.sp,
fontWeight = FontWeight.Bold
),
val h6: TextStyle = TextStyle(
fontSize = 20.sp,
lineHeight = 24.sp,
fontWeight = FontWeight.Bold
),
val h7: TextStyle = TextStyle(
fontSize = 18.sp,
lineHeight = 21.6.sp,
fontWeight = FontWeight.Bold
),
val h8: TextStyle = TextStyle(
fontSize = 16.sp,
lineHeight = 19.2.sp,
fontWeight = FontWeight.Bold
),
val h9: TextStyle = TextStyle(
fontSize = 14.sp,
lineHeight = 16.8.sp,
fontWeight = FontWeight.Bold
)
) {
//todo ready to go when we switch to Material3
// An opinionated override of Material's defaults
/*@Composable
fun asMaterialTypography() = Typography(
// Display
displayLarge = h1,
displayMedium = h1,
displaySmall = h1,
// Headline
headlineLarge = h2,
headlineMedium = h3,
headlineSmall = h4,
// Title
titleLarge = h5,
titleMedium = h6,
titleSmall = h7,
// Body
bodyLarge = large,
bodyMedium = base,
bodySmall = small,
// Label
labelLarge = extraSmall,
labelMedium = fine,
labelSmall = fine
)*/
@Composable
fun asMaterialTypography() = Typography(
h1 = h1,
h2 = h2,
h3 = h3,
h4 = h4,
h5 = h5,
h6 = h6,
subtitle1 = h7,
subtitle2 = h8,
body1 = base,
body2 = small,
button = base,
caption = small,
overline = fine
)
}

@ -163,29 +163,26 @@ fun PreviewThemeColors(
@Composable @Composable
private fun ThemeColors() { private fun ThemeColors() {
Column { Column {
Box(Modifier.background(MaterialTheme.colors.primary)) { Box(Modifier.background(LocalColors.current.primary)) {
Text("primary", style = base) Text("primary", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.primaryVariant)) { Box(Modifier.background(LocalColors.current.background)) {
Text("primaryVariant", style = base) Text("background", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.secondary)) { Box(Modifier.background(LocalColors.current.backgroundSecondary)) {
Text("secondary", style = base) Text("backgroundSecondary", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.secondaryVariant)) { Box(Modifier.background(LocalColors.current.text)) {
Text("secondaryVariant", style = base) Text("text", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.surface)) { Box(Modifier.background(LocalColors.current.textSecondary)) {
Text("surface", style = base) Text("textSecondary", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.primarySurface)) { Box(Modifier.background(LocalColors.current.danger)) {
Text("primarySurface", style = base) Text("danger", style = LocalType.current.base)
} }
Box(Modifier.background(MaterialTheme.colors.background)) { Box(Modifier.background(LocalColors.current.borders)) {
Text("background", style = base) Text("border", style = LocalType.current.base)
}
Box(Modifier.background(MaterialTheme.colors.error)) {
Text("error", style = base)
} }
} }
} }

@ -21,6 +21,8 @@ import org.session.libsession.utilities.AppTextSecurePreferences
// Globally accessible composition local objects // Globally accessible composition local objects
val LocalColors = compositionLocalOf <ThemeColors> { ClassicDark() } val LocalColors = compositionLocalOf <ThemeColors> { ClassicDark() }
val LocalType = compositionLocalOf { sessionTypography }
var selectedTheme: ThemeColors? = null var selectedTheme: ThemeColors? = null
/** /**
@ -51,11 +53,12 @@ fun SessionMaterialTheme(
) { ) {
MaterialTheme( MaterialTheme(
colors = colors.toMaterialColors(), colors = colors.toMaterialColors(),
typography = sessionTypography, typography = sessionTypography.asMaterialTypography(),
shapes = sessionShapes, shapes = sessionShapes,
) { ) {
CompositionLocalProvider( CompositionLocalProvider(
LocalColors provides colors, LocalColors provides colors,
LocalType provides sessionTypography,
LocalContentColor provides colors.text, LocalContentColor provides colors.text,
LocalTextSelectionColors provides colors.textSelectionColors, LocalTextSelectionColors provides colors.textSelectionColors,
) { ) {

Loading…
Cancel
Save