diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index 1156ebd1f4..e85103dbd9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -42,20 +42,16 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SheetState import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope 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.platform.LocalDensity import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -73,6 +69,7 @@ import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.designsystem.text.toSp import io.element.android.libraries.designsystem.theme.components.Divider import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet @@ -168,9 +165,11 @@ private fun SheetContent( ) { item { Column { - MessageSummary(event = target.event, modifier = Modifier + MessageSummary( + event = target.event, modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp)) + .padding(horizontal = 16.dp) + ) Spacer(modifier = Modifier.height(14.dp)) Divider() } @@ -347,7 +346,7 @@ private fun EmojiButton( ) { Text( emoji, - fontSize = 28.dpToSp(), + fontSize = 28.dp.toSp(), modifier = modifier.clickable( enabled = true, onClick = { onClicked(emoji) }, @@ -357,11 +356,6 @@ private fun EmojiButton( ) } -@Composable -private fun Int.dpToSp(): TextUnit = with(LocalDensity.current) { - return dp.toSp() -} - @Preview @Composable fun SheetContentLightPreview(@PreviewParameter(ActionListStateProvider::class) state: ActionListState) = diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/pdf/PdfViewer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/pdf/PdfViewer.kt index 839bf9e622..41a111d97d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/pdf/PdfViewer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/pdf/PdfViewer.kt @@ -35,9 +35,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import io.element.android.libraries.designsystem.text.roundToPx +import io.element.android.libraries.designsystem.text.toDp import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import me.saket.telephoto.zoomable.zoomable @@ -51,7 +51,7 @@ fun PdfViewer( modifier = modifier.zoomable(pdfViewerState.zoomableState), contentAlignment = Alignment.Center ) { - val maxWidthInPx = maxWidth.dpToPx() + val maxWidthInPx = maxWidth.roundToPx() DisposableEffect(pdfViewerState) { pdfViewerState.openForWidth(maxWidthInPx) onDispose { @@ -107,15 +107,9 @@ private fun PdfPageView( Box( modifier = modifier .fillMaxWidth() - .height(state.height.pxToDp()) + .height(state.height.toDp()) .background(color = Color.White) ) } } } - -@Composable -private fun Int.pxToDp() = with(LocalDensity.current) { this@pxToDp.toDp() } - -@Composable -private fun Dp.dpToPx() = with(LocalDensity.current) { this@dpToPx.roundToPx() } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt index f229530e09..d503d3bc8e 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt @@ -37,7 +37,7 @@ import coil.compose.AsyncImage import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.debugPlaceholderAvatar -import io.element.android.libraries.designsystem.text.textDp +import io.element.android.libraries.designsystem.text.toSp import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.theme.AvatarGradientEnd import io.element.android.libraries.theme.AvatarGradientStart @@ -103,7 +103,7 @@ private fun InitialsAvatar( Text( modifier = Modifier.align(Alignment.Center), text = avatarData.initial, - fontSize = ((avatarData.size.dp / 2).value).toInt().textDp, + fontSize = avatarData.size.dp.toSp() / 2, color = Color.White, ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/TextDp.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/UnitConverters.kt similarity index 55% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/TextDp.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/UnitConverters.kt index 3a9c8d77c9..9c203de9da 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/TextDp.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/text/UnitConverters.kt @@ -18,13 +18,30 @@ package io.element.android.libraries.designsystem.text import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import androidx.compose.ui.unit.dp -private fun Int.textDp(density: Density): TextUnit = with(density) { - this@textDp.dp.toSp() -} +/** + * Convert Dp to Sp, regarding current density. + * Can be used for instance to use Dp unit for text. + */ +@Composable +fun Dp.toSp(): TextUnit = with(LocalDensity.current) { toSp() } -val Int.textDp: TextUnit - @Composable get() = this.textDp(density = LocalDensity.current) +/** + * Convert Px value to Dp, regarding current density. + */ +@Composable +fun Int.toDp(): Dp = with(LocalDensity.current) { toDp() } + +/** + * Convert Dp value to pixels, regarding current density. + */ +@Composable +fun Dp.toPx(): Float = with(LocalDensity.current) { toPx() } + +/** + * Convert Dp value to pixels, regarding current density. + */ +@Composable +fun Dp.roundToPx(): Int = with(LocalDensity.current) { roundToPx() } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt index a2f70ef8e0..c0ed0460dc 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUsersList.kt @@ -36,11 +36,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.Layout -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.designsystem.text.toPx import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -76,8 +76,8 @@ fun SelectedUsersList( // users, the last visible user will be precisely half visible. This gives an obvious affordance that there are more entries and the list can be scrolled. // For efficiency, we assume that all the children are the same width. If they needed to be different sizes we'd have to do this calculation each time // they needed to be measured. - val minimumSpacing = with(LocalDensity.current) { 24.dp.toPx() } - val userWidth = with(LocalDensity.current) { 56.dp.toPx() } + val minimumSpacing = 24.dp.toPx() + val userWidth = 56.dp.toPx() val userSpacing by remember { derivedStateOf { if (rowWidth == 0) {