diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index afd0e8ea25..53a80e4723 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -114,4 +114,13 @@ interface MatrixRoom : Closeable { suspend fun setTopic(topic: String): Result suspend fun reportContent(eventId: EventId, reason: String, blockUserId: UserId?): Result + + /** + * Share a location message in the room. + * + * @param body A human readable textual representation of the location. + * @param geoUri A geo URI (RFC 5870) representing the location e.g. `geo:51.5008,0.1247;u=35`. + * Respectively: latitude, longitude, and (optional) uncertainty. + */ + suspend fun sendLocation(body: String, geoUri: String): Result } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index bc8525d87b..5d42a3552b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -338,4 +338,13 @@ class RustMatrixRoom( } } } + + override suspend fun sendLocation( + body: String, + geoUri: String + ): Result = withContext(coroutineDispatchers.io) { + runCatching { + innerRoom.sendLocation(body, geoUri, genTransactionId()) + } + } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index d8187b0a1d..6fab4cb053 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -77,6 +77,7 @@ class FakeMatrixRoom( private var cancelSendResult = Result.success(Unit) private var forwardEventResult = Result.success(Unit) private var reportContentResult = Result.success(Unit) + private var sendLocationResult = Result.success(Unit) var sendMediaCount = 0 private set @@ -93,6 +94,9 @@ class FakeMatrixRoom( var reportedContentCount: Int = 0 private set + var sendLocationCount: Int = 0 + private set + var isInviteAccepted: Boolean = false private set @@ -262,6 +266,14 @@ class FakeMatrixRoom( return reportContentResult } + override suspend fun sendLocation( + body: String, + geoUri: String + ): Result = simulateLongTask { + sendLocationCount++ + return sendLocationResult + } + override fun close() = Unit fun givenLeaveRoomError(throwable: Throwable?) { @@ -355,4 +367,8 @@ class FakeMatrixRoom( fun givenReportContentResult(result: Result) { reportContentResult = result } + + fun givenSendLocationResult(result: Result) { + sendLocationResult = result + } }