Change screen: propagate current homeserver value
This commit is contained in:
parent
8fb60f3b86
commit
d96a714bd9
7 changed files with 34 additions and 13 deletions
|
|
@ -30,7 +30,6 @@ fun OnBoardingScreenNavigation(navigator: DestinationsNavigator) {
|
|||
@Composable
|
||||
fun LoginScreenNavigation(navigator: DestinationsNavigator) {
|
||||
LoginScreen(
|
||||
homeserver = "matrix.org",
|
||||
onChangeServer = {
|
||||
navigator.navigate(ChangeServerScreenNavigationDestination)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -25,21 +25,21 @@ import com.airbnb.mvrx.Success
|
|||
import com.airbnb.mvrx.compose.collectAsState
|
||||
import com.airbnb.mvrx.compose.mavericksViewModel
|
||||
import io.element.android.x.designsystem.ElementXTheme
|
||||
import timber.log.Timber
|
||||
|
||||
@Composable
|
||||
fun LoginScreen(
|
||||
viewModel: LoginViewModel = mavericksViewModel(),
|
||||
homeserver: String,
|
||||
onChangeServer: () -> Unit = { },
|
||||
onLoginWithSuccess: () -> Unit = { },
|
||||
) {
|
||||
val state: LoginViewState by viewModel.collectAsState()
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
viewModel.homeserver = homeserver
|
||||
Timber.d("resume")
|
||||
viewModel.onResume()
|
||||
}
|
||||
LoginContent(
|
||||
state = state,
|
||||
homeserver = homeserver,
|
||||
onChangeServer = onChangeServer,
|
||||
onLoginChanged = viewModel::onSetName,
|
||||
onPasswordChanged = viewModel::onSetPassword,
|
||||
|
|
@ -53,7 +53,6 @@ fun LoginScreen(
|
|||
@Composable
|
||||
fun LoginContent(
|
||||
state: LoginViewState,
|
||||
homeserver: String = "",
|
||||
onChangeServer: () -> Unit = {},
|
||||
onLoginChanged: (String) -> Unit = {},
|
||||
onPasswordChanged: (String) -> Unit = {},
|
||||
|
|
@ -92,7 +91,7 @@ fun LoginContent(
|
|||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
OutlinedTextField(
|
||||
value = homeserver,
|
||||
value = state.homeserver,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onValueChange = { /* no op */ },
|
||||
enabled = false,
|
||||
|
|
@ -178,8 +177,9 @@ fun LoginContent(
|
|||
private fun LoginContentPreview() {
|
||||
ElementXTheme(darkTheme = false) {
|
||||
LoginContent(
|
||||
state = LoginViewState(),
|
||||
homeserver = "matrix.org",
|
||||
state = LoginViewState(
|
||||
homeserver = "matrix.org",
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,10 +9,17 @@ import kotlinx.coroutines.launch
|
|||
class LoginViewModel(initialState: LoginViewState) :
|
||||
MavericksViewModel<LoginViewState>(initialState) {
|
||||
|
||||
lateinit var homeserver: String
|
||||
|
||||
private val matrix = MatrixInstance.getInstance()
|
||||
|
||||
fun onResume() {
|
||||
val currentHomeserver = matrix.getHomeserverOrDefault()
|
||||
setState {
|
||||
copy(
|
||||
homeserver = currentHomeserver
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun onSubmit() = withState { state ->
|
||||
setState {
|
||||
copy(isLoggedIn = Loading())
|
||||
|
|
@ -20,8 +27,10 @@ class LoginViewModel(initialState: LoginViewState) :
|
|||
|
||||
viewModelScope.launch {
|
||||
suspend {
|
||||
// Ensure the server is passed to the Rust SDK
|
||||
matrix.setHomeserver(homeserver)
|
||||
// Ensure the server is provided to the Rust SDK
|
||||
if (matrix.getHomeserver() == null) {
|
||||
matrix.setHomeserver(state.homeserver)
|
||||
}
|
||||
matrix.login(state.login, state.password)
|
||||
matrix.activeClient().startSync()
|
||||
}.execute {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.airbnb.mvrx.MavericksState
|
|||
import com.airbnb.mvrx.Uninitialized
|
||||
|
||||
data class LoginViewState(
|
||||
val homeserver: String = "",
|
||||
val login: String = "",
|
||||
val password: String = "",
|
||||
val isLoggedIn: Async<Unit> = Uninitialized,
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@ class ChangeServerViewModel(initialState: ChangeServerViewState) :
|
|||
|
||||
private val matrix = MatrixInstance.getInstance()
|
||||
|
||||
init {
|
||||
setState {
|
||||
copy(
|
||||
homeserver = matrix.getHomeserverOrDefault()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun setServer(server: String) {
|
||||
setState {
|
||||
copy(homeserver = server)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.airbnb.mvrx.MavericksState
|
|||
import com.airbnb.mvrx.Uninitialized
|
||||
|
||||
data class ChangeServerViewState(
|
||||
val homeserver: String = "matrix.org",
|
||||
val homeserver: String = "",
|
||||
val changeServerAction: Async<Unit> = Uninitialized,
|
||||
) : MavericksState {
|
||||
val submitEnabled = homeserver.isNotEmpty() && changeServerAction !is Loading
|
||||
|
|
|
|||
|
|
@ -70,6 +70,10 @@ class Matrix(
|
|||
}
|
||||
}
|
||||
|
||||
fun getHomeserver(): String? = authService.homeserverDetails()?.url()
|
||||
|
||||
fun getHomeserverOrDefault(): String = getHomeserver() ?: "matrix.org"
|
||||
|
||||
suspend fun setHomeserver(homeserver: String) {
|
||||
withContext(coroutineDispatchers.io) {
|
||||
authService.configureHomeserver(homeserver)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue