diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/AudioRoomsScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/AudioRoomsScreen.kt index 8f41daa61..c91515440 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/AudioRoomsScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/audiorooms/AudioRoomsScreen.kt @@ -21,7 +21,10 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.audiorooms import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.AlertDialog import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -44,6 +47,7 @@ import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.routes.Route import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.audiorooms.create.CreateAudioRoomSheet +import com.vitorpamplona.amethyst.ui.screen.loggedIn.audiorooms.create.CreateAudioRoomViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.audiorooms.datasource.AudioRoomsFilterAssemblerSubscription import com.vitorpamplona.amethyst.ui.stringRes @@ -69,7 +73,10 @@ fun AudioRoomsScreen( WatchAccountForAudioRoomsScreen(audioRoomsFeedState = audioRoomsFeedContentState, accountViewModel = accountViewModel) AudioRoomsFilterAssemblerSubscription(accountViewModel) + val nestsServers by accountViewModel.account.nestsServers.flow + .collectAsStateWithLifecycle() var showCreateSheet by remember { mutableStateOf(false) } + var showSetupDialog by remember { mutableStateOf(false) } DisappearingScaffold( isInvertedLayout = false, @@ -87,7 +94,13 @@ fun AudioRoomsScreen( }, floatingButton = { FloatingActionButton( - onClick = { showCreateSheet = true }, + onClick = { + if (nestsServers.any { it.startsWith("http") }) { + showCreateSheet = true + } else { + showSetupDialog = true + } + }, shape = CircleShape, ) { Icon( @@ -119,6 +132,29 @@ fun AudioRoomsScreen( } } + if (showSetupDialog) { + SetUpAudioServerDialog( + defaultUrl = CreateAudioRoomViewModel.DEFAULT_SERVICE_URL, + onDismiss = { showSetupDialog = false }, + onConfirm = { + showSetupDialog = false + accountViewModel.launchSigner { + try { + accountViewModel.account.sendNestsServersList( + listOf(CreateAudioRoomViewModel.DEFAULT_SERVICE_URL), + ) + showCreateSheet = true + } catch (_: Throwable) { + accountViewModel.toastManager.toast( + R.string.audio_rooms, + R.string.audio_room_no_server_save_failed, + ) + } + } + }, + ) + } + if (showCreateSheet) { CreateAudioRoomSheet( accountViewModel = accountViewModel, @@ -127,6 +163,29 @@ fun AudioRoomsScreen( } } +@Composable +private fun SetUpAudioServerDialog( + defaultUrl: String, + onDismiss: () -> Unit, + onConfirm: () -> Unit, +) { + AlertDialog( + onDismissRequest = onDismiss, + title = { Text(stringRes(R.string.audio_room_no_server_title)) }, + text = { Text(stringRes(R.string.audio_room_no_server_body, defaultUrl)) }, + confirmButton = { + TextButton(onClick = onConfirm) { + Text(stringRes(R.string.audio_room_no_server_use_default)) + } + }, + dismissButton = { + TextButton(onClick = onDismiss) { + Text(stringRes(R.string.audio_room_no_server_cancel)) + } + }, + ) +} + @Composable fun WatchAccountForAudioRoomsScreen( audioRoomsFeedState: FeedContentState, diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml index 5da4e92dc..cd621dc77 100644 --- a/amethyst/src/main/res/values/strings.xml +++ b/amethyst/src/main/res/values/strings.xml @@ -556,6 +556,11 @@ Unmute Share room Start space + Set up an audio server + You haven\'t picked an audio server yet. Add %1$s to your server list and continue?\n\nYou can change this later in Settings. + Use default + Cancel + Couldn\'t save your audio server list. Try again. Start a new audio room Room name What\'s it about?