|
|
@ -28,7 +28,6 @@ import com.airbnb.mvrx.Loading |
|
|
|
import com.airbnb.mvrx.Success |
|
|
|
import com.airbnb.mvrx.Success |
|
|
|
import com.airbnb.mvrx.compose.collectAsState |
|
|
|
import com.airbnb.mvrx.compose.collectAsState |
|
|
|
import com.airbnb.mvrx.compose.mavericksViewModel |
|
|
|
import com.airbnb.mvrx.compose.mavericksViewModel |
|
|
|
import io.element.android.x.core.compose.textFieldState |
|
|
|
|
|
|
|
import io.element.android.x.designsystem.ElementXTheme |
|
|
|
import io.element.android.x.designsystem.ElementXTheme |
|
|
|
import timber.log.Timber |
|
|
|
import timber.log.Timber |
|
|
|
|
|
|
|
|
|
|
@ -39,12 +38,14 @@ fun LoginScreen( |
|
|
|
onLoginWithSuccess: () -> Unit = { }, |
|
|
|
onLoginWithSuccess: () -> Unit = { }, |
|
|
|
) { |
|
|
|
) { |
|
|
|
val state: LoginViewState by viewModel.collectAsState() |
|
|
|
val state: LoginViewState by viewModel.collectAsState() |
|
|
|
|
|
|
|
val formState: LoginFormState by viewModel.formState |
|
|
|
LaunchedEffect(key1 = Unit) { |
|
|
|
LaunchedEffect(key1 = Unit) { |
|
|
|
Timber.d("resume") |
|
|
|
Timber.d("resume") |
|
|
|
viewModel.onResume() |
|
|
|
viewModel.onResume() |
|
|
|
} |
|
|
|
} |
|
|
|
LoginContent( |
|
|
|
LoginContent( |
|
|
|
state = state, |
|
|
|
state = state, |
|
|
|
|
|
|
|
formState = formState, |
|
|
|
onChangeServer = onChangeServer, |
|
|
|
onChangeServer = onChangeServer, |
|
|
|
onLoginChanged = viewModel::onSetName, |
|
|
|
onLoginChanged = viewModel::onSetName, |
|
|
|
onPasswordChanged = viewModel::onSetPassword, |
|
|
|
onPasswordChanged = viewModel::onSetPassword, |
|
|
@ -58,6 +59,7 @@ fun LoginScreen( |
|
|
|
@Composable |
|
|
|
@Composable |
|
|
|
fun LoginContent( |
|
|
|
fun LoginContent( |
|
|
|
state: LoginViewState, |
|
|
|
state: LoginViewState, |
|
|
|
|
|
|
|
formState: LoginFormState, |
|
|
|
onChangeServer: () -> Unit = {}, |
|
|
|
onChangeServer: () -> Unit = {}, |
|
|
|
onLoginChanged: (String) -> Unit = {}, |
|
|
|
onLoginChanged: (String) -> Unit = {}, |
|
|
|
onPasswordChanged: (String) -> Unit = {}, |
|
|
|
onPasswordChanged: (String) -> Unit = {}, |
|
|
@ -117,39 +119,31 @@ fun LoginContent( |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
var login by textFieldState(state.login) |
|
|
|
|
|
|
|
OutlinedTextField( |
|
|
|
OutlinedTextField( |
|
|
|
value = login, |
|
|
|
value = formState.login, |
|
|
|
modifier = Modifier |
|
|
|
modifier = Modifier |
|
|
|
.fillMaxWidth() |
|
|
|
.fillMaxWidth() |
|
|
|
.padding(top = 60.dp), |
|
|
|
.padding(top = 60.dp), |
|
|
|
label = { |
|
|
|
label = { |
|
|
|
Text(text = "Email or username") |
|
|
|
Text(text = "Email or username") |
|
|
|
}, |
|
|
|
}, |
|
|
|
onValueChange = { |
|
|
|
onValueChange = onLoginChanged, |
|
|
|
login = it |
|
|
|
|
|
|
|
onLoginChanged(it) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
keyboardOptions = KeyboardOptions( |
|
|
|
keyboardOptions = KeyboardOptions( |
|
|
|
keyboardType = KeyboardType.Email, |
|
|
|
keyboardType = KeyboardType.Email, |
|
|
|
imeAction = ImeAction.Next |
|
|
|
imeAction = ImeAction.Next |
|
|
|
), |
|
|
|
), |
|
|
|
) |
|
|
|
) |
|
|
|
var passwordVisible by remember { mutableStateOf(false) } |
|
|
|
var passwordVisible by remember { mutableStateOf(false) } |
|
|
|
var password by textFieldState(state.password) |
|
|
|
|
|
|
|
if (state.isLoggedIn is Loading) { |
|
|
|
if (state.isLoggedIn is Loading) { |
|
|
|
// Ensure password is hidden when user submits the form |
|
|
|
// Ensure password is hidden when user submits the form |
|
|
|
passwordVisible = false |
|
|
|
passwordVisible = false |
|
|
|
} |
|
|
|
} |
|
|
|
OutlinedTextField( |
|
|
|
OutlinedTextField( |
|
|
|
value = password, |
|
|
|
value = formState.password, |
|
|
|
modifier = Modifier |
|
|
|
modifier = Modifier |
|
|
|
.fillMaxWidth() |
|
|
|
.fillMaxWidth() |
|
|
|
.padding(top = 24.dp), |
|
|
|
.padding(top = 24.dp), |
|
|
|
onValueChange = { |
|
|
|
onValueChange = onPasswordChanged, |
|
|
|
password = it |
|
|
|
|
|
|
|
onPasswordChanged(it) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
label = { |
|
|
|
label = { |
|
|
|
Text(text = "Password") |
|
|
|
Text(text = "Password") |
|
|
|
}, |
|
|
|
}, |
|
|
@ -213,6 +207,7 @@ private fun LoginContentPreview() { |
|
|
|
state = LoginViewState( |
|
|
|
state = LoginViewState( |
|
|
|
homeserver = "matrix.org", |
|
|
|
homeserver = "matrix.org", |
|
|
|
), |
|
|
|
), |
|
|
|
|
|
|
|
formState = LoginFormState("", "") |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|