🚀 Text Direction based on Content

* Changed all Texts' Direction to match Content's (e.g. Eng -> LTR, Arabic -> RTL)

Resolves: #160
This commit is contained in:
Acclorite 2025-02-06 15:14:07 +02:00
parent 6e497a7d67
commit 7ac83f933d
70 changed files with 639 additions and 610 deletions

View file

@ -18,15 +18,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.progress_indicator.CircularProgressIndicator
import ua.acclorite.book_story.ui.theme.FadeTransitionPreservingSpace
@ -51,18 +50,19 @@ fun AboutItem(
verticalAlignment = Alignment.CenterVertically
) {
Column(Modifier.weight(1f)) {
Text(
title,
style = MaterialTheme.typography.bodyLarge,
StyledText(
text = title,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp
)
)
description?.let {
Text(
it,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
StyledText(
text = it,
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.about
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun AboutTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.about_screen))
StyledText(stringResource(id = R.string.about_screen))
},
navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -18,13 +18,13 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun LazyItemScope.BookInfoChangeCoverBottomSheetItem(
@ -54,16 +54,18 @@ fun LazyItemScope.BookInfoChangeCoverBottomSheetItem(
Column(
verticalArrangement = Arrangement.Center
) {
Text(
text,
style = MaterialTheme.typography.bodyLarge,
StyledText(
text = text,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp
)
Text(
description,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
StyledText(
text = description,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}

View file

@ -14,15 +14,16 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.EditNote
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun BookInfoDetailsBottomSheetItem(
@ -50,14 +51,16 @@ fun BookInfoDetailsBottomSheetItem(
isError = showError,
supportingText = if (!showError || errorMessage.isNullOrBlank()) null else {
{
Text(
StyledText(
text = errorMessage,
style = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.error
)
)
}
},
label = {
Text(label)
StyledText(label)
}
)

View file

@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -23,6 +22,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun BookInfoLayoutActionsItem(
@ -61,10 +61,11 @@ fun BookInfoLayoutActionsItem(
tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(18.dp)
)
Text(
StyledText(
text = title,
style = MaterialTheme.typography.labelMedium,
style = MaterialTheme.typography.labelMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}

View file

@ -10,13 +10,13 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress
@Composable
@ -35,8 +35,8 @@ fun BookInfoLayoutButton(
}
}
) {
Text(
if (book.progress == 0f) stringResource(id = R.string.start_reading)
StyledText(
text = if (book.progress == 0f) stringResource(id = R.string.start_reading)
else stringResource(
id = R.string.continue_reading_query,
"${book.progress.calculateProgress(1)}%"

View file

@ -26,7 +26,6 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@ -41,6 +40,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -97,12 +97,13 @@ fun BookInfoLayoutDescription(
)
}
) {
Text(
if (!book.description.isNullOrBlank()) book.description
StyledText(
text = if (!book.description.isNullOrBlank()) book.description
else stringResource(id = R.string.error_no_description),
style = MaterialTheme.typography.bodyLarge,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
AnimatedVisibility(

View file

@ -14,15 +14,14 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -42,10 +41,8 @@ fun BookInfoLayoutInfoAuthor(
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Text(
book.author.asString(),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyLarge,
StyledText(
text = book.author.asString(),
modifier = Modifier
.fillMaxWidth()
.noRippleClickable(
@ -54,8 +51,10 @@ fun BookInfoLayoutInfoAuthor(
showAuthorDialog(BookInfoEvent.OnShowAuthorDialog)
}
),
maxLines = 1,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
),
maxLines = 1
)
}
}

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.LinearWavyProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -19,6 +18,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@ -42,11 +42,12 @@ fun BookInfoLayoutInfoProgress(
wavelength = 80.dp,
waveSpeed = 15.dp
)
Text(
StyledText(
text = progress,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium,
fontWeight = FontWeight.Medium
),
)
}
}

View file

@ -8,11 +8,10 @@ package ua.acclorite.book_story.presentation.book_info
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent
@ -21,10 +20,8 @@ fun BookInfoLayoutInfoTitle(
book: Book,
showTitleDialog: (BookInfoEvent.OnShowTitleDialog) -> Unit
) {
Text(
book.title,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.headlineSmall,
StyledText(
text = book.title,
modifier = Modifier
.fillMaxWidth()
.noRippleClickable(
@ -33,7 +30,9 @@ fun BookInfoLayoutInfoTitle(
showTitleDialog(BookInfoEvent.OnShowTitleDialog)
}
),
maxLines = 4,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.headlineSmall.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 4
)
}

View file

@ -11,14 +11,13 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@ -55,11 +54,11 @@ fun BookInfoTopBar(
},
contentTitle = {
DefaultTransition(firstVisibleItemIndex.value > 0) {
Text(
book.title,
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onSurface,
overflow = TextOverflow.Ellipsis,
StyledText(
text = book.title,
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
}

View file

@ -18,17 +18,16 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Error
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.NullableBook
import ua.acclorite.book_story.domain.library.book.SelectableNullableBook
import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Unit) {
@ -45,19 +44,19 @@ fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Un
Column(
Modifier.weight(1f)
) {
Text(
StyledText(
text = result.data.bookWithCover!!.book.title,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurface,
maxLines = 1,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
Text(
StyledText(
text = result.data.bookWithCover.book.author.asString(),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
Row {
@ -85,12 +84,12 @@ fun BrowseAddDialogItem(result: SelectableNullableBook, onClick: (Boolean) -> Un
tint = MaterialTheme.colorScheme.error
)
Spacer(modifier = Modifier.width(8.dp))
Text(
StyledText(
text = result.data.fileName!!,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.error,
maxLines = 2,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.error
),
maxLines = 2
)
}
}

View file

@ -19,19 +19,18 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.CircularCheckbox
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.theme.DefaultTransition
import java.text.SimpleDateFormat
import java.util.Date
@ -94,22 +93,22 @@ fun BrowseGridFileItem(file: SelectableFile, hasSelectedItems: Boolean) {
Spacer(modifier = Modifier.height(8.dp))
Text(
file.name,
StyledText(
text = file.name,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
maxLines = 2,
textAlign = TextAlign.Center,
lineHeight = 18.sp,
overflow = TextOverflow.Ellipsis
),
maxLines = 2
)
Spacer(modifier = Modifier.height(2.dp))
Text(
"$fileSize, $lastModified",
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis
StyledText(
text = "$fileSize, $lastModified",
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
}

View file

@ -17,13 +17,13 @@ import androidx.compose.material.icons.filled.PushPin
import androidx.compose.material.icons.outlined.PushPin
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
@Composable
@ -40,11 +40,12 @@ fun BrowseLayoutHeader(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
Text(
modifier = Modifier.weight(1f),
StyledText(
text = header,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge
modifier = Modifier.weight(1f),
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface
)
)
Icon(
modifier = Modifier

View file

@ -23,17 +23,16 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
@ -83,23 +82,23 @@ fun RowScope.BrowseListFileItem(file: SelectableFile) {
}
Spacer(modifier = Modifier.width(12.dp))
Column(verticalArrangement = Arrangement.Center) {
Text(
file.name,
StyledText(
text = file.name,
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
maxLines = 2,
lineHeight = 18.sp,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth()
),
maxLines = 2
)
Spacer(modifier = Modifier.height(2.dp))
Text(
"$fileSize, $lastModified",
StyledText(
text = "$fileSize, $lastModified",
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.fillMaxWidth()
),
maxLines = 1
)
}
}

View file

@ -17,7 +17,6 @@ import androidx.compose.material.icons.filled.SelectAll
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
@ -26,12 +25,12 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.BrowseLayout
import ua.acclorite.book_story.domain.browse.SelectableFile
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -88,10 +87,9 @@ fun BrowseTopBar(
contentID = 0,
contentNavigationIcon = {},
contentTitle = {
Text(
stringResource(id = R.string.browse_screen),
maxLines = 1,
overflow = TextOverflow.Ellipsis
StyledText(
text = stringResource(id = R.string.browse_screen),
maxLines = 1
)
},
contentActions = {
@ -158,12 +156,11 @@ fun BrowseTopBar(
}
},
contentTitle = {
Text(
stringResource(
StyledText(
text = stringResource(
id = R.string.selected_items_count_query,
selectedItemsCount.coerceAtLeast(1)
),
overflow = TextOverflow.Ellipsis,
maxLines = 1
)
},

View file

@ -24,7 +24,10 @@ fun HighlightedText(
modifier: Modifier = Modifier,
text: AnnotatedString,
highlightThickness: FontWeight,
style: TextStyle
style: TextStyle,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis
) {
val highlightedText = remember(text, highlightThickness) {
buildAnnotatedString {
@ -60,7 +63,9 @@ fun HighlightedText(
text = highlightedText,
modifier = modifier,
style = style,
overflow = TextOverflow.Ellipsis
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -21,7 +20,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.R
/**
@ -67,12 +65,12 @@ fun SearchTextField(
) { innerText ->
Box(contentAlignment = Alignment.CenterStart) {
if (query.isEmpty()) {
Text(
StyledText(
text = stringResource(id = R.string.search_field_empty),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.titleLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
innerText()

View file

@ -0,0 +1,84 @@
/*
* Book's Story free and open-source Material You eBook reader.
* Copyright (C) 2024-2025 Acclorite
* SPDX-License-Identifier: GPL-3.0-only
*/
package ua.acclorite.book_story.presentation.core.components.common
import androidx.compose.foundation.text.BasicText
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDirection
import androidx.compose.ui.text.style.TextOverflow
@Composable
fun StyledText(
text: AnnotatedString,
modifier: Modifier = Modifier,
style: TextStyle = LocalTextStyle.current,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis,
highlightText: Boolean = false,
highlightThickness: FontWeight = FontWeight.SemiBold
) {
when (highlightText) {
true -> {
HighlightedText(
modifier = modifier,
text = text,
highlightThickness = highlightThickness,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}
false -> {
BasicText(
modifier = modifier,
text = text,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}
}
}
@Composable
fun StyledText(
text: String,
modifier: Modifier = Modifier,
style: TextStyle = LocalTextStyle.current,
maxLines: Int = Int.MAX_VALUE,
minLines: Int = 1,
overflow: TextOverflow = TextOverflow.Ellipsis
) {
BasicText(
modifier = modifier,
text = text,
style = style.copy(
textDirection = TextDirection.Content,
color = style.color.takeOrElse { LocalContentColor.current }
),
maxLines = maxLines,
minLines = minLines,
overflow = overflow
)
}

View file

@ -8,7 +8,6 @@ package ua.acclorite.book_story.presentation.core.components.common
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Text
import androidx.compose.material3.TooltipBox
import androidx.compose.material3.TooltipDefaults
import androidx.compose.material3.rememberTooltipState
@ -39,7 +38,7 @@ fun Tooltip(
enableUserInput = enabled,
tooltip = {
PlainTooltip {
Text(text = text)
StyledText(text = text)
}
},
state = rememberTooltipState()

View file

@ -27,7 +27,6 @@ import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -47,6 +46,7 @@ import androidx.compose.ui.window.DialogProperties
import androidx.compose.ui.window.DialogWindowProvider
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalMaterial3Api::class)
@ -105,7 +105,7 @@ fun Dialog(
Spacer(modifier = Modifier.height(16.dp))
}
Text(
StyledText(
text = title,
modifier = Modifier
.align(
@ -113,19 +113,21 @@ fun Dialog(
else Alignment.Start
)
.padding(horizontal = 24.dp),
style = MaterialTheme.typography.headlineSmall.copy(
textAlign = if (icon != null) TextAlign.Center
else TextAlign.Start,
style = MaterialTheme.typography.headlineSmall,
color = MaterialTheme.colorScheme.onSurface
)
)
if (description != null) {
Spacer(modifier = Modifier.height(16.dp))
Text(
StyledText(
text = description,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = 24.dp)
modifier = Modifier.padding(horizontal = 24.dp),
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
@ -156,11 +158,12 @@ fun Dialog(
},
enabled = !actionClicked
) {
Text(
StyledText(
text = stringResource(id = R.string.cancel),
style = MaterialTheme.typography.labelLarge,
style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary
)
)
}
TextButton(
@ -172,13 +175,13 @@ fun Dialog(
},
enabled = actionEnabled == true && !actionClicked
) {
Text(
StyledText(
text = stringResource(id = R.string.ok),
style = MaterialTheme.typography.labelLarge,
color =
if (actionEnabled == true) MaterialTheme.colorScheme.primary
style = MaterialTheme.typography.labelLarge.copy(
color = if (actionEnabled == true) MaterialTheme.colorScheme.primary
else MaterialTheme.colorScheme.primary.copy(0.5f)
)
)
}
}
}

View file

@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
@ -24,9 +23,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun DialogWithTextField(
@ -89,10 +88,9 @@ fun DialogWithTextField(
unfocusedContainerColor = Color.Transparent
),
placeholder = {
Text(
StyledText(
text = initialValue,
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
)

View file

@ -16,13 +16,12 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun SelectableDialogItem(
@ -48,12 +47,12 @@ fun SelectableDialogItem(
)
)
Spacer(modifier = Modifier.width(8.dp))
Text(
StyledText(
text = title,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
}
}

View file

@ -11,11 +11,10 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PrimaryTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/**
* Primary Tab Row. Used in BottomSheet in pair with HorizontalPager.
@ -47,11 +46,10 @@ fun ModalBottomSheetTabRow(
selectedContentColor = MaterialTheme.colorScheme.primary,
unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant,
text = {
Text(
tabItem,
StyledText(
text = tabItem,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
)

View file

@ -14,10 +14,10 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/**
* Modal Drawer Title Item.
@ -38,11 +38,12 @@ fun ModalDrawerTitleItem(
.padding(horizontal = 18.dp)
) {
Spacer(modifier = Modifier.height(9.dp))
Text(
StyledText(
text = title,
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(horizontal = 18.dp)
modifier = Modifier.padding(horizontal = 18.dp),
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
Spacer(modifier = Modifier.height(9.dp))
HorizontalDivider()

View file

@ -12,14 +12,13 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.navigator.NavigatorItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.common.Tooltip
@Composable
@ -35,10 +34,9 @@ fun RowScope.NavigationBarItem(
text = stringResource(id = item.tooltip),
padding = 64.dp
) {
Text(
StyledText(
text = stringResource(id = item.title),
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
},

View file

@ -11,14 +11,13 @@ import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationRailItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.navigator.NavigatorItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.common.Tooltip
@Composable
@ -34,10 +33,9 @@ fun NavigationRailItem(
text = stringResource(id = item.tooltip),
padding = 48.dp
) {
Text(
StyledText(
text = stringResource(id = item.title),
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
},

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/**
@ -59,12 +59,13 @@ fun EmptyPlaceholder(
tint = MaterialTheme.colorScheme.primary
)
Spacer(modifier = Modifier.height(4.dp))
Text(
StyledText(
text = message,
style = MaterialTheme.typography.bodyLarge,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center
)
)
if (actionTitle != null) {
Spacer(modifier = Modifier.height(4.dp))
TextButton(
@ -72,11 +73,12 @@ fun EmptyPlaceholder(
action()
}
) {
Text(
actionTitle,
style = MaterialTheme.typography.labelLarge,
StyledText(
text = actionTitle,
style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary
)
)
}
}
}

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/**
* Empty placeholder.
@ -59,12 +59,13 @@ fun ErrorPlaceholder(
tint = MaterialTheme.colorScheme.error
)
Spacer(modifier = Modifier.height(4.dp))
Text(
StyledText(
text = errorMessage,
style = MaterialTheme.typography.bodyLarge,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.error,
textAlign = TextAlign.Center
)
)
if (actionTitle != null) {
Spacer(modifier = Modifier.height(4.dp))
TextButton(
@ -72,11 +73,12 @@ fun ErrorPlaceholder(
action()
}
) {
Text(
actionTitle,
style = MaterialTheme.typography.labelLarge,
StyledText(
text = actionTitle,
style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary
)
)
}
}
}

View file

@ -15,12 +15,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.FilterChip
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.ui.ButtonItem
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
/**
@ -53,8 +53,8 @@ fun ChipsWithTitle(
modifier = Modifier.height(36.dp),
selected = item.selected,
label = {
Text(
item.title,
StyledText(
text = item.title,
style = item.textStyle,
maxLines = 1
)

View file

@ -33,7 +33,6 @@ import androidx.compose.material.icons.filled.Done
import androidx.compose.material3.Icon
import androidx.compose.material3.SegmentedButtonColors
import androidx.compose.material3.SegmentedButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -45,6 +44,7 @@ import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.ui.ButtonItem
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
/**
@ -179,11 +179,12 @@ private fun SegmentedButton(
}
}
Text(
StyledText(
text = button.title,
style = button.textStyle,
style = button.textStyle.copy(
color = if (button.selected) colors.activeContentColor
else colors.inactiveContentColor
)
)
}
}

View file

@ -21,7 +21,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
@ -30,6 +29,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import kotlin.math.roundToInt
@ -78,11 +78,12 @@ fun SliderWithTitle(
Column(Modifier.fillMaxWidth(0.2f)) {
SettingsSubcategoryTitle(title = title, padding = 0.dp)
Spacer(modifier = Modifier.height(4.dp))
Text(
StyledText(
text = placeholder.value,
style = MaterialTheme.typography.bodyMedium,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
Spacer(modifier = Modifier.width(8.dp))
Slider(
@ -98,7 +99,7 @@ fun SliderWithTitle(
PlainTooltip(
modifier = Modifier.clip(CircleShape)
) {
Text(
StyledText(
text = placeholder.value,
modifier = Modifier.padding(
vertical = 6.dp,
@ -166,11 +167,12 @@ fun SliderWithTitle(
Column(Modifier.fillMaxWidth(0.2f)) {
SettingsSubcategoryTitle(title = title, padding = 0.dp)
Spacer(modifier = Modifier.height(4.dp))
Text(
StyledText(
text = placeholder.value,
style = MaterialTheme.typography.bodyMedium,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
Spacer(modifier = Modifier.width(8.dp))
Slider(
@ -186,7 +188,7 @@ fun SliderWithTitle(
PlainTooltip(
modifier = Modifier.clip(CircleShape)
) {
Text(
StyledText(
text = placeholder.value,
modifier = Modifier.padding(
vertical = 6.dp,

View file

@ -17,14 +17,13 @@ import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.material3.SwitchDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
/**
* Checkbox with title.
@ -53,17 +52,18 @@ fun SwitchWithTitle(
verticalAlignment = Alignment.CenterVertically
) {
Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) {
Text(
StyledText(
text = title,
color = MaterialTheme.colorScheme.onSurfaceVariant,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.titleMedium
style = MaterialTheme.typography.titleMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
description?.let {
Text(
StyledText(
text = it,
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}

View file

@ -16,16 +16,15 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.about.Credit
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalLayoutApi::class)
@Composable
@ -41,20 +40,21 @@ fun CreditItem(
.clickable(enabled = credit.website != null) { onClick.invoke() }
.padding(vertical = verticalPadding, horizontal = horizontalPadding)
) {
Text(
StyledText(
text = credit.name,
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onSurface,
maxLines = 2,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 2
)
credit.source?.let {
Text(
StyledText(
text = it,
style = MaterialTheme.typography.bodyMedium,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
if (credit.credits.isNotEmpty()) {
@ -64,16 +64,16 @@ fun CreditItem(
horizontalArrangement = Arrangement.spacedBy(4.dp)
) {
credit.credits.forEach {
Text(
StyledText(
text = it.asString(),
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier
.clip(RoundedCornerShape(100))
.background(MaterialTheme.colorScheme.primary, RoundedCornerShape(100))
.padding(vertical = 4.dp, horizontal = 8.dp)
.clip(CircleShape)
.background(MaterialTheme.colorScheme.primary)
.padding(vertical = 4.dp, horizontal = 8.dp),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onPrimary,
),
maxLines = 1
)
}
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.credits
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun CreditsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.credits_option))
StyledText(stringResource(id = R.string.credits_option))
},
navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -13,12 +13,12 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.browse.BrowseScreen
import ua.acclorite.book_story.ui.main.MainEvent
@ -41,7 +41,7 @@ fun HelpBottomBar(
navigateToBrowse()
}
) {
Text(text = stringResource(id = R.string.done))
StyledText(text = stringResource(id = R.string.done))
}
}
}

View file

@ -26,7 +26,6 @@ import androidx.compose.material.icons.outlined.ArrowDropUp
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@ -41,6 +40,7 @@ import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.help.HelpTip
import ua.acclorite.book_story.domain.util.Position
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.theme.ExpandingTransition
@ -112,11 +112,12 @@ fun HelpItem(
},
verticalAlignment = Alignment.CenterVertically
) {
Text(
StyledText(
text = stringResource(id = helpTip.title),
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.weight(1f)
modifier = Modifier.weight(1f),
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface
)
)
Spacer(modifier = Modifier.width(8.dp))
Icon(
@ -142,7 +143,7 @@ fun HelpItem(
Spacer(modifier = Modifier.height(9.dp))
HorizontalDivider()
Spacer(modifier = Modifier.height(9.dp))
Text(
StyledText(
text = buildAnnotatedString {
helpTip.description.invoke(this@buildAnnotatedString)
},

View file

@ -11,13 +11,13 @@ import androidx.compose.material.icons.outlined.RestartAlt
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -30,7 +30,7 @@ fun HelpTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.help_screen))
StyledText(stringResource(id = R.string.help_screen))
},
navigationIcon = {
if (!fromStart) NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -27,20 +27,19 @@ import androidx.compose.material.icons.filled.Image
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.history.History
import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import java.text.SimpleDateFormat
import java.util.Date
@ -108,28 +107,27 @@ fun LazyItemScope.HistoryItem(
verticalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxHeight()
) {
Text(
historyEntry.book?.title ?: return,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.bodyLarge,
lineHeight = 21.sp,
StyledText(
text = historyEntry.book?.title ?: return,
modifier = Modifier
.fillMaxWidth()
.noRippleClickable(
enabled = !isRefreshing,
onClick = onTitleClick
),
maxLines = 2,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurface,
lineHeight = 21.sp
),
maxLines = 2
)
Text(
pattern.format(date),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier
.fillMaxWidth(),
maxLines = 1,
overflow = TextOverflow.Ellipsis
StyledText(
text = pattern.format(date),
modifier = Modifier.fillMaxWidth(),
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
}

View file

@ -11,7 +11,6 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.outlined.DeleteSweep
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
@ -21,6 +20,7 @@ import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -56,7 +56,7 @@ fun HistoryTopBar(
contentID = 0,
contentNavigationIcon = {},
contentTitle = {
Text(stringResource(id = R.string.history_screen))
StyledText(stringResource(id = R.string.history_screen))
},
contentActions = {
IconButton(

View file

@ -26,7 +26,6 @@ import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
@ -35,11 +34,11 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.SelectableBook
import ua.acclorite.book_story.presentation.core.components.common.AsyncCoverImage
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.calculateProgress
@OptIn(ExperimentalFoundationApi::class)
@ -111,16 +110,17 @@ fun LazyGridItemScope.LibraryItem(
)
}
Text(
progress,
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onPrimary,
StyledText(
text = progress,
modifier = Modifier
.padding(6.dp)
.clip(MaterialTheme.shapes.small)
.background(MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small)
.padding(horizontal = 8.dp, vertical = 4.dp),
style = MaterialTheme.typography.bodySmall
style = MaterialTheme.typography.bodySmall.copy(
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onPrimary,
)
)
FilledIconButton(
@ -145,16 +145,16 @@ fun LazyGridItemScope.LibraryItem(
}
}
Spacer(modifier = Modifier.height(6.dp))
Text(
book.data.title,
color = fontColor,
style = MaterialTheme.typography.bodyMedium,
StyledText(
text = book.data.title,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 4.dp),
style = MaterialTheme.typography.bodyMedium.copy(
color = fontColor
),
minLines = 2,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
maxLines = 2
)
}
}

View file

@ -21,7 +21,6 @@ import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRowDefaults
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
@ -31,6 +30,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import ua.acclorite.book_story.domain.library.category.CategoryWithBooks
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun LibraryTabs(
@ -81,13 +81,13 @@ fun LibraryTabs(
unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant,
text = {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(
tabItem.title.asString(),
StyledText(
text = tabItem.title.asString(),
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
)
Spacer(modifier = Modifier.width(6.dp))
Text(
StyledText(
text = tabItem.books.count().toString(),
modifier = Modifier
.background(
@ -95,8 +95,9 @@ fun LibraryTabs(
MaterialTheme.shapes.medium
)
.padding(horizontal = 8.dp, vertical = 4.dp),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}

View file

@ -23,8 +23,8 @@ import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -32,13 +32,13 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.category.CategoryWithBooks
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.SearchTextField
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar
import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData
import ua.acclorite.book_story.presentation.navigator.NavigatorIconButton
@ -86,9 +86,9 @@ fun LibraryTopBar(
contentNavigationIcon = {},
contentTitle = {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(stringResource(id = R.string.library_screen))
StyledText(text = stringResource(id = R.string.library_screen))
Spacer(modifier = Modifier.width(6.dp))
Text(
StyledText(
text = bookCount.toString(),
modifier = Modifier
.background(
@ -96,9 +96,11 @@ fun LibraryTopBar(
RoundedCornerShape(14.dp)
)
.padding(horizontal = 8.dp, vertical = 3.dp),
style = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 16.sp
)
)
}
},
contentActions = {
@ -157,12 +159,11 @@ fun LibraryTopBar(
}
},
contentTitle = {
Text(
stringResource(
StyledText(
text = stringResource(
id = R.string.selected_items_count_query,
selectedItemsCount.coerceAtLeast(1)
),
overflow = TextOverflow.Ellipsis,
maxLines = 1
)
},

View file

@ -15,15 +15,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.mikepenz.aboutlibraries.entity.License
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.theme.SlidingTransition
@Composable
@ -40,12 +39,8 @@ fun LazyItemScope.LicenseInfoItem(
fadeOutSpec = null
)
) {
Text(
StyledText(
text = license.name,
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.titleSmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier
.clip(RoundedCornerShape(100))
.clickable(enabled = license.licenseContent?.isNotBlank() == true) {
@ -55,7 +50,11 @@ fun LazyItemScope.LicenseInfoItem(
MaterialTheme.colorScheme.primary,
RoundedCornerShape(100)
)
.padding(vertical = 6.dp, horizontal = 12.dp)
.padding(vertical = 6.dp, horizontal = 12.dp),
style = MaterialTheme.typography.titleSmall.copy(
color = MaterialTheme.colorScheme.onPrimary,
),
maxLines = 1
)
SlidingTransition(
@ -64,15 +63,16 @@ fun LazyItemScope.LicenseInfoItem(
) {
Column {
Spacer(modifier = Modifier.height(8.dp))
Text(
StyledText(
text = license.licenseContent!!
.lines()
.joinToString(separator = "\n") {
it.trim()
},
style = MaterialTheme.typography.bodyMedium,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
}
}

View file

@ -11,15 +11,14 @@ import androidx.compose.material.icons.outlined.Language
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow
import com.mikepenz.aboutlibraries.entity.Library
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
import ua.acclorite.book_story.ui.about.AboutEvent
@ -35,10 +34,9 @@ fun LicenseInfoTopBar(
LargeTopAppBar(
title = {
Text(
library.name,
maxLines = 1,
overflow = TextOverflow.Ellipsis
StyledText(
text = library.name,
maxLines = 1
)
},
navigationIcon = {

View file

@ -20,18 +20,17 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.mikepenz.aboutlibraries.entity.Library
import com.mikepenz.aboutlibraries.ui.compose.m3.util.author
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@OptIn(ExperimentalLayoutApi::class)
@Composable
@ -46,47 +45,49 @@ fun LicensesItem(
.padding(vertical = 12.dp, horizontal = 18.dp)
) {
Row {
Text(
StyledText(
text = library.name,
modifier = Modifier.weight(1f),
style = MaterialTheme.typography.titleLarge,
style = MaterialTheme.typography.titleLarge.copy(
color = if (library.openSource) MaterialTheme.colorScheme.onSurface
else MaterialTheme.colorScheme.error,
maxLines = 2,
overflow = TextOverflow.Ellipsis
else MaterialTheme.colorScheme.error
),
maxLines = 2
)
if (library.artifactVersion != null || !library.openSource) {
Spacer(modifier = Modifier.width(8.dp))
Column(horizontalAlignment = Alignment.End) {
library.artifactVersion?.let {
Text(
it,
style = MaterialTheme.typography.bodyMedium,
StyledText(
text = it,
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center
)
)
}
if (!library.openSource) {
Text(
stringResource(id = R.string.error_closed_source),
style = MaterialTheme.typography.bodyMedium,
StyledText(
text = stringResource(id = R.string.error_closed_source),
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center
)
)
}
}
}
}
if (library.author.isNotBlank()) {
Text(
StyledText(
text = library.author,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 2,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 2
)
}
if (library.licenses.isNotEmpty()) {
@ -96,16 +97,16 @@ fun LicensesItem(
horizontalArrangement = Arrangement.spacedBy(4.dp)
) {
library.licenses.forEach {
Text(
StyledText(
text = it.name,
color = MaterialTheme.colorScheme.onPrimary,
style = MaterialTheme.typography.bodySmall,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier
.clip(RoundedCornerShape(100))
.background(MaterialTheme.colorScheme.primary, RoundedCornerShape(100))
.padding(vertical = 4.dp, horizontal = 8.dp)
.padding(vertical = 4.dp, horizontal = 8.dp),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onPrimary
),
maxLines = 1
)
}
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.licenses
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun LicensesTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.licenses_option))
StyledText(stringResource(id = R.string.licenses_option))
},
navigationIcon = {
NavigatorBackIconButton(navigateBack = navigateBack)

View file

@ -15,15 +15,14 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.util.Position
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun NavigatorBottomSheetItem(
@ -75,12 +74,12 @@ fun NavigatorBottomSheetItem(
.padding(horizontal = 18.dp, vertical = 18.dp),
contentAlignment = Alignment.Center
) {
Text(
StyledText(
text = title,
style = MaterialTheme.typography.labelLarge,
style = MaterialTheme.typography.labelLarge.copy(
color = if (primary) MaterialTheme.colorScheme.onPrimaryContainer
else MaterialTheme.colorScheme.onSurface,
overflow = TextOverflow.Ellipsis
else MaterialTheme.colorScheme.onSurface
)
)
}
}

View file

@ -22,7 +22,6 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
@ -36,6 +35,7 @@ import ua.acclorite.book_story.domain.reader.Checkpoint
import ua.acclorite.book_story.domain.reader.ReaderText
import ua.acclorite.book_story.domain.util.Direction
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent
import ua.acclorite.book_story.ui.theme.Colors
@ -84,10 +84,11 @@ fun ReaderBottomBar(
) {
Spacer(Modifier.height(16.dp))
Text(
StyledText(
text = progress,
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.titleLarge
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurface
)
)
Spacer(Modifier.height(6.dp))

View file

@ -9,17 +9,16 @@ package ua.acclorite.book_story.presentation.reader
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawer
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerSelectableItem
import ua.acclorite.book_story.presentation.core.components.modal_drawer.ModalDrawerTitleItem
@ -67,17 +66,14 @@ fun ReaderChaptersDrawer(
dismissDrawer(ReaderEvent.OnDismissDrawer)
}
) {
Text(
StyledText(
text = chapter.title,
modifier = Modifier.weight(1f),
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
if (selected) {
Spacer(modifier = Modifier.width(18.dp))
Text(
text = "${currentChapterProgress.calculateProgress(1)}%"
)
StyledText(text = "${currentChapterProgress.calculateProgress(1)}%")
}
}
}

View file

@ -14,19 +14,16 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.domain.reader.ReaderTextAlignment
import ua.acclorite.book_story.presentation.core.components.common.HighlightedText
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun LazyItemScope.ReaderLayoutTextChapter(
@ -46,31 +43,20 @@ fun LazyItemScope.ReaderLayoutTextChapter(
.fillMaxWidth()
) {
Spacer(modifier = Modifier.height(22.dp))
if (highlightedReading) {
HighlightedText(
text = rememberSaveable(saver = AnnotatedString.Saver) {
buildAnnotatedString { append(chapter.title) }
},
highlightThickness = highlightedReadingThickness,
StyledText(
text = buildAnnotatedString { append(chapter.title) },
modifier = Modifier
.padding(horizontal = sidePadding)
.fillMaxWidth(),
style = MaterialTheme.typography.headlineMedium.copy(
color = fontColor,
textAlign = chapterTitleAlignment.textAlignment
),
modifier = Modifier
.padding(horizontal = sidePadding)
.fillMaxWidth()
highlightText = highlightedReading,
highlightThickness = highlightedReadingThickness
)
} else {
Text(
text = chapter.title,
textAlign = chapterTitleAlignment.textAlignment,
style = MaterialTheme.typography.headlineMedium,
color = fontColor,
modifier = Modifier
.padding(horizontal = sidePadding)
.fillMaxWidth()
)
}
Spacer(modifier = Modifier.height(16.dp))
HorizontalDivider(color = fontColor.copy(0.4f))
Spacer(modifier = Modifier.height(16.dp))

View file

@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyItemScope
import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -28,7 +27,7 @@ import ua.acclorite.book_story.domain.reader.FontWithName
import ua.acclorite.book_story.domain.reader.ReaderFontThickness
import ua.acclorite.book_story.domain.reader.ReaderText.Text
import ua.acclorite.book_story.domain.reader.ReaderTextAlignment
import ua.acclorite.book_story.presentation.core.components.common.HighlightedText
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent
@ -64,50 +63,7 @@ fun LazyItemScope.ReaderLayoutTextParagraph(
verticalArrangement = Arrangement.Center,
horizontalAlignment = horizontalAlignment
) {
if (highlightedReading) {
HighlightedText(
text = paragraph.line,
highlightThickness = highlightedReadingThickness,
modifier = Modifier.then(
if (doubleClickTranslation && toolbarHidden) {
Modifier.noRippleClickable(
onDoubleClick = {
openTranslator(
ReaderEvent.OnOpenTranslator(
textToTranslate = paragraph.line.text,
translateWholeParagraph = true,
activity = activity
)
)
},
onClick = {
menuVisibility(
ReaderEvent.OnMenuVisibility(
show = !showMenu,
fullscreenMode = fullscreenMode,
saveCheckpoint = true,
activity = activity
)
)
}
)
} else Modifier
),
style = TextStyle(
fontFamily = fontFamily.font,
fontWeight = fontThickness.thickness,
textAlign = textAlignment.textAlignment,
textIndent = TextIndent(firstLine = paragraphIndentation),
fontStyle = fontStyle,
letterSpacing = letterSpacing,
fontSize = fontSize,
lineHeight = lineHeight,
color = fontColor,
lineBreak = LineBreak.Paragraph
)
)
} else {
BasicText(
StyledText(
text = paragraph.line,
modifier = Modifier.then(
if (doubleClickTranslation && toolbarHidden) {
@ -145,8 +101,9 @@ fun LazyItemScope.ReaderLayoutTextParagraph(
lineHeight = lineHeight,
color = fontColor,
lineBreak = LineBreak.Paragraph
)
),
highlightText = highlightedReading,
highlightThickness = highlightedReadingThickness
)
}
}
}

View file

@ -10,14 +10,14 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.selection.DisableSelection
import androidx.compose.material3.Text
import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit
import ua.acclorite.book_story.domain.util.HorizontalAlignment
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun ReaderProgressBar(
@ -38,12 +38,13 @@ fun ReaderProgressBar(
contentAlignment = progressBarAlignment.alignment
) {
DisableSelection {
Text(
StyledText(
text = progress,
style = LocalTextStyle.current.copy(
color = fontColor,
fontSize = progressBarFontSize,
maxLines = 1,
overflow = TextOverflow.Ellipsis
fontSize = progressBarFontSize
),
maxLines = 1
)
}
}

View file

@ -19,20 +19,20 @@ import androidx.compose.material.icons.rounded.Menu
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.domain.reader.ReaderText.Chapter
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.util.LocalActivity
import ua.acclorite.book_story.presentation.core.util.noRippleClickable
import ua.acclorite.book_story.ui.reader.ReaderEvent
@ -90,13 +90,8 @@ fun ReaderTopBar(
}
},
title = {
Text(
StyledText(
text = book.title,
fontSize = 20.sp,
lineHeight = 20.sp,
color = MaterialTheme.colorScheme.onSurface,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
modifier = Modifier
.padding(end = 8.dp)
.noRippleClickable(
@ -111,18 +106,24 @@ fun ReaderTopBar(
)
)
}
)
),
style = LocalTextStyle.current.copy(
fontSize = 20.sp,
lineHeight = 20.sp,
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
},
subtitle = {
Text(
modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE),
StyledText(
text = currentChapter?.title
?: activity.getString(R.string.no_chapters),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE),
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
},
actions = {

View file

@ -14,16 +14,16 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun SettingsLayoutItem(
@ -48,19 +48,20 @@ fun SettingsLayoutItem(
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
Column {
Text(
StyledText(
text = title,
style = LocalTextStyle.current.copy(
fontSize = 19.sp,
color = MaterialTheme.colorScheme.onSurface,
maxLines = 1,
overflow = TextOverflow.Ellipsis
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
Text(
StyledText(
text = description,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1,
overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun SettingsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.settings_screen))
StyledText(stringResource(id = R.string.settings_screen))
},
navigationIcon = {
NavigatorBackIconButton(

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.appearance
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun AppearanceSettingsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.appearance_settings))
StyledText(stringResource(id = R.string.appearance_settings))
},
navigationIcon = {
NavigatorBackIconButton(

View file

@ -40,7 +40,6 @@ import androidx.compose.material.icons.filled.Shuffle
import androidx.compose.material.icons.rounded.DragHandle
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
@ -55,7 +54,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@ -70,6 +68,7 @@ import ua.acclorite.book_story.domain.reader.ColorPreset
import ua.acclorite.book_story.domain.util.Selected
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.IconButton
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.components.settings.ColorPickerWithTitle
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import ua.acclorite.book_story.ui.settings.SettingsEvent
@ -306,11 +305,11 @@ private fun ReorderableCollectionItemScope.ColorPresetOptionRowItem(
)
}
Text(
title.trim(),
color = animatedFontColor.value,
style = MaterialTheme.typography.labelLarge,
overflow = TextOverflow.Ellipsis,
StyledText(
text = title.trim(),
style = MaterialTheme.typography.labelLarge.copy(
color = animatedFontColor.value
),
maxLines = 1
)
@ -387,12 +386,12 @@ private fun ColorPresetOptionConfigurationItem(
contentAlignment = Alignment.CenterStart
) {
if (title.value.isEmpty()) {
Text(
stringResource(id = R.string.color_preset_placeholder),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.titleLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
StyledText(
text = stringResource(id = R.string.color_preset_placeholder),
style = MaterialTheme.typography.titleLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 1
)
}
innerText()

View file

@ -32,19 +32,18 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.AnimatedVisibility
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle
import ua.acclorite.book_story.ui.main.MainEvent
import ua.acclorite.book_story.ui.main.MainModel
@ -199,11 +198,11 @@ private fun AppThemeOptionItem(
}
}
Spacer(modifier = Modifier.height(6.dp))
Text(
StyledText(
text = stringResource(id = theme.title),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.labelLarge,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
),
maxLines = 2
)
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.browse
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun BrowseSettingsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.browse_settings))
StyledText(stringResource(id = R.string.browse_settings))
},
navigationIcon = {
NavigatorBackIconButton(

View file

@ -18,14 +18,13 @@ import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Checkbox
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.core.constants.Constants
import ua.acclorite.book_story.presentation.core.constants.provideExtensions
import ua.acclorite.book_story.ui.main.MainEvent
@ -70,11 +69,10 @@ private fun BrowseFilterOptionItem(
)
Spacer(modifier = Modifier.width(14.dp))
Text(
StyledText(
text = item,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
}

View file

@ -22,18 +22,17 @@ import androidx.compose.material.icons.filled.ArrowDownward
import androidx.compose.material.icons.filled.ArrowUpward
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.browse.BrowseSortOrder
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.ui.main.MainEvent
import ua.acclorite.book_story.ui.main.MainModel
@ -88,7 +87,7 @@ private fun BrowseSortOptionItem(
)
Spacer(modifier = Modifier.width(24.dp))
Text(
StyledText(
text = stringResource(
when (item) {
BrowseSortOrder.NAME -> R.string.browse_sort_order_name
@ -98,8 +97,7 @@ private fun BrowseSortOptionItem(
}
),
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
maxLines = 1
)
}
}

View file

@ -8,7 +8,6 @@ package ua.acclorite.book_story.presentation.settings.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@ -19,6 +18,7 @@ import androidx.compose.ui.text.style.LineBreak
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun SettingsSubcategoryTitle(
@ -27,16 +27,16 @@ fun SettingsSubcategoryTitle(
color: Color = MaterialTheme.colorScheme.onSurfaceVariant,
padding: Dp = 18.dp
) {
Text(
title,
color = color,
StyledText(
text = title,
modifier = modifier.padding(horizontal = padding),
style = TextStyle(
lineBreak = LineBreak.Heading,
fontFamily = FontFamily.Default,
fontWeight = FontWeight.Medium,
fontSize = 16.sp,
lineHeight = 20.sp
lineHeight = 20.sp,
color = color
)
)
}

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.general
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun GeneralSettingsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.general_settings))
StyledText(stringResource(id = R.string.general_settings))
},
navigationIcon = {
NavigatorBackIconButton(

View file

@ -9,12 +9,12 @@ package ua.acclorite.book_story.presentation.settings.reader
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton
@OptIn(ExperimentalMaterial3Api::class)
@ -25,7 +25,7 @@ fun ReaderSettingsTopBar(
) {
LargeTopAppBar(
title = {
Text(stringResource(id = R.string.reader_settings))
StyledText(stringResource(id = R.string.reader_settings))
},
navigationIcon = {
NavigatorBackIconButton(

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@ -25,6 +24,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun StartDoneBottomBar(
@ -49,7 +49,7 @@ fun StartDoneBottomBar(
navigateToBrowse()
}
) {
Text(text = stringResource(id = R.string.no))
StyledText(text = stringResource(id = R.string.no))
}
Spacer(modifier = Modifier.width(18.dp))
Button(
@ -59,7 +59,7 @@ fun StartDoneBottomBar(
navigateToHelp()
}
) {
Text(text = stringResource(id = R.string.yes_go_to_help))
StyledText(text = stringResource(id = R.string.yes_go_to_help))
}
}
}

View file

@ -18,7 +18,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -27,6 +26,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun StartDoneLayout(
@ -48,18 +48,20 @@ fun StartDoneLayout(
modifier = Modifier.size(190.dp)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
StyledText(
text = stringResource(id = R.string.start_done),
style = MaterialTheme.typography.headlineMedium.copy(
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.headlineMedium,
textAlign = TextAlign.Center
)
)
Spacer(modifier = Modifier.height(4.dp))
Text(
StyledText(
text = stringResource(id = R.string.start_done_desc),
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center
)
)
}
}

View file

@ -13,12 +13,12 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun StartSettingsBottomBar(
@ -37,7 +37,7 @@ fun StartSettingsBottomBar(
onClick = { navigateForward() },
enabled = storagePermissionGranted || currentPage != 2
) {
Text(text = stringResource(id = R.string.next))
StyledText(text = stringResource(id = R.string.next))
}
}
}

View file

@ -19,15 +19,14 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun StartSettingsLayoutPermissionsItem(
@ -44,12 +43,12 @@ fun StartSettingsLayoutPermissionsItem(
) {
Column(Modifier.weight(1f), verticalArrangement = Arrangement.Center) {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(
StyledText(
text = title,
color = MaterialTheme.colorScheme.onSurface,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.titleMedium
style = MaterialTheme.typography.titleMedium.copy(
color = MaterialTheme.colorScheme.onSurface
),
maxLines = 1
)
if (!isOptional) {
@ -62,10 +61,11 @@ fun StartSettingsLayoutPermissionsItem(
)
}
}
Text(
StyledText(
text = description,
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodySmall
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
@ -77,22 +77,23 @@ fun StartSettingsLayoutPermissionsItem(
onClick = onGrantClick,
contentPadding = ButtonDefaults.TextButtonContentPadding
) {
Text(
StyledText(
text = stringResource(id = R.string.grant),
style = MaterialTheme.typography.labelLarge
)
}
} else {
TextButton(onClick = onGrantClick) {
Text(text = stringResource(id = R.string.grant))
StyledText(text = stringResource(id = R.string.grant))
}
}
} else {
Text(
StyledText(
text = stringResource(id = R.string.start_permissions_granted),
color = MaterialTheme.colorScheme.primary.copy(0.7f),
style = MaterialTheme.typography.labelLarge,
modifier = Modifier.padding(ButtonDefaults.TextButtonContentPadding)
modifier = Modifier.padding(ButtonDefaults.TextButtonContentPadding),
style = MaterialTheme.typography.labelLarge.copy(
color = MaterialTheme.colorScheme.primary.copy(0.7f)
)
)
}
}

View file

@ -19,13 +19,13 @@ import androidx.compose.material.icons.filled.GolfCourse
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.R
import ua.acclorite.book_story.presentation.core.components.common.StyledText
@Composable
fun StartSettingsScaffold(
@ -59,16 +59,18 @@ fun StartSettingsScaffold(
modifier = Modifier.size(64.dp)
)
Spacer(modifier = Modifier.height(12.dp))
Text(
StyledText(
text = stringResource(id = R.string.start_welcome),
color = MaterialTheme.colorScheme.onSurface,
style = MaterialTheme.typography.headlineSmall
style = MaterialTheme.typography.headlineSmall.copy(
color = MaterialTheme.colorScheme.onSurface
)
)
Spacer(modifier = Modifier.height(8.dp))
Text(
StyledText(
text = stringResource(id = R.string.start_welcome_desc),
color = MaterialTheme.colorScheme.onSurfaceVariant,
style = MaterialTheme.typography.bodyMedium
style = MaterialTheme.typography.bodyMedium.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant
)
)
Spacer(modifier = Modifier.height(18.dp))