diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
index 660b071983..320457cedd 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
@@ -65,7 +65,7 @@ enum class AvatarSize(val dp: Dp) {
KnockRequestItem(52.dp),
KnockRequestBanner(32.dp),
- MediaSender(32.dp),
+ MediaSender(52.dp),
DmCreationConfirmation(64.dp),
diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt
index b24067e807..74e4621066 100644
--- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt
+++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt
@@ -10,6 +10,7 @@ package io.element.android.libraries.mediaviewer.impl.details
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
@@ -24,6 +25,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
@@ -72,9 +74,8 @@ fun MediaDetailsBottomSheet(
modifier = Modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState()),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.spacedBy(24.dp),
) {
+ Title()
Section(
title = stringResource(R.string.screen_media_details_uploaded_by),
) {
@@ -94,73 +95,72 @@ fun MediaDetailsBottomSheet(
title = stringResource(R.string.screen_media_details_file_format),
text = state.mediaInfo.mimeType + " - " + state.mediaInfo.formattedFileSize,
)
+ Spacer(modifier = Modifier.height(16.dp))
if (state.eventId != null) {
- Column {
+ HorizontalDivider()
+ ListItem(
+ leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.VisibilityOn())),
+ headlineContent = { Text(stringResource(CommonStrings.action_view_in_timeline)) },
+ style = ListItemStyle.Primary,
+ onClick = {
+ onViewInTimeline(state.eventId)
+ }
+ )
+ ListItem(
+ leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.ShareAndroid())),
+ headlineContent = { Text(stringResource(CommonStrings.action_share)) },
+ style = ListItemStyle.Primary,
+ onClick = {
+ onShare(state.eventId)
+ }
+ )
+ ListItem(
+ leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Forward())),
+ headlineContent = { Text(stringResource(CommonStrings.action_forward)) },
+ style = ListItemStyle.Primary,
+ onClick = {
+ onForward(state.eventId)
+ }
+ )
+ ListItem(
+ leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Download())),
+ headlineContent = { Text(stringResource(CommonStrings.action_download)) },
+ style = ListItemStyle.Primary,
+ onClick = {
+ onDownload(state.eventId)
+ }
+ )
+ val mimeType = state.mediaInfo.mimeType
+ val icon = when (mimeType) {
+ MimeTypes.Apk ->
+ ListItemContent.Icon(IconSource.Resource(R.drawable.ic_apk_install))
+ else ->
+ ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut()))
+ }
+ val wording = when (mimeType) {
+ MimeTypes.Apk -> stringResource(id = CommonStrings.common_install_apk_android)
+ else -> stringResource(id = CommonStrings.action_open_with)
+ }
+ ListItem(
+ leadingContent = icon,
+ headlineContent = { Text(wording) },
+ style = ListItemStyle.Primary,
+ onClick = {
+ onOpenWith(state.eventId)
+ }
+ )
+ if (state.canDelete) {
HorizontalDivider()
ListItem(
- leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.VisibilityOn())),
- headlineContent = { Text(stringResource(CommonStrings.action_view_in_timeline)) },
- style = ListItemStyle.Primary,
+ leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Delete())),
+ headlineContent = { Text(stringResource(CommonStrings.action_delete)) },
+ style = ListItemStyle.Destructive,
onClick = {
- onViewInTimeline(state.eventId)
+ onDelete(state.eventId)
}
)
- ListItem(
- leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.ShareAndroid())),
- headlineContent = { Text(stringResource(CommonStrings.action_share)) },
- style = ListItemStyle.Primary,
- onClick = {
- onShare(state.eventId)
- }
- )
- ListItem(
- leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Forward())),
- headlineContent = { Text(stringResource(CommonStrings.action_forward)) },
- style = ListItemStyle.Primary,
- onClick = {
- onForward(state.eventId)
- }
- )
- ListItem(
- leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Download())),
- headlineContent = { Text(stringResource(CommonStrings.action_download)) },
- style = ListItemStyle.Primary,
- onClick = {
- onDownload(state.eventId)
- }
- )
- val mimeType = state.mediaInfo.mimeType
- val icon = when (mimeType) {
- MimeTypes.Apk ->
- ListItemContent.Icon(IconSource.Resource(R.drawable.ic_apk_install))
- else ->
- ListItemContent.Icon(IconSource.Vector(CompoundIcons.PopOut()))
- }
- val wording = when (mimeType) {
- MimeTypes.Apk -> stringResource(id = CommonStrings.common_install_apk_android)
- else -> stringResource(id = CommonStrings.action_open_with)
- }
- ListItem(
- leadingContent = icon,
- headlineContent = { Text(wording) },
- style = ListItemStyle.Primary,
- onClick = {
- onOpenWith(state.eventId)
- }
- )
- if (state.canDelete) {
- HorizontalDivider()
- ListItem(
- leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Delete())),
- headlineContent = { Text(stringResource(CommonStrings.action_delete)) },
- style = ListItemStyle.Destructive,
- onClick = {
- onDelete(state.eventId)
- }
- )
- }
- Spacer(modifier = Modifier.height(16.dp))
}
+ Spacer(modifier = Modifier.height(16.dp))
}
}
}
@@ -216,6 +216,19 @@ private fun SenderRow(
}
}
+@Composable
+private fun ColumnScope.Title() {
+ Text(
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(top = 16.dp, bottom = 8.dp, start = 16.dp, end = 16.dp),
+ text = stringResource(R.string.screen_media_details_title),
+ textAlign = TextAlign.Center,
+ style = ElementTheme.typography.fontBodyLgMedium,
+ color = ElementTheme.colors.textPrimary,
+ )
+}
+
@Composable
private fun Section(
title: String,
@@ -224,12 +237,12 @@ private fun Section(
Column(
modifier = Modifier
.fillMaxWidth()
- .padding(horizontal = 16.dp),
+ .padding(vertical = 8.dp, horizontal = 16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
Text(
- text = title.uppercase(),
- style = ElementTheme.typography.fontBodySmRegular,
+ text = title,
+ style = ElementTheme.typography.fontBodyMdMedium,
color = ElementTheme.colors.textSecondary,
)
content()
diff --git a/libraries/mediaviewer/impl/src/main/res/values/localazy.xml b/libraries/mediaviewer/impl/src/main/res/values/localazy.xml
index 2982f8002f..760ba2e7dc 100644
--- a/libraries/mediaviewer/impl/src/main/res/values/localazy.xml
+++ b/libraries/mediaviewer/impl/src/main/res/values/localazy.xml
@@ -16,6 +16,7 @@
"File name"
"No more files to show"
"No more media to show"
+ "File info"
"Uploaded by"
"Uploaded on"