From 16c171ec40a2b62428c78ed133a6458f99180115 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 2 Mar 2024 12:37:02 -0500 Subject: [PATCH] Fixes quote-notes and reposted notes partially disappearing when they contain hidden users or words. --- .../amethyst/ui/note/BlankNote.kt | 92 +++++++++++++++++++ .../amethyst/ui/note/NoteCompose.kt | 15 ++- app/src/main/res/values/strings.xml | 1 + 3 files changed, 105 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BlankNote.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BlankNote.kt index 81823b0c9..22e42d5aa 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BlankNote.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/BlankNote.kt @@ -37,15 +37,28 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Note +import com.vitorpamplona.amethyst.ui.components.mockAccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.ButtonPadding import com.vitorpamplona.amethyst.ui.theme.DividerThickness import com.vitorpamplona.amethyst.ui.theme.Size35dp +import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonColumn import kotlinx.collections.immutable.ImmutableSet +import kotlinx.collections.immutable.persistentSetOf + +@Composable +@Preview +fun BlankNotePreview() { + ThemeComparisonColumn( + onDark = { BlankNote() }, + onLight = { BlankNote() }, + ) +} @Composable fun BlankNote( @@ -85,6 +98,32 @@ fun BlankNote( } } +@Composable +@Preview +fun HiddenNotePreview() { + val accountViewModel = mockAccountViewModel() + val nav: (String) -> Unit = {} + + ThemeComparisonColumn( + onDark = { + HiddenNote( + reports = persistentSetOf(), + isHiddenAuthor = true, + accountViewModel = accountViewModel, + nav = nav, + ) {} + }, + onLight = { + HiddenNote( + reports = persistentSetOf(), + isHiddenAuthor = true, + accountViewModel = accountViewModel, + nav = nav, + ) {} + }, + ) +} + @OptIn(ExperimentalLayoutApi::class) @Composable fun HiddenNote( @@ -149,3 +188,56 @@ fun HiddenNote( ) } } + +@Preview +@Composable +fun HiddenNoteByMePreview() { + ThemeComparisonColumn( + onDark = { HiddenNoteByMe {} }, + onLight = { HiddenNoteByMe {} }, + ) +} + +@Composable +fun HiddenNoteByMe( + modifier: Modifier = Modifier, + isQuote: Boolean = false, + onClick: () -> Unit, +) { + Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) { + Row( + modifier = Modifier.padding(horizontal = 20.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.padding(30.dp), + ) { + Text( + text = stringResource(R.string.post_was_hidden), + color = Color.Gray, + ) + + Button( + modifier = Modifier.padding(top = 10.dp), + onClick = onClick, + shape = ButtonBorder, + colors = + ButtonDefaults.buttonColors( + contentColor = MaterialTheme.colorScheme.primary, + ), + contentPadding = ButtonPadding, + ) { + Text(text = stringResource(R.string.show_anyway), color = Color.White) + } + } + } + + if (!isQuote) { + Divider( + thickness = DividerThickness, + ) + } + } +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 9b57df413..c4dc75fc9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -359,8 +359,13 @@ fun CheckHiddenNoteCompose( } .observeAsState(accountViewModel.isNoteHidden(note)) + val showAnyway = + remember { + mutableStateOf(false) + } + Crossfade(targetState = isHidden, label = "CheckHiddenNoteCompose") { - if (!it) { + if (!it || showAnyway.value) { LoadedNoteCompose( note = note, routeForLastRead = routeForLastRead, @@ -374,6 +379,11 @@ fun CheckHiddenNoteCompose( accountViewModel = accountViewModel, nav = nav, ) + } else if (isQuotedNote || isBoostedNote) { + HiddenNoteByMe( + isQuote = true, + onClick = { showAnyway.value = true }, + ) } } } @@ -441,8 +451,7 @@ fun RenderReportState( ) { var showReportedNote by remember(note) { mutableStateOf(false) } - Crossfade(targetState = !state.isAcceptable && !showReportedNote, label = "RenderReportState") { - showHiddenNote -> + Crossfade(targetState = !state.isAcceptable && !showReportedNote, label = "RenderReportState") { showHiddenNote -> if (showHiddenNote) { HiddenNote( state.relevantReports, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 845fe0b15..9de79d5d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ Your Profile Picture Scan QR Show Anyway + This post was hidden because it mentions your hidden users or words Post was muted or reported by Event is loading or can\'t be found in your relay list Channel Image