Media: update ui on media viewers

This commit is contained in:
ganfra 2023-05-16 14:51:18 +02:00
parent 6f7d7a004a
commit 2108c2bc21
3 changed files with 74 additions and 18 deletions

View file

@ -27,6 +27,7 @@ import io.element.android.anvilannotations.ContributesNode
import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.Attachment
import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.architecture.inputs import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.designsystem.theme.ElementTheme
import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.RoomScope
@ContributesNode(RoomScope::class) @ContributesNode(RoomScope::class)
@ -45,9 +46,12 @@ class AttachmentsPreviewNode @AssistedInject constructor(
@Composable @Composable
override fun View(modifier: Modifier) { override fun View(modifier: Modifier) {
val state = presenter.present() val state = presenter.present()
AttachmentsPreviewView( ElementTheme(darkTheme = true) {
state = state, AttachmentsPreviewView(
modifier = modifier state = state,
) onDismiss = this::navigateUp,
modifier = modifier
)
}
} }
} }

View file

@ -18,40 +18,88 @@
package io.element.android.features.messages.impl.attachments.preview package io.element.android.features.messages.impl.attachments.preview
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.Attachment
import io.element.android.features.messages.impl.media.local.LocalMediaView import io.element.android.features.messages.impl.media.local.LocalMediaView
import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.ui.strings.R as StringsR
@Composable @Composable
fun AttachmentsPreviewView( fun AttachmentsPreviewView(
state: AttachmentsPreviewState, state: AttachmentsPreviewState,
onDismiss: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
fun onSendClicked() {
}
Scaffold(modifier) { Scaffold(modifier) {
Box( Column(
modifier = Modifier, modifier = Modifier.fillMaxWidth(),
contentAlignment = Alignment.Center
) { ) {
when (state.attachment) { Spacer(
is Attachment.Media -> LocalMediaView(localMedia = state.attachment.localMedia) modifier = Modifier.height(80.dp)
)
Box(
modifier = Modifier
.fillMaxWidth()
.weight(1f)
) {
when (state.attachment) {
is Attachment.Media -> LocalMediaView(
localMedia = state.attachment.localMedia
)
}
} }
AttachmentsPreviewBottomActions(
onCancelClicked = onDismiss,
onSendClicked = ::onSendClicked,
modifier = Modifier
.fillMaxWidth()
.defaultMinSize(minHeight = 120.dp)
.padding(all = 24.dp)
)
} }
} }
} }
@Preview
@Composable @Composable
fun AttachmentsPreviewViewLightPreview(@PreviewParameter(AttachmentsPreviewStateProvider::class) state: AttachmentsPreviewState) = private fun AttachmentsPreviewBottomActions(
ElementPreviewLight { ContentToPreview(state) } onCancelClicked: () -> Unit,
onSendClicked: () -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier,
horizontalArrangement = Arrangement.SpaceBetween
) {
TextButton(onClick = onCancelClicked) {
Text(stringResource(id = StringsR.string.action_cancel))
}
TextButton(onClick = onSendClicked) {
Text(stringResource(id = StringsR.string.action_send))
}
}
}
@Preview @Preview
@Composable @Composable
@ -62,5 +110,6 @@ fun AttachmentsPreviewViewDarkPreview(@PreviewParameter(AttachmentsPreviewStateP
private fun ContentToPreview(state: AttachmentsPreviewState) { private fun ContentToPreview(state: AttachmentsPreviewState) {
AttachmentsPreviewView( AttachmentsPreviewView(
state = state, state = state,
onDismiss = {},
) )
} }

View file

@ -26,6 +26,7 @@ import dagger.assisted.AssistedInject
import io.element.android.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.architecture.inputs import io.element.android.libraries.architecture.inputs
import io.element.android.libraries.designsystem.theme.ElementTheme
import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.media.MediaSource
@ -49,9 +50,11 @@ class MediaViewerNode @AssistedInject constructor(
@Composable @Composable
override fun View(modifier: Modifier) { override fun View(modifier: Modifier) {
val state = presenter.present() val state = presenter.present()
MediaViewerView( ElementTheme(darkTheme = true) {
state = state, MediaViewerView(
modifier = modifier state = state,
) modifier = modifier
)
}
} }
} }