From a4ffa8bac2d059f053c7283c830e4aeacf10260d Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 21 Aug 2024 16:07:44 -0300 Subject: [PATCH] add a paste from clipboard option, fix reject buttons when using bunker --- .../greenart7c3/nostrsigner/ui/MainScreen.kt | 56 ++++++++++ .../ui/components/SingleEventHomeScreen.kt | 105 ++++++++++++------ app/src/main/res/values/strings.xml | 2 + 3 files changed, 129 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt index ab417743..77a743cd 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt @@ -31,6 +31,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.ContentPaste import androidx.compose.material.icons.filled.ExpandMore import androidx.compose.material.icons.filled.Hub import androidx.compose.material.icons.filled.QrCode @@ -392,6 +393,61 @@ fun PermissionsFloatingActionButton( Column( horizontalAlignment = Alignment.End, ) { + Row( + Modifier + .padding(end = 10.dp) + .clickable { + dialogOpen = true + expanded = false + }, + verticalAlignment = Alignment.CenterVertically, + ) { + val clipboardManager = LocalClipboardManager.current + RichTooltip { + Text(stringResource(R.string.paste_from_clipboard)) + } + Spacer(modifier = Modifier.size(4.dp)) + FloatingActionButton( + onClick = { + clipboardManager.getText()?.let { + if (it.text.isBlank()) { + Toast.makeText( + context, + context.getString(R.string.invalid_nostr_connect_uri), + Toast.LENGTH_SHORT, + ).show() + return@let + } + if (!it.text.startsWith("nostrconnect://")) { + Toast.makeText( + context, + context.getString(R.string.invalid_nostr_connect_uri), + Toast.LENGTH_SHORT, + ).show() + return@let + } + + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(it.text) + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP) + context.getAppCompatActivity()?.startActivity(intent) + accountStateViewModel.switchUser(account.keyPair.pubKey.toNpub(), Route.Home.route) + } + expanded = false + }, + modifier = Modifier.size(35.dp), + shape = CircleShape, + ) { + Icon( + Icons.Default.ContentPaste, + contentDescription = stringResource(R.string.paste_from_clipboard), + tint = Color.White, + ) + } + } + + Spacer(modifier = Modifier.height(20.dp)) + Row( Modifier .padding(end = 10.dp) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt index b3088a81..79f0e3fd 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt @@ -131,13 +131,28 @@ fun SingleEventHomeScreen( }, { if (intentData.bunkerRequest != null) { - AmberUtils.sendBunkerError( - account, - intentData.bunkerRequest, - applicationEntity?.application?.relays ?: emptyList(), - context, - onLoading = onLoading, - ) + coroutineScope.launch(Dispatchers.IO) { + val defaultRelays = NostrSigner.getInstance().settings.defaultRelays + val savedApplication = database.applicationDao().getByKey(key) + val relays = if (savedApplication != null) { + savedApplication.application.relays.ifEmpty { defaultRelays } + } else { + intentData.bunkerRequest.relays.ifEmpty { defaultRelays } + } + + NostrSigner.getInstance().checkForNewRelays( + NostrSigner.getInstance().settings.notificationType != NotificationType.DIRECT, + relays.toSet(), + ) + + AmberUtils.sendBunkerError( + account, + intentData.bunkerRequest, + applicationEntity?.application?.relays ?: intentData.bunkerRequest.relays, + context, + onLoading = onLoading, + ) + } } else { context.getAppCompatActivity()?.intent = null context.getAppCompatActivity()?.finish() @@ -208,8 +223,19 @@ fun SingleEventHomeScreen( ) } + val defaultRelays = NostrSigner.getInstance().settings.defaultRelays val savedApplication = database.applicationDao().getByKey(key) - val relays = intentData.bunkerRequest?.relays ?: listOf() + val relays = if (savedApplication != null) { + savedApplication.application.relays.ifEmpty { defaultRelays } + } else { + intentData.bunkerRequest?.relays?.ifEmpty { defaultRelays } ?: defaultRelays + } + if (intentData.bunkerRequest != null) { + NostrSigner.getInstance().checkForNewRelays( + NostrSigner.getInstance().settings.notificationType != NotificationType.DIRECT, + relays.toSet(), + ) + } val application = savedApplication ?: ApplicationWithPermissions( application = ApplicationEntity( @@ -240,19 +266,19 @@ fun SingleEventHomeScreen( false, ), ) - } - if (intentData.bunkerRequest != null) { - AmberUtils.sendBunkerError( - account, - intentData.bunkerRequest, - applicationEntity?.application?.relays ?: emptyList(), - context, - onLoading, - ) - } else { - context.getAppCompatActivity()?.intent = null - context.getAppCompatActivity()?.finish() + if (intentData.bunkerRequest != null) { + AmberUtils.sendBunkerError( + account, + intentData.bunkerRequest, + relays, + context, + onLoading, + ) + } else { + context.getAppCompatActivity()?.intent = null + context.getAppCompatActivity()?.finish() + } } }, ) @@ -337,9 +363,20 @@ fun SingleEventHomeScreen( database, ) } - + val defaultRelays = NostrSigner.getInstance().settings.defaultRelays val savedApplication = database.applicationDao().getByKey(key) - val relays = intentData.bunkerRequest?.relays ?: listOf() + val relays = if (savedApplication != null) { + savedApplication.application.relays.ifEmpty { defaultRelays } + } else { + intentData.bunkerRequest?.relays?.ifEmpty { defaultRelays } ?: defaultRelays + } + if (intentData.bunkerRequest != null) { + NostrSigner.getInstance().checkForNewRelays( + NostrSigner.getInstance().settings.notificationType != NotificationType.DIRECT, + relays.toSet(), + ) + } + val application = savedApplication ?: ApplicationWithPermissions( application = ApplicationEntity( @@ -370,19 +407,19 @@ fun SingleEventHomeScreen( false, ), ) - } - if (intentData.bunkerRequest != null) { - AmberUtils.sendBunkerError( - account, - intentData.bunkerRequest, - applicationEntity?.application?.relays ?: emptyList(), - context, - onLoading, - ) - } else { - context.getAppCompatActivity()?.intent = null - context.getAppCompatActivity()?.finish() + if (intentData.bunkerRequest != null) { + AmberUtils.sendBunkerError( + account, + intentData.bunkerRequest, + relays, + context, + onLoading, + ) + } else { + context.getAppCompatActivity()?.intent = null + context.getAppCompatActivity()?.finish() + } } }, ) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6a30ac5b..439c03db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -355,4 +355,6 @@ I fully trust this application Sign automatically every request DM relays + Paste from clipboard + Invalid nostr connect URI