diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModel.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModel.kt index a225e50d..00e07e28 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModel.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModel.kt @@ -9,7 +9,6 @@ import android.util.Log import android.widget.Toast import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.StringAnnotation import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontStyle diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryInputBar.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryInputBar.kt index 948e1c83..4e2c03eb 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryInputBar.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryInputBar.kt @@ -80,6 +80,8 @@ fun MessagesHistoryInputBar( val context = LocalContext.current val density = LocalDensity.current + val scope = rememberCoroutineScope() + val theme = LocalThemeConfig.current Column( @@ -130,7 +132,6 @@ fun MessagesHistoryInputBar( Spacer(modifier = Modifier.width(6.dp)) if (showEmojiButton) { - val scope = rememberCoroutineScope() val rotation = remember { Animatable(0f) } Column(verticalArrangement = Arrangement.Bottom) { @@ -239,7 +240,6 @@ fun MessagesHistoryInputBar( ) - val scope = rememberCoroutineScope() val attachmentRotation = remember { Animatable(0f) } Column(verticalArrangement = Arrangement.Bottom) { diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryRoute.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryRoute.kt index be6c8e78..a29786e6 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryRoute.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryRoute.kt @@ -50,6 +50,7 @@ fun MessagesHistoryRoute( screenState = screenState, messages = messages.toImmutableList(), uiMessages = uiMessages.toImmutableList(), + isSelectedAtLeastOne = selectedMessages.isNotEmpty(), scrollIndex = scrollIndex, selectedMessages = selectedMessages.toImmutableList(), baseError = baseError, diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryScreen.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryScreen.kt index 0f10bce2..2dce8e09 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryScreen.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesHistoryScreen.kt @@ -26,6 +26,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -61,6 +62,7 @@ fun MessagesHistoryScreen( screenState: MessagesHistoryScreenState = MessagesHistoryScreenState.EMPTY, messages: ImmutableList = emptyImmutableList(), uiMessages: ImmutableList = emptyImmutableList(), + isSelectedAtLeastOne: Boolean = false, scrollIndex: Int? = null, selectedMessages: ImmutableList = emptyImmutableList(), baseError: BaseError? = null, @@ -95,6 +97,8 @@ fun MessagesHistoryScreen( val listState = rememberLazyListState() val hazeState = remember { HazeState(true) } + val currentOnMessageClicked by rememberUpdatedState(onMessageClicked) + LaunchedEffect(scrollIndex) { if (scrollIndex != null) { coroutineScope.launch { @@ -206,6 +210,7 @@ fun MessagesHistoryScreen( listState = listState, hasPinnedMessage = pinnedMessage != null, uiMessages = uiMessages, + isSelectedAtLeastOne = isSelectedAtLeastOne, isPaginating = screenState.isPaginating, messageBarHeight = messageBarHeight, onRequestScrollToCmId = { cmId -> @@ -224,7 +229,7 @@ fun MessagesHistoryScreen( view.performHapticFeedback(HapticFeedbackConstantsCompat.CONTEXT_CLICK) } } - onMessageClicked(id) + currentOnMessageClicked.invoke(id) }, onMessageLongClicked = onMessageLongClicked ) diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesList.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesList.kt index 185739cb..d2275d3a 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesList.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/presentation/MessagesList.kt @@ -1,7 +1,6 @@ package dev.meloda.fast.messageshistory.presentation import android.content.Intent -import android.net.Uri import android.util.Log import android.view.HapticFeedbackConstants import androidx.compose.animation.AnimatedVisibility @@ -23,7 +22,6 @@ import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -33,17 +31,17 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import dev.chrisbanes.haze.HazeState import dev.chrisbanes.haze.hazeSource import dev.meloda.fast.datastore.AppSettings import dev.meloda.fast.messageshistory.model.UiItem import dev.meloda.fast.model.api.domain.VkAttachment +import dev.meloda.fast.model.api.domain.VkFileDomain import dev.meloda.fast.model.api.domain.VkLinkDomain import dev.meloda.fast.model.api.domain.VkPhotoDomain import dev.meloda.fast.ui.theme.LocalThemeConfig import dev.meloda.fast.ui.util.ImmutableList -import androidx.core.net.toUri -import dev.meloda.fast.model.api.domain.VkFileDomain @OptIn(ExperimentalFoundationApi::class) @Composable @@ -53,6 +51,7 @@ fun MessagesList( hazeState: HazeState, listState: LazyListState, uiMessages: ImmutableList, + isSelectedAtLeastOne: Boolean, isPaginating: Boolean, messageBarHeight: Dp, onRequestScrollToCmId: (cmId: Long) -> Unit = {}, @@ -63,12 +62,6 @@ fun MessagesList( val theme = LocalThemeConfig.current val view = LocalView.current - val isSelectedAtLeastOne by remember(uiMessages) { - derivedStateOf { - uiMessages.values.any { (it as? UiItem.Message)?.isSelected == true } - } - } - val onAttachmentClick = remember { { message: UiItem.Message, attachment: VkAttachment -> if (isSelectedAtLeastOne) {