only load one image when theres multiple images in the note

This commit is contained in:
greenart7c3
2023-07-07 17:58:56 -03:00
parent e2ef7cfd70
commit b5229f5fe1
3 changed files with 42 additions and 16 deletions
@@ -74,7 +74,7 @@ class Account(
var warnAboutPostsWithReports: Boolean = true, var warnAboutPostsWithReports: Boolean = true,
var filterSpamFromStrangers: Boolean = true, var filterSpamFromStrangers: Boolean = true,
var lastReadPerRoute: Map<String, Long> = mapOf<String, Long>(), var lastReadPerRoute: Map<String, Long> = mapOf<String, Long>(),
var settings: Settings = Settings(null, null) var settings: Settings = Settings()
) { ) {
var transientHiddenUsers: Set<String> = setOf() var transientHiddenUsers: Set<String> = setOf()
@@ -162,7 +162,6 @@ private fun RenderRegular(
backgroundColor, backgroundColor,
textStyle, textStyle,
accountViewModel, accountViewModel,
showImage,
automaticallyStartPlayback, automaticallyStartPlayback,
automaticallyShowUrlPreview, automaticallyShowUrlPreview,
nav nav
@@ -244,13 +243,12 @@ private fun RenderWordWithPreview(
backgroundColor: MutableState<Color>, backgroundColor: MutableState<Color>,
style: TextStyle, style: TextStyle,
accountViewModel: AccountViewModel, accountViewModel: AccountViewModel,
showImage: MutableState<Boolean>,
automaticallyStartPlayback: MutableState<Boolean>, automaticallyStartPlayback: MutableState<Boolean>,
automaticallyShowUrlPreview: MutableState<Boolean>, automaticallyShowUrlPreview: MutableState<Boolean>,
nav: (String) -> Unit nav: (String) -> Unit
) { ) {
when (word) { 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 LinkSegment -> UrlPreview(word.segmentText, word.segmentText, automaticallyShowUrlPreview)
is EmojiSegment -> RenderCustomEmoji(word.segmentText, state) is EmojiSegment -> RenderCustomEmoji(word.segmentText, state)
is InvoiceSegment -> MayBeInvoicePreview(word.segmentText) is InvoiceSegment -> MayBeInvoicePreview(word.segmentText)
@@ -271,11 +269,11 @@ private fun RenderWordWithPreview(
private fun ZoomableContentView( private fun ZoomableContentView(
word: String, word: String,
state: RichTextViewerState, state: RichTextViewerState,
showImage: MutableState<Boolean>, accountViewModel: AccountViewModel,
automaticallyStartPlayback: MutableState<Boolean> automaticallyStartPlayback: MutableState<Boolean>
) { ) {
state.imagesForPager[word]?.let { state.imagesForPager[word]?.let {
ZoomableContentView(it, state.imageList, showImage, automaticallyStartPlayback) ZoomableContentView(it, state.imageList, accountViewModel, automaticallyStartPlayback)
} }
} }
@@ -75,10 +75,12 @@ import coil.imageLoader
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.toHexKey import com.vitorpamplona.amethyst.model.toHexKey
import com.vitorpamplona.amethyst.service.BlurHashRequester 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.CloseButton
import com.vitorpamplona.amethyst.ui.actions.LoadingAnimation import com.vitorpamplona.amethyst.ui.actions.LoadingAnimation
import com.vitorpamplona.amethyst.ui.actions.SaveToGallery import com.vitorpamplona.amethyst.ui.actions.SaveToGallery
import com.vitorpamplona.amethyst.ui.note.BlankNote 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.Font17SP
import com.vitorpamplona.amethyst.ui.theme.imageModifier import com.vitorpamplona.amethyst.ui.theme.imageModifier
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@@ -175,7 +177,7 @@ fun figureOutMimeType(fullUrl: String): ZoomableContent {
fun ZoomableContentView( fun ZoomableContentView(
content: ZoomableContent, content: ZoomableContent,
images: ImmutableList<ZoomableContent> = listOf(content).toImmutableList(), images: ImmutableList<ZoomableContent> = listOf(content).toImmutableList(),
showImage: MutableState<Boolean>, accountViewModel: AccountViewModel,
automaticallyStartPlayback: MutableState<Boolean> automaticallyStartPlayback: MutableState<Boolean>
) { ) {
val clipboardManager = LocalClipboardManager.current val clipboardManager = LocalClipboardManager.current
@@ -204,9 +206,9 @@ fun ZoomableContentView(
} }
when (content) { 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 ZoomableUrlVideo -> VideoView(content.url, content.description, automaticallyStartPlayback = automaticallyStartPlayback) { dialogOpen = true }
is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, showImage) is ZoomableLocalImage -> LocalImageView(content, mainImageModifier, accountViewModel)
is ZoomableLocalVideo -> is ZoomableLocalVideo ->
content.localFile?.let { content.localFile?.let {
VideoView(it.toUri().toString(), content.description, automaticallyStartPlayback = automaticallyStartPlayback) { dialogOpen = true } VideoView(it.toUri().toString(), content.description, automaticallyStartPlayback = automaticallyStartPlayback) { dialogOpen = true }
@@ -222,10 +224,23 @@ fun ZoomableContentView(
private fun LocalImageView( private fun LocalImageView(
content: ZoomableLocalImage, content: ZoomableLocalImage,
mainImageModifier: Modifier, mainImageModifier: Modifier,
showImage: MutableState<Boolean> accountViewModel: AccountViewModel?
) { ) {
if (content.localFile != null && content.localFile.exists()) { if (content.localFile != null && content.localFile.exists()) {
BoxWithConstraints(contentAlignment = Alignment.Center) { 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 { val myModifier = remember {
mainImageModifier mainImageModifier
.widthIn(max = maxWidth) .widthIn(max = maxWidth)
@@ -270,9 +285,22 @@ private fun LocalImageView(
private fun UrlImageView( private fun UrlImageView(
content: ZoomableUrlImage, content: ZoomableUrlImage,
mainImageModifier: Modifier, mainImageModifier: Modifier,
showImage: MutableState<Boolean> accountViewModel: AccountViewModel?
) { ) {
BoxWithConstraints(contentAlignment = Alignment.Center) { 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 { val myModifier = remember {
mainImageModifier mainImageModifier
.widthIn(max = maxWidth) .widthIn(max = maxWidth)
@@ -559,11 +587,11 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList<Zoom
pagerState = pagerState, pagerState = pagerState,
itemsCount = allImages.size, itemsCount = allImages.size,
itemContent = { index -> itemContent = { index ->
RenderImageOrVideo(allImages[index], remember { mutableStateOf(true) }, remember { mutableStateOf(true) }) RenderImageOrVideo(allImages[index], null, remember { mutableStateOf(true) })
} }
) )
} else { } else {
RenderImageOrVideo(imageUrl, remember { mutableStateOf(true) }, remember { mutableStateOf(true) }) RenderImageOrVideo(imageUrl, null, remember { mutableStateOf(true) })
} }
Row( Row(
@@ -588,19 +616,19 @@ fun ZoomableImageDialog(imageUrl: ZoomableContent, allImages: ImmutableList<Zoom
} }
@Composable @Composable
fun RenderImageOrVideo(content: ZoomableContent, showImage: MutableState<Boolean>, automaticallyStartPlayback: MutableState<Boolean>) { fun RenderImageOrVideo(content: ZoomableContent, accountViewModel: AccountViewModel?, automaticallyStartPlayback: MutableState<Boolean>) {
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, showImage) UrlImageView(content = content, mainImageModifier = mainModifier, accountViewModel)
} 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, automaticallyStartPlayback = automaticallyStartPlayback) VideoView(content.url, content.description, automaticallyStartPlayback = automaticallyStartPlayback)
} }
} else if (content is ZoomableLocalImage) { } else if (content is ZoomableLocalImage) {
LocalImageView(content = content, mainImageModifier = mainModifier, showImage) LocalImageView(content = content, mainImageModifier = mainModifier, accountViewModel)
} 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 {