Benoit Marty
2 years ago
8 changed files with 77 additions and 47 deletions
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
sealed interface RoomListActions { |
||||
object LoadMore : RoomListActions |
||||
} |
@ -1,28 +0,0 @@
@@ -1,28 +0,0 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
import androidx.lifecycle.ViewModel |
||||
import io.element.android.x.sdk.matrix.MatrixInstance |
||||
import kotlinx.coroutines.flow.MutableStateFlow |
||||
import kotlinx.coroutines.flow.asStateFlow |
||||
|
||||
class RoomListViewModel : ViewModel() { |
||||
|
||||
private val matrix = MatrixInstance.getInstance() |
||||
|
||||
private val _state = MutableStateFlow(RoomListViewState()) |
||||
val state = _state.asStateFlow() |
||||
|
||||
init { |
||||
observeState() |
||||
} |
||||
|
||||
private fun observeState() { |
||||
// TODO Update submitEnabled when other state members are updated. |
||||
} |
||||
|
||||
fun handle(action: RoomListActions) { |
||||
when (action) { |
||||
RoomListActions.LoadMore -> TODO() |
||||
} |
||||
} |
||||
} |
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
package io.element.android.x.ui.screen.login |
||||
|
||||
data class RoomListViewState( |
||||
val list: List<String> = emptyList(), |
||||
val canLoadMore: Boolean = false, |
||||
) |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
package io.element.android.x.ui.screen.roomlist |
||||
|
||||
sealed interface RoomListActions { |
||||
object Logout : RoomListActions |
||||
object LoadMore : RoomListActions |
||||
} |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
package io.element.android.x.ui.screen.roomlist |
||||
|
||||
import com.airbnb.mvrx.Fail |
||||
import com.airbnb.mvrx.Loading |
||||
import com.airbnb.mvrx.MavericksViewModel |
||||
import com.airbnb.mvrx.Success |
||||
import io.element.android.x.sdk.matrix.MatrixClient |
||||
import io.element.android.x.sdk.matrix.MatrixInstance |
||||
import kotlinx.coroutines.launch |
||||
|
||||
class RoomListViewModel(initialState: RoomListViewState) : |
||||
MavericksViewModel<RoomListViewState>(initialState) { |
||||
|
||||
private val matrix = MatrixInstance.getInstance() |
||||
|
||||
fun handle(action: RoomListActions) { |
||||
when (action) { |
||||
RoomListActions.LoadMore -> TODO() |
||||
RoomListActions.Logout -> handleLogout() |
||||
} |
||||
} |
||||
|
||||
private fun handleLogout() { |
||||
viewModelScope.launch { |
||||
setState { copy(logoutAction = Loading()) } |
||||
try { |
||||
getClient().logout() |
||||
setState { copy(logoutAction = Success(Unit)) } |
||||
} catch (throwable: Throwable) { |
||||
setState { copy(logoutAction = Fail(throwable)) } |
||||
} |
||||
} |
||||
} |
||||
|
||||
private suspend fun getClient(): MatrixClient { |
||||
return matrix.restoreSession()!! |
||||
} |
||||
} |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
package io.element.android.x.ui.screen.roomlist |
||||
|
||||
import com.airbnb.mvrx.Async |
||||
import com.airbnb.mvrx.MavericksState |
||||
import com.airbnb.mvrx.Uninitialized |
||||
|
||||
data class RoomListViewState( |
||||
val list: List<String> = emptyList(), |
||||
val canLoadMore: Boolean = false, |
||||
val logoutAction: Async<Unit> = Uninitialized, |
||||
) : MavericksState |
Loading…
Reference in new issue