|
|
@ -40,6 +40,7 @@ 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 androidx.compose.ui.unit.dp |
|
|
|
|
|
|
|
import coil.compose.AsyncImage |
|
|
|
import io.element.android.compound.tokens.generated.CompoundIcons |
|
|
|
import io.element.android.compound.tokens.generated.CompoundIcons |
|
|
|
import io.element.android.libraries.architecture.AsyncData |
|
|
|
import io.element.android.libraries.architecture.AsyncData |
|
|
|
import io.element.android.libraries.core.mimetype.MimeTypes |
|
|
|
import io.element.android.libraries.core.mimetype.MimeTypes |
|
|
@ -66,9 +67,6 @@ import me.saket.telephoto.flick.FlickToDismiss |
|
|
|
import me.saket.telephoto.flick.FlickToDismissState |
|
|
|
import me.saket.telephoto.flick.FlickToDismissState |
|
|
|
import me.saket.telephoto.flick.rememberFlickToDismissState |
|
|
|
import me.saket.telephoto.flick.rememberFlickToDismissState |
|
|
|
import me.saket.telephoto.zoomable.ZoomSpec |
|
|
|
import me.saket.telephoto.zoomable.ZoomSpec |
|
|
|
import me.saket.telephoto.zoomable.ZoomableState |
|
|
|
|
|
|
|
import me.saket.telephoto.zoomable.coil.ZoomableAsyncImage |
|
|
|
|
|
|
|
import me.saket.telephoto.zoomable.rememberZoomableImageState |
|
|
|
|
|
|
|
import me.saket.telephoto.zoomable.rememberZoomableState |
|
|
|
import me.saket.telephoto.zoomable.rememberZoomableState |
|
|
|
import kotlin.time.Duration |
|
|
|
import kotlin.time.Duration |
|
|
|
|
|
|
|
|
|
|
@ -181,7 +179,6 @@ private fun MediaViewerPage( |
|
|
|
mediaInfo = state.mediaInfo, |
|
|
|
mediaInfo = state.mediaInfo, |
|
|
|
thumbnailSource = state.thumbnailSource, |
|
|
|
thumbnailSource = state.thumbnailSource, |
|
|
|
isVisible = showThumbnail, |
|
|
|
isVisible = showThumbnail, |
|
|
|
zoomableState = zoomableState |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
if (showError) { |
|
|
|
if (showError) { |
|
|
|
ErrorView( |
|
|
|
ErrorView( |
|
|
@ -316,24 +313,18 @@ private fun ThumbnailView( |
|
|
|
thumbnailSource: MediaSource?, |
|
|
|
thumbnailSource: MediaSource?, |
|
|
|
isVisible: Boolean, |
|
|
|
isVisible: Boolean, |
|
|
|
mediaInfo: MediaInfo, |
|
|
|
mediaInfo: MediaInfo, |
|
|
|
zoomableState: ZoomableState, |
|
|
|
|
|
|
|
modifier: Modifier = Modifier, |
|
|
|
modifier: Modifier = Modifier, |
|
|
|
) { |
|
|
|
) { |
|
|
|
AnimatedVisibility( |
|
|
|
|
|
|
|
visible = isVisible, |
|
|
|
|
|
|
|
enter = fadeIn(), |
|
|
|
|
|
|
|
exit = fadeOut() |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
Box( |
|
|
|
Box( |
|
|
|
modifier = modifier.fillMaxSize(), |
|
|
|
modifier = modifier.fillMaxSize(), |
|
|
|
contentAlignment = Alignment.Center |
|
|
|
contentAlignment = Alignment.Center |
|
|
|
) { |
|
|
|
) { |
|
|
|
|
|
|
|
if (isVisible) { |
|
|
|
val mediaRequestData = MediaRequestData( |
|
|
|
val mediaRequestData = MediaRequestData( |
|
|
|
source = thumbnailSource, |
|
|
|
source = thumbnailSource, |
|
|
|
kind = MediaRequestData.Kind.File(mediaInfo.name, mediaInfo.mimeType) |
|
|
|
kind = MediaRequestData.Kind.File(mediaInfo.name, mediaInfo.mimeType) |
|
|
|
) |
|
|
|
) |
|
|
|
ZoomableAsyncImage( |
|
|
|
AsyncImage( |
|
|
|
state = rememberZoomableImageState(zoomableState), |
|
|
|
|
|
|
|
modifier = Modifier.fillMaxSize(), |
|
|
|
modifier = Modifier.fillMaxSize(), |
|
|
|
model = mediaRequestData, |
|
|
|
model = mediaRequestData, |
|
|
|
contentScale = ContentScale.Fit, |
|
|
|
contentScale = ContentScale.Fit, |
|
|
|