Browse Source

Signout - WIP

feature/bma/flipper
Benoit Marty 2 years ago
parent
commit
93934d6551
  1. 2
      app/src/main/java/io/element/android/x/MainActivity.kt
  2. 5
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListActions.kt
  3. 28
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListViewModel.kt
  4. 6
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListViewState.kt
  5. 6
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActions.kt
  6. 28
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt
  7. 38
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListViewModel.kt
  8. 11
      libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListViewState.kt

2
app/src/main/java/io/element/android/x/MainActivity.kt

@ -7,7 +7,7 @@ import androidx.activity.result.contract.ActivityResultContracts @@ -7,7 +7,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope
import io.element.android.x.ui.screen.login.LoginActivity
import io.element.android.x.ui.screen.login.RoomListActivity
import io.element.android.x.ui.screen.roomlist.RoomListActivity
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {

5
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListActions.kt

@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
package io.element.android.x.ui.screen.login
sealed interface RoomListActions {
object LoadMore : RoomListActions
}

28
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListViewModel.kt

@ -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()
}
}
}

6
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListViewState.kt

@ -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,
)

6
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActions.kt

@ -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
}

28
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/login/RoomListActivity.kt → libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt

@ -1,28 +1,26 @@ @@ -1,28 +1,26 @@
package io.element.android.x.ui.screen.login
package io.element.android.x.ui.screen.roomlist
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.collectAsState
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.airbnb.mvrx.compose.mavericksViewModel
import io.element.android.x.ui.theme.ElementXTheme
class RoomListActivity : ComponentActivity() {
private val viewModel: RoomListViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ElementXTheme {
val viewModel: RoomListViewModel = mavericksViewModel()
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier
@ -33,6 +31,7 @@ class RoomListActivity : ComponentActivity() { @@ -33,6 +31,7 @@ class RoomListActivity : ComponentActivity() {
Column(
modifier = Modifier.fillMaxSize()
) {
OptionMenu(viewModel)
/* TODO
val state = viewModel.state.collectAsState().value
RoomListHeader()
@ -44,4 +43,19 @@ class RoomListActivity : ComponentActivity() { @@ -44,4 +43,19 @@ class RoomListActivity : ComponentActivity() {
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun OptionMenu(viewModel: RoomListViewModel) {
TopAppBar(
title = { Text("Room List") },
actions = {
Button(
onClick = { viewModel.handle(RoomListActions.Logout) }
) {
Text(text = "logout")
}
}
)
}
}

38
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListViewModel.kt

@ -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()!!
}
}

11
libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListViewState.kt

@ -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…
Cancel
Save