From d35d6a44fe3c314a3d472a98530149ee8b520ce9 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 7 Jul 2023 15:17:20 -0400 Subject: [PATCH] Adding content-sensitivity warnings for LiveStreams --- .../ui/components/SensitivityWarning.kt | 14 +++++- .../amethyst/ui/note/ChannelCardCompose.kt | 16 ++++--- .../ui/screen/loggedIn/ChannelScreen.kt | 45 +++++++++++-------- 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/SensitivityWarning.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/SensitivityWarning.kt index f0d1b0fa1..06a387780 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/SensitivityWarning.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/SensitivityWarning.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Note +import com.vitorpamplona.amethyst.service.model.EventInterface import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.ButtonBorder @@ -43,7 +44,18 @@ fun SensitivityWarning( accountViewModel: AccountViewModel, content: @Composable () -> Unit ) { - val hasSensitiveContent = remember(note) { note.event?.isSensitive() ?: false } + note.event?.let { + SensitivityWarning(it, accountViewModel, content) + } +} + +@Composable +fun SensitivityWarning( + event: EventInterface, + accountViewModel: AccountViewModel, + content: @Composable () -> Unit +) { + val hasSensitiveContent = remember(event) { event.isSensitive() ?: false } if (hasSensitiveContent) { SensitivityWarning(accountViewModel, content) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChannelCardCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChannelCardCompose.kt index efed66067..b7ff28c60 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChannelCardCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ChannelCardCompose.kt @@ -56,6 +56,7 @@ import com.vitorpamplona.amethyst.service.model.LiveActivitiesEvent import com.vitorpamplona.amethyst.service.model.LiveActivitiesEvent.Companion.STATUS_ENDED import com.vitorpamplona.amethyst.service.model.LiveActivitiesEvent.Companion.STATUS_LIVE import com.vitorpamplona.amethyst.service.model.LiveActivitiesEvent.Companion.STATUS_PLANNED +import com.vitorpamplona.amethyst.ui.components.SensitivityWarning import com.vitorpamplona.amethyst.ui.screen.equalImmutableLists import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChannelHeader @@ -321,11 +322,16 @@ fun InnerChannelCardWithReactions( nav: (String) -> Unit ) { Column(StdPadding) { - RenderNoteRow( - baseNote, - accountViewModel, - nav - ) + SensitivityWarning( + note = baseNote, + accountViewModel = accountViewModel + ) { + RenderNoteRow( + baseNote, + accountViewModel, + 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 9452207d3..77f7fded4 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 @@ -99,6 +99,7 @@ import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.actions.toImmutableListOfLists import com.vitorpamplona.amethyst.ui.components.LoadNote import com.vitorpamplona.amethyst.ui.components.RobohashAsyncImageProxy +import com.vitorpamplona.amethyst.ui.components.SensitivityWarning import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer import com.vitorpamplona.amethyst.ui.components.ZoomableContentView import com.vitorpamplona.amethyst.ui.components.ZoomableUrlVideo @@ -580,7 +581,7 @@ fun ChannelHeader( ) { Column(Modifier.fillMaxWidth()) { if (showVideo && baseChannel is LiveActivitiesChannel) { - ShowVideoStreaming(baseChannel) + ShowVideoStreaming(baseChannel, accountViewModel) } var expanded = remember { mutableStateOf(false) } @@ -607,26 +608,34 @@ fun ChannelHeader( @Composable private fun ShowVideoStreaming( - baseChannel: LiveActivitiesChannel + baseChannel: LiveActivitiesChannel, + accountViewModel: AccountViewModel ) { - val streamingUrl by baseChannel.live.map { - val activity = it.channel as? LiveActivitiesChannel - activity?.info?.streaming() - }.distinctUntilChanged().observeAsState(baseChannel.info?.streaming()) + baseChannel.info?.let { + SensitivityWarning( + event = it, + accountViewModel = accountViewModel + ) { + val streamingUrl by baseChannel.live.map { + val activity = it.channel as? LiveActivitiesChannel + activity?.info?.streaming() + }.distinctUntilChanged().observeAsState(baseChannel.info?.streaming()) - streamingUrl?.let { - CheckIfUrlIsOnline(it) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = remember { Modifier.heightIn(max = 300.dp) } - ) { - val zoomableUrlVideo = remember(it) { - ZoomableUrlVideo(url = it) + streamingUrl?.let { + CheckIfUrlIsOnline(it) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = remember { Modifier.heightIn(max = 300.dp) } + ) { + val zoomableUrlVideo = remember(it) { + ZoomableUrlVideo(url = it) + } + + ZoomableContentView( + content = zoomableUrlVideo + ) + } } - - ZoomableContentView( - content = zoomableUrlVideo - ) } } }