mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-27 18:46:39 +02:00
Merge pull request #502 from greenart7c3/main
Aways show images/videos in the dialog screen
This commit is contained in:
@@ -101,9 +101,9 @@ fun LoadThumbAndThenVideoView(
|
|||||||
|
|
||||||
if (loadingFinished.first) {
|
if (loadingFinished.first) {
|
||||||
if (loadingFinished.second != null) {
|
if (loadingFinished.second != null) {
|
||||||
VideoView(videoUri, description, VideoThumb(loadingFinished.second), accountViewModel, onDialog)
|
VideoView(videoUri, description, VideoThumb(loadingFinished.second), accountViewModel, onDialog = onDialog)
|
||||||
} else {
|
} else {
|
||||||
VideoView(videoUri, description, null, accountViewModel, onDialog)
|
VideoView(videoUri, description, null, accountViewModel, onDialog = onDialog)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,10 +115,11 @@ fun VideoView(
|
|||||||
description: String? = null,
|
description: String? = null,
|
||||||
thumb: VideoThumb? = null,
|
thumb: VideoThumb? = null,
|
||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
|
alwaysShowVideo: Boolean = false,
|
||||||
onDialog: ((Boolean) -> Unit)? = null
|
onDialog: ((Boolean) -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
val (value, elapsed) = measureTimedValue {
|
val (value, elapsed) = measureTimedValue {
|
||||||
VideoView1(videoUri, description, thumb, onDialog, accountViewModel)
|
VideoView1(videoUri, description, thumb, onDialog, accountViewModel, alwaysShowVideo)
|
||||||
}
|
}
|
||||||
Log.d("Rendering Metrics", "VideoView $elapsed $videoUri")
|
Log.d("Rendering Metrics", "VideoView $elapsed $videoUri")
|
||||||
}
|
}
|
||||||
@@ -129,7 +130,8 @@ fun VideoView1(
|
|||||||
description: String? = null,
|
description: String? = null,
|
||||||
thumb: VideoThumb? = null,
|
thumb: VideoThumb? = null,
|
||||||
onDialog: ((Boolean) -> Unit)? = null,
|
onDialog: ((Boolean) -> Unit)? = null,
|
||||||
accountViewModel: AccountViewModel
|
accountViewModel: AccountViewModel,
|
||||||
|
alwaysShowVideo: Boolean = false
|
||||||
) {
|
) {
|
||||||
var exoPlayerData by remember { mutableStateOf<VideoPlayer?>(null) }
|
var exoPlayerData by remember { mutableStateOf<VideoPlayer?>(null) }
|
||||||
val defaultToStart by remember { mutableStateOf(DefaultMutedSetting.value) }
|
val defaultToStart by remember { mutableStateOf(DefaultMutedSetting.value) }
|
||||||
@@ -144,7 +146,7 @@ fun VideoView1(
|
|||||||
}
|
}
|
||||||
|
|
||||||
exoPlayerData?.let {
|
exoPlayerData?.let {
|
||||||
VideoView(videoUri, description, it, defaultToStart, thumb, onDialog, accountViewModel)
|
VideoView(videoUri, description, it, defaultToStart, thumb, onDialog, accountViewModel, alwaysShowVideo)
|
||||||
}
|
}
|
||||||
|
|
||||||
DisposableEffect(Unit) {
|
DisposableEffect(Unit) {
|
||||||
@@ -163,10 +165,11 @@ fun VideoView(
|
|||||||
defaultToStart: Boolean = false,
|
defaultToStart: Boolean = false,
|
||||||
thumb: VideoThumb? = null,
|
thumb: VideoThumb? = null,
|
||||||
onDialog: ((Boolean) -> Unit)? = null,
|
onDialog: ((Boolean) -> Unit)? = null,
|
||||||
accountViewModel: AccountViewModel
|
accountViewModel: AccountViewModel,
|
||||||
|
alwaysShowVideo: Boolean = false
|
||||||
) {
|
) {
|
||||||
val (_, elapsed) = measureTimedValue {
|
val (_, elapsed) = measureTimedValue {
|
||||||
VideoView1(videoUri, description, exoPlayerData, defaultToStart, thumb, onDialog, accountViewModel)
|
VideoView1(videoUri, description, exoPlayerData, defaultToStart, thumb, onDialog, accountViewModel, alwaysShowVideo)
|
||||||
}
|
}
|
||||||
Log.d("Rendering Metrics", "VideoView $elapsed $videoUri")
|
Log.d("Rendering Metrics", "VideoView $elapsed $videoUri")
|
||||||
}
|
}
|
||||||
@@ -179,7 +182,8 @@ fun VideoView1(
|
|||||||
defaultToStart: Boolean = false,
|
defaultToStart: Boolean = false,
|
||||||
thumb: VideoThumb? = null,
|
thumb: VideoThumb? = null,
|
||||||
onDialog: ((Boolean) -> Unit)? = null,
|
onDialog: ((Boolean) -> Unit)? = null,
|
||||||
accountViewModel: AccountViewModel
|
accountViewModel: AccountViewModel,
|
||||||
|
alwaysShowVideo: Boolean = false
|
||||||
) {
|
) {
|
||||||
val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
|
val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
|
||||||
|
|
||||||
@@ -190,10 +194,12 @@ fun VideoView1(
|
|||||||
|
|
||||||
val automaticallyStartPlayback = remember {
|
val automaticallyStartPlayback = remember {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
when (settings.automaticallyStartPlayback) {
|
if (alwaysShowVideo) { true } else {
|
||||||
true -> !isMobile
|
when (settings.automaticallyStartPlayback) {
|
||||||
false -> false
|
true -> !isMobile
|
||||||
else -> true
|
false -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -222,7 +228,11 @@ fun VideoView1(
|
|||||||
prepare()
|
prepare()
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderVideoPlayer(exoPlayerData, thumb, automaticallyStartPlayback, onDialog)
|
if (!automaticallyStartPlayback.value) {
|
||||||
|
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
|
||||||
|
} else {
|
||||||
|
RenderVideoPlayer(exoPlayerData, thumb, automaticallyStartPlayback, onDialog)
|
||||||
|
}
|
||||||
|
|
||||||
DisposableEffect(Unit) {
|
DisposableEffect(Unit) {
|
||||||
val observer = LifecycleEventObserver { _, event ->
|
val observer = LifecycleEventObserver { _, event ->
|
||||||
|
@@ -201,11 +201,20 @@ fun ZoomableContentView(
|
|||||||
|
|
||||||
when (content) {
|
when (content) {
|
||||||
is ZoomableUrlImage -> UrlImageView(content, mainImageModifier, accountViewModel)
|
is ZoomableUrlImage -> UrlImageView(content, mainImageModifier, accountViewModel)
|
||||||
is ZoomableUrlVideo -> VideoView(content.url, content.description, accountViewModel = accountViewModel) { dialogOpen = true }
|
is ZoomableUrlVideo -> VideoView(
|
||||||
|
content.url,
|
||||||
|
content.description,
|
||||||
|
accountViewModel = accountViewModel
|
||||||
|
) { dialogOpen = true }
|
||||||
|
|
||||||
is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, accountViewModel)
|
is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, accountViewModel)
|
||||||
is ZoomableLocalVideo ->
|
is ZoomableLocalVideo ->
|
||||||
content.localFile?.let {
|
content.localFile?.let {
|
||||||
VideoView(it.toUri().toString(), content.description, accountViewModel = accountViewModel) { dialogOpen = true }
|
VideoView(
|
||||||
|
it.toUri().toString(),
|
||||||
|
content.description,
|
||||||
|
accountViewModel = accountViewModel
|
||||||
|
) { dialogOpen = true }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +227,8 @@ fun ZoomableContentView(
|
|||||||
private fun LocalImageView(
|
private fun LocalImageView(
|
||||||
content: ZoomableLocalImage,
|
content: ZoomableLocalImage,
|
||||||
mainImageModifier: Modifier,
|
mainImageModifier: Modifier,
|
||||||
accountViewModel: AccountViewModel?
|
accountViewModel: AccountViewModel?,
|
||||||
|
alwayShowImage: Boolean = false
|
||||||
) {
|
) {
|
||||||
if (content.localFile != null && content.localFile.exists()) {
|
if (content.localFile != null && content.localFile.exists()) {
|
||||||
BoxWithConstraints(contentAlignment = Alignment.Center) {
|
BoxWithConstraints(contentAlignment = Alignment.Center) {
|
||||||
@@ -227,10 +237,12 @@ private fun LocalImageView(
|
|||||||
|
|
||||||
val showImage = remember {
|
val showImage = remember {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
when (settings?.automaticallyShowImages) {
|
if (alwayShowImage) { true } else {
|
||||||
true -> !isMobile
|
when (settings?.automaticallyShowImages) {
|
||||||
false -> false
|
true -> !isMobile
|
||||||
else -> true
|
false -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -268,7 +280,14 @@ private fun LocalImageView(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
AddedImageFeatures(painterState, content, contentScale, myModifier, verifierModifier, showImage)
|
AddedImageFeatures(
|
||||||
|
painterState,
|
||||||
|
content,
|
||||||
|
contentScale,
|
||||||
|
myModifier,
|
||||||
|
verifierModifier,
|
||||||
|
showImage
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
BlankNote()
|
BlankNote()
|
||||||
@@ -279,7 +298,8 @@ private fun LocalImageView(
|
|||||||
private fun UrlImageView(
|
private fun UrlImageView(
|
||||||
content: ZoomableUrlImage,
|
content: ZoomableUrlImage,
|
||||||
mainImageModifier: Modifier,
|
mainImageModifier: Modifier,
|
||||||
accountViewModel: AccountViewModel?
|
accountViewModel: AccountViewModel?,
|
||||||
|
alwayShowImage: Boolean = false
|
||||||
) {
|
) {
|
||||||
BoxWithConstraints(contentAlignment = Alignment.Center) {
|
BoxWithConstraints(contentAlignment = Alignment.Center) {
|
||||||
val settings = accountViewModel?.account?.settings
|
val settings = accountViewModel?.account?.settings
|
||||||
@@ -287,10 +307,12 @@ private fun UrlImageView(
|
|||||||
|
|
||||||
val showImage = remember {
|
val showImage = remember {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
when (settings?.automaticallyShowImages) {
|
if (alwayShowImage) { true } else {
|
||||||
true -> !isMobile
|
when (settings?.automaticallyShowImages) {
|
||||||
false -> false
|
true -> !isMobile
|
||||||
else -> true
|
false -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -328,7 +350,14 @@ private fun UrlImageView(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
AddedImageFeatures(painterState, content, contentScale, myModifier, verifierModifier, showImage)
|
AddedImageFeatures(
|
||||||
|
painterState,
|
||||||
|
content,
|
||||||
|
contentScale,
|
||||||
|
myModifier,
|
||||||
|
verifierModifier,
|
||||||
|
showImage
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,7 +569,12 @@ private fun DisplayBlurHash(
|
|||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList<ZoomableContent> = listOf(imageUrl).toImmutableList(), onDismiss: () -> Unit, accountViewModel: AccountViewModel) {
|
fun ZoomableImageDialog(
|
||||||
|
imageUrl: ZoomableContent,
|
||||||
|
allImages: ImmutableList<ZoomableContent> = listOf(imageUrl).toImmutableList(),
|
||||||
|
onDismiss: () -> Unit,
|
||||||
|
accountViewModel: AccountViewModel
|
||||||
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
|
|
||||||
DisposableEffect(key1 = Unit) {
|
DisposableEffect(key1 = Unit) {
|
||||||
@@ -602,7 +636,10 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList<Zoom
|
|||||||
if (myContent is ZoomableUrlContent) {
|
if (myContent is ZoomableUrlContent) {
|
||||||
SaveToGallery(url = myContent.url)
|
SaveToGallery(url = myContent.url)
|
||||||
} else if (myContent is ZoomableLocalImage && myContent.localFile != null) {
|
} else if (myContent is ZoomableLocalImage && myContent.localFile != null) {
|
||||||
SaveToGallery(localFile = myContent.localFile, mimeType = myContent.mimeType)
|
SaveToGallery(
|
||||||
|
localFile = myContent.localFile,
|
||||||
|
mimeType = myContent.mimeType
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -611,23 +648,28 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList<Zoom
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RenderImageOrVideo(content: ZoomableContent, accountViewModel: AccountViewModel) {
|
private fun RenderImageOrVideo(content: ZoomableContent, accountViewModel: AccountViewModel) {
|
||||||
val mainModifier = Modifier
|
val mainModifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.zoomable(rememberZoomState())
|
.zoomable(rememberZoomState())
|
||||||
|
|
||||||
if (content is ZoomableUrlImage) {
|
if (content is ZoomableUrlImage) {
|
||||||
UrlImageView(content = content, mainImageModifier = mainModifier, accountViewModel)
|
UrlImageView(content = content, mainImageModifier = mainModifier, accountViewModel, alwayShowImage = true)
|
||||||
} else if (content is ZoomableUrlVideo) {
|
} else if (content is ZoomableUrlVideo) {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) {
|
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) {
|
||||||
VideoView(content.url, content.description, accountViewModel = accountViewModel)
|
VideoView(content.url, content.description, accountViewModel = accountViewModel, alwaysShowVideo = true)
|
||||||
}
|
}
|
||||||
} else if (content is ZoomableLocalImage) {
|
} else if (content is ZoomableLocalImage) {
|
||||||
LocalImageView(content = content, mainImageModifier = mainModifier, accountViewModel)
|
LocalImageView(content = content, mainImageModifier = mainModifier, accountViewModel, alwayShowImage = true)
|
||||||
} else if (content is ZoomableLocalVideo) {
|
} else if (content is ZoomableLocalVideo) {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) {
|
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) {
|
||||||
content.localFile?.let {
|
content.localFile?.let {
|
||||||
VideoView(it.toUri().toString(), content.description, accountViewModel = accountViewModel)
|
VideoView(
|
||||||
|
it.toUri().toString(),
|
||||||
|
content.description,
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
alwaysShowVideo = true
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user