only load one image when theres multiple images in the note
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user