Merge pull request #502 from greenart7c3/main

Aways show images/videos in the dialog screen
This commit is contained in:
Vitor Pamplona
2023-07-13 18:04:20 -04:00
committed by GitHub
2 changed files with 86 additions and 34 deletions

View File

@@ -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 ->

View File

@@ -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
)
} }
} }
} }