From 764952468c7031c4cc7225d72d22b5087583f970 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Oct 2025 14:04:32 +0200 Subject: [PATCH 1/2] Remove dead code. --- .../messages/impl/timeline/util/MutableListExt.kt | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/util/MutableListExt.kt diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/util/MutableListExt.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/util/MutableListExt.kt deleted file mode 100644 index b59acde997..0000000000 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/util/MutableListExt.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2022-2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.features.messages.impl.timeline.util - -internal inline fun MutableList.invalidateLast() { - val indexOfLast = size - if (indexOfLast > 0) { - set(indexOfLast - 1, null) - } -} From da78386d25d5df2369414ec51b4d21a0f98d8807 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Oct 2025 14:25:15 +0200 Subject: [PATCH 2/2] Add Konsist test to check that `toPersistentList()` is not used. Same for `toPersistentSet()` and `toPersistentMap()`. Fix existing issues. --- .../impl/ChangeRolesPresenter.kt | 8 +-- .../impl/ChangeRolesPresenterTest.kt | 12 ++-- .../impl/CurrentUserWithNeighborsBuilder.kt | 4 +- .../features/home/impl/HomeStateProvider.kt | 4 +- .../home/impl/components/RoomListTopBar.kt | 4 +- .../impl/filters/RoomListFiltersPresenter.kt | 6 +- .../home/impl/filters/RoomListFiltersState.kt | 4 +- .../roomlist/RoomListContentStateProvider.kt | 4 +- .../home/impl/roomlist/RoomListPresenter.kt | 8 +-- .../impl/roomlist/RoomListStateProvider.kt | 4 +- .../impl/search/RoomListSearchDataSource.kt | 8 +-- .../home/impl/spaces/HomeSpacesPresenter.kt | 4 +- .../impl/model/RoomListBaseRoomSummaryTest.kt | 4 +- .../joinroom/impl/JoinRoomPresenter.kt | 4 +- .../joinroom/impl/JoinRoomStateProvider.kt | 4 +- .../list/DependencyLicensesListPresenter.kt | 6 +- .../lockscreen/impl/pin/model/PinEntry.kt | 10 +-- .../VoiceMessageComposerStateProvider.kt | 4 +- .../messages/impl/MessagesPresenter.kt | 4 +- .../actionlist/ActionListStateProvider.kt | 6 +- ...faultMediaOptimizationSelectorPresenter.kt | 4 +- .../impl/forward/ForwardMessagesPresenter.kt | 4 +- .../MessageComposerPresenter.kt | 4 +- .../impl/timeline/TimelineStateProvider.kt | 3 +- .../components/TimelineItemStateEventRow.kt | 4 +- .../factories/TimelineItemsFactory.kt | 4 +- .../timeline/model/TimelineItemReactions.kt | 4 +- .../model/TimelineItemReactionsProvider.kt | 4 +- .../event/TimelineItemVoiceContentProvider.kt | 4 +- .../DefaultVoiceMessageComposerPresenter.kt | 3 +- .../impl/timeline/TimelineViewTest.kt | 4 +- .../picker/EmojiPickerPresenterTest.kt | 4 +- .../VoiceMessageComposerPresenterTest.kt | 3 +- .../poll/impl/create/CreatePollPresenter.kt | 3 +- .../impl/create/CreatePollStateProvider.kt | 23 ++++--- .../poll/impl/create/PollFormState.kt | 12 ++-- .../impl/history/PollHistoryStateProvider.kt | 6 +- .../history/model/PollHistoryItemsFactory.kt | 6 +- .../impl/create/PollFormStateSaverTest.kt | 4 +- .../poll/impl/create/PollFormStateTest.kt | 12 ++-- .../impl/advanced/AdvancedSettingsView.kt | 4 +- .../blockedusers/BlockedUsersPresenter.kt | 4 +- .../blockedusers/BlockedUsersStateProvider.kt | 4 +- .../developer/DeveloperSettingsPresenter.kt | 8 +-- .../DeveloperSettingsStateProvider.kt | 4 +- .../impl/developer/DeveloperSettingsView.kt | 4 +- .../impl/root/PreferencesRootPresenter.kt | 4 +- .../impl/root/PreferencesRootStateProvider.kt | 4 +- .../roomdetails/impl/RoomDetailsPresenter.kt | 4 +- .../roomdetails/impl/RoomDetailsState.kt | 4 +- .../impl/RoomDetailsStateProvider.kt | 4 +- .../roomdetails/impl/RoomDetailsView.kt | 3 +- .../impl/members/RoomMemberListPresenter.kt | 6 +- .../ChangeRoomPermissionsStateProvider.kt | 4 +- ...ternalRoomMemberModerationStateProvider.kt | 4 +- .../impl/RoomMemberModerationPresenter.kt | 10 +-- .../impl/RoomMemberModerationPresenterTest.kt | 4 +- .../impl/leave/LeaveSpaceStateProvider.kt | 6 +- .../space/impl/root/SpacePresenter.kt | 15 ++--- .../space/impl/leave/LeaveSpaceStateTest.kt | 12 ++-- .../impl/folder/ViewFolderPresenter.kt | 7 ++- .../impl/AccountSelectPresenter.kt | 7 ++- .../impl/AccountSelectStateProvider.kt | 4 +- .../avatar/internal/AvatarCluster.kt | 4 +- .../components/media/FakeWaveformFactory.kt | 4 +- .../components/media/WaveformPlaybackView.kt | 8 +-- .../designsystem/icons/IconsPreview.kt | 6 +- .../powerlevels/MatrixRoomMembersWithRole.kt | 4 +- .../libraries/matrix/impl/RustMatrixClient.kt | 6 +- .../matrix/impl/room/RoomInfoMapper.kt | 4 +- .../matrix/impl/room/join/JoinRule.kt | 6 +- .../matrix/impl/room/RoomInfoMapperTest.kt | 20 +++--- .../matrix/test/room/RoomSummaryFixture.kt | 3 +- .../ObserveRoomMemberIdentityStateChange.kt | 4 +- .../datasource/TimelineMediaItemsFactory.kt | 4 +- .../impl/gallery/ui/VoiceItemView.kt | 4 +- .../impl/local/audio/MediaAudioView.kt | 4 +- .../impl/viewer/MediaViewerDataSource.kt | 12 ++-- .../impl/viewer/MediaViewerPresenter.kt | 6 +- .../impl/viewer/MediaViewerStateProvider.kt | 4 +- .../impl/RoomSelectSearchDataSource.kt | 8 +-- .../roomselect/impl/RoomSelectView.kt | 4 +- .../components/LiveWaveformView.kt | 20 +++--- .../components/VoiceMessageRecording.kt | 4 +- .../tests/konsist/KonsistImmutableTest.kt | 63 +++++++++++++++++++ 85 files changed, 305 insertions(+), 254 deletions(-) create mode 100644 tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImmutableTest.kt diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt index 95177f8377..632d93f0e0 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt @@ -37,10 +37,8 @@ import io.element.android.libraries.matrix.ui.model.roleOf import io.element.android.libraries.matrix.ui.room.PowerLevelRoomMemberComparator import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -73,11 +71,11 @@ class ChangeRolesPresenter( } val exitState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val saveState: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } - val usersWithRole = produceState(initialValue = persistentListOf()) { + val usersWithRole = produceState>(initialValue = persistentListOf()) { room.usersWithRole(role).map { members -> members.map { it.toMatrixUser() } } .onEach { users -> - val previous: PersistentList = value - value = users.toPersistentList() + val previous = value + value = users.toImmutableList() // Users who were selected but didn't have the role, so their role change was pending val toAdd = selectedUsers.value.filter { user -> users.none { it.userId == user.userId } && previous.none { it.userId == user.userId } } // Users who no longer have the role diff --git a/features/changeroommemberroles/impl/src/test/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenterTest.kt b/features/changeroommemberroles/impl/src/test/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenterTest.kt index e5e22b8846..41b6acd60c 100644 --- a/features/changeroommemberroles/impl/src/test/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenterTest.kt +++ b/features/changeroommemberroles/impl/src/test/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenterTest.kt @@ -32,8 +32,8 @@ import io.element.android.libraries.previewutils.room.aRoomMemberList import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.persistentMapOf -import kotlinx.collections.immutable.toPersistentList -import kotlinx.collections.immutable.toPersistentMap +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Test @@ -103,7 +103,7 @@ class ChangeRolesPresenterTest { // Owner - creator aRoomMember(userId = creatorUserId, role = RoomMember.Role.Owner(isCreator = true)) ) - givenRoomMembersState(RoomMembersState.Ready(roomMemberList.toPersistentList())) + givenRoomMembersState(RoomMembersState.Ready(roomMemberList.toImmutableList())) } val presenter = createChangeRolesPresenter(room = room) moleculeFlow(RecompositionMode.Immediate) { @@ -124,7 +124,7 @@ class ChangeRolesPresenterTest { val creatorUserId = UserId("@creator:matrix.org") val memberList = aRoomMemberList() .plus(aRoomMember(displayName = "CREATOR", role = RoomMember.Role.Owner(isCreator = true), userId = creatorUserId)) - .toPersistentList() + .toImmutableList() givenRoomInfo(aRoomInfo(roomCreators = listOf(creatorUserId))) givenRoomMembersState(RoomMembersState.Ready(memberList)) } @@ -203,7 +203,7 @@ class ChangeRolesPresenterTest { assertThat(initialResults?.moderators).hasSize(1) assertThat(initialResults?.admins).hasSize(1) - room.givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList().take(1).toPersistentList())) + room.givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList().take(1).toImmutableList())) skipItems(1) val searchResults = (awaitItem().searchResults as? SearchBarResultState.Results)?.results @@ -552,7 +552,7 @@ class ChangeRolesPresenterTest { private fun roomPowerLevelsWithRoles(vararg pairs: Pair): RoomPowerLevels { return RoomPowerLevels( values = defaultRoomPowerLevelValues(), - users = pairs.associate { (userId, role) -> userId to role.powerLevel }.toPersistentMap() + users = pairs.associate { (userId, role) -> userId to role.powerLevel }.toImmutableMap() ) } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/CurrentUserWithNeighborsBuilder.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/CurrentUserWithNeighborsBuilder.kt index d19222d44f..9c29766067 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/CurrentUserWithNeighborsBuilder.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/CurrentUserWithNeighborsBuilder.kt @@ -11,7 +11,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.sessionstorage.api.SessionData import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class CurrentUserWithNeighborsBuilder { /** @@ -64,6 +64,6 @@ class CurrentUserWithNeighborsBuilder { } } } - .toPersistentList() + .toImmutableList() } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeStateProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeStateProvider.kt index 7ada259e08..c5bb339661 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeStateProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeStateProvider.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class HomeStateProvider : PreviewParameterProvider { override val values: Sequence @@ -63,7 +63,7 @@ internal fun aHomeState( directLogoutState: DirectLogoutState = aDirectLogoutState(), eventSink: (HomeEvents) -> Unit = {} ) = HomeState( - currentUserAndNeighbors = currentUserAndNeighbors.toPersistentList(), + currentUserAndNeighbors = currentUserAndNeighbors.toImmutableList(), showAvatarIndicator = showAvatarIndicator, hasNetworkConnection = hasNetworkConnection, snackbarMessage = snackbarMessage, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt index 212ba6f29b..abd6e7892d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt @@ -72,7 +72,7 @@ import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -374,7 +374,7 @@ internal fun DefaultRoomListTopBarWithIndicatorPreview() = ElementPreview { internal fun DefaultRoomListTopBarMultiAccountPreview() = ElementPreview { DefaultRoomListTopBar( title = stringResource(R.string.screen_roomlist_main_space_title), - currentUserAndNeighbors = aMatrixUserList().take(3).toPersistentList(), + currentUserAndNeighbors = aMatrixUserList().take(3).toImmutableList(), showAvatarIndicator = false, areSearchResultsDisplayed = false, scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()), diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt index 07d2de96a1..08c34d60ff 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt @@ -14,7 +14,7 @@ import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.filters.selection.FilterSelectionStrategy import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.roomlist.RoomListService -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.map import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as MatrixRoomListFilter @@ -23,7 +23,7 @@ class RoomListFiltersPresenter( private val roomListService: RoomListService, private val filterSelectionStrategy: FilterSelectionStrategy, ) : Presenter { - private val initialFilters = filterSelectionStrategy.filterSelectionStates.value.toPersistentList() + private val initialFilters = filterSelectionStrategy.filterSelectionStates.value.toImmutableList() @Composable override fun present(): RoomListFiltersState { @@ -41,7 +41,7 @@ class RoomListFiltersPresenter( val filters by produceState(initialValue = initialFilters) { filterSelectionStrategy.filterSelectionStates .map { filters -> - value = filters.toPersistentList() + value = filters.toImmutableList() filters.mapNotNull { filterState -> if (!filterState.isSelected) { return@mapNotNull null diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersState.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersState.kt index bb4146ce84..215641c5b2 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersState.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersState.kt @@ -9,7 +9,7 @@ package io.element.android.features.home.impl.filters import io.element.android.features.home.impl.filters.selection.FilterSelectionState import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList data class RoomListFiltersState( val filterSelectionStates: ImmutableList, @@ -21,6 +21,6 @@ data class RoomListFiltersState( return filterSelectionStates .filter { it.isSelected } .map { it.filter } - .toPersistentList() + .toImmutableList() } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContentStateProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContentStateProvider.kt index 0cc2fd6282..86ab5cd39c 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContentStateProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContentStateProvider.kt @@ -16,7 +16,7 @@ import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.api.battery.aBatteryOptimizationState import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentSet +import kotlinx.collections.immutable.toImmutableSet open class RoomListContentStateProvider : PreviewParameterProvider { override val values: Sequence @@ -45,7 +45,7 @@ internal fun aRoomsContentState( fullScreenIntentPermissionsState = fullScreenIntentPermissionsState, batteryOptimizationState = batteryOptimizationState, summaries = summaries, - seenRoomInvites = seenRoomInvites.toPersistentSet(), + seenRoomInvites = seenRoomInvites.toImmutableSet(), ) internal fun aSkeletonContentState() = RoomListContentState.Skeleton(16) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt index eb9d8b7ce3..65d4eb297d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt @@ -51,8 +51,8 @@ import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.api.notifications.NotificationCleaner import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analyticsproviders.api.trackers.captureInteraction -import kotlinx.collections.immutable.toPersistentList -import kotlinx.collections.immutable.toPersistentSet +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job @@ -240,8 +240,8 @@ class RoomListPresenter( showNewNotificationSoundBanner = showNewNotificationSoundBanner, fullScreenIntentPermissionsState = fullScreenIntentPermissionsPresenter.present(), batteryOptimizationState = batteryOptimizationPresenter.present(), - summaries = roomSummaries.dataOrNull().orEmpty().toPersistentList(), - seenRoomInvites = seenRoomInvites.toPersistentSet(), + summaries = roomSummaries.dataOrNull().orEmpty().toImmutableList(), + seenRoomInvites = seenRoomInvites.toImmutableSet(), ) } } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt index 089e5c23a5..faa811b920 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt @@ -25,7 +25,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.push.api.battery.aBatteryOptimizationState import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class RoomListStateProvider : PreviewParameterProvider { override val values: Sequence @@ -122,5 +122,5 @@ internal fun generateRoomListRoomSummaryList( avatarData = AvatarData("!id$index", "${(65 + index % 26).toChar()}", size = AvatarSize.RoomListItem), id = "!roomId$index:domain", ) - }.toPersistentList() + }.toImmutableList() } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt index 4cb4104637..ef853bd1cf 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt @@ -15,8 +15,8 @@ import io.element.android.libraries.matrix.api.roomlist.RoomList import io.element.android.libraries.matrix.api.roomlist.RoomListFilter import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn @@ -36,11 +36,11 @@ class RoomListSearchDataSource( source = RoomList.Source.All, ) - val roomSummaries: Flow> = roomList.filteredSummaries + val roomSummaries: Flow> = roomList.filteredSummaries .map { roomSummaries -> roomSummaries .map(roomSummaryFactory::create) - .toPersistentList() + .toImmutableList() } .flowOn(coroutineDispatchers.computation) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/HomeSpacesPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/HomeSpacesPresenter.kt index dea6defc0a..8c3e2962ac 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/HomeSpacesPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spaces/HomeSpacesPresenter.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.ui.safety.rememberHideInvitesAvatar import kotlinx.collections.immutable.persistentSetOf -import kotlinx.collections.immutable.toPersistentSet +import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.flow.map @Inject @@ -30,7 +30,7 @@ class HomeSpacesPresenter( val hideInvitesAvatar by client.rememberHideInvitesAvatar() val spaceRooms by client.spaceService.spaceRoomsFlow.collectAsState(emptyList()) val seenSpaceInvites by remember { - seenInvitesStore.seenRoomIds().map { it.toPersistentSet() } + seenInvitesStore.seenRoomIds().map { it.toImmutableSet() } }.collectAsState(persistentSetOf()) fun handleEvents(event: HomeSpacesEvents) { diff --git a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt index 4f9b047990..b62c19fc7b 100644 --- a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt +++ b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/model/RoomListBaseRoomSummaryTest.kt @@ -13,7 +13,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import org.junit.Test class RoomListBaseRoomSummaryTest { @@ -105,7 +105,7 @@ internal fun createRoomListRoomSummary( canonicalAlias = null, inviteSender = null, isDm = false, - heroes = heroes.toPersistentList(), + heroes = heroes.toImmutableList(), isTombstoned = isTombstoned, isSpace = isSpace ) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 89ff702c1a..6e123630d6 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -53,7 +53,7 @@ import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.ui.model.toInviteSender import io.element.android.libraries.matrix.ui.safety.rememberHideInvitesAvatar import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import java.util.Optional @@ -291,7 +291,7 @@ private fun SpaceRoom.toContentState(): ContentState { joinRule = joinRule, details = LoadedDetails.Space( childrenCount = childrenCount, - heroes = heroes.toPersistentList(), + heroes = heroes.toImmutableList(), ) ) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index d0af006dd7..e5f7df67a3 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.model.InviteSender -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class JoinRoomStateProvider : PreviewParameterProvider { override val values: Sequence @@ -189,7 +189,7 @@ fun aLoadedDetailsSpace( heroes: List = emptyList(), ) = LoadedDetails.Space( childrenCount = childrenCount, - heroes = heroes.toPersistentList() + heroes = heroes.toImmutableList() ) fun aJoinRoomState( diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt index 7c36a4f1ef..0af5d1cc47 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.extensions.runCatchingExceptions import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @Inject class DependencyLicensesListPresenter( @@ -37,7 +37,7 @@ class DependencyLicensesListPresenter( var filter by remember { mutableStateOf("") } LaunchedEffect(Unit) { runCatchingExceptions { - licenses = AsyncData.Success(licensesProvider.provides().toPersistentList()) + licenses = AsyncData.Success(licensesProvider.provides().toImmutableList()) }.onFailure { licenses = AsyncData.Failure(it) } @@ -50,7 +50,7 @@ class DependencyLicensesListPresenter( it.safeName.contains(safeFilter, ignoreCase = true) || it.groupId.contains(safeFilter, ignoreCase = true) || it.artifactId.contains(safeFilter, ignoreCase = true) - }.toPersistentList()) + }.toImmutableList()) } else { filteredLicenses = licenses } diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/model/PinEntry.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/model/PinEntry.kt index 78356fdddf..e9ee9a9903 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/model/PinEntry.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/model/PinEntry.kt @@ -8,7 +8,7 @@ package io.element.android.features.lockscreen.impl.pin.model import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList data class PinEntry( val digits: ImmutableList, @@ -17,7 +17,7 @@ data class PinEntry( fun createEmpty(size: Int): PinEntry { val digits = List(size) { PinDigit.Empty } return PinEntry( - digits = digits.toPersistentList() + digits = digits.toImmutableList() ) } } @@ -37,7 +37,7 @@ data class PinEntry( newDigits[index] = PinDigit.Filled(char) } } - return copy(digits = newDigits.toPersistentList()) + return copy(digits = newDigits.toImmutableList()) } fun deleteLast(): PinEntry { @@ -46,7 +46,7 @@ data class PinEntry( newDigits.indexOfLast { it is PinDigit.Filled }.also { lastFilled -> newDigits[lastFilled] = PinDigit.Empty } - return copy(digits = newDigits.toPersistentList()) + return copy(digits = newDigits.toImmutableList()) } fun addDigit(digit: Char): PinEntry { @@ -55,7 +55,7 @@ data class PinEntry( newDigits.indexOfFirst { it is PinDigit.Empty }.also { firstEmpty -> newDigits[firstEmpty] = PinDigit.Filled(digit) } - return copy(digits = newDigits.toPersistentList()) + return copy(digits = newDigits.toImmutableList()) } fun clear(): PinEntry { diff --git a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt index e1bfee9a7f..b418b08726 100644 --- a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt +++ b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/timeline/voicemessages/composer/VoiceMessageComposerStateProvider.kt @@ -10,7 +10,7 @@ package io.element.android.features.messages.api.timeline.voicemessages.composer import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.designsystem.components.media.createFakeWaveform import io.element.android.libraries.textcomposer.model.VoiceMessageState -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlin.time.Duration.Companion.seconds open class VoiceMessageComposerStateProvider : PreviewParameterProvider { @@ -42,4 +42,4 @@ fun aVoiceMessagePreviewState() = VoiceMessageState.Preview( waveform = createFakeWaveform(), ) -internal var aWaveformLevels = List(100) { it.toFloat() / 100 }.toPersistentList() +internal var aWaveformLevels = List(100) { it.toFloat() / 100 }.toImmutableList() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 46de86cd9e..5bf92ef6f6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -89,7 +89,7 @@ import io.element.android.libraries.matrix.ui.room.getDirectRoomMember import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.analytics.api.AnalyticsService -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -166,7 +166,7 @@ class MessagesPresenter( derivedStateOf { roomInfo.avatarData() } } val heroes by remember { - derivedStateOf { roomInfo.heroes().toPersistentList() } + derivedStateOf { roomInfo.heroes().toImmutableList() } } var hasDismissedInviteDialog by rememberSaveable { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt index 243df7f055..eeab4aa3a0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListStateProvider.kt @@ -24,7 +24,7 @@ import io.element.android.features.messages.impl.timeline.model.event.aTimelineI import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class ActionListStateProvider : PreviewParameterProvider { override val values: Sequence @@ -209,7 +209,7 @@ fun aTimelineItemActionList( TimelineItemAction.ViewSource, ) .sortedWith(TimelineItemActionComparator()) - .toPersistentList() + .toImmutableList() } fun aTimelineItemPollActionList(): ImmutableList { @@ -222,5 +222,5 @@ fun aTimelineItemPollActionList(): ImmutableList { TimelineItemAction.Redact, ) .sortedWith(TimelineItemActionComparator()) - .toPersistentList() + .toImmutableList() } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt index 49d965030f..b62b4116e6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt @@ -29,7 +29,7 @@ import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.preferences.api.store.VideoCompressionPreset import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.first import timber.log.Timber import kotlin.math.roundToLong @@ -111,7 +111,7 @@ class DefaultMediaOptimizationSelectorPresenter( canUpload = calculatedSize <= (maxUploadSize as AsyncData.Success).data ) } - .toPersistentList() + .toImmutableList() .also { sizes -> Timber.d(sizes.joinToString("\n") { "Calculated size for ${it.preset}: ${it.sizeInBytes} MB. Max upload size: $maxUploadSize" }) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt index b785f83c66..3e3860db3e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.timeline.TimelineProvider import io.element.android.libraries.matrix.api.timeline.getActiveTimeline import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -43,7 +43,7 @@ class ForwardMessagesPresenter( private val forwardingActionState: MutableState>> = mutableStateOf(AsyncAction.Uninitialized) fun onRoomSelected(roomIds: List) { - sessionCoroutineScope.forwardEvent(eventId, roomIds.toPersistentList(), forwardingActionState) + sessionCoroutineScope.forwardEvent(eventId, roomIds.toImmutableList(), forwardingActionState) } @Composable diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index 15e7d90168..9505f0d758 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -79,7 +79,7 @@ import io.element.android.services.analyticsproviders.api.trackers.captureIntera import io.element.android.wysiwyg.compose.RichTextEditorState import io.element.android.wysiwyg.display.TextDisplay import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.FlowPreview @@ -379,7 +379,7 @@ class MessageComposerPresenter( showAttachmentSourcePicker = showAttachmentSourcePicker, showTextFormatting = showTextFormatting, canShareLocation = canShareLocation.value, - suggestions = suggestions.toPersistentList(), + suggestions = suggestions.toImmutableList(), resolveMentionDisplay = resolveMentionDisplay, resolveAtRoomMentionDisplay = resolveAtRoomMentionDisplay, eventSink = { handleEvents(it) }, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index e7dc71f185..0cc61b4e4c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -41,7 +41,6 @@ import io.element.android.libraries.matrix.ui.messages.reply.aProfileTimelineDet import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import java.util.UUID import kotlin.random.Random @@ -197,7 +196,7 @@ fun aTimelineItemReactions( ) ) } - }.toPersistentList() + }.toImmutableList() ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt index 2f66d586a9..84fbd2920a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt @@ -33,7 +33,7 @@ import io.element.android.features.messages.impl.timeline.model.event.aTimelineI import io.element.android.features.messages.impl.timeline.util.defaultTimelineContentPadding import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.persistentListOf @Composable fun TimelineItemStateEventRow( @@ -100,7 +100,7 @@ internal fun TimelineItemStateEventRowPreview() = ElementPreview { content = aTimelineItemStateEventContent(), groupPosition = TimelineItemGroupPosition.None, readReceiptState = TimelineItemReadReceipts( - receipts = listOf(aReadReceiptData(0)).toPersistentList(), + receipts = persistentListOf(aReadReceiptData(0)), ) ), renderReadReceipts = true, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index a99bff0e50..029373d42b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.distinctUntilChanged @@ -94,7 +94,7 @@ class TimelineItemsFactory( newTimelineItemStates.add(updatedItem) } } - val result = timelineItemGrouper.group(newTimelineItemStates).toPersistentList() + val result = timelineItemGrouper.group(newTimelineItemStates).toImmutableList() this._timelineItems.emit(result) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactions.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactions.kt index 84428790bc..115d8dab56 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactions.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactions.kt @@ -8,7 +8,7 @@ package io.element.android.features.messages.impl.timeline.model import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList data class TimelineItemReactions( val reactions: ImmutableList @@ -17,5 +17,5 @@ data class TimelineItemReactions( get() = reactions .filter { it.isHighlighted } .map { it.key } - .toPersistentList() + .toImmutableList() } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactionsProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactionsProvider.kt index c1f64efff4..b0084f20ee 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactionsProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItemReactionsProvider.kt @@ -7,9 +7,9 @@ package io.element.android.features.messages.impl.timeline.model -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList fun aTimelineItemReactions() = TimelineItemReactions( // Use values from AggregatedReactionProvider - reactions = AggregatedReactionProvider().values.toPersistentList() + reactions = AggregatedReactionProvider().values.toImmutableList() ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt index 37c9a906bf..211bc5037b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.media.MediaSource -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.minutes @@ -53,7 +53,7 @@ fun aTimelineItemVoiceContent( duration = duration, mediaSource = mediaSource, mimeType = mimeType, - waveform = waveform.toPersistentList(), + waveform = waveform.toImmutableList(), formattedFileSize = "1.0 MB", fileExtension = "ogg", ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt index 8e06a3a1d2..7c5eeb4969 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt @@ -43,7 +43,6 @@ import io.element.android.libraries.voicerecorder.api.VoiceRecorderState import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber @@ -199,7 +198,7 @@ class DefaultVoiceMessageComposerPresenter( voiceMessageState = when (val state = recorderState) { is VoiceRecorderState.Recording -> VoiceMessageState.Recording( duration = state.elapsedTime, - levels = state.levels.toPersistentList(), + levels = state.levels.toImmutableList(), ) is VoiceRecorderState.Finished -> previewState( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index 73969a2860..451f5bddcc 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -36,7 +36,7 @@ import io.element.android.tests.testutils.clickOn import io.element.android.tests.testutils.setSafeContent import io.element.android.wysiwyg.link.Link import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import org.junit.Rule import org.junit.Test import org.junit.rules.TestRule @@ -148,7 +148,7 @@ class TimelineViewTest { eventId = EventId("\$event_$it"), content = aTimelineItemUnknownContent(), ) - }.toPersistentList() + }.toImmutableList() rule.setTimelineView( state = aTimelineState( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerPresenterTest.kt index 74f72a9c31..cf4930b389 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerPresenterTest.kt @@ -26,7 +26,7 @@ import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentMap +import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -92,7 +92,7 @@ class EmojiPickerPresenterTest { categories: ImmutableList>> = persistentListOf(emojiCategory()), recentEmojis: ImmutableList = persistentListOf(), ) = EmojiPickerPresenter( - emojibaseStore = EmojibaseStore(categories.toMap().toPersistentMap()), + emojibaseStore = EmojibaseStore(categories.toMap().toImmutableMap()), recentEmojis = recentEmojis, coroutineDispatchers = testCoroutineDispatchers(), ) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt index 6040032ebc..0d6a96d75d 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt @@ -46,7 +46,6 @@ import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.advanceUntilIdle @@ -85,7 +84,7 @@ class VoiceMessageComposerPresenterTest { companion object { private val RECORDING_DURATION = 1.seconds - private val RECORDING_STATE = VoiceMessageState.Recording(RECORDING_DURATION, listOf(0.1f, 0.2f).toPersistentList()) + private val RECORDING_STATE = VoiceMessageState.Recording(RECORDING_DURATION, listOf(0.1f, 0.2f).toImmutableList()) } @Test diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt index 88b1ad52a0..5136571acd 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt @@ -33,7 +33,6 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch import timber.log.Timber @@ -79,7 +78,7 @@ class CreatePollPresenter( repository.getPoll(mode.eventId).onSuccess { val loadedPoll = PollFormState( question = it.question, - answers = it.answers.map(PollAnswer::text).toPersistentList(), + answers = it.answers.map(PollAnswer::text).toImmutableList(), isDisclosed = it.kind.isDisclosed, ) initialPoll = loadedPoll diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt index dd773c97fb..f1f345b468 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt @@ -9,8 +9,7 @@ package io.element.android.features.poll.impl.create import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.matrix.api.poll.PollKind -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList class CreatePollStateProvider : PreviewParameterProvider { override val values: Sequence @@ -20,7 +19,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = false, canAddAnswer = true, question = "", - answers = persistentListOf( + answers = listOf( Answer("", false), Answer("", false) ), @@ -33,7 +32,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = true, canAddAnswer = true, question = "What type of food should we have?", - answers = persistentListOf( + answers = listOf( Answer("Italian \uD83C\uDDEE\uD83C\uDDF9", false), Answer("Chinese \uD83C\uDDE8\uD83C\uDDF3", false), ), @@ -46,7 +45,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = true, canAddAnswer = true, question = "What type of food should we have?", - answers = persistentListOf( + answers = listOf( Answer("Italian \uD83C\uDDEE\uD83C\uDDF9", false), Answer("Chinese \uD83C\uDDE8\uD83C\uDDF3", false), ), @@ -59,7 +58,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = true, canAddAnswer = true, question = "What type of food should we have?", - answers = persistentListOf( + answers = listOf( Answer("Italian \uD83C\uDDEE\uD83C\uDDF9", true), Answer("Chinese \uD83C\uDDE8\uD83C\uDDF3", true), Answer("Brazilian \uD83C\uDDE7\uD83C\uDDF7", true), @@ -74,7 +73,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = true, canAddAnswer = false, question = "Should there be more than 20 answers?", - answers = persistentListOf( + answers = listOf( Answer("1", true), Answer("2", true), Answer("3", true), @@ -108,7 +107,7 @@ class CreatePollStateProvider : PreviewParameterProvider { " Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor" + " in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt" + " in culpa qui officia deserunt mollit anim id est laborum.", - answers = persistentListOf( + answers = listOf( Answer( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." + " Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis a.", @@ -129,7 +128,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = false, canAddAnswer = true, question = "", - answers = persistentListOf( + answers = listOf( Answer("", false), Answer("", false) ), @@ -142,7 +141,7 @@ class CreatePollStateProvider : PreviewParameterProvider { canCreate = false, canAddAnswer = true, question = "", - answers = persistentListOf( + answers = listOf( Answer("", false), Answer("", false) ), @@ -158,7 +157,7 @@ private fun aCreatePollState( canCreate: Boolean, canAddAnswer: Boolean, question: String, - answers: PersistentList, + answers: List, showBackConfirmation: Boolean, showDeleteConfirmation: Boolean, pollKind: PollKind @@ -168,7 +167,7 @@ private fun aCreatePollState( canSave = canCreate, canAddAnswer = canAddAnswer, question = question, - answers = answers, + answers = answers.toImmutableList(), showBackConfirmation = showBackConfirmation, showDeleteConfirmation = showDeleteConfirmation, pollKind = pollKind, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/PollFormState.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/PollFormState.kt index 6ac7797205..34b9d6206b 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/PollFormState.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/PollFormState.kt @@ -13,7 +13,7 @@ import io.element.android.features.poll.impl.PollConstants import io.element.android.features.poll.impl.PollConstants.MIN_ANSWERS import io.element.android.libraries.matrix.api.poll.PollKind import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList /** * Represents the state of the poll creation / edit form. @@ -28,7 +28,7 @@ data class PollFormState( companion object { val Empty = PollFormState( question = "", - answers = MutableList(MIN_ANSWERS) { "" }.toPersistentList(), + answers = MutableList(MIN_ANSWERS) { "" }.toImmutableList(), isDisclosed = true, ) } @@ -49,7 +49,7 @@ data class PollFormState( return this } - return copy(answers = (answers + "").toPersistentList()) + return copy(answers = (answers + "").toImmutableList()) } /** @@ -66,7 +66,7 @@ data class PollFormState( return this } - return copy(answers = answers.filterIndexed { i, _ -> i != index }.toPersistentList()) + return copy(answers = answers.filterIndexed { i, _ -> i != index }.toImmutableList()) } /** @@ -82,7 +82,7 @@ data class PollFormState( fun withAnswerChanged(index: Int, rawAnswer: String): PollFormState = copy(answers = answers.toMutableList().apply { this[index] = rawAnswer.take(PollConstants.MAX_ANSWER_LENGTH) - }.toPersistentList()) + }.toImmutableList()) /** * Whether a new answer can be added. @@ -114,7 +114,7 @@ internal val pollFormStateSaver = mapSaver( restore = { saved -> PollFormState( question = saved["question"] as String, - answers = (saved["answers"] as Array<*>).map { it as String }.toPersistentList(), + answers = (saved["answers"] as Array<*>).map { it as String }.toImmutableList(), isDisclosed = saved["isDisclosed"] as Boolean, ) } diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryStateProvider.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryStateProvider.kt index e8161d9fe1..2d126ce7cf 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryStateProvider.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryStateProvider.kt @@ -13,7 +13,7 @@ import io.element.android.features.poll.api.pollcontent.aPollContentState import io.element.android.features.poll.impl.history.model.PollHistoryFilter import io.element.android.features.poll.impl.history.model.PollHistoryItem import io.element.android.features.poll.impl.history.model.PollHistoryItems -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class PollHistoryStateProvider : PreviewParameterProvider { override val values: Sequence @@ -53,8 +53,8 @@ internal fun aPollHistoryState( hasMoreToLoad = hasMoreToLoad, activeFilter = activeFilter, pollHistoryItems = PollHistoryItems( - ongoing = currentItems.toPersistentList(), - past = currentItems.toPersistentList(), + ongoing = currentItems.toImmutableList(), + past = currentItems.toImmutableList(), ), eventSink = eventSink, ) diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt index 2a9c802e6b..c895a2c16c 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt @@ -14,7 +14,7 @@ import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.withContext @Inject @@ -36,8 +36,8 @@ class PollHistoryItemsFactory( } } PollHistoryItems( - ongoing = ongoing.toPersistentList(), - past = past.toPersistentList() + ongoing = ongoing.toImmutableList(), + past = past.toImmutableList() ) } diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateSaverTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateSaverTest.kt index b400bef2e6..bab6171477 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateSaverTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateSaverTest.kt @@ -9,7 +9,7 @@ package io.element.android.features.poll.impl.create import androidx.compose.runtime.saveable.SaverScope import com.google.common.truth.Truth.assertThat -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.persistentListOf import org.junit.Test class PollFormStateSaverTest { @@ -21,7 +21,7 @@ class PollFormStateSaverTest { fun `test save and restore`() { val state = PollFormState( question = "question", - answers = listOf("answer1", "answer2").toPersistentList(), + answers = persistentListOf("answer1", "answer2"), isDisclosed = true, ) diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateTest.kt index f158e9c803..9594903c69 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/PollFormStateTest.kt @@ -10,7 +10,7 @@ package io.element.android.features.poll.impl.create import com.google.common.truth.Truth.assertThat import io.element.android.features.poll.impl.PollConstants import io.element.android.libraries.matrix.api.poll.PollKind -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import org.junit.Test class PollFormStateTest { @@ -47,7 +47,7 @@ class PollFormStateTest { val state = PollFormState.Empty val newState = state.withAnswerChanged(1, "New answer") assertThat(newState).isEqualTo(PollFormState.Empty.copy( - answers = listOf("", "New answer").toPersistentList() + answers = listOf("", "New answer").toImmutableList() )) } @@ -58,7 +58,7 @@ class PollFormStateTest { val state = PollFormState.Empty val newState = state.withAnswerChanged(1, tooLongAnswer) assertThat(newState).isEqualTo(PollFormState.Empty.copy( - answers = listOf("", truncatedAnswer).toPersistentList() + answers = listOf("", truncatedAnswer).toImmutableList() )) } @@ -101,7 +101,7 @@ class PollFormStateTest { @Test fun `is valid is false when not enough answers`() { - val state = aValidPollFormState().copy(answers = listOf("").toPersistentList()) + val state = aValidPollFormState().copy(answers = listOf("").toImmutableList()) assertThat(state.isValid).isFalse() } @@ -127,10 +127,10 @@ class PollFormStateTest { private fun aValidPollFormState(): PollFormState { return PollFormState.Empty.copy( question = "question", - answers = listOf("answer1", "answer2").toPersistentList(), + answers = listOf("answer1", "answer2").toImmutableList(), isDisclosed = true, ) } private fun PollFormState.withBlankAnswers(numAnswers: Int): PollFormState = - copy(answers = List(numAnswers) { "" }.toPersistentList()) + copy(answers = List(numAnswers) { "" }.toImmutableList()) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsView.kt index 6f34d216f6..e1c6ce259a 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsView.kt @@ -45,7 +45,7 @@ import io.element.android.libraries.preferences.api.store.VideoCompressionPreset import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.analytics.compose.LocalAnalyticsService import io.element.android.services.analyticsproviders.api.trackers.captureInteraction -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @Composable fun AdvancedSettingsView( @@ -73,7 +73,7 @@ fun AdvancedSettingsView( PreferenceDropdown( title = stringResource(id = CommonStrings.common_appearance), selectedOption = state.theme, - options = ThemeOption.entries.toPersistentList(), + options = ThemeOption.entries.toImmutableList(), onSelectOption = { themeOption -> state.eventSink(AdvancedSettingsEvents.SetTheme(themeOption)) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt index 8a61bd4bed..5fbbe3e797 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt @@ -25,7 +25,7 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -83,7 +83,7 @@ class BlockedUsersPresenter( } } return BlockedUsersState( - blockedUsers = ignoredMatrixUser.toPersistentList(), + blockedUsers = ignoredMatrixUser.toImmutableList(), unblockUserAction = unblockUserAction.value, eventSink = ::handleEvents ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersStateProvider.kt index ba90f93ba5..ac344ba838 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersStateProvider.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUserList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class BlockedUsersStateProvider : PreviewParameterProvider { override val values: Sequence @@ -32,7 +32,7 @@ internal fun aBlockedUsersState( eventSink: (BlockedUsersEvents) -> Unit = {}, ): BlockedUsersState { return BlockedUsersState( - blockedUsers = blockedUsers.toPersistentList(), + blockedUsers = blockedUsers.toImmutableList(), unblockUserAction = unblockUserAction, eventSink = eventSink, ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt index 034aee12d3..fe7a3461b8 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt @@ -37,11 +37,9 @@ import io.element.android.libraries.featureflag.api.Feature import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.ui.model.FeatureUiModel -import io.element.android.libraries.matrix.api.tracing.TraceLogPack import io.element.android.libraries.preferences.api.store.AppPreferencesStore import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.map @@ -82,11 +80,11 @@ class DeveloperSettingsPresenter( appPreferencesStore.getTracingLogLevelFlow().map { AsyncData.Success(it.toLogLevelItem()) } } val tracingLogLevel by tracingLogLevelFlow.collectAsState(initial = AsyncData.Uninitialized) - val tracingLogPacks by produceState(persistentListOf()) { + val tracingLogPacks by produceState(persistentListOf()) { appPreferencesStore.getTracingLogPacksFlow() // Sort the entries alphabetically by its title - .map { it.sortedBy { it.title }.toPersistentList() } - .collectLatest { value = it } + .map { it.sortedBy { it.title } } + .collectLatest { value = it.toImmutableList() } } LaunchedEffect(Unit) { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt index 1585a3b8dd..6ccd857552 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsStateProvider.kt @@ -14,7 +14,7 @@ import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.featureflag.ui.model.aFeatureUiModelList import io.element.android.libraries.matrix.api.tracing.TraceLogPack -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class DeveloperSettingsStateProvider : PreviewParameterProvider { override val values: Sequence @@ -43,7 +43,7 @@ fun aDeveloperSettingsState( clearCacheAction = clearCacheAction, customElementCallBaseUrlState = customElementCallBaseUrlState, tracingLogLevel = AsyncData.Success(LogLevelItem.INFO), - tracingLogPacks = traceLogPacks.toPersistentList(), + tracingLogPacks = traceLogPacks.toImmutableList(), eventSink = eventSink, ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsView.kt index e00b178dee..97f08f7a16 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsView.kt @@ -36,7 +36,7 @@ import io.element.android.libraries.featureflag.ui.FeatureListView import io.element.android.libraries.featureflag.ui.model.FeatureUiModel import io.element.android.libraries.matrix.api.tracing.TraceLogPack import io.element.android.libraries.ui.strings.CommonStrings -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @Composable fun DeveloperSettingsView( @@ -66,7 +66,7 @@ fun DeveloperSettingsView( title = "Tracing log level", supportingText = "Requires app reboot", selectedOption = state.tracingLogLevel.dataOrNull(), - options = LogLevelItem.entries.toPersistentList(), + options = LogLevelItem.entries.toImmutableList(), onSelectOption = { logLevel -> state.eventSink(DeveloperSettingsEvents.SetTracingLogLevel(logLevel)) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index be18a2daa2..3da72f982e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -35,7 +35,7 @@ import io.element.android.libraries.matrix.api.verification.SessionVerificationS import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.services.analytics.api.AnalyticsService import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -80,7 +80,7 @@ class PreferencesRootPresenter( avatarUrl = it.userAvatarUrl, ) } - .toPersistentList() + .toImmutableList() } }.collectAsState(initial = persistentListOf()) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt index 5a7efc6926..ab30d07bcf 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootStateProvider.kt @@ -13,7 +13,7 @@ import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUser import io.element.android.libraries.ui.strings.CommonStrings -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList fun aPreferencesRootState( myUser: MatrixUser = aMatrixUser(), @@ -24,7 +24,7 @@ fun aPreferencesRootState( version = "Version 1.1 (1)", deviceId = DeviceId("ILAKNDNASDLK"), isMultiAccountEnabled = true, - otherSessions = otherSessions.toPersistentList(), + otherSessions = otherSessions.toImmutableList(), showSecureBackup = true, showSecureBackupBadge = true, accountManagementUrl = "aUrl", diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index c7938b609f..4408deab1e 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -51,7 +51,7 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analyticsproviders.api.trackers.captureInteraction -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -194,7 +194,7 @@ class RoomDetailsPresenter( isFavorite = isFavorite, displayRolesAndPermissionsSettings = !isDm && isUserAdmin, isPublic = joinRule == JoinRule.Public, - heroes = roomInfo.heroes.toPersistentList(), + heroes = roomInfo.heroes.toImmutableList(), pinnedMessagesCount = pinnedMessagesCount, snackbarMessage = snackbarMessage, canShowKnockRequests = canShowKnockRequests, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 70810ee46b..43566b86a8 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomNotificationSettings import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList data class RoomDetailsState( val roomId: RoomId, @@ -59,7 +59,7 @@ data class RoomDetailsState( if (isPublic) { add(RoomBadge.PUBLIC) } - }.toPersistentList() + }.toImmutableList() } @Immutable diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt index c9087d6458..96d19c5ecf 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt @@ -27,7 +27,7 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationSettings import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUserList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class RoomDetailsStateProvider : PreviewParameterProvider { override val values: Sequence @@ -135,7 +135,7 @@ fun aRoomDetailsState( isFavorite = isFavorite, displayRolesAndPermissionsSettings = displayAdminSettings, isPublic = isPublic, - heroes = heroes.toPersistentList(), + heroes = heroes.toImmutableList(), pinnedMessagesCount = pinnedMessagesCount, snackbarMessage = snackbarMessage, canShowKnockRequests = canShowKnockRequests, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index 61d5ba115a..3f20985ab8 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -89,7 +89,6 @@ import io.element.android.services.analytics.compose.LocalAnalyticsService import io.element.android.services.analyticsproviders.api.trackers.captureInteraction import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList @Composable fun RoomDetailsView( @@ -400,7 +399,7 @@ private fun RoomHeaderSection( avatarType = AvatarType.Room( heroes = heroes.map { user -> user.getAvatarData(size = AvatarSize.RoomDetailsHeader) - }.toPersistentList(), + }.toImmutableList(), isTombstoned = isTombstoned, ), contentDescription = avatarUrl?.let { stringResource(CommonStrings.a11y_room_avatar) }, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt index c5bd507d69..69efd04b9e 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt @@ -38,7 +38,7 @@ import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange import kotlinx.collections.immutable.ImmutableMap import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentMap +import kotlinx.collections.immutable.toImmutableMap import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first @@ -69,10 +69,10 @@ class RoomMemberListPresenter( val canInvite by room.canInviteAsState(syncUpdateFlow.value) val roomModerationState = roomMembersModerationPresenter.present() - val roomMemberIdentityStates by produceState(persistentMapOf()) { + val roomMemberIdentityStates by produceState(persistentMapOf()) { room.roomMemberIdentityStateChange(waitForEncryption = true) .onEach { identities -> - value = identities.associateBy({ it.identityRoomMember.userId }, { it.identityState }).toPersistentMap() + value = identities.associateBy({ it.identityRoomMember.userId }, { it.identityState }).toImmutableMap() } .launchIn(this) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsStateProvider.kt index 7af850230e..07d3455a90 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsStateProvider.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevelsValues -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class ChangeRoomPermissionsStateProvider : PreviewParameterProvider { override val values: Sequence @@ -45,7 +45,7 @@ internal fun aChangeRoomPermissionsState( ) = ChangeRoomPermissionsState( section = section, currentPermissions = currentPermissions, - items = items.toPersistentList(), + items = items.toImmutableList(), hasChanges = hasChanges, saveAction = saveAction, confirmExitAction = confirmExitAction, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt index bdebcc3a93..2d4cc75aa9 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/InternalRoomMemberModerationStateProvider.kt @@ -14,7 +14,7 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class InternalRoomMemberModerationStateProvider : PreviewParameterProvider { override val values: Sequence @@ -86,7 +86,7 @@ fun aRoomMembersModerationState( canKick = canKick, canBan = canBan, selectedUser = selectedUser, - actions = actions.toPersistentList(), + actions = actions.toImmutableList(), kickUserAsyncAction = kickUserAsyncAction, banUserAsyncAction = banUserAsyncAction, unbanUserAsyncAction = unbanUserAsyncAction, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt index 3d07ee75e1..2ddb3ad34a 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt @@ -35,9 +35,9 @@ import io.element.android.libraries.matrix.ui.room.canBanAsState import io.element.android.libraries.matrix.ui.room.canKickAsState import io.element.android.libraries.matrix.ui.room.userPowerLevelAsState import io.element.android.services.analytics.api.AnalyticsService -import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.drop @@ -68,7 +68,7 @@ class RoomMemberModerationPresenter( var selectedUser by remember { mutableStateOf(null) } - val moderationActions = remember { mutableStateOf(persistentListOf()) } + val moderationActions = remember { mutableStateOf>(persistentListOf()) } fun handleEvent(event: RoomMemberModerationEvents) { when (event) { @@ -149,7 +149,7 @@ class RoomMemberModerationPresenter( canKick: Boolean, canBan: Boolean, currentUserMemberPowerLevel: Long, - ): PersistentList { + ): ImmutableList { return buildList { add(ModerationActionState(action = ModerationAction.DisplayProfile, isEnabled = true)) // Assume the member is a regular user when it's unknown @@ -168,7 +168,7 @@ class RoomMemberModerationPresenter( add(ModerationActionState(action = ModerationAction.BanUser, isEnabled = canModerateThisUser)) } } - }.toPersistentList() + }.toImmutableList() } private fun CoroutineScope.kickUser( diff --git a/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenterTest.kt b/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenterTest.kt index 3b647c6478..40e09b3620 100644 --- a/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenterTest.kt +++ b/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenterTest.kt @@ -30,7 +30,7 @@ import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.test import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -360,7 +360,7 @@ class RoomMemberModerationPresenterTest { updateMembersResult = { Result.success(Unit) } ), ).apply { - val roomMembers = listOfNotNull(targetRoomMember).toPersistentList() + val roomMembers = listOfNotNull(targetRoomMember).toImmutableList() givenRoomMembersState(state = RoomMembersState.Ready(roomMembers)) } } diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt index 3e54b01d35..fec625ca13 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateProvider.kt @@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.previewutils.room.aSpaceRoom import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList class LeaveSpaceStateProvider : PreviewParameterProvider { override val values: Sequence @@ -92,13 +92,13 @@ class LeaveSpaceStateProvider : PreviewParameterProvider { ), aLeaveSpaceState( selectableSpaceRooms = AsyncData.Success( - List(10) { aSelectableSpaceRoom() }.toPersistentList() + List(10) { aSelectableSpaceRoom() }.toImmutableList() ), leaveSpaceAction = AsyncAction.Loading, ), aLeaveSpaceState( selectableSpaceRooms = AsyncData.Success( - List(10) { aSelectableSpaceRoom() }.toPersistentList() + List(10) { aSelectableSpaceRoom() }.toImmutableList() ), leaveSpaceAction = AsyncAction.Failure(Exception("An error")), ), diff --git a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt index fdd090066e..7d1510cfdd 100644 --- a/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt +++ b/features/space/impl/src/main/kotlin/io/element/android/features/space/impl/root/SpacePresenter.kt @@ -33,11 +33,12 @@ import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoomList import io.element.android.libraries.matrix.ui.safety.rememberHideInvitesAvatar +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentSetOf -import kotlinx.collections.immutable.toPersistentList -import kotlinx.collections.immutable.toPersistentMap -import kotlinx.collections.immutable.toPersistentSet +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toImmutableMap +import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch @@ -52,18 +53,18 @@ class SpacePresenter( private val acceptDeclineInvitePresenter: Presenter, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, ) : Presenter { - private var children by mutableStateOf(persistentListOf()) + private var children by mutableStateOf>(persistentListOf()) @Composable override fun present(): SpaceState { LaunchedEffect(Unit) { paginate() - spaceRoomList.spaceRoomsFlow.collect { children = it.toPersistentList() } + spaceRoomList.spaceRoomsFlow.collect { children = it.toImmutableList() } } val hideInvitesAvatar by client.rememberHideInvitesAvatar() val seenSpaceInvites by remember { - seenInvitesStore.seenRoomIds().map { it.toPersistentSet() } + seenInvitesStore.seenRoomIds().map { it.toImmutableSet() } }.collectAsState(persistentSetOf()) val localCoroutineScope = rememberCoroutineScope() @@ -120,7 +121,7 @@ class SpacePresenter( seenSpaceInvites = seenSpaceInvites, hideInvitesAvatar = hideInvitesAvatar, hasMoreToLoad = hasMoreToLoad, - joinActions = joinActions.toPersistentMap(), + joinActions = joinActions.toImmutableMap(), acceptDeclineInviteState = acceptDeclineInviteState, eventSink = ::handleEvents, ) diff --git a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateTest.kt b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateTest.kt index bfec2f2326..998868593f 100644 --- a/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateTest.kt +++ b/features/space/impl/src/test/kotlin/io/element/android/features/space/impl/leave/LeaveSpaceStateTest.kt @@ -10,7 +10,7 @@ package io.element.android.features.space.impl.leave import com.google.common.truth.Truth.assertThat import io.element.android.libraries.architecture.AsyncData import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import org.junit.Test class LeaveSpaceStateTest { @@ -64,7 +64,7 @@ class LeaveSpaceStateTest { listOf( aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastAdmin = false, isSelected = false), - ).toPersistentList() + ).toImmutableList() ) ) assertThat(sut.showQuickAction).isTrue() @@ -81,7 +81,7 @@ class LeaveSpaceStateTest { listOf( aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), - ).toPersistentList() + ).toImmutableList() ) ) assertThat(sut.showQuickAction).isTrue() @@ -95,11 +95,11 @@ class LeaveSpaceStateTest { fun `test 1 last admin, 2 selected`() { val sut = aLeaveSpaceState( selectableSpaceRooms = AsyncData.Success( - listOf( + persistentListOf( aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), aSelectableSpaceRoom(isLastAdmin = false, isSelected = true), - ).toPersistentList() + ) ) ) assertThat(sut.showQuickAction).isTrue() @@ -116,7 +116,7 @@ class LeaveSpaceStateTest { listOf( aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), aSelectableSpaceRoom(isLastAdmin = true, isSelected = false), - ).toPersistentList() + ).toImmutableList() ) ) assertThat(sut.showQuickAction).isFalse() diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt index cac5c6ab66..0c5ab61705 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt @@ -19,8 +19,9 @@ import dev.zacsweers.metro.AssistedInject import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @AssistedInject class ViewFolderPresenter( @@ -36,7 +37,7 @@ class ViewFolderPresenter( @Composable override fun present(): ViewFolderState { - var content by remember { mutableStateOf(persistentListOf()) } + var content by remember { mutableStateOf>(persistentListOf()) } val title = remember { buildString { if (path.contains(buildMeta.applicationId)) { @@ -49,7 +50,7 @@ class ViewFolderPresenter( content = buildList { if (canGoUp) add(Item.Parent) addAll(folderExplorer.getItems(path)) - }.toPersistentList() + }.toImmutableList() } return ViewFolderState( title = title, diff --git a/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectPresenter.kt b/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectPresenter.kt index dde07e7e38..f69708cc9d 100644 --- a/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectPresenter.kt +++ b/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectPresenter.kt @@ -15,8 +15,9 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.sessionstorage.api.SessionStore +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @Inject class AccountSelectPresenter( @@ -24,7 +25,7 @@ class AccountSelectPresenter( ) : Presenter { @Composable override fun present(): AccountSelectState { - val accounts by produceState(persistentListOf()) { + val accounts by produceState>(persistentListOf()) { // Do not use sessionStore.sessionsFlow() to not make it change when an account is selected. value = sessionStore.getAllSessions() .map { @@ -34,7 +35,7 @@ class AccountSelectPresenter( avatarUrl = it.userAvatarUrl, ) } - .toPersistentList() + .toImmutableList() } return AccountSelectState( diff --git a/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectStateProvider.kt b/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectStateProvider.kt index 3dc0a22b9c..5d99bf3b0c 100644 --- a/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectStateProvider.kt +++ b/libraries/accountselect/impl/src/main/kotlin/io/element/android/libraries/accountselect/impl/AccountSelectStateProvider.kt @@ -10,7 +10,7 @@ package io.element.android.libraries.accountselect.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUserList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class AccountSelectStateProvider : PreviewParameterProvider { override val values: Sequence @@ -23,5 +23,5 @@ open class AccountSelectStateProvider : PreviewParameterProvider = listOf(), ) = AccountSelectState( - accounts = accounts.toPersistentList(), + accounts = accounts.toImmutableList(), ) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/AvatarCluster.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/AvatarCluster.kt index c100988053..1c8ac81e64 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/AvatarCluster.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/AvatarCluster.kt @@ -27,7 +27,7 @@ import io.element.android.libraries.designsystem.components.avatar.avatarShape import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import java.util.Collections import kotlin.math.PI import kotlin.math.cos @@ -134,7 +134,7 @@ internal fun AvatarClusterPreview() = ElementThemedPreview { ) { for (ngOfAvatars in 1..5) { AvatarCluster( - avatars = List(ngOfAvatars) { anAvatarData(it) }.toPersistentList(), + avatars = List(ngOfAvatars) { anAvatarData(it) }.toImmutableList(), avatarType = avatarType, ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/FakeWaveformFactory.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/FakeWaveformFactory.kt index c9e8876aad..3264f55754 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/FakeWaveformFactory.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/FakeWaveformFactory.kt @@ -8,7 +8,7 @@ package io.element.android.libraries.designsystem.components.media import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlin.random.Random /** @@ -21,5 +21,5 @@ import kotlin.random.Random fun createFakeWaveform(length: Int = 1000): ImmutableList { val random = Random(seed = 2) return List(length) { random.nextFloat() } - .toPersistentList() + .toImmutableList() } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt index 767b56410f..5fe722d447 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/media/WaveformPlaybackView.kt @@ -39,7 +39,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlin.math.roundToInt private const val DEFAULT_GRAPHICS_LAYER_ALPHA: Float = 0.99F @@ -187,14 +187,14 @@ internal fun WaveformPlaybackViewPreview() = ElementPreview { showCursor = false, playbackProgress = 0.5f, onSeek = {}, - waveform = aWaveForm().toPersistentList(), + waveform = aWaveForm().toImmutableList(), ) WaveformPlaybackView( modifier = Modifier.height(34.dp), showCursor = true, playbackProgress = 0.5f, onSeek = {}, - waveform = List(1024) { it / 1024f }.toPersistentList(), + waveform = List(1024) { it / 1024f }.toImmutableList(), ) } } @@ -215,7 +215,7 @@ private fun ImmutableList.normalisedData(maxSamplesCount: Int): Immutable this } - return result.toPersistentList() + return result.toImmutableList() } fun aWaveForm(): List { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/icons/IconsPreview.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/icons/IconsPreview.kt index 993b2c32c4..e2da9bdcc0 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/icons/IconsPreview.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/icons/IconsPreview.kt @@ -28,14 +28,14 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList internal class CompoundIconChunkProvider : PreviewParameterProvider { override val values: Sequence get() { val chunks = CompoundIcons.allResIds.chunked(36) return chunks.mapIndexed { index, chunk -> - IconChunk(index = index + 1, total = chunks.size, icons = chunk.toPersistentList()) + IconChunk(index = index + 1, total = chunks.size, icons = chunk.toImmutableList()) } .asSequence() } @@ -46,7 +46,7 @@ internal class OtherIconChunkProvider : PreviewParameterProvider { get() { val chunks = iconsOther.chunked(36) return chunks.mapIndexed { index, chunk -> - IconChunk(index = index + 1, total = chunks.size, icons = chunk.toPersistentList()) + IconChunk(index = index + 1, total = chunks.size, icons = chunk.toImmutableList()) } .asSequence() } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/MatrixRoomMembersWithRole.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/MatrixRoomMembersWithRole.kt index 30719626a8..689157f215 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/MatrixRoomMembersWithRole.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/powerlevels/MatrixRoomMembersWithRole.kt @@ -12,7 +12,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembersState import io.element.android.libraries.matrix.api.room.activeRoomMembers import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged @@ -38,7 +38,7 @@ fun BaseRoom.usersWithRole(role: RoomMember.Role): Flow membersState.activeRoomMembers() .filter { powerLevels.contains(it.userId) } - .toPersistentList() + .toImmutableList() } .distinctUntilChanged() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 5852a64f37..c646e2ee18 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -77,7 +77,7 @@ import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.cancel @@ -238,11 +238,11 @@ class RustMatrixClient( override val ignoredUsersFlow = mxCallbackFlow> { // Fetch the initial value manually, the SDK won't return it automatically - channel.trySend(innerClient.ignoredUsers().map(::UserId).toPersistentList()) + channel.trySend(innerClient.ignoredUsers().map(::UserId).toImmutableList()) innerClient.subscribeToIgnoredUsers(object : IgnoredUsersListener { override fun call(ignoredUserIds: List) { - channel.trySend(ignoredUserIds.map(::UserId).toPersistentList()) + channel.trySend(ignoredUserIds.map(::UserId).toImmutableList()) } }) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapper.kt index 199abcad44..4339b69101 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapper.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsValuesMapper import io.element.android.libraries.matrix.impl.room.tombstone.map import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentMap +import kotlinx.collections.immutable.toImmutableMap import org.matrix.rustcomponents.sdk.Membership import org.matrix.rustcomponents.sdk.RoomHero import uniffi.matrix_sdk_base.EncryptionState @@ -103,6 +103,6 @@ fun RoomHero.map(): MatrixUser = MatrixUser( fun mapPowerLevels(roomPowerLevels: RustRoomPowerLevels): RoomPowerLevels { return RoomPowerLevels( values = RoomPowerLevelsValuesMapper.map(roomPowerLevels.values()), - users = roomPowerLevels.userPowerLevels().mapKeys { (key, _) -> UserId(key) }.toPersistentMap() + users = roomPowerLevels.userPowerLevels().mapKeys { (key, _) -> UserId(key) }.toImmutableMap() ) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/JoinRule.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/JoinRule.kt index 51422787e2..e145cbdb91 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/JoinRule.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/JoinRule.kt @@ -8,7 +8,7 @@ package io.element.android.libraries.matrix.impl.room.join import io.element.android.libraries.matrix.api.room.join.JoinRule -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule fun RustJoinRule.map(): JoinRule { @@ -17,9 +17,9 @@ fun RustJoinRule.map(): JoinRule { RustJoinRule.Private -> JoinRule.Private RustJoinRule.Knock -> JoinRule.Knock RustJoinRule.Invite -> JoinRule.Invite - is RustJoinRule.Restricted -> JoinRule.Restricted(rules.map { it.map() }.toPersistentList()) + is RustJoinRule.Restricted -> JoinRule.Restricted(rules.map { it.map() }.toImmutableList()) is RustJoinRule.Custom -> JoinRule.Custom(repr) - is RustJoinRule.KnockRestricted -> JoinRule.KnockRestricted(rules.map { it.map() }.toPersistentList()) + is RustJoinRule.KnockRestricted -> JoinRule.KnockRestricted(rules.map { it.map() }.toImmutableList()) } } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapperTest.kt index 90ff2b9211..a95720baef 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomInfoMapperTest.kt @@ -8,9 +8,6 @@ package io.element.android.libraries.matrix.impl.room import com.google.common.truth.Truth.assertThat -import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.core.RoomAlias -import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomInfo import io.element.android.libraries.matrix.api.room.RoomNotificationMode @@ -34,7 +31,6 @@ import io.element.android.libraries.matrix.test.room.defaultRoomPowerLevelValues import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList import org.junit.Test import org.matrix.rustcomponents.sdk.Membership import uniffi.matrix_sdk_base.EncryptionState @@ -113,15 +109,15 @@ class RoomInfoMapperTest { notificationCount = 11L, userDefinedNotificationMode = RoomNotificationMode.MUTE, hasRoomCall = true, - activeRoomCallParticipants = listOf(A_USER_ID_3).toImmutableList(), - heroes = listOf( + activeRoomCallParticipants = persistentListOf(A_USER_ID_3), + heroes = persistentListOf( MatrixUser( userId = A_USER_ID, displayName = "displayName", avatarUrl = "avatarUrl", ) - ).toImmutableList(), - pinnedEventIds = listOf(AN_EVENT_ID).toPersistentList(), + ), + pinnedEventIds = persistentListOf(AN_EVENT_ID), creators = persistentListOf(A_USER_ID), isMarkedUnread = false, numUnreadMessages = 12L, @@ -191,7 +187,7 @@ class RoomInfoMapperTest { successorRoom = null, isFavorite = true, canonicalAlias = null, - alternativeAliases = emptyList().toPersistentList(), + alternativeAliases = persistentListOf(), currentUserMembership = CurrentUserMembership.INVITED, inviter = null, activeMembersCount = 2L, @@ -205,9 +201,9 @@ class RoomInfoMapperTest { notificationCount = 11L, userDefinedNotificationMode = null, hasRoomCall = false, - activeRoomCallParticipants = emptyList().toImmutableList(), - heroes = emptyList().toImmutableList(), - pinnedEventIds = emptyList().toPersistentList(), + activeRoomCallParticipants = persistentListOf(), + heroes = persistentListOf(), + pinnedEventIds = persistentListOf(), creators = persistentListOf(), isMarkedUnread = true, numUnreadMessages = 12L, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index 9c16319d65..c15d29eff8 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -32,7 +32,6 @@ import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.collections.immutable.toPersistentList fun aRoomSummary( info: RoomInfo = aRoomInfo(), @@ -109,7 +108,7 @@ fun aRoomSummary( userDefinedNotificationMode = userDefinedNotificationMode, hasRoomCall = hasRoomCall, activeRoomCallParticipants = activeRoomCallParticipants.toImmutableList(), - heroes = heroes.toPersistentList(), + heroes = heroes.toImmutableList(), pinnedEventIds = pinnedEventIds.toImmutableList(), creators = roomCreators.toImmutableList(), isMarkedUnread = isMarkedUnread, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/ObserveRoomMemberIdentityStateChange.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/ObserveRoomMemberIdentityStateChange.kt index 0001131e59..0e46463807 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/ObserveRoomMemberIdentityStateChange.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/ObserveRoomMemberIdentityStateChange.kt @@ -16,7 +16,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.ui.model.getAvatarData import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine @@ -46,7 +46,7 @@ fun JoinedRoom.roomMemberIdentityStateChange(waitForEncryption: Boolean): Flow> { + fun collectAsState(): State> { return remember { dataFlow() }.collectAsState(initialData()) } @VisibleForTesting - internal fun dataFlow(): Flow> { + internal fun dataFlow(): Flow> { return galleryDataSource.groupedMediaItemsFlow() .map { groupedItems -> when (groupedItems) { @@ -106,7 +106,7 @@ class MediaViewerDataSource( } } - private fun initialData(): PersistentList { + private fun initialData(): ImmutableList { val initialMediaItems = galleryDataSource.getLastData().dataOrNull()?.getItems(galleryMode).orEmpty() return buildMediaViewerPageList(initialMediaItems) @@ -149,7 +149,7 @@ class MediaViewerDataSource( ) } } - }.toPersistentList() + }.toImmutableList() fun clearLoadingError(data: MediaViewerPageData.MediaViewerData) { localMediaStates[data.mediaSource.url]?.value = AsyncData.Uninitialized diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt index 6f59bc3ff7..c7b93a227f 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt @@ -40,7 +40,7 @@ import io.element.android.libraries.mediaviewer.impl.R import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.local.LocalMediaActions import io.element.android.libraries.ui.strings.CommonStrings -import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter @@ -162,7 +162,7 @@ class MediaViewerPresenter( @Composable private fun NoMoreItemsBackwardSnackBarDisplayer( currentIndex: IntState, - data: State>, + data: State>, ) { val isRenderingLoadingBackward by remember { derivedStateOf { @@ -186,7 +186,7 @@ class MediaViewerPresenter( @Composable private fun NoMoreItemsForwardSnackBarDisplayer( currentIndex: IntState, - data: State>, + data: State>, ) { val isRenderingLoadingForward by remember { derivedStateOf { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt index 324b093325..05a55b4e5f 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerStateProvider.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.aMediaDeleteConfirmationState import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList open class MediaViewerStateProvider : PreviewParameterProvider { override val values: Sequence @@ -204,7 +204,7 @@ fun aMediaViewerState( eventSink: (MediaViewerEvents) -> Unit = {}, ) = MediaViewerState( initiallySelectedEventId = EventId("\$a:b"), - listData = listData.toPersistentList(), + listData = listData.toImmutableList(), currentIndex = currentIndex, snackbarMessage = null, canShowInfo = canShowInfo, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt index 58ee601548..9e636ead7b 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt @@ -16,8 +16,8 @@ import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally import io.element.android.libraries.matrix.ui.model.SelectRoomInfo import io.element.android.libraries.matrix.ui.model.toSelectRoomInfo -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn @@ -40,13 +40,13 @@ class RoomSelectSearchDataSource( source = RoomList.Source.All, ) - val roomInfoList: Flow> = roomList.filteredSummaries + val roomInfoList: Flow> = roomList.filteredSummaries .map { roomSummaries -> roomSummaries .filter { it.info.currentUserMembership == CurrentUserMembership.JOINED } .distinctBy { it.roomId } // This should be removed once we're sure no duplicate Rooms can be received .map { roomSummary -> roomSummary.toSelectRoomInfo() } - .toPersistentList() + .toImmutableList() } .flowOn(coroutineDispatchers.computation) diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt index 7d90629a50..a14ac7ab66 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectView.kt @@ -53,7 +53,7 @@ import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.roomselect.api.RoomSelectMode import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList @Suppress("MultipleEmitters") // False positive @OptIn(ExperimentalMaterial3Api::class) @@ -214,7 +214,7 @@ private fun RoomSummaryView( avatarType = AvatarType.Room( heroes = roomInfo.heroes.map { user -> user.getAvatarData(size = AvatarSize.RoomSelectRoomListItem) - }.toPersistentList(), + }.toImmutableList(), isTombstoned = roomInfo.isTombstoned, ), ) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/LiveWaveformView.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/LiveWaveformView.kt index 6c35fef2b1..836089fc7d 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/LiveWaveformView.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/LiveWaveformView.kt @@ -35,7 +35,7 @@ import io.element.android.libraries.designsystem.components.media.drawWaveform import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import java.lang.Float.min private const val DEFAULT_GRAPHICS_LAYER_ALPHA: Float = 0.99F @@ -62,21 +62,21 @@ fun LiveWaveformView( Box( contentAlignment = Alignment.CenterEnd, modifier = modifier - .fillMaxWidth() - .height(waveFormHeight) - .onSizeChanged { parentWidth = it.width } + .fillMaxWidth() + .height(waveFormHeight) + .onSizeChanged { parentWidth = it.width } ) { Canvas( modifier = Modifier - .width(Dp(waveformWidth)) - .graphicsLayer(alpha = DEFAULT_GRAPHICS_LAYER_ALPHA) - .then(modifier) + .width(Dp(waveformWidth)) + .graphicsLayer(alpha = DEFAULT_GRAPHICS_LAYER_ALPHA) + .then(modifier) ) { val width = min(waveformWidth, parentWidth.toFloat()) canvasSize = DpSize(width.dp, size.height.toDp()) val countThatFitsWidth = (parentWidth.toFloat() / (lineWidth.toPx() + linePadding.toPx())).toInt() drawWaveform( - waveformData = levels.takeLast(countThatFitsWidth).toPersistentList(), + waveformData = levels.takeLast(countThatFitsWidth).toImmutableList(), canvasSizePx = Size(canvasSize.width.toPx(), size.height), brush = brush, lineWidth = lineWidth, @@ -91,11 +91,11 @@ fun LiveWaveformView( internal fun LiveWaveformViewPreview() = ElementPreview { Column { LiveWaveformView( - levels = List(100) { it.toFloat() / 100 }.toPersistentList(), + levels = List(100) { it.toFloat() / 100 }.toImmutableList(), modifier = Modifier.height(34.dp), ) LiveWaveformView( - levels = List(40) { it.toFloat() / 40 }.toPersistentList(), + levels = List(40) { it.toFloat() / 40 }.toImmutableList(), modifier = Modifier.height(34.dp), ) } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecording.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecording.kt index 30e2ab95c4..7a56d37b3c 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecording.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessageRecording.kt @@ -35,7 +35,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.ui.utils.time.formatShort import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toImmutableList import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds @@ -101,5 +101,5 @@ private fun RedRecordingDot() { @PreviewsDayNight @Composable internal fun VoiceMessageRecordingPreview() = ElementPreview { - VoiceMessageRecording(List(100) { it.toFloat() / 100 }.toPersistentList(), 0.seconds) + VoiceMessageRecording(List(100) { it.toFloat() / 100 }.toImmutableList(), 0.seconds) } diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImmutableTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImmutableTest.kt new file mode 100644 index 0000000000..0aa68503e5 --- /dev/null +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistImmutableTest.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2023, 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.tests.konsist + +import com.lemonappdev.konsist.api.Konsist +import com.lemonappdev.konsist.api.ext.list.withoutName +import com.lemonappdev.konsist.api.verify.assertFalse +import org.junit.Test + +class KonsistImmutableTest { + /** + * toPersistentList() returns a PersistentList which allow mutations, while toImmutableList() returns + * an ImmutableList which does not allow mutations. Generally, we do not use the mutation features, + * so we should prefer toImmutableList. + */ + @Test + fun `toPersistentList() should not be used instead of toImmutableList()`() { + Konsist + .scopeFromProject() + .functions() + .withoutName("toPersistentList() should not be used instead of toImmutableList()") + .assertFalse(additionalMessage = "Please use toImmutableList() instead of toPersistentList()") { + it.text.contains(".toPersistentList()") + } + } + + /** + * toPersistentSet() returns a PersistentSet which allow mutations, while toImmutableSet() returns + * an ImmutableSet which does not allow mutations. Generally, we do not use the mutation features, + * so we should prefer toImmutableSet. + */ + @Test + fun `toPersistentSet() should not be used instead of toImmutableSet()`() { + Konsist + .scopeFromProject() + .functions() + .withoutName("toPersistentSet() should not be used instead of toImmutableSet()") + .assertFalse(additionalMessage = "Please use toImmutableSet() instead of toPersistentSet()") { + it.text.contains(".toPersistentSet()") + } + } + + /** + * toPersistentMap() returns a PersistentMap which allow mutations, while toImmutableMap() returns + * an ImmutableMap which does not allow mutations. Generally, we do not use the mutation features, + * so we should prefer toImmutableMap. + */ + @Test + fun `toPersistentMap() should not be used instead of toImmutableMap()`() { + Konsist + .scopeFromProject() + .functions() + .withoutName("toPersistentMap() should not be used instead of toImmutableMap()") + .assertFalse(additionalMessage = "Please use toImmutableMap() instead of toPersistentMap()") { + it.text.contains(".toPersistentMap()") + } + } +}