From b5229f5fe1655bab01ebabfc3cb32c29d893affd Mon Sep 17 00:00:00 2001 From: greenart7c3 <115044884+greenart7c3@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:58:56 -0300 Subject: [PATCH] only load one image when theres multiple images in the note --- .../vitorpamplona/amethyst/model/Account.kt | 2 +- .../amethyst/ui/components/RichTextViewer.kt | 8 ++-- .../ui/components/ZoomableContentView.kt | 48 +++++++++++++++---- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index b703d162a..ea32d6d74 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -74,7 +74,7 @@ class Account( var warnAboutPostsWithReports: Boolean = true, var filterSpamFromStrangers: Boolean = true, var lastReadPerRoute: Map = mapOf(), - var settings: Settings = Settings(null, null) + var settings: Settings = Settings() ) { var transientHiddenUsers: Set = setOf() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index 5c063e4a2..8e66b165b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -162,7 +162,6 @@ private fun RenderRegular( backgroundColor, textStyle, accountViewModel, - showImage, automaticallyStartPlayback, automaticallyShowUrlPreview, nav @@ -244,13 +243,12 @@ private fun RenderWordWithPreview( backgroundColor: MutableState, style: TextStyle, accountViewModel: AccountViewModel, - showImage: MutableState, automaticallyStartPlayback: MutableState, automaticallyShowUrlPreview: MutableState, nav: (String) -> Unit ) { when (word) { - is ImageSegment -> ZoomableContentView(word.segmentText, state, showImage, automaticallyStartPlayback) + is ImageSegment -> ZoomableContentView(word.segmentText, state, accountViewModel, automaticallyStartPlayback) is LinkSegment -> UrlPreview(word.segmentText, word.segmentText, automaticallyShowUrlPreview) is EmojiSegment -> RenderCustomEmoji(word.segmentText, state) is InvoiceSegment -> MayBeInvoicePreview(word.segmentText) @@ -271,11 +269,11 @@ private fun RenderWordWithPreview( private fun ZoomableContentView( word: String, state: RichTextViewerState, - showImage: MutableState, + accountViewModel: AccountViewModel, automaticallyStartPlayback: MutableState ) { state.imagesForPager[word]?.let { - ZoomableContentView(it, state.imageList, showImage, automaticallyStartPlayback) + ZoomableContentView(it, state.imageList, accountViewModel, automaticallyStartPlayback) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index 4c1f6ce08..e15e58e63 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -75,10 +75,12 @@ import coil.imageLoader import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.toHexKey import com.vitorpamplona.amethyst.service.BlurHashRequester +import com.vitorpamplona.amethyst.service.connectivitystatus.ConnectivityStatus import com.vitorpamplona.amethyst.ui.actions.CloseButton import com.vitorpamplona.amethyst.ui.actions.LoadingAnimation import com.vitorpamplona.amethyst.ui.actions.SaveToGallery import com.vitorpamplona.amethyst.ui.note.BlankNote +import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.Font17SP import com.vitorpamplona.amethyst.ui.theme.imageModifier import kotlinx.collections.immutable.ImmutableList @@ -175,7 +177,7 @@ fun figureOutMimeType(fullUrl: String): ZoomableContent { fun ZoomableContentView( content: ZoomableContent, images: ImmutableList = listOf(content).toImmutableList(), - showImage: MutableState, + accountViewModel: AccountViewModel, automaticallyStartPlayback: MutableState ) { val clipboardManager = LocalClipboardManager.current @@ -204,9 +206,9 @@ fun ZoomableContentView( } when (content) { - is ZoomableUrlImage -> UrlImageView(content, mainImageModifier, showImage) + is ZoomableUrlImage -> UrlImageView(content, mainImageModifier, accountViewModel) is ZoomableUrlVideo -> VideoView(content.url, content.description, automaticallyStartPlayback = automaticallyStartPlayback) { dialogOpen = true } - is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, showImage) + is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, accountViewModel) is ZoomableLocalVideo -> content.localFile?.let { VideoView(it.toUri().toString(), content.description, automaticallyStartPlayback = automaticallyStartPlayback) { dialogOpen = true } @@ -222,10 +224,23 @@ fun ZoomableContentView( private fun LocalImageView( content: ZoomableLocalImage, mainImageModifier: Modifier, - showImage: MutableState + accountViewModel: AccountViewModel? ) { if (content.localFile != null && content.localFile.exists()) { BoxWithConstraints(contentAlignment = Alignment.Center) { + val settings = accountViewModel?.account?.settings + val isMobile = ConnectivityStatus.isOnMobileData.value + + val showImage = remember { + mutableStateOf( + when (settings?.automaticallyShowImages) { + true -> !isMobile + false -> false + else -> true + } + ) + } + val myModifier = remember { mainImageModifier .widthIn(max = maxWidth) @@ -270,9 +285,22 @@ private fun LocalImageView( private fun UrlImageView( content: ZoomableUrlImage, mainImageModifier: Modifier, - showImage: MutableState + accountViewModel: AccountViewModel? ) { BoxWithConstraints(contentAlignment = Alignment.Center) { + val settings = accountViewModel?.account?.settings + val isMobile = ConnectivityStatus.isOnMobileData.value + + val showImage = remember { + mutableStateOf( + when (settings?.automaticallyShowImages) { + true -> !isMobile + false -> false + else -> true + } + ) + } + val myModifier = remember { mainImageModifier .widthIn(max = maxWidth) @@ -559,11 +587,11 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList - RenderImageOrVideo(allImages[index], remember { mutableStateOf(true) }, remember { mutableStateOf(true) }) + RenderImageOrVideo(allImages[index], null, remember { mutableStateOf(true) }) } ) } else { - RenderImageOrVideo(imageUrl, remember { mutableStateOf(true) }, remember { mutableStateOf(true) }) + RenderImageOrVideo(imageUrl, null, remember { mutableStateOf(true) }) } Row( @@ -588,19 +616,19 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList, automaticallyStartPlayback: MutableState) { +fun RenderImageOrVideo(content: ZoomableContent, accountViewModel: AccountViewModel?, automaticallyStartPlayback: MutableState) { val mainModifier = Modifier .fillMaxSize() .zoomable(rememberZoomState()) if (content is ZoomableUrlImage) { - UrlImageView(content = content, mainImageModifier = mainModifier, showImage) + UrlImageView(content = content, mainImageModifier = mainModifier, accountViewModel) } else if (content is ZoomableUrlVideo) { Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) { VideoView(content.url, content.description, automaticallyStartPlayback = automaticallyStartPlayback) } } else if (content is ZoomableLocalImage) { - LocalImageView(content = content, mainImageModifier = mainModifier, showImage) + LocalImageView(content = content, mainImageModifier = mainModifier, accountViewModel) } else if (content is ZoomableLocalVideo) { Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) { content.localFile?.let {