From ba476bcdcae557e4b5cbe27388645bf878053752 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 7 Aug 2023 11:16:48 -0300 Subject: [PATCH] created SignerDialog --- app/src/main/AndroidManifest.xml | 1 + .../amethyst/ui/actions/SignerDialog.kt | 160 ++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 162 insertions(+) create mode 100644 app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2031bb209..c03aa2f1d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> + 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 new file mode 100644 index 000000000..c3ac8f679 --- /dev/null +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt @@ -0,0 +1,160 @@ +package com.vitorpamplona.amethyst.ui.actions + +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Button +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.OutlinedTextField +import androidx.compose.material.Surface +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentPaste +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.TimeUtils +import com.vitorpamplona.amethyst.service.model.Event +import com.vitorpamplona.amethyst.service.model.TextNoteEvent +import com.vitorpamplona.amethyst.ui.theme.ButtonBorder +import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer + +fun OpenAmber(event: Event, context: Context) { + val json = event.toJson() + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$json;name=Amethyst")) + intent.`package` = "com.greenart7c3.nostrsigner" + context.startActivity(intent) +} + +@Composable +fun SignerDialog( + onClose: () -> Unit, + onPost: () -> Unit, + event: Event +) { + var signature by remember { mutableStateOf("") } + val lifeCycleOwner = LocalLifecycleOwner.current + val context = LocalContext.current + + DisposableEffect(Unit) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + println("SignerDialog Start") + } + if (event == Lifecycle.Event.ON_PAUSE) { + println("SignerDialog Stop") + } + } + + OpenAmber(event, context) + + lifeCycleOwner.lifecycle.addObserver(observer) + onDispose { + lifeCycleOwner.lifecycle.removeObserver(observer) + } + } + + Dialog( + onDismissRequest = { onClose() }, + properties = DialogProperties( + usePlatformDefaultWidth = false, + dismissOnClickOutside = false, + decorFitsSystemWindows = false + ) + ) { + Surface( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight() + ) { + Column( + Modifier + .fillMaxWidth() + .fillMaxHeight() + .padding(start = 10.dp, end = 10.dp, top = 10.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + CloseButton( + onCancel = { + onClose() + } + ) + + PostButton( + onPost = { + onPost() + }, + isActive = true + ) + } + + Spacer(modifier = DoubleVertSpacer) + + OutlinedTextField( + modifier = Modifier.fillMaxWidth(), + value = signature, + onValueChange = { + signature = it + }, + placeholder = { Text("Signature (hex)") }, + trailingIcon = { + Row { + IconButton( + onClick = { } + ) { + Icon( + imageVector = Icons.Outlined.ContentPaste, + contentDescription = stringResource(R.string.paste_from_clipboard) + ) + } + } + } + ) + Button( + shape = ButtonBorder, + onClick = { OpenAmber(event, context) } + ) { + Text("Open Amber") + } + } + } + } +} + +@Preview +@Composable +fun Test() { + SignerDialog( + onClose = { }, + onPost = { }, + event = TextNoteEvent("", "", TimeUtils.now(), emptyList(), "test", "") + ) +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 517dbe3e3..908fce70b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -536,4 +536,5 @@ Members of this group Explanation to members Changing the name for the new goals. + Paste from clipboard