diff --git a/CHANGES.md b/CHANGES.md index 4728994d77..f952ec952a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,11 @@ +Changes in Element 1.4.13 (2022-04-26) +====================================== + +Bugfixes 🐛 +---------- + - Fix UI freeze observed after each incremental sync ([#5835](https://github.com/vector-im/element-android/issues/5835)) + + Changes in Element v1.4.12 (2022-04-20) ======================================= diff --git a/fastlane/metadata/android/en-US/changelogs/40104130.txt b/fastlane/metadata/android/en-US/changelogs/40104130.txt new file mode 100644 index 0000000000..ea188c101c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40104130.txt @@ -0,0 +1,2 @@ +Main changes in this version: Allows users to appear offline and adds an audio player for audio attachments +Full changelog: https://github.com/vector-im/element-android/releases diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 0cffa4148e..816b9716bd 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -32,7 +32,7 @@ android { // that the app's state is completely cleared between tests. testInstrumentationRunnerArguments clearPackageData: 'true' - buildConfigField "String", "SDK_VERSION", "\"1.4.12\"" + buildConfigField "String", "SDK_VERSION", "\"1.4.13\"" buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\"" buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\"" diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt index 20faa81bb6..50e4a6feb6 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt @@ -475,7 +475,9 @@ class SpaceHierarchyTest : InstrumentedTest { // + C // + c1, c2 - val rootSpaces = session.spaceService().getRootSpaceSummaries() + val rootSpaces = commonTestHelper.runBlockingTest { + session.spaceService().getRootSpaceSummaries() + } assertEquals("Unexpected number of root spaces ${rootSpaces.map { it.name }}", 2, rootSpaces.size) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/space/SpaceService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/space/SpaceService.kt index f4460b7659..7826764067 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/space/SpaceService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/space/SpaceService.kt @@ -106,5 +106,8 @@ interface SpaceService { suspend fun removeSpaceParent(childRoomId: String, parentSpaceId: String) - fun getRootSpaceSummaries(): List + /** + * Get the root spaces, i.e. all the spaces which do not have a parent space. + */ + suspend fun getRootSpaceSummaries(): List } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/space/DefaultSpaceService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/space/DefaultSpaceService.kt index 05cff7dd89..355039b22c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/space/DefaultSpaceService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/space/DefaultSpaceService.kt @@ -18,6 +18,8 @@ package org.matrix.android.sdk.internal.session.space import android.net.Uri import androidx.lifecycle.LiveData +import kotlinx.coroutines.withContext +import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType @@ -64,7 +66,8 @@ internal class DefaultSpaceService @Inject constructor( private val stateEventDataSource: StateEventDataSource, private val peekSpaceTask: PeekSpaceTask, private val resolveSpaceInfoTask: ResolveSpaceInfoTask, - private val leaveRoomTask: LeaveRoomTask + private val leaveRoomTask: LeaveRoomTask, + private val coroutineDispatchers: MatrixCoroutineDispatchers, ) : SpaceService { override suspend fun createSpace(params: CreateSpaceParams): String { @@ -105,8 +108,10 @@ internal class DefaultSpaceService @Inject constructor( return roomSummaryDataSource.getSpaceSummaries(spaceSummaryQueryParams, sortOrder) } - override fun getRootSpaceSummaries(): List { - return roomSummaryDataSource.getRootSpaceSummaries() + override suspend fun getRootSpaceSummaries(): List { + return withContext(coroutineDispatchers.io) { + roomSummaryDataSource.getRootSpaceSummaries() + } } override suspend fun peekSpace(spaceId: String): SpacePeekResult { diff --git a/vector/build.gradle b/vector/build.gradle index c7950da28e..0104f71f3b 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -18,7 +18,7 @@ ext.versionMinor = 4 // Note: even values are reserved for regular release, odd values for hotfix release. // When creating a hotfix, you should decrease the value, since the current value // is the value for the next regular release. -ext.versionPatch = 12 +ext.versionPatch = 13 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct' diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt index a239e939ea..4bf62644c2 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListViewModel.kt @@ -40,7 +40,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.sample import kotlinx.coroutines.launch @@ -212,7 +211,8 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa } session.coroutineScope.launch { orderCommands.forEach { - session.getRoom(it.spaceId)?.updateAccountData(RoomAccountDataTypes.EVENT_TYPE_SPACE_ORDER, + session.getRoom(it.spaceId)?.updateAccountData( + RoomAccountDataTypes.EVENT_TYPE_SPACE_ORDER, SpaceOrderContent(order = it.order).toContent() ) } @@ -278,31 +278,23 @@ class SpaceListViewModel @AssistedInject constructor(@Assisted initialState: Spa displayName = QueryStringValue.IsNotEmpty } - val flowSession = session.flow() - combine( - flowSession - .liveUser(session.myUserId) - .map { - it.getOrNull() - }, - flowSession + session.flow() .liveSpaceSummaries(params), - session - .accountDataService() + session.accountDataService() .getLiveRoomAccountDataEvents(setOf(RoomAccountDataTypes.EVENT_TYPE_SPACE_ORDER)) .asFlow() - ) { _, communityGroups, _ -> - communityGroups + ) { spaces, _ -> + spaces } .execute { async -> - val rootSpaces = session.spaceService().getRootSpaceSummaries() - val orders = rootSpaces.map { + val rootSpaces = async.invoke().orEmpty().filter { it.flattenParentIds.isEmpty() } + val orders = rootSpaces.associate { it.roomId to session.getRoom(it.roomId) ?.getAccountDataEvent(RoomAccountDataTypes.EVENT_TYPE_SPACE_ORDER) ?.content.toModel() ?.safeOrder() - }.toMap() + } copy( asyncSpaces = async, rootSpacesOrdered = rootSpaces.sortedWith(TopLevelSpaceComparator(orders)),