diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt index dd7c37729..5e211e07d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChatroomMessageCompose.kt @@ -105,6 +105,7 @@ fun ChatroomMessageCompose( accountViewModel: AccountViewModel, nav: (String) -> Unit, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, ) { WatchNoteEvent(baseNote = baseNote, accountViewModel = accountViewModel) { WatchBlockAndReport( @@ -123,6 +124,7 @@ fun ChatroomMessageCompose( accountViewModel, nav, onWantsToReply, + onWantsToEditDraft, ) } } @@ -139,6 +141,7 @@ fun NormalChatNote( accountViewModel: AccountViewModel, nav: (String) -> Unit, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, ) { val drawAuthorInfo by remember(note) { @@ -252,6 +255,7 @@ fun NormalChatNote( innerQuote, backgroundBubbleColor, onWantsToReply, + onWantsToEditDraft, canPreview, availableBubbleSize, showDetails, @@ -265,7 +269,9 @@ fun NormalChatNote( note = note, popupExpanded = popupExpanded, onDismiss = { popupExpanded = false }, + onWantsToEditDraft = { onWantsToEditDraft(note) }, accountViewModel = accountViewModel, + nav = nav, ) } } @@ -279,6 +285,7 @@ private fun RenderBubble( innerQuote: Boolean, backgroundBubbleColor: MutableState, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, canPreview: Boolean, availableBubbleSize: MutableState, showDetails: State, @@ -309,6 +316,7 @@ private fun RenderBubble( backgroundBubbleColor, bubbleSize, onWantsToReply, + onWantsToEditDraft, canPreview, showDetails, accountViewModel, @@ -327,6 +335,7 @@ private fun MessageBubbleLines( backgroundBubbleColor: MutableState, bubbleSize: MutableState, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, canPreview: Boolean, showDetails: State, accountViewModel: AccountViewModel, @@ -349,6 +358,7 @@ private fun MessageBubbleLines( accountViewModel = accountViewModel, nav = nav, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, ) } @@ -357,6 +367,7 @@ private fun MessageBubbleLines( canPreview = canPreview, innerQuote = innerQuote, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, backgroundBubbleColor = backgroundBubbleColor, accountViewModel = accountViewModel, nav = nav, @@ -403,9 +414,10 @@ private fun RenderReplyRow( accountViewModel: AccountViewModel, nav: (String) -> Unit, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, ) { if (!innerQuote && note.replyTo?.lastOrNull() != null) { - RenderReply(note, backgroundBubbleColor, accountViewModel, nav, onWantsToReply) + RenderReply(note, backgroundBubbleColor, accountViewModel, nav, onWantsToReply, onWantsToEditDraft) } } @@ -416,6 +428,7 @@ private fun RenderReply( accountViewModel: AccountViewModel, nav: (String) -> Unit, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, ) { Row(verticalAlignment = Alignment.CenterVertically) { val replyTo = @@ -434,6 +447,7 @@ private fun RenderReply( accountViewModel = accountViewModel, nav = nav, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, ) } } @@ -445,6 +459,7 @@ private fun NoteRow( canPreview: Boolean, innerQuote: Boolean, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, backgroundBubbleColor: MutableState, accountViewModel: AccountViewModel, nav: (String) -> Unit, @@ -463,6 +478,7 @@ private fun NoteRow( canPreview, innerQuote, onWantsToReply, + onWantsToEditDraft, backgroundBubbleColor, accountViewModel, nav, @@ -488,6 +504,7 @@ private fun RenderDraftEvent( canPreview: Boolean, innerQuote: Boolean, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, backgroundBubbleColor: MutableState, accountViewModel: AccountViewModel, nav: (String) -> Unit, @@ -501,6 +518,7 @@ private fun RenderDraftEvent( accountViewModel = accountViewModel, nav = nav, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, ) NoteRow( @@ -508,6 +526,7 @@ private fun RenderDraftEvent( canPreview = canPreview, innerQuote = innerQuote, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, backgroundBubbleColor = backgroundBubbleColor, accountViewModel = accountViewModel, nav = nav, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteQuickActionMenu.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteQuickActionMenu.kt index 0f0c1638f..8ad842556 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteQuickActionMenu.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteQuickActionMenu.kt @@ -40,6 +40,7 @@ import androidx.compose.material.icons.filled.AlternateEmail import androidx.compose.material.icons.filled.Block import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.FormatQuote import androidx.compose.material.icons.filled.PersonAdd import androidx.compose.material.icons.filled.PersonRemove @@ -137,11 +138,16 @@ fun LongPressToQuickAction( ) { val popupExpanded = remember { mutableStateOf(false) } val showPopup = remember { { popupExpanded.value = true } } - val hidePopup = remember { { popupExpanded.value = false } } content(showPopup) - NoteQuickActionMenu(baseNote, popupExpanded.value, hidePopup, accountViewModel) + NoteQuickActionMenu( + note = baseNote, + popupExpanded = popupExpanded.value, + onDismiss = { popupExpanded.value = false }, + accountViewModel = accountViewModel, + nav = {}, + ) } @Composable @@ -150,12 +156,44 @@ fun NoteQuickActionMenu( popupExpanded: Boolean, onDismiss: () -> Unit, accountViewModel: AccountViewModel, + nav: (String) -> Unit, +) { + val editDraftDialog = remember { mutableStateOf(false) } + + if (editDraftDialog.value) { + NewPostView( + onClose = { + editDraftDialog.value = false + }, + accountViewModel = accountViewModel, + draft = note, + nav = { }, + ) + } + + NoteQuickActionMenu( + note = note, + popupExpanded = popupExpanded, + onDismiss = onDismiss, + onWantsToEditDraft = { editDraftDialog.value = true }, + accountViewModel = accountViewModel, + nav = nav, + ) +} + +@Composable +fun NoteQuickActionMenu( + note: Note, + popupExpanded: Boolean, + onDismiss: () -> Unit, + onWantsToEditDraft: () -> Unit, + accountViewModel: AccountViewModel, + nav: (String) -> Unit, ) { val showSelectTextDialog = remember { mutableStateOf(false) } val showDeleteAlertDialog = remember { mutableStateOf(false) } val showBlockAlertDialog = remember { mutableStateOf(false) } val showReportDialog = remember { mutableStateOf(false) } - val editDraftDialog = remember { mutableStateOf(false) } if (popupExpanded) { RenderMainPopup( @@ -165,7 +203,7 @@ fun NoteQuickActionMenu( showBlockAlertDialog, showDeleteAlertDialog, showReportDialog, - editDraftDialog, + onWantsToEditDraft, ) } @@ -202,17 +240,6 @@ fun NoteQuickActionMenu( onDismiss() } } - - if (editDraftDialog.value) { - NewPostView( - onClose = { - editDraftDialog.value = false - }, - accountViewModel = accountViewModel, - draft = note, - nav = { }, - ) - } } @Composable @@ -223,7 +250,7 @@ private fun RenderMainPopup( showBlockAlertDialog: MutableState, showDeleteAlertDialog: MutableState, showReportDialog: MutableState, - editDraftDialog: MutableState, + onWantsToEditDraft: () -> Unit, ) { val context = LocalContext.current val primaryLight = lightenColor(MaterialTheme.colorScheme.primary, 0.1f) @@ -294,23 +321,6 @@ private fun RenderMainPopup( } } - /* - if (note.isDraft()) { - VerticalDivider(color = primaryLight) - NoteQuickActionItem( - Icons.Default.Edit, - stringResource(R.string.edit_draft), - ) { - if (newPostViewModel != null) { - newPostViewModel.load(accountViewModel, null, null, null, null, note) - onDismiss() - } else { - editDraftDialog.value = true - onDismiss() - } - } - }*/ - if (!isOwnNote) { VerticalDivider(color = primaryLight) @@ -371,31 +381,41 @@ private fun RenderMainPopup( onDismiss() } VerticalDivider(color = primaryLight) - NoteQuickActionItem( - icon = Icons.Default.Share, - label = stringResource(R.string.quick_action_share), - ) { - val sendIntent = - Intent().apply { - action = Intent.ACTION_SEND - type = "text/plain" - putExtra( - Intent.EXTRA_TEXT, - externalLinkForNote(note), - ) - putExtra( - Intent.EXTRA_TITLE, - context.getString(R.string.quick_action_share_browser_link), - ) - } + if (isOwnNote && note.isDraft()) { + NoteQuickActionItem( + Icons.Default.Edit, + stringResource(R.string.edit_draft), + ) { + onDismiss() + onWantsToEditDraft() + } + } else { + NoteQuickActionItem( + icon = Icons.Default.Share, + label = stringResource(R.string.quick_action_share), + ) { + val sendIntent = + Intent().apply { + action = Intent.ACTION_SEND + type = "text/plain" + putExtra( + Intent.EXTRA_TEXT, + externalLinkForNote(note), + ) + putExtra( + Intent.EXTRA_TITLE, + context.getString(R.string.quick_action_share_browser_link), + ) + } - val shareIntent = - Intent.createChooser( - sendIntent, - context.getString(R.string.quick_action_share), - ) - ContextCompat.startActivity(context, shareIntent, null) - onDismiss() + val shareIntent = + Intent.createChooser( + sendIntent, + context.getString(R.string.quick_action_share), + ) + ContextCompat.startActivity(context, shareIntent, null) + onDismiss() + } } if (!isOwnNote) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomFeedView.kt index 725ec7645..a4afc4aad 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ChatroomFeedView.kt @@ -52,6 +52,7 @@ fun RefreshingChatroomFeedView( nav: (String) -> Unit, routeForLastRead: String, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, avoidDraft: String? = null, scrollStateKey: String? = null, enablePullRefresh: Boolean = true, @@ -65,6 +66,7 @@ fun RefreshingChatroomFeedView( nav, routeForLastRead, onWantsToReply, + onWantsToEditDraft, avoidDraft, ) } @@ -79,6 +81,7 @@ fun RenderChatroomFeedView( nav: (String) -> Unit, routeForLastRead: String, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, avoidDraft: String? = null, ) { val feedState by viewModel.feedContent.collectAsStateWithLifecycle() @@ -99,6 +102,7 @@ fun RenderChatroomFeedView( nav, routeForLastRead, onWantsToReply, + onWantsToEditDraft, avoidDraft, ) } @@ -117,6 +121,7 @@ fun ChatroomFeedLoaded( nav: (String) -> Unit, routeForLastRead: String, onWantsToReply: (Note) -> Unit, + onWantsToEditDraft: (Note) -> Unit, avoidDraft: String? = null, ) { LaunchedEffect(state.feed.value.firstOrNull()) { @@ -140,6 +145,7 @@ fun ChatroomFeedLoaded( accountViewModel = accountViewModel, nav = nav, onWantsToReply = onWantsToReply, + onWantsToEditDraft = onWantsToEditDraft, ) } NewSubject(item) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt index 94f075b38..b2370009d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/ThreadFeedView.kt @@ -614,7 +614,14 @@ fun NoteMaster( ReactionsRow(note, true, editState, accountViewModel, nav) } - NoteQuickActionMenu(note, popupExpanded, { popupExpanded = false }, accountViewModel) + NoteQuickActionMenu( + note = note, + popupExpanded = popupExpanded, + onDismiss = { popupExpanded = false }, + onWantsToEditDraft = { }, + accountViewModel = accountViewModel, + nav = nav, + ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt index 1828e396d..43d3688af 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChannelScreen.kt @@ -298,6 +298,9 @@ fun ChannelScreen( routeForLastRead = "Channel/${channel.idHex}", avoidDraft = newPostModel.draftTag, onWantsToReply = { replyTo.value = it }, + onWantsToEditDraft = { + newPostModel.load(accountViewModel, null, null, null, null, it) + }, ) } @@ -399,6 +402,7 @@ fun DisplayReplyingToNote( accountViewModel = accountViewModel, nav = nav, onWantsToReply = {}, + onWantsToEditDraft = {}, ) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index 8eae312ca..d7699b22b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -326,6 +326,9 @@ fun ChatroomScreen( onWantsToReply = { replyTo.value = it }, + onWantsToEditDraft = { + newPostModel.load(accountViewModel, null, null, null, null, it) + }, ) }