From 3e19e59e2963f3ac0caaa73a676dfd2ef004c070 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 18 Nov 2024 11:15:12 -0300 Subject: [PATCH] Add option to add the relay if it doesnt support retrieving bunker events eg (ditto instances) --- .../nostrsigner/ui/AccountScreen.kt | 67 +++++++++++++++++++ .../nostrsigner/ui/AccountStateViewModel.kt | 12 ++++ .../ui/actions/EditRelaysDialog.kt | 42 ++++++++---- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 109 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt index be06e829..d623c3b2 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.width import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.Done import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button @@ -183,10 +184,76 @@ private fun DisplayErrorMessages(accountViewModel: AccountStateViewModel) { obj.onOk() accountViewModel.clearToasts() } + is AcceptRejectToastMsg -> + InformationDialog( + obj.title, + obj.msg, + onAccept = { + obj.onAccept() + accountViewModel.clearToasts() + }, + onReject = { + obj.onReject() + accountViewModel.clearToasts() + }, + ) } } } +@Composable +fun InformationDialog( + title: String, + textContent: String, + buttonColors: ButtonColors = ButtonDefaults.buttonColors(), + onAccept: () -> Unit, + onReject: () -> Unit, +) { + AlertDialog( + onDismissRequest = onReject, + title = { Text(title) }, + text = { SelectionContainer { Text(textContent) } }, + dismissButton = { + Button( + onClick = onReject, + colors = buttonColors, + contentPadding = PaddingValues(horizontal = 16.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = Icons.Outlined.Close, + contentDescription = null, + tint = Color.Black, + ) + Spacer(Modifier.width(5.dp)) + Text(stringResource(R.string.no)) + } + } + }, + confirmButton = { + Button( + onClick = onAccept, + colors = buttonColors, + contentPadding = PaddingValues(horizontal = 16.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + imageVector = Icons.Outlined.Done, + contentDescription = null, + tint = Color.Black, + ) + Spacer(Modifier.width(5.dp)) + Text(stringResource(R.string.yes)) + } + } + }, + ) +} + @Composable fun InformationDialog( title: String, diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountStateViewModel.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountStateViewModel.kt index ba81e19e..12f9d542 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountStateViewModel.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountStateViewModel.kt @@ -31,6 +31,9 @@ class StringToastMsg(val title: String, val msg: String) : ToastMsg() @Immutable class ConfirmationToastMsg(val title: String, val msg: String, val onOk: () -> Unit) : ToastMsg() +@Immutable +class AcceptRejectToastMsg(val title: String, val msg: String, val onAccept: () -> Unit, val onReject: () -> Unit) : ToastMsg() + @Immutable class ResourceToastMsg( val titleResId: Int, @@ -67,6 +70,15 @@ class AccountStateViewModel(npub: String?) : ViewModel() { viewModelScope.launch { toasts.emit(ConfirmationToastMsg(title, message, onOk)) } } + fun toast( + title: String, + message: String, + onAccept: () -> Unit, + onReject: () -> Unit, + ) { + viewModelScope.launch { toasts.emit(AcceptRejectToastMsg(title, message, onAccept, onReject)) } + } + private fun tryLoginExistingAccount( route: String?, npub: String?, diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/actions/EditRelaysDialog.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/actions/EditRelaysDialog.kt index 363f7e25..9d55e857 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/actions/EditRelaysDialog.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/actions/EditRelaysDialog.kt @@ -349,21 +349,25 @@ suspend fun onAddRelay( signedEvent = signedEvent, relayList = listOf(RelaySetupInfo(addedWSS, read = true, write = true, setOf())), ) - relay.sendFilter( - UUID.randomUUID().toString().substring(0, 4), - filters = listOf( - TypedFilter( - types = COMMON_FEED_TYPES, - filter = SincePerRelayFilter( - ids = listOf(event.id), + if (result) { + relay.sendFilter( + UUID.randomUUID().toString().substring(0, 4), + filters = listOf( + TypedFilter( + types = COMMON_FEED_TYPES, + filter = SincePerRelayFilter( + ids = listOf(event.id), + ), ), ), - ), - ) - var count = 0 - while (!filterResult && count < 10) { - delay(1000) - count++ + ) + var count = 0 + while (!filterResult && count < 10) { + delay(1000) + count++ + } + } else { + filterResult = true } AmberListenerSingleton.getListener()?.let { listener -> @@ -388,6 +392,18 @@ suspend fun onAddRelay( accountStateViewModel.toast( context.getString(R.string.relay), context.getString(R.string.relay_filter_failed), + onAccept = { + relays2.add( + RelaySetupInfo( + addedWSS, + read = true, + write = true, + feedTypes = COMMON_FEED_TYPES, + ), + ) + onDone() + }, + onReject = {}, ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94300567..b7941c5e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -427,5 +427,5 @@ %1$s is requiring some permissions, please review them. Always approve this permission %1$s is requiring to sign these events related to %2$s permission. - Relay does not support receiving Bunker events + Relay does not support retrieving Bunker events. Would you like to add it anyway?