From f6aa7325586f6eaadab6d733ab60b15d174bde60 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 29 Oct 2024 12:07:15 -0400 Subject: [PATCH] Adds DM and Search default buttons to the dialogs. --- .../amethyst/model/AccountSettings.kt | 7 +- .../ui/actions/relays/AddDMRelayListDialog.kt | 28 ++- .../relays/AddSearchRelayListDialog.kt | 26 ++- .../ui/actions/relays/AllRelayListView.kt | 171 ++++++++++-------- .../actions/relays/RelayInformationDialog.kt | 2 + .../note/elements/AddInboxRelayForDMCard.kt | 6 - amethyst/src/main/res/values/strings.xml | 1 + 7 files changed, 149 insertions(+), 92 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSettings.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSettings.kt index 81d6f2731..07f4cb5d0 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSettings.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/AccountSettings.kt @@ -67,9 +67,9 @@ val DefaultNIP65List = val DefaultDMRelayList = listOf( - RelayUrlFormatter.normalize("wss://auth.nostr1.com/"), - RelayUrlFormatter.normalize("wss://nostr.mom/"), - RelayUrlFormatter.normalize("wss://nos.lol/"), + RelayUrlFormatter.normalize("wss://auth.nostr1.com"), + RelayUrlFormatter.normalize("wss://relay.0xchat.com"), + RelayUrlFormatter.normalize("wss://nos.lol"), ) val DefaultSearchRelayList = @@ -357,7 +357,6 @@ class AccountSettings( // Events might be different objects, we have to compare their ids. if (backupAppSpecificData?.id != appSettings.id) { - println("AABBCC Update App Specific Data") backupAppSpecificData = appSettings syncedSettings.updateFrom(newSyncedSettings) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddDMRelayListDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddDMRelayListDialog.kt index 7177f815b..116e7a9b1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddDMRelayListDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddDMRelayListDialog.kt @@ -29,6 +29,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Card import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar @@ -42,6 +43,8 @@ import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.DefaultDMRelayList +import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton @@ -50,6 +53,7 @@ import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer import com.vitorpamplona.amethyst.ui.theme.imageModifier +import com.vitorpamplona.ammolite.relays.RelayStat @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -66,6 +70,7 @@ fun AddDMRelayListDialog( onDismissRequest = onClose, properties = DialogProperties(usePlatformDefaultWidth = false), ) { + SetDialogToEdgeToEdge() Scaffold( topBar = { TopAppBar( @@ -114,7 +119,7 @@ fun AddDMRelayListDialog( ), verticalArrangement = Arrangement.SpaceAround, ) { - Explanation() + Explanation(postViewModel) DMRelayList(postViewModel, accountViewModel, onClose, nav) } @@ -123,7 +128,7 @@ fun AddDMRelayListDialog( } @Composable -private fun Explanation() { +private fun Explanation(postViewModel: DMRelayListViewModel) { Card(modifier = MaterialTheme.colorScheme.imageModifier) { Column(modifier = Modifier.padding(16.dp)) { Text( @@ -133,8 +138,25 @@ private fun Explanation() { Spacer(modifier = StdVertSpacer) Text( - text = stringRes(id = R.string.dm_relays_not_found_examples), + text = stringRes(id = R.string.dm_relays_not_found_examples2), ) + + Spacer(modifier = StdVertSpacer) + + ResetDMRelaysLonger(postViewModel) } } } + +@Composable +fun ResetDMRelaysLonger(postViewModel: DMRelayListViewModel) { + OutlinedButton( + onClick = { + postViewModel.deleteAll() + DefaultDMRelayList.forEach { postViewModel.addRelay(BasicRelaySetupInfo(it, RelayStat())) } + postViewModel.loadRelayDocuments() + }, + ) { + Text(stringRes(R.string.default_relays_longer)) + } +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddSearchRelayListDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddSearchRelayListDialog.kt index 0d44ce6ec..b0c7791f5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddSearchRelayListDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AddSearchRelayListDialog.kt @@ -29,6 +29,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Card import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar @@ -42,6 +43,7 @@ import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.CloseButton @@ -50,6 +52,8 @@ import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer import com.vitorpamplona.amethyst.ui.theme.imageModifier +import com.vitorpamplona.ammolite.relays.Constants +import com.vitorpamplona.ammolite.relays.RelayStat @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -66,6 +70,7 @@ fun AddSearchRelayListDialog( onDismissRequest = onClose, properties = DialogProperties(usePlatformDefaultWidth = false), ) { + SetDialogToEdgeToEdge() Scaffold( topBar = { TopAppBar( @@ -114,7 +119,7 @@ fun AddSearchRelayListDialog( ), verticalArrangement = Arrangement.SpaceAround, ) { - Explanation() + Explanation(postViewModel) SearchRelayList(postViewModel, accountViewModel, onClose, nav) } @@ -123,7 +128,7 @@ fun AddSearchRelayListDialog( } @Composable -private fun Explanation() { +private fun Explanation(postViewModel: SearchRelayListViewModel) { Card(modifier = MaterialTheme.colorScheme.imageModifier) { Column(modifier = Modifier.padding(16.dp)) { Text( @@ -135,6 +140,23 @@ private fun Explanation() { Text( text = stringRes(id = R.string.search_relays_not_found_examples), ) + + Spacer(modifier = StdVertSpacer) + + ResetSearchRelaysLonger(postViewModel) } } } + +@Composable +fun ResetSearchRelaysLonger(postViewModel: SearchRelayListViewModel) { + OutlinedButton( + onClick = { + postViewModel.deleteAll() + Constants.defaultSearchRelaySet.forEach { postViewModel.addRelay(BasicRelaySetupInfo(it, RelayStat())) } + postViewModel.loadRelayDocuments() + }, + ) { + Text(stringRes(R.string.default_relays_longer)) + } +} diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt index b033ce736..c3dce2b17 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/AllRelayListView.kt @@ -24,6 +24,7 @@ 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.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -49,6 +50,8 @@ import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.DefaultDMRelayList +import com.vitorpamplona.amethyst.model.DefaultSearchRelayList import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.rememberExtendedNav import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel @@ -171,91 +174,92 @@ fun MappedAllRelayListView( ) }, ) { pad -> - Column( + LazyColumn( + contentPadding = FeedPadding, modifier = Modifier .fillMaxSize() .padding( - 16.dp, - pad.calculateTopPadding(), - 16.dp, - pad.calculateBottomPadding(), - ), - verticalArrangement = Arrangement.SpaceAround, + start = 10.dp, + end = 10.dp, + top = pad.calculateTopPadding(), + bottom = pad.calculateBottomPadding(), + ).consumeWindowInsets(pad), ) { - LazyColumn(contentPadding = FeedPadding) { + item { + SettingsCategory( + stringRes(R.string.public_home_section), + stringRes(R.string.public_home_section_explainer), + Modifier.padding(bottom = 8.dp), + ) + } + renderNip65HomeItems(homeFeedState, nip65ViewModel, accountViewModel, newNav) + + item { + SettingsCategory( + stringRes(R.string.public_notif_section), + stringRes(R.string.public_notif_section_explainer), + ) + } + renderNip65NotifItems(notifFeedState, nip65ViewModel, accountViewModel, newNav) + + item { + SettingsCategoryWithButton( + stringRes(R.string.private_inbox_section), + stringRes(R.string.private_inbox_section_explainer), + action = { + ResetDMRelays(dmViewModel) + }, + ) + } + renderDMItems(dmFeedState, dmViewModel, accountViewModel, newNav) + + item { + SettingsCategory( + stringRes(R.string.private_outbox_section), + stringRes(R.string.private_outbox_section_explainer), + ) + } + renderPrivateOutboxItems(privateOutboxFeedState, privateOutboxViewModel, accountViewModel, newNav) + + item { + SettingsCategoryWithButton( + stringRes(R.string.search_section), + stringRes(R.string.search_section_explainer), + action = { + ResetSearchRelays(searchViewModel) + }, + ) + } + renderSearchItems(searchFeedState, searchViewModel, accountViewModel, newNav) + + item { + SettingsCategory( + stringRes(R.string.local_section), + stringRes(R.string.local_section_explainer), + ) + } + renderLocalItems(localFeedState, localViewModel, accountViewModel, newNav) + + item { + SettingsCategoryWithButton( + stringRes(R.string.kind_3_section), + stringRes(R.string.kind_3_section_description), + action = { + ResetKind3Relays(kind3ViewModel) + }, + ) + } + renderKind3Items(kind3FeedState, kind3ViewModel, accountViewModel, newNav, relayToAdd) + + if (kind3Proposals.isNotEmpty()) { item { SettingsCategory( - stringRes(R.string.public_home_section), - stringRes(R.string.public_home_section_explainer), - Modifier.padding(bottom = 8.dp), + stringRes(R.string.kind_3_recommended_section), + stringRes(R.string.kind_3_recommended_section_description), ) } - renderNip65HomeItems(homeFeedState, nip65ViewModel, accountViewModel, newNav) - - item { - SettingsCategory( - stringRes(R.string.public_notif_section), - stringRes(R.string.public_notif_section_explainer), - ) - } - renderNip65NotifItems(notifFeedState, nip65ViewModel, accountViewModel, newNav) - - item { - SettingsCategory( - stringRes(R.string.private_inbox_section), - stringRes(R.string.private_inbox_section_explainer), - ) - } - renderDMItems(dmFeedState, dmViewModel, accountViewModel, newNav) - - item { - SettingsCategory( - stringRes(R.string.private_outbox_section), - stringRes(R.string.private_outbox_section_explainer), - ) - } - renderPrivateOutboxItems(privateOutboxFeedState, privateOutboxViewModel, accountViewModel, newNav) - - item { - SettingsCategoryWithButton( - stringRes(R.string.search_section), - stringRes(R.string.search_section_explainer), - action = { - ResetSearchRelays(searchViewModel) - }, - ) - } - renderSearchItems(searchFeedState, searchViewModel, accountViewModel, newNav) - - item { - SettingsCategory( - stringRes(R.string.local_section), - stringRes(R.string.local_section_explainer), - ) - } - renderLocalItems(localFeedState, localViewModel, accountViewModel, newNav) - - item { - SettingsCategoryWithButton( - stringRes(R.string.kind_3_section), - stringRes(R.string.kind_3_section_description), - action = { - ResetKind3Relays(kind3ViewModel) - }, - ) - } - renderKind3Items(kind3FeedState, kind3ViewModel, accountViewModel, newNav, relayToAdd) - - if (kind3Proposals.isNotEmpty()) { - item { - SettingsCategory( - stringRes(R.string.kind_3_recommended_section), - stringRes(R.string.kind_3_recommended_section_description), - ) - } - renderKind3ProposalItems(kind3Proposals, kind3ViewModel, accountViewModel, newNav) - } + renderKind3ProposalItems(kind3Proposals, kind3ViewModel, accountViewModel, newNav) } } } @@ -280,7 +284,20 @@ fun ResetSearchRelays(postViewModel: SearchRelayListViewModel) { OutlinedButton( onClick = { postViewModel.deleteAll() - Constants.defaultSearchRelaySet.forEach { postViewModel.addRelay(BasicRelaySetupInfo(it, RelayStat())) } + DefaultSearchRelayList.forEach { postViewModel.addRelay(BasicRelaySetupInfo(it, RelayStat())) } + postViewModel.loadRelayDocuments() + }, + ) { + Text(stringRes(R.string.default_relays)) + } +} + +@Composable +fun ResetDMRelays(postViewModel: DMRelayListViewModel) { + OutlinedButton( + onClick = { + postViewModel.deleteAll() + DefaultDMRelayList.forEach { postViewModel.addRelay(BasicRelaySetupInfo(it, RelayStat())) } postViewModel.loadRelayDocuments() }, ) { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt index 8488acd82..b7384966b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/relays/RelayInformationDialog.kt @@ -53,6 +53,7 @@ import com.vitorpamplona.amethyst.model.FeatureSetType import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.components.ClickableEmail import com.vitorpamplona.amethyst.ui.components.ClickableUrl +import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer import com.vitorpamplona.amethyst.ui.navigation.INav import com.vitorpamplona.amethyst.ui.navigation.rememberExtendedNav @@ -104,6 +105,7 @@ fun RelayInformationDialog( dismissOnClickOutside = false, ), ) { + SetDialogToEdgeToEdge() Surface { val color = remember { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/elements/AddInboxRelayForDMCard.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/elements/AddInboxRelayForDMCard.kt index 7177bfcbd..e56775327 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/elements/AddInboxRelayForDMCard.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/elements/AddInboxRelayForDMCard.kt @@ -144,12 +144,6 @@ fun AddInboxRelayForDMCard( Spacer(modifier = StdVertSpacer) - Text( - text = stringRes(id = R.string.dm_relays_not_found_examples), - ) - - Spacer(modifier = StdVertSpacer) - var wantsToEditRelays by remember { mutableStateOf(false) } if (wantsToEditRelays) { AddDMRelayListDialog({ wantsToEditRelays = false }, accountViewModel, nav = nav) diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml index 93f1b73d2..ed3b2e4c0 100644 --- a/amethyst/src/main/res/values/strings.xml +++ b/amethyst/src/main/res/values/strings.xml @@ -635,6 +635,7 @@ Checking Nostr address Select/Deselect all Default + Reset to Defaults Select a relay to continue Forward Zaps to: