diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index 1a80dd191c..72f9aee8f1 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -3,6 +3,7 @@ name: Maestro # Run this flow only on pull request, and only when the pull request has been approved, to limit our usage of maestro cloud. # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-when-a-pull-request-is-approved on: + workflow_dispatch: pull_request_review: types: [submitted] @@ -35,6 +36,12 @@ jobs: java-version: '17' - name: Assemble debug APK run: ./gradlew assembleDebug $CI_GRADLE_ARG_PROPERTIES + - name: Upload debug APKs + uses: actions/upload-artifact@v3 + with: + name: elementx-debug + path: | + app/build/outputs/apk/debug/*.apk - uses: mobile-dev-inc/action-maestro-cloud@v1.3.1 with: api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 452af8a9d0..d1159939dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -129,7 +129,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.5" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.9" sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt index e19cbf9b57..63d3ce3911 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.api.timeline.item.event +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.media.AudioInfo import io.element.android.libraries.matrix.api.media.FileInfo @@ -26,7 +27,7 @@ sealed interface EventContent data class MessageContent( val body: String, - val inReplyTo: UserId?, + val inReplyTo: EventId?, val isEdited: Boolean, val type: MessageType? ) : EventContent 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 7408bd12f1..d54da9e8e2 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 @@ -114,7 +114,6 @@ class RustMatrixClient constructor( ) .filters(slidingSyncFilters) .name(name = "CurrentlyVisibleRooms") - .sendUpdatesForItems(true) .syncMode(mode = SlidingSyncMode.SELECTIVE) .addRange(0u, 20u) .use { @@ -125,7 +124,7 @@ class RustMatrixClient constructor( .slidingSync() .homeserver("https://slidingsync.lab.matrix.org") .withCommonExtensions() - .coldCache("ElementX") + .storageKey("ElementX") .addList(visibleRoomsSlidingSyncList) .use { it.build() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt index c018377677..9c2382fb4a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt @@ -59,7 +59,7 @@ internal class RustRoomSummaryDataSource( coroutineScope.launch { updateRoomSummaries { addAll( - slidingSyncList.currentRoomsList().map(::buildSummaryForRoomListEntry) + slidingSyncList.currentRoomList().map(::buildSummaryForRoomListEntry) ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt index 13db63a261..dce0325da3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventMessageMapper.kt @@ -16,16 +16,17 @@ package io.element.android.libraries.matrix.impl.timeline.item.event -import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.asEventId import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType +import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent import io.element.android.libraries.matrix.api.timeline.item.event.MessageFormat import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType import io.element.android.libraries.matrix.impl.media.map @@ -69,7 +70,7 @@ class EventMessageMapper { } MessageContent( body = message.body(), - inReplyTo = message.inReplyTo()?.let { UserId(it) }, + inReplyTo = message.inReplyTo()?.eventId?.asEventId(), isEdited = message.isEdited(), type = type ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt index 11e60eea0e..3ec412ae7d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt @@ -25,7 +25,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimeli import org.matrix.rustcomponents.sdk.Reaction import org.matrix.rustcomponents.sdk.EventSendState as RustEventSendState import org.matrix.rustcomponents.sdk.EventTimelineItem as RustEventTimelineItem -import org.matrix.rustcomponents.sdk.ProfileTimelineDetails as RustProfileTimelineDetails +import org.matrix.rustcomponents.sdk.ProfileDetails as RustProfileDetails class EventTimelineItemMapper(private val contentMapper: TimelineEventContentMapper = TimelineEventContentMapper()) { @@ -47,12 +47,12 @@ class EventTimelineItemMapper(private val contentMapper: TimelineEventContentMap } } -fun RustProfileTimelineDetails.map(): ProfileTimelineDetails { +fun RustProfileDetails.map(): ProfileTimelineDetails { return when (this) { - RustProfileTimelineDetails.Pending -> ProfileTimelineDetails.Pending - RustProfileTimelineDetails.Unavailable -> ProfileTimelineDetails.Unavailable - is RustProfileTimelineDetails.Error -> ProfileTimelineDetails.Error(message) - is RustProfileTimelineDetails.Ready -> ProfileTimelineDetails.Ready( + RustProfileDetails.Pending -> ProfileTimelineDetails.Pending + RustProfileDetails.Unavailable -> ProfileTimelineDetails.Unavailable + is RustProfileDetails.Error -> ProfileTimelineDetails.Error(message) + is RustProfileDetails.Ready -> ProfileTimelineDetails.Ready( displayName = displayName, displayNameAmbiguous = displayNameAmbiguous, avatarUrl = avatarUrl