From 6c27fe082889972b6ca3ad587bc1d339a27fad59 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 4 Feb 2023 10:41:43 -0500 Subject: [PATCH] Adding more info into flagged posts. --- .../vitorpamplona/amethyst/model/Account.kt | 14 ++++++ .../amethyst/ui/note/BlankNote.kt | 45 ++++++++++++++++--- .../amethyst/ui/note/NoteCompose.kt | 15 ++++--- .../amethyst/ui/screen/ThreadFeedView.kt | 11 ++++- 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 82c31551b..03872f670 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -382,6 +382,20 @@ class Account( ) // is not a reaction about a blocked post } + fun getRelevantReports(note: Note): Set { + val followsPlusMe = userProfile().follows + userProfile() + + val innerReports = if (note.event is RepostEvent) { + note.replyTo?.map { getRelevantReports(it) }?.flatten() ?: emptyList() + } else { + emptyList() + } + + return (note.reportsBy(followsPlusMe) + + (note.author?.reportsBy(followsPlusMe) ?: emptyList()) + + innerReports).toSet() + } + } class AccountLiveData(private val account: Account): LiveData(AccountState(account)) { 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 3c20f1f46..78f74d474 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 @@ -1,15 +1,24 @@ package com.vitorpamplona.amethyst.ui.note import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults import androidx.compose.material.Divider +import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.google.accompanist.flowlayout.FlowRow +import com.vitorpamplona.amethyst.model.Note +import com.vitorpamplona.amethyst.model.User @Composable fun BlankNote(modifier: Modifier = Modifier, isQuote: Boolean = false) { @@ -43,7 +52,7 @@ fun BlankNote(modifier: Modifier = Modifier, isQuote: Boolean = false) { @Composable -fun HiddenNote(modifier: Modifier = Modifier, isQuote: Boolean = false) { +fun HiddenNote(reports: Set, loggedIn: User, modifier: Modifier = Modifier, isQuote: Boolean = false, navController: NavController, onClick: () -> Unit) { Column(modifier = modifier) { Row(modifier = Modifier.padding(horizontal = if (!isQuote) 12.dp else 6.dp)) { Column(modifier = Modifier.padding(start = if (!isQuote) 10.dp else 5.dp)) { @@ -56,11 +65,35 @@ fun HiddenNote(modifier: Modifier = Modifier, isQuote: Boolean = false) { ), verticalAlignment = Alignment.CenterVertically ) { - Text( - text = "Post was flagged as inappropriate", - modifier = Modifier.padding(30.dp), - color = Color.Gray, - ) + Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(30.dp)) { + Text( + text = "Post was flagged as inappropriate by", + color = Color.Gray, + ) + FlowRow(modifier = Modifier.padding(top = 10.dp)) { + reports.forEach { + NoteAuthorPicture( + note = it, + navController = navController, + userAccount = loggedIn, + size = 35.dp + ) + } + } + + Button( + modifier = Modifier.padding(top = 10.dp), + onClick = onClick, + shape = RoundedCornerShape(20.dp), + colors = ButtonDefaults + .buttonColors( + backgroundColor = MaterialTheme.colors.primary + ), + contentPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp) + ) { + Text(text = "Show Anyway", color = Color.White) + } + } } Divider( 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 e1051f8d7..7b65090f7 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 @@ -81,6 +81,7 @@ fun NoteCompose( val noteForReports = noteReportsState?.note ?: return var popupExpanded by remember { mutableStateOf(false) } + var showHiddenNote by remember { mutableStateOf(false) } val context = LocalContext.current.applicationContext @@ -89,11 +90,15 @@ fun NoteCompose( onClick = { }, onLongClick = { popupExpanded = true }, ), isInnerNote) - } else if (!account.isAcceptable(noteForReports)) { - HiddenNote(modifier.combinedClickable( - onClick = { }, - onLongClick = { popupExpanded = true }, - ), isInnerNote) + } else if (!account.isAcceptable(noteForReports) && !showHiddenNote) { + HiddenNote( + account.getRelevantReports(noteForReports), + account.userProfile(), + modifier, + isInnerNote, + navController, + onClick = { showHiddenNote = true } + ) } else { val isNew = routeForLastRead?.run { val lastTime = NotificationCache.load(this, context) 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 4efa46366..2071392fd 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 @@ -168,10 +168,19 @@ fun NoteMaster(baseNote: Note, accountViewModel: AccountViewModel, navController val accountState by accountViewModel.accountLiveData.observeAsState() val account = accountState?.account ?: return + var showHiddenNote by remember { mutableStateOf(false) } + if (note?.event == null) { BlankNote() } else if (!account.isAcceptable(noteForReports)) { - HiddenNote() + HiddenNote( + account.getRelevantReports(noteForReports), + account.userProfile(), + Modifier, + false, + navController, + onClick = { showHiddenNote = true } + ) } else { Column( Modifier