Rename Async to AsyncData
This commit is contained in:
parent
3b2882ce2f
commit
7b2341aec7
139 changed files with 745 additions and 745 deletions
|
|
@ -26,7 +26,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
|
|||
import io.element.android.features.roomdetails.impl.R
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.core.bool.orFalse
|
||||
import io.element.android.libraries.designsystem.components.dialogs.RetryDialog
|
||||
import io.element.android.libraries.designsystem.components.list.ListItemContent
|
||||
|
|
@ -42,13 +42,13 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
|||
internal fun BlockUserSection(state: RoomMemberDetailsState, modifier: Modifier = Modifier) {
|
||||
PreferenceCategory(showDivider = false, modifier = modifier) {
|
||||
when (state.isBlocked) {
|
||||
is Async.Failure -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = false, eventSink = state.eventSink)
|
||||
is Async.Loading -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = true, eventSink = state.eventSink)
|
||||
is Async.Success -> PreferenceBlockUser(isBlocked = state.isBlocked.data, isLoading = false, eventSink = state.eventSink)
|
||||
Async.Uninitialized -> PreferenceBlockUser(isBlocked = null, isLoading = true, eventSink = state.eventSink)
|
||||
is AsyncData.Failure -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = false, eventSink = state.eventSink)
|
||||
is AsyncData.Loading -> PreferenceBlockUser(isBlocked = state.isBlocked.prevData, isLoading = true, eventSink = state.eventSink)
|
||||
is AsyncData.Success -> PreferenceBlockUser(isBlocked = state.isBlocked.data, isLoading = false, eventSink = state.eventSink)
|
||||
AsyncData.Uninitialized -> PreferenceBlockUser(isBlocked = null, isLoading = true, eventSink = state.eventSink)
|
||||
}
|
||||
}
|
||||
if (state.isBlocked is Async.Failure) {
|
||||
if (state.isBlocked is AsyncData.Failure) {
|
||||
RetryDialog(
|
||||
content = stringResource(CommonStrings.error_unknown),
|
||||
onDismiss = { state.eventSink(RoomMemberDetailsEvents.ClearBlockUserError) },
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.core.net.toUri
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||
|
|
@ -116,7 +116,7 @@ class RoomDetailsEditPresenter @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
val saveAction: MutableState<Async<Unit>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||
val saveAction: MutableState<AsyncData<Unit>> = remember { mutableStateOf(AsyncData.Uninitialized) }
|
||||
val localCoroutineScope = rememberCoroutineScope()
|
||||
fun handleEvents(event: RoomDetailsEditEvents) {
|
||||
when (event) {
|
||||
|
|
@ -136,7 +136,7 @@ class RoomDetailsEditPresenter @Inject constructor(
|
|||
|
||||
is RoomDetailsEditEvents.UpdateRoomName -> roomName = event.name
|
||||
is RoomDetailsEditEvents.UpdateRoomTopic -> roomTopic = event.topic.takeUnless { it.isEmpty() }
|
||||
RoomDetailsEditEvents.CancelSaveChanges -> saveAction.value = Async.Uninitialized
|
||||
RoomDetailsEditEvents.CancelSaveChanges -> saveAction.value = AsyncData.Uninitialized
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ class RoomDetailsEditPresenter @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private fun CoroutineScope.saveChanges(name: String, topic: String?, avatarUri: Uri?, action: MutableState<Async<Unit>>) = launch {
|
||||
private fun CoroutineScope.saveChanges(name: String, topic: String?, avatarUri: Uri?, action: MutableState<AsyncData<Unit>>) = launch {
|
||||
val results = mutableListOf<Result<Unit>>()
|
||||
suspend {
|
||||
if (topic.orEmpty().trim() != room.topic.orEmpty().trim()) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package io.element.android.features.roomdetails.impl.edit
|
||||
|
||||
import android.net.Uri
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
||||
import io.element.android.libraries.permissions.api.PermissionsState
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
|
@ -32,7 +32,7 @@ data class RoomDetailsEditState(
|
|||
val canChangeAvatar: Boolean,
|
||||
val avatarActions: ImmutableList<AvatarAction>,
|
||||
val saveButtonEnabled: Boolean,
|
||||
val saveAction: Async<Unit>,
|
||||
val saveAction: AsyncData<Unit>,
|
||||
val cameraPermissionState: PermissionsState,
|
||||
val eventSink: (RoomDetailsEditEvents) -> Unit
|
||||
)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ package io.element.android.features.roomdetails.impl.edit
|
|||
|
||||
import android.net.Uri
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.permissions.api.aPermissionsState
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
|
|
@ -30,8 +30,8 @@ open class RoomDetailsEditStateProvider : PreviewParameterProvider<RoomDetailsEd
|
|||
aRoomDetailsEditState().copy(roomAvatarUrl = Uri.parse("example://uri")),
|
||||
aRoomDetailsEditState().copy(canChangeName = true, canChangeTopic = false, canChangeAvatar = true, saveButtonEnabled = false),
|
||||
aRoomDetailsEditState().copy(canChangeName = false, canChangeTopic = true, canChangeAvatar = false, saveButtonEnabled = false),
|
||||
aRoomDetailsEditState().copy(saveAction = Async.Loading()),
|
||||
aRoomDetailsEditState().copy(saveAction = Async.Failure(Throwable("Whelp")))
|
||||
aRoomDetailsEditState().copy(saveAction = AsyncData.Loading()),
|
||||
aRoomDetailsEditState().copy(saveAction = AsyncData.Failure(Throwable("Whelp")))
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ fun aRoomDetailsEditState() = RoomDetailsEditState(
|
|||
canChangeAvatar = true,
|
||||
avatarActions = persistentListOf(),
|
||||
saveButtonEnabled = true,
|
||||
saveAction = Async.Uninitialized,
|
||||
saveAction = AsyncData.Uninitialized,
|
||||
cameraPermissionState = aPermissionsState(showDialog = false),
|
||||
eventSink = {}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import androidx.compose.runtime.remember
|
|||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import io.element.android.features.roomdetails.impl.members.RoomMemberListDataSource
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
|
|
@ -48,7 +48,7 @@ class RoomInviteMembersPresenter @Inject constructor(
|
|||
|
||||
@Composable
|
||||
override fun present(): RoomInviteMembersState {
|
||||
val roomMembers = remember { mutableStateOf<Async<ImmutableList<RoomMember>>>(Async.Loading()) }
|
||||
val roomMembers = remember { mutableStateOf<AsyncData<ImmutableList<RoomMember>>>(AsyncData.Loading()) }
|
||||
val selectedUsers = remember { mutableStateOf<ImmutableList<MatrixUser>>(persistentListOf()) }
|
||||
val searchResults = remember { mutableStateOf<SearchBarResultState<ImmutableList<InvitableUser>>>(SearchBarResultState.NotSearching()) }
|
||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||
|
|
@ -115,7 +115,7 @@ class RoomInviteMembersPresenter @Inject constructor(
|
|||
|
||||
private suspend fun performSearch(
|
||||
searchResults: MutableState<SearchBarResultState<ImmutableList<InvitableUser>>>,
|
||||
roomMembers: MutableState<Async<ImmutableList<RoomMember>>>,
|
||||
roomMembers: MutableState<AsyncData<ImmutableList<RoomMember>>>,
|
||||
selectedUsers: MutableState<ImmutableList<MatrixUser>>,
|
||||
searchQuery: String,
|
||||
) = withContext(coroutineDispatchers.io) {
|
||||
|
|
@ -142,7 +142,7 @@ class RoomInviteMembersPresenter @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchMembers(roomMembers: MutableState<Async<ImmutableList<RoomMember>>>) {
|
||||
private suspend fun fetchMembers(roomMembers: MutableState<AsyncData<ImmutableList<RoomMember>>>) {
|
||||
suspend {
|
||||
withContext(coroutineDispatchers.io) {
|
||||
roomMemberListDataSource.search("").toImmutableList()
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import androidx.compose.runtime.produceState
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
|
|
@ -44,7 +44,7 @@ class RoomMemberListPresenter @Inject constructor(
|
|||
|
||||
@Composable
|
||||
override fun present(): RoomMemberListState {
|
||||
var roomMembers by remember { mutableStateOf<Async<RoomMembers>>(Async.Loading()) }
|
||||
var roomMembers by remember { mutableStateOf<AsyncData<RoomMembers>>(AsyncData.Loading()) }
|
||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||
var searchResults by remember {
|
||||
mutableStateOf<SearchBarResultState<RoomMembers>>(SearchBarResultState.NotSearching())
|
||||
|
|
@ -59,7 +59,7 @@ class RoomMemberListPresenter @Inject constructor(
|
|||
LaunchedEffect(Unit) {
|
||||
withContext(coroutineDispatchers.io) {
|
||||
val members = roomMemberListDataSource.search("").groupBy { it.membership }
|
||||
roomMembers = Async.Success(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = members.getOrDefault(RoomMembershipState.INVITE, emptyList()).toImmutableList(),
|
||||
joined = members.getOrDefault(RoomMembershipState.JOIN, emptyList()).toImmutableList(),
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@
|
|||
|
||||
package io.element.android.features.roomdetails.impl.members
|
||||
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
data class RoomMemberListState(
|
||||
val roomMembers: Async<RoomMembers>,
|
||||
val roomMembers: AsyncData<RoomMembers>,
|
||||
val searchQuery: String,
|
||||
val searchResults: SearchBarResultState<RoomMembers>,
|
||||
val isSearchActive: Boolean,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package io.element.android.features.roomdetails.impl.members
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
|
|
@ -28,14 +28,14 @@ internal class RoomMemberListStateProvider : PreviewParameterProvider<RoomMember
|
|||
override val values: Sequence<RoomMemberListState>
|
||||
get() = sequenceOf(
|
||||
aRoomMemberListState(
|
||||
roomMembers = Async.Success(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(aVictor(), aWalter()),
|
||||
joined = persistentListOf(anAlice(), aBob()),
|
||||
)
|
||||
)
|
||||
),
|
||||
aRoomMemberListState(roomMembers = Async.Loading()),
|
||||
aRoomMemberListState(roomMembers = AsyncData.Loading()),
|
||||
aRoomMemberListState().copy(canInvite = true),
|
||||
aRoomMemberListState().copy(isSearchActive = false),
|
||||
aRoomMemberListState().copy(isSearchActive = true),
|
||||
|
|
@ -59,7 +59,7 @@ internal class RoomMemberListStateProvider : PreviewParameterProvider<RoomMember
|
|||
}
|
||||
|
||||
internal fun aRoomMemberListState(
|
||||
roomMembers: Async<RoomMembers> = Async.Uninitialized,
|
||||
roomMembers: AsyncData<RoomMembers> = AsyncData.Uninitialized,
|
||||
searchResults: SearchBarResultState<RoomMembers> = SearchBarResultState.NotSearching(),
|
||||
) = RoomMemberListState(
|
||||
roomMembers = roomMembers,
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
|
|||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.features.roomdetails.impl.R
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.designsystem.components.button.BackButton
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||
|
|
@ -103,7 +103,7 @@ fun RoomMemberListView(
|
|||
)
|
||||
|
||||
if (!state.isSearchActive) {
|
||||
if (state.roomMembers is Async.Success) {
|
||||
if (state.roomMembers is AsyncData.Success) {
|
||||
RoomMemberList(
|
||||
roomMembers = state.roomMembers.data,
|
||||
showMembersCount = true,
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ import im.vector.app.features.analytics.plan.MobileScreen
|
|||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.features.roomdetails.impl.R
|
||||
import io.element.android.libraries.androidutils.system.startSharePlainTextIntent
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.RoomScope
|
||||
|
|
@ -95,7 +95,7 @@ class RoomMemberDetailsNode @AssistedInject constructor(
|
|||
val state = presenter.present()
|
||||
|
||||
LaunchedEffect(state.startDmActionState) {
|
||||
if (state.startDmActionState is Async.Success) {
|
||||
if (state.startDmActionState is AsyncData.Success) {
|
||||
onStartDM(state.startDmActionState.data)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import dagger.assisted.Assisted
|
|||
import dagger.assisted.AssistedInject
|
||||
import io.element.android.features.createroom.api.StartDMAction
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState.ConfirmationDialog
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.bool.orFalse
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
|
|
@ -56,14 +56,14 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
|||
val coroutineScope = rememberCoroutineScope()
|
||||
var confirmationDialog by remember { mutableStateOf<ConfirmationDialog?>(null) }
|
||||
val roomMember by room.getRoomMemberAsState(roomMemberId)
|
||||
val startDmActionState: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||
val startDmActionState: MutableState<AsyncData<RoomId>> = remember { mutableStateOf(AsyncData.Uninitialized) }
|
||||
// the room member is not really live...
|
||||
val isBlocked: MutableState<Async<Boolean>> = remember(roomMember) {
|
||||
val isBlocked: MutableState<AsyncData<Boolean>> = remember(roomMember) {
|
||||
val isIgnored = roomMember?.isIgnored
|
||||
if (isIgnored == null) {
|
||||
mutableStateOf(Async.Uninitialized)
|
||||
mutableStateOf(AsyncData.Uninitialized)
|
||||
} else {
|
||||
mutableStateOf(Async.Success(isIgnored))
|
||||
mutableStateOf(AsyncData.Success(isIgnored))
|
||||
}
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
|
|
@ -90,7 +90,7 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
|||
}
|
||||
RoomMemberDetailsEvents.ClearConfirmationDialog -> confirmationDialog = null
|
||||
RoomMemberDetailsEvents.ClearBlockUserError -> {
|
||||
isBlocked.value = Async.Success(isBlocked.value.dataOrNull().orFalse())
|
||||
isBlocked.value = AsyncData.Success(isBlocked.value.dataOrNull().orFalse())
|
||||
}
|
||||
RoomMemberDetailsEvents.StartDM -> {
|
||||
coroutineScope.launch {
|
||||
|
|
@ -98,7 +98,7 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
|||
}
|
||||
}
|
||||
RoomMemberDetailsEvents.ClearStartDMState -> {
|
||||
startDmActionState.value = Async.Uninitialized
|
||||
startDmActionState.value = AsyncData.Uninitialized
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -127,30 +127,30 @@ class RoomMemberDetailsPresenter @AssistedInject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
private fun CoroutineScope.blockUser(userId: UserId, isBlockedState: MutableState<Async<Boolean>>) = launch {
|
||||
isBlockedState.value = Async.Loading(false)
|
||||
private fun CoroutineScope.blockUser(userId: UserId, isBlockedState: MutableState<AsyncData<Boolean>>) = launch {
|
||||
isBlockedState.value = AsyncData.Loading(false)
|
||||
client.ignoreUser(userId)
|
||||
.fold(
|
||||
onSuccess = {
|
||||
isBlockedState.value = Async.Success(true)
|
||||
isBlockedState.value = AsyncData.Success(true)
|
||||
room.updateMembers()
|
||||
},
|
||||
onFailure = {
|
||||
isBlockedState.value = Async.Failure(it, false)
|
||||
isBlockedState.value = AsyncData.Failure(it, false)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun CoroutineScope.unblockUser(userId: UserId, isBlockedState: MutableState<Async<Boolean>>) = launch {
|
||||
isBlockedState.value = Async.Loading(true)
|
||||
private fun CoroutineScope.unblockUser(userId: UserId, isBlockedState: MutableState<AsyncData<Boolean>>) = launch {
|
||||
isBlockedState.value = AsyncData.Loading(true)
|
||||
client.unignoreUser(userId)
|
||||
.fold(
|
||||
onSuccess = {
|
||||
isBlockedState.value = Async.Success(false)
|
||||
isBlockedState.value = AsyncData.Success(false)
|
||||
room.updateMembers()
|
||||
},
|
||||
onFailure = {
|
||||
isBlockedState.value = Async.Failure(it, true)
|
||||
isBlockedState.value = AsyncData.Failure(it, true)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,15 +16,15 @@
|
|||
|
||||
package io.element.android.features.roomdetails.impl.members.details
|
||||
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
|
||||
data class RoomMemberDetailsState(
|
||||
val userId: String,
|
||||
val userName: String?,
|
||||
val avatarUrl: String?,
|
||||
val isBlocked: Async<Boolean>,
|
||||
val startDmActionState: Async<RoomId>,
|
||||
val isBlocked: AsyncData<Boolean>,
|
||||
val startDmActionState: AsyncData<RoomId>,
|
||||
val displayConfirmationDialog: ConfirmationDialog?,
|
||||
val isCurrentUser: Boolean,
|
||||
val eventSink: (RoomMemberDetailsEvents) -> Unit
|
||||
|
|
|
|||
|
|
@ -17,18 +17,18 @@
|
|||
package io.element.android.features.roomdetails.impl.members.details
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
|
||||
open class RoomMemberDetailsStateProvider : PreviewParameterProvider<RoomMemberDetailsState> {
|
||||
override val values: Sequence<RoomMemberDetailsState>
|
||||
get() = sequenceOf(
|
||||
aRoomMemberDetailsState(),
|
||||
aRoomMemberDetailsState().copy(userName = null),
|
||||
aRoomMemberDetailsState().copy(isBlocked = Async.Success(true)),
|
||||
aRoomMemberDetailsState().copy(isBlocked = AsyncData.Success(true)),
|
||||
aRoomMemberDetailsState().copy(displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Block),
|
||||
aRoomMemberDetailsState().copy(displayConfirmationDialog = RoomMemberDetailsState.ConfirmationDialog.Unblock),
|
||||
aRoomMemberDetailsState().copy(isBlocked = Async.Loading(true)),
|
||||
aRoomMemberDetailsState().copy(startDmActionState = Async.Loading()),
|
||||
aRoomMemberDetailsState().copy(isBlocked = AsyncData.Loading(true)),
|
||||
aRoomMemberDetailsState().copy(startDmActionState = AsyncData.Loading()),
|
||||
// Add other states here
|
||||
)
|
||||
}
|
||||
|
|
@ -37,8 +37,8 @@ fun aRoomMemberDetailsState() = RoomMemberDetailsState(
|
|||
userId = "@daniel:domain.com",
|
||||
userName = "Daniel",
|
||||
avatarUrl = null,
|
||||
isBlocked = Async.Success(false),
|
||||
startDmActionState = Async.Uninitialized,
|
||||
isBlocked = AsyncData.Success(false),
|
||||
startDmActionState = AsyncData.Uninitialized,
|
||||
displayConfirmationDialog = null,
|
||||
isCurrentUser = false,
|
||||
eventSink = {},
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import androidx.compose.runtime.setValue
|
|||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
|
||||
|
|
@ -61,11 +61,11 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
mutableStateOf(null)
|
||||
}
|
||||
val localCoroutineScope = rememberCoroutineScope()
|
||||
val setNotificationSettingAction: MutableState<Async<Unit>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||
val restoreDefaultAction: MutableState<Async<Unit>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||
val setNotificationSettingAction: MutableState<AsyncData<Unit>> = remember { mutableStateOf(AsyncData.Uninitialized) }
|
||||
val restoreDefaultAction: MutableState<AsyncData<Unit>> = remember { mutableStateOf(AsyncData.Uninitialized) }
|
||||
|
||||
val roomNotificationSettings: MutableState<Async<RoomNotificationSettings>> = remember {
|
||||
mutableStateOf(Async.Uninitialized)
|
||||
val roomNotificationSettings: MutableState<AsyncData<RoomNotificationSettings>> = remember {
|
||||
mutableStateOf(AsyncData.Uninitialized)
|
||||
}
|
||||
|
||||
// We store state of which mode the user has set via the notification service before the new push settings have been updated.
|
||||
|
|
@ -111,10 +111,10 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
localCoroutineScope.restoreDefaultRoomNotificationMode(restoreDefaultAction, pendingSetDefault)
|
||||
}
|
||||
RoomNotificationSettingsEvents.ClearSetNotificationError -> {
|
||||
setNotificationSettingAction.value = Async.Uninitialized
|
||||
setNotificationSettingAction.value = AsyncData.Uninitialized
|
||||
}
|
||||
RoomNotificationSettingsEvents.ClearRestoreDefaultError -> {
|
||||
restoreDefaultAction.value = Async.Uninitialized
|
||||
restoreDefaultAction.value = AsyncData.Uninitialized
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -136,7 +136,7 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
@OptIn(FlowPreview::class)
|
||||
private fun CoroutineScope.observeNotificationSettings(
|
||||
pendingModeState: MutableState<RoomNotificationMode?>,
|
||||
roomNotificationSettings: MutableState<Async<RoomNotificationSettings>>
|
||||
roomNotificationSettings: MutableState<AsyncData<RoomNotificationSettings>>
|
||||
) {
|
||||
notificationSettingsService.notificationSettingsChangeFlow
|
||||
.debounce(0.5.seconds)
|
||||
|
|
@ -148,7 +148,7 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
|
||||
private fun CoroutineScope.fetchNotificationSettings(
|
||||
pendingModeState: MutableState<RoomNotificationMode?>,
|
||||
roomNotificationSettings: MutableState<Async<RoomNotificationSettings>>
|
||||
roomNotificationSettings: MutableState<AsyncData<RoomNotificationSettings>>
|
||||
) = launch {
|
||||
suspend {
|
||||
pendingModeState.value = null
|
||||
|
|
@ -169,7 +169,7 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
mode: RoomNotificationMode,
|
||||
pendingModeState: MutableState<RoomNotificationMode?>,
|
||||
pendingDefaultState: MutableState<Boolean?>,
|
||||
action: MutableState<Async<Unit>>
|
||||
action: MutableState<AsyncData<Unit>>
|
||||
) = launch {
|
||||
suspend {
|
||||
pendingModeState.value = mode
|
||||
|
|
@ -184,7 +184,7 @@ class RoomNotificationSettingsPresenter @AssistedInject constructor(
|
|||
}
|
||||
|
||||
private fun CoroutineScope.restoreDefaultRoomNotificationMode(
|
||||
action: MutableState<Async<Unit>>,
|
||||
action: MutableState<AsyncData<Unit>>,
|
||||
pendingDefaultState: MutableState<Boolean?>
|
||||
) = launch {
|
||||
suspend {
|
||||
|
|
|
|||
|
|
@ -16,19 +16,19 @@
|
|||
|
||||
package io.element.android.features.roomdetails.impl.notificationsettings
|
||||
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
||||
|
||||
data class RoomNotificationSettingsState(
|
||||
val showUserDefinedSettingStyle: Boolean,
|
||||
val roomName: String,
|
||||
val roomNotificationSettings: Async<RoomNotificationSettings>,
|
||||
val roomNotificationSettings: AsyncData<RoomNotificationSettings>,
|
||||
val pendingRoomNotificationMode: RoomNotificationMode?,
|
||||
val pendingSetDefault: Boolean?,
|
||||
val defaultRoomNotificationMode: RoomNotificationMode?,
|
||||
val setNotificationSettingAction: Async<Unit>,
|
||||
val restoreDefaultAction: Async<Unit>,
|
||||
val setNotificationSettingAction: AsyncData<Unit>,
|
||||
val restoreDefaultAction: AsyncData<Unit>,
|
||||
val displayMentionsOnlyDisclaimer: Boolean,
|
||||
val eventSink: (RoomNotificationSettingsEvents) -> Unit
|
||||
)
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package io.element.android.features.roomdetails.impl.notificationsettings
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
||||
|
||||
|
|
@ -26,23 +26,23 @@ internal class RoomNotificationSettingsStateProvider : PreviewParameterProvider<
|
|||
get() = sequenceOf(
|
||||
aRoomNotificationSettingsState(),
|
||||
aRoomNotificationSettingsState(isDefault = false),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = Async.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = Async.Failure(Throwable("error"))),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = Async.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = Async.Failure(Throwable("error"))),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = AsyncData.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = AsyncData.Failure(Throwable("error"))),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = AsyncData.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = AsyncData.Failure(Throwable("error"))),
|
||||
aRoomNotificationSettingsState(displayMentionsOnlyDisclaimer = true)
|
||||
)
|
||||
|
||||
private fun aRoomNotificationSettingsState(
|
||||
isDefault: Boolean = true,
|
||||
setNotificationSettingAction: Async<Unit> = Async.Uninitialized,
|
||||
restoreDefaultAction: Async<Unit> = Async.Uninitialized,
|
||||
setNotificationSettingAction: AsyncData<Unit> = AsyncData.Uninitialized,
|
||||
restoreDefaultAction: AsyncData<Unit> = AsyncData.Uninitialized,
|
||||
displayMentionsOnlyDisclaimer: Boolean = false,
|
||||
): RoomNotificationSettingsState {
|
||||
return RoomNotificationSettingsState(
|
||||
showUserDefinedSettingStyle = false,
|
||||
roomName = "Room 1",
|
||||
Async.Success(RoomNotificationSettings(
|
||||
AsyncData.Success(RoomNotificationSettings(
|
||||
mode = RoomNotificationMode.MUTE,
|
||||
isDefault = isDefault)),
|
||||
pendingRoomNotificationMode = null,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
package io.element.android.features.roomdetails.impl.notificationsettings
|
||||
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ internal class UserDefinedRoomNotificationSettingsStateProvider : PreviewParamet
|
|||
RoomNotificationSettingsState(
|
||||
showUserDefinedSettingStyle = false,
|
||||
roomName = "Room 1",
|
||||
Async.Success(
|
||||
AsyncData.Success(
|
||||
RoomNotificationSettings(
|
||||
mode = RoomNotificationMode.MUTE,
|
||||
isDefault = false)
|
||||
|
|
@ -35,8 +35,8 @@ internal class UserDefinedRoomNotificationSettingsStateProvider : PreviewParamet
|
|||
pendingRoomNotificationMode = null,
|
||||
pendingSetDefault = null,
|
||||
defaultRoomNotificationMode = RoomNotificationMode.ALL_MESSAGES,
|
||||
setNotificationSettingAction = Async.Uninitialized,
|
||||
restoreDefaultAction = Async.Uninitialized,
|
||||
setNotificationSettingAction = AsyncData.Uninitialized,
|
||||
restoreDefaultAction = AsyncData.Uninitialized,
|
||||
displayMentionsOnlyDisclaimer = false,
|
||||
eventSink = { },
|
||||
),
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import com.google.common.truth.Truth.assertThat
|
|||
import io.element.android.features.roomdetails.aMatrixRoom
|
||||
import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditEvents
|
||||
import io.element.android.features.roomdetails.impl.edit.RoomDetailsEditPresenter
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||
import io.element.android.libraries.matrix.api.room.StateEventType
|
||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||
|
|
@ -108,7 +108,7 @@ class RoomDetailsEditPresenterTest {
|
|||
AvatarAction.Remove
|
||||
)
|
||||
assertThat(initialState.saveButtonEnabled).isFalse()
|
||||
assertThat(initialState.saveAction).isInstanceOf(Async.Uninitialized::class.java)
|
||||
assertThat(initialState.saveAction).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -533,7 +533,7 @@ class RoomDetailsEditPresenterTest {
|
|||
assertThat(room.newAvatarData).isNull()
|
||||
assertThat(room.removedAvatar).isFalse()
|
||||
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(Async.Failure::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(AsyncData.Failure::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -594,10 +594,10 @@ class RoomDetailsEditPresenterTest {
|
|||
initialState.eventSink(RoomDetailsEditEvents.Save)
|
||||
skipItems(2)
|
||||
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(Async.Failure::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(AsyncData.Failure::class.java)
|
||||
|
||||
initialState.eventSink(RoomDetailsEditEvents.CancelSaveChanges)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(Async.Uninitialized::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -613,8 +613,8 @@ class RoomDetailsEditPresenterTest {
|
|||
initialState.eventSink(RoomDetailsEditEvents.Save)
|
||||
skipItems(1)
|
||||
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(Async.Loading::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(Async.Failure::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(AsyncData.Loading::class.java)
|
||||
assertThat(awaitItem().saveAction).isInstanceOf(AsyncData.Failure::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import io.element.android.features.roomdetails.impl.members.RoomMemberListPresen
|
|||
import io.element.android.features.roomdetails.impl.members.aRoomMemberList
|
||||
import io.element.android.features.roomdetails.impl.members.aVictor
|
||||
import io.element.android.features.roomdetails.impl.members.aWalter
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||
|
|
@ -53,14 +53,14 @@ class RoomMemberListPresenterTests {
|
|||
presenter.present()
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
assertThat(initialState.roomMembers).isInstanceOf(Async.Loading::class.java)
|
||||
assertThat(initialState.roomMembers).isInstanceOf(AsyncData.Loading::class.java)
|
||||
assertThat(initialState.searchQuery).isEmpty()
|
||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.NotSearching::class.java)
|
||||
assertThat(initialState.isSearchActive).isFalse()
|
||||
val loadedState = awaitItem()
|
||||
assertThat(loadedState.roomMembers).isInstanceOf(Async.Success::class.java)
|
||||
assertThat((loadedState.roomMembers as Async.Success).data.invited).isEqualTo(listOf(aVictor(), aWalter()))
|
||||
assertThat((loadedState.roomMembers as Async.Success).data.joined).isNotEmpty()
|
||||
assertThat(loadedState.roomMembers).isInstanceOf(AsyncData.Success::class.java)
|
||||
assertThat((loadedState.roomMembers as AsyncData.Success).data.invited).isEqualTo(listOf(aVictor(), aWalter()))
|
||||
assertThat((loadedState.roomMembers as AsyncData.Success).data.joined).isNotEmpty()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import io.element.android.features.roomdetails.impl.members.aRoomMember
|
|||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsEvents
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter
|
||||
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsState
|
||||
import io.element.android.libraries.architecture.Async
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||
|
|
@ -68,7 +68,7 @@ class RoomMemberDetailsPresenterTests {
|
|||
assertThat(initialState.userId).isEqualTo(roomMember.userId.value)
|
||||
assertThat(initialState.userName).isEqualTo(roomMember.displayName)
|
||||
assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl)
|
||||
assertThat(initialState.isBlocked).isEqualTo(Async.Success(roomMember.isIgnored))
|
||||
assertThat(initialState.isBlocked).isEqualTo(AsyncData.Success(roomMember.isIgnored))
|
||||
skipItems(1)
|
||||
val loadedState = awaitItem()
|
||||
assertThat(loadedState.userName).isEqualTo("A custom name")
|
||||
|
|
@ -173,7 +173,7 @@ class RoomMemberDetailsPresenterTests {
|
|||
assertThat(errorState.isBlocked.errorOrNull()).isEqualTo(A_THROWABLE)
|
||||
// Clear error
|
||||
initialState.eventSink(RoomMemberDetailsEvents.ClearBlockUserError)
|
||||
assertThat(awaitItem().isBlocked).isEqualTo(Async.Success(false))
|
||||
assertThat(awaitItem().isBlocked).isEqualTo(AsyncData.Success(false))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -204,14 +204,14 @@ class RoomMemberDetailsPresenterTests {
|
|||
presenter.present()
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
assertThat(initialState.startDmActionState).isInstanceOf(Async.Uninitialized::class.java)
|
||||
val startDMSuccessResult = Async.Success(A_ROOM_ID)
|
||||
val startDMFailureResult = Async.Failure<RoomId>(A_THROWABLE)
|
||||
assertThat(initialState.startDmActionState).isInstanceOf(AsyncData.Uninitialized::class.java)
|
||||
val startDMSuccessResult = AsyncData.Success(A_ROOM_ID)
|
||||
val startDMFailureResult = AsyncData.Failure<RoomId>(A_THROWABLE)
|
||||
|
||||
// Failure
|
||||
startDMAction.givenExecuteResult(startDMFailureResult)
|
||||
initialState.eventSink(RoomMemberDetailsEvents.StartDM)
|
||||
assertThat(awaitItem().startDmActionState).isInstanceOf(Async.Loading::class.java)
|
||||
assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncData.Loading::class.java)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.startDmActionState).isEqualTo(startDMFailureResult)
|
||||
state.eventSink(RoomMemberDetailsEvents.ClearStartDMState)
|
||||
|
|
@ -220,10 +220,10 @@ class RoomMemberDetailsPresenterTests {
|
|||
// Success
|
||||
startDMAction.givenExecuteResult(startDMSuccessResult)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.startDmActionState).isEqualTo(Async.Uninitialized)
|
||||
assertThat(state.startDmActionState).isEqualTo(AsyncData.Uninitialized)
|
||||
state.eventSink(RoomMemberDetailsEvents.StartDM)
|
||||
}
|
||||
assertThat(awaitItem().startDmActionState).isInstanceOf(Async.Loading::class.java)
|
||||
assertThat(awaitItem().startDmActionState).isInstanceOf(AsyncData.Loading::class.java)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.startDmActionState).isEqualTo(startDMSuccessResult)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue