diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index ce647bc2..dbbc9353 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -212,6 +212,7 @@
Shared key
Sign
Sign in
+ Sign in is not yet available while Mantra is in alpha testing.
Sign in to nsec
Sign in to Mantra via nsec, or remote signer
Sign in with an npub
diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/SignInScreen.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/SignInScreen.kt
index bd544193..ae53143f 100644
--- a/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/SignInScreen.kt
+++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/SignInScreen.kt
@@ -2,273 +2,42 @@ package press.mantra.compose.ui.composable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.imePadding
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Create
-import androidx.compose.material.icons.filled.NavigateNext
-import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
-import androidx.compose.material3.Icon
-import androidx.compose.material3.LoadingIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
-import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.text.input.ImeAction
-import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
-import androidx.compose.ui.unit.dp
-import androidx.lifecycle.viewmodel.compose.viewModel
-import com.vitorpamplona.quartz.nip19Bech32.entities.NPub
-import com.vitorpamplona.quartz.nip19Bech32.entities.NSec
import press.mantra.compose.ui.theme.spacing
import mantra.composeapp.generated.resources.Res
import org.jetbrains.compose.resources.stringResource
-import mantra.composeapp.generated.resources.be_sure_to_keep_this_nsec_safe
-import mantra.composeapp.generated.resources.enter_the_nsec_or_npub_read_only_that_you
-import mantra.composeapp.generated.resources.next
-import mantra.composeapp.generated.resources.nsec_npub_nip_05_static_address
-import mantra.composeapp.generated.resources.sign_in
-import mantra.composeapp.generated.resources.sign_in_to_nsec
-import mantra.composeapp.generated.resources.sign_in_with_an_npub
-import mantra.composeapp.generated.resources.something_went_wrong_and_we_were_unable_to
-import mantra.composeapp.generated.resources.this_will_give_you_read_only_access_to_the
-import mantra.composeapp.generated.resources.this_will_give_you_write_access_to_the
-import androidx.compose.material3.SnackbarHost
+import mantra.composeapp.generated.resources.sign_in_is_not_yet_available_while_mantra_is
import press.mantra.compose.ui.composable.widgets.LocalSnackbarHostState
import press.mantra.compose.ui.theme.readableContent
import press.mantra.compose.ui.theme.ConformancePreviews
-@OptIn(ExperimentalMaterial3ExpressiveApi::class)
+// The message is the whole screen while sign in is held back, so it is centred in
+// the window rather than given the leading edge the readable column normally keeps.
@Composable
-fun SignInToProfileScreen(
- initialSignInToProfileUIState: press.mantra.compose.ui.view.state.SignInToProfileUIState = press.mantra.compose.ui.view.state.SignInToProfileUIState.InputPrompt,
- nostrRepository: press.mantra.compose.repository.NostrRepository
-) {
- val signInToProfileViewModel: press.mantra.compose.ui.view.model.SignInToProfileViewModel = viewModel (
- factory = press.mantra.compose.ui.view.model.SignInToProfileViewModel.factory(
- initialSignInToProfileUIState,
- nostrRepository
- )
- )
- // imePadding: this screen has a text field, and without it the software
- // keyboard covers whatever is being typed into.
- Scaffold(
- snackbarHost = { SnackbarHost(LocalSnackbarHostState.current) },
- modifier = Modifier.imePadding()) { innerPadding ->
+fun SignInToProfileScreen() {
+ Scaffold(snackbarHost = { SnackbarHost(LocalSnackbarHostState.current) }) { innerPadding ->
Column(
- modifier = Modifier.padding(innerPadding)
+ modifier = Modifier.fillMaxSize().padding(innerPadding)
.readableContent()
+ .padding(MaterialTheme.spacing.screenMargin),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
) {
-
- Column(
- modifier = Modifier.fillMaxWidth().padding(
- MaterialTheme.spacing.space125
- ),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacing.space250)
- ) {
-
- when (val signInToProfileUIState = signInToProfileViewModel.signInToProfileUIState.value) {
- is press.mantra.compose.ui.view.state.SignInToProfileUIState.InputPrompt -> {
- Text(
- stringResource(Res.string.sign_in),
- style = MaterialTheme.typography.headlineSmall
- )
-
- TextField(
- modifier = Modifier.fillMaxWidth(),
- state = signInToProfileViewModel.signInToProfileFormState.textFieldForm.textFieldState,
- isError = signInToProfileViewModel.signInToProfileFormState.textFieldForm.errorMessage.value != null,
- supportingText = signInToProfileViewModel.signInToProfileFormState.textFieldForm.errorMessage.value?.let {
- {
- Text(
- text = it,
- modifier = Modifier.padding(
- bottom = MaterialTheme.spacing.compactPadding
- )
- )
- }
- },
- keyboardOptions = KeyboardOptions(
- keyboardType = KeyboardType.Password,
- imeAction = ImeAction.Done
- ),
- label = {
- Text(
- text = stringResource(Res.string.nsec_npub_nip_05_static_address),
- maxLines = 1,
- )
- },
- placeholder = {
- Text(
- text = stringResource(Res.string.enter_the_nsec_or_npub_read_only_that_you),
- maxLines = 1,
- )
- },
- leadingIcon = {
- Icon(
- Icons.Default.Create,
- contentDescription = "Write note"
- )
- }
- )
-
- Button(
- onClick = {
- signInToProfileViewModel.signInToProfileUIState.value = signInToProfileViewModel.validateCredential().let { credentialEntity ->
- when (credentialEntity) {
- is NSec -> {
- press.mantra.compose.ui.view.state.SignInToProfileUIState.ConfirmNsecSignIn(
- nsec = signInToProfileViewModel.signInToProfileFormState.textFieldForm.textFieldState.text.toString(),
- hexKey = credentialEntity.hex
- )
- }
- is NPub -> {
- press.mantra.compose.ui.view.state.SignInToProfileUIState.ConfirmNpubSignIn(
- npub = signInToProfileViewModel.signInToProfileFormState.textFieldForm.textFieldState.text.toString(),
- hexKey = credentialEntity.hex
- )
- }
- else -> {
- press.mantra.compose.ui.view.state.SignInToProfileUIState.Error
- }
- }
- }
- },
- ) {
- Text(
- stringResource(Res.string.next)
- )
- Icon(
- Icons.Default.NavigateNext,
- contentDescription = "Next"
- )
- }
-
- }
- is press.mantra.compose.ui.view.state.SignInToProfileUIState.ConfirmNpubSignIn-> {
-
- Spacer(
- modifier = Modifier.weight(1f)
- )
- Text(
- text = stringResource(Res.string.sign_in_with_an_npub),
- style = MaterialTheme.typography.headlineMedium
- )
-
- Text(
- text = signInToProfileUIState.npub,
- style = MaterialTheme.typography.bodyLarge,
- textAlign = TextAlign.Center
- )
-
- Text(
- text = signInToProfileUIState.hexKey,
- style = MaterialTheme.typography.labelMedium,
- textAlign = TextAlign.Center
- )
-
-
- Spacer(
- modifier = Modifier.weight(4f)
- )
-
-
-
- Text(
- text = stringResource(Res.string.this_will_give_you_read_only_access_to_the),
- style = MaterialTheme.typography.labelSmall,
- textAlign = TextAlign.Center
- )
-
- if (signInToProfileViewModel.isActionPending.value) {
- LoadingIndicator(
- modifier = Modifier
- )
- } else {
- Button(
- onClick = {
- signInToProfileViewModel.signInToAccount()
- }
- ) {
- Text(
- text = stringResource(Res.string.sign_in)
- )
- }
- }
-
- }
- is press.mantra.compose.ui.view.state.SignInToProfileUIState.ConfirmNsecSignIn-> {
-
- Spacer(
- modifier = Modifier.weight(1f)
- )
- Text(
- text = stringResource(Res.string.sign_in_to_nsec),
- style = MaterialTheme.typography.headlineMedium
- )
-
- Text(
- text = stringResource(Res.string.be_sure_to_keep_this_nsec_safe),
- textAlign = TextAlign.Center,
- style = MaterialTheme.typography.bodyMedium
- )
-
-
- Spacer(
- modifier = Modifier.weight(4f)
- )
-
-
-
- Text(
- text = stringResource(Res.string.this_will_give_you_write_access_to_the),
- style = MaterialTheme.typography.labelSmall,
- textAlign = TextAlign.Center
- )
-
- if (signInToProfileViewModel.isActionPending.value) {
- LoadingIndicator(
- modifier = Modifier
- )
- } else {
- Button(
- onClick = {
- signInToProfileViewModel.signInToAccount()
- }
- ) {
- Text(
- text = stringResource(Res.string.sign_in)
- )
- }
- }
-
- }
- is press.mantra.compose.ui.view.state.SignInToProfileUIState.Error -> {
- Spacer(
- modifier = Modifier.weight(1f)
- )
- Text(
- text = stringResource(Res.string.something_went_wrong_and_we_were_unable_to),
- style = MaterialTheme.typography.bodyLarge,
- textAlign = TextAlign.Center
- )
- Spacer(
- modifier = Modifier.weight(1f)
- )
- }
- }
- }
+ Text(
+ text = stringResource(Res.string.sign_in_is_not_yet_available_while_mantra_is),
+ style = MaterialTheme.typography.bodyLarge,
+ textAlign = TextAlign.Center
+ )
}
}
}
@@ -280,20 +49,7 @@ private fun SignInToProfileScreenPreview() {
Surface(
modifier = Modifier.fillMaxSize()
) {
- SignInToProfileScreen(
- initialSignInToProfileUIState =
- press.mantra.compose.ui.view.state.SignInToProfileUIState.InputPrompt,
-// SignInToProfileUIState.Error,
-// SignInToProfileUIState.ConfirmNpubSignIn(
-// npub = "npub1uh366qnj68a7atvwgwdy4569xd6v5jtferftapqztwjwlzh9553q47pqsx",
-// hexKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522"
-// ),
-// SignInToProfileUIState.ConfirmNsecSignIn(
-// nsec = "nsecthingsaretobekeptsecret",
-// hexKey = "e5e3ad0272d1fbeead8e439a4ad3453374ca4969c8d2be84025ba4ef8ae5a522"
-// ),
- nostrRepository = press.mantra.compose.repository.NostrRepository.NO_OP_NOSTR_REPOSITORY
- )
+ SignInToProfileScreen()
}
}
-}
\ No newline at end of file
+}
diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/navigation/MantraNavHost.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/navigation/MantraNavHost.kt
index 88b60107..759d5942 100644
--- a/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/navigation/MantraNavHost.kt
+++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/ui/composable/navigation/MantraNavHost.kt
@@ -632,9 +632,7 @@ fun MantraNavHost(
)
}
composable {
- SignInToProfileScreen(
- nostrRepository = databaseNostrRepository
- )
+ SignInToProfileScreen()
}
composable { backStackEntry ->
backStackEntry.toRoute()