diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt index d4c4e6bcb..0a4c878b2 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt @@ -41,17 +41,22 @@ import androidx.compose.ui.window.DialogProperties import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.TimeUtils import com.vitorpamplona.amethyst.service.model.Event +import com.vitorpamplona.amethyst.service.model.EventInterface +import com.vitorpamplona.amethyst.service.model.PrivateDmEvent import com.vitorpamplona.amethyst.service.model.TextNoteEvent import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer import kotlinx.coroutines.launch fun openAmber( - event: Event, + event: EventInterface, intentResult: ManagedActivityResultLauncher ) { val json = event.toJson() val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$json")) + if (event is PrivateDmEvent) { + intent.putExtra("type", "nip04_decrypt") + } intent.`package` = "com.greenart7c3.nostrsigner.debug" intentResult.launch(intent) } @@ -60,7 +65,7 @@ fun openAmber( fun SignerDialog( onClose: () -> Unit, onPost: (signedEvent: Event) -> Unit, - event: Event + event: EventInterface ) { var signature by remember { mutableStateOf("") } val scope = rememberCoroutineScope() @@ -80,6 +85,19 @@ fun SignerDialog( } signature = it.data?.getStringExtra("signature") ?: "" + if (event is PrivateDmEvent) { + onPost( + Event( + event.id(), + event.pubKey(), + event.createdAt(), + event.kind(), + event.tags(), + signature, + event.sig() + ) + ) + } } ) @@ -120,16 +138,28 @@ fun SignerDialog( PostButton( onPost = { - val signedEvent = Event( - event.id, - event.pubKey, - event.createdAt, - event.kind, - event.tags, - event.content, - signature - ) - if (!signedEvent.hasValidSignature()) { + val signedEvent = if (event is PrivateDmEvent) { + Event( + event.id(), + event.pubKey(), + event.createdAt(), + event.kind(), + event.tags(), + signature, + event.sig() + ) + } else { + Event( + event.id(), + event.pubKey(), + event.createdAt(), + event.kind(), + event.tags(), + event.content(), + signature + ) + } + if (!signedEvent.hasValidSignature() && event !is PrivateDmEvent) { scope.launch { Toast.makeText( context, 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 63e3d1be3..d78f0286d 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 @@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -44,11 +45,13 @@ import androidx.lifecycle.map import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User +import com.vitorpamplona.amethyst.service.PackageUtils import com.vitorpamplona.amethyst.service.model.ChannelCreateEvent import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent import com.vitorpamplona.amethyst.service.model.ChatMessageEvent import com.vitorpamplona.amethyst.service.model.PrivateDmEvent import com.vitorpamplona.amethyst.ui.actions.ImmutableListOfLists +import com.vitorpamplona.amethyst.ui.actions.SignerDialog import com.vitorpamplona.amethyst.ui.actions.toImmutableListOfLists import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji @@ -634,8 +637,24 @@ private fun RenderRegularTextNote( nav: (String) -> Unit ) { val tags = remember(note.event) { note.event?.tags()?.toImmutableListOfLists() ?: ImmutableListOfLists() } - val eventContent = remember { accountViewModel.decrypt(note) } + var eventContent by remember { mutableStateOf(accountViewModel.decrypt(note)) } val modifier = remember { Modifier.padding(top = 5.dp) } + val context = LocalContext.current + val isAmberInstalled = PackageUtils.isAmberInstalled(context) + var triedToDecrypt by remember { mutableStateOf(false) } + if (isAmberInstalled && !triedToDecrypt && note.event is PrivateDmEvent) { + SignerDialog( + onClose = { + triedToDecrypt = true + eventContent = accountViewModel.decrypt(note) + }, + onPost = { + eventContent = it.content + triedToDecrypt = true + }, + event = note.event!! + ) + } if (eventContent != null) { SensitivityWarning( @@ -643,7 +662,7 @@ private fun RenderRegularTextNote( accountViewModel = accountViewModel ) { TranslatableRichTextViewer( - content = eventContent, + content = eventContent!!, canPreview = canPreview, modifier = modifier, tags = tags,