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
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import io.element.android.x.ui.screen.login.LoginActivity 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 import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {

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

@ -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 @@
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 @@
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 @@
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 @@
package io.element.android.x.ui.screen.login package io.element.android.x.ui.screen.roomlist
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.*
import androidx.compose.material3.Surface import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.airbnb.mvrx.compose.mavericksViewModel
import io.element.android.x.ui.theme.ElementXTheme import io.element.android.x.ui.theme.ElementXTheme
class RoomListActivity : ComponentActivity() { class RoomListActivity : ComponentActivity() {
private val viewModel: RoomListViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
ElementXTheme { ElementXTheme {
val viewModel: RoomListViewModel = mavericksViewModel()
// A surface container using the 'background' color from the theme // A surface container using the 'background' color from the theme
Surface( Surface(
modifier = Modifier modifier = Modifier
@ -33,6 +31,7 @@ class RoomListActivity : ComponentActivity() {
Column( Column(
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) { ) {
OptionMenu(viewModel)
/* TODO /* TODO
val state = viewModel.state.collectAsState().value val state = viewModel.state.collectAsState().value
RoomListHeader() RoomListHeader()
@ -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 @@
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 @@
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