diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxSetupScreen.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxSetupScreen.kt index 035f105ba1ba2542902ae14f438fff950360f040..c5fc1dedab163a19023c0f00bb2d937bae6bd439 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxSetupScreen.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxSetupScreen.kt @@ -40,6 +40,7 @@ import androidx.compose.material.OutlinedTextField import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment.Companion.Center import androidx.compose.ui.Alignment.Companion.CenterEnd @@ -50,19 +51,61 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import org.briarproject.bramble.api.FormatException +import org.briarproject.bramble.api.mailbox.MailboxPairingState import org.briarproject.briar.desktop.mailbox.MailboxPairingUiState.NotSetup import org.briarproject.briar.desktop.ui.Constants.DIALOG_WIDTH import org.briarproject.briar.desktop.utils.AccessibilityUtils.description import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18n +import org.briarproject.briar.desktop.utils.PreviewUtils + +fun main() = PreviewUtils.preview( + "showError" to false, +) { + val pairingLink = remember { mutableStateOf("") } + val isSettingUp = remember { mutableStateOf(false) } + val showError = getBooleanParameter("showError") + MailboxSetupScreen( + pairingUiState = if (showError) { + MailboxPairingUiState.OfflineWhenPairing + } else if (isSettingUp.value) { + MailboxPairingUiState.Pairing(MailboxPairingState.Pairing(System.currentTimeMillis())) + } else { + NotSetup + }, + pairingLink = pairingLink.value, + onPairingLinkChanged = { pairingLink.value = it }, + pairMailbox = { isSettingUp.value = true }, + showError = showError, + onPairingErrorSeen = {}, + ) +} @Composable fun MailboxSetupScreen(viewModel: MailboxViewModel, showError: Boolean) { + MailboxSetupScreen( + pairingUiState = viewModel.pairingUiState.value, + pairingLink = viewModel.pairingLink.value, + onPairingLinkChanged = viewModel::onPairingLinkChanged, + pairMailbox = viewModel::pairMailbox, + showError = showError, + onPairingErrorSeen = viewModel::onPairingErrorSeen, + ) +} + +@Composable +fun MailboxSetupScreen( + pairingUiState: MailboxPairingUiState, + pairingLink: String, + onPairingLinkChanged: (String) -> Unit, + pairMailbox: () -> Unit, + showError: Boolean, + onPairingErrorSeen: () -> Unit, +) { MailboxErrorDialog( - state = viewModel.pairingUiState.value, + state = pairingUiState, visible = showError, - ) { - viewModel.onPairingErrorSeen() - } + onDismissed = onPairingErrorSeen, + ) Box( contentAlignment = Center, modifier = Modifier.fillMaxSize(), @@ -119,18 +162,18 @@ fun MailboxSetupScreen(viewModel: MailboxViewModel, showError: Boolean) { ) val isInvalid = rememberSaveable { mutableStateOf(false) } val onNameChanged = { changedName: String -> - viewModel.onPairingLinkChanged(changedName) + onPairingLinkChanged(changedName) isInvalid.value = false } val onOkButtonClicked = { try { - viewModel.pairMailbox(viewModel.pairingLink.value) + pairMailbox() } catch (e: FormatException) { isInvalid.value = true } } OutlinedTextField( - value = viewModel.pairingLink.value, + value = pairingLink, onValueChange = onNameChanged, label = { Text(i18n("mailbox.setup.hint")) }, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), @@ -142,7 +185,7 @@ fun MailboxSetupScreen(viewModel: MailboxViewModel, showError: Boolean) { .requiredHeight(96.dp) .description(i18n("mailbox.setup.hint")), ) - if (viewModel.pairingUiState.value is NotSetup) Button( + if (pairingUiState is NotSetup) Button( onClick = onOkButtonClicked, modifier = Modifier.align(End) ) { diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxViewModel.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxViewModel.kt index 97d699270b206ba6b80ebc8d8b0025c8e826f835..510ebf6c442064722a1cb91fefb09c22f9552e7c 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxViewModel.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/mailbox/MailboxViewModel.kt @@ -142,7 +142,8 @@ class MailboxViewModel @Inject constructor( } @UiExecutor - fun pairMailbox(base32Link: String) { + fun pairMailbox() { + val base32Link = pairingLink.value val payload = mailboxManager.convertBase32Payload(base32Link) if (isTorActive()) { pairingTask = mailboxManager.startPairingTask(payload).also {